<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Client Policy on jyukki's Blog</title><link>https://jyukki.com/tags/client-policy/</link><description>Recent content in Client Policy on jyukki's Blog</description><generator>Hugo -- 0.147.0</generator><language>ko-kr</language><lastBuildDate>Tue, 28 Jul 2026 11:30:00 +0900</lastBuildDate><atom:link href="https://jyukki.com/tags/client-policy/index.xml" rel="self" type="application/rss+xml"/><item><title>2026 개발 트렌드: Agent Client Access Policy Plane, 코딩 에이전트 앱·CLI·클라우드 작업은 클라이언트별 접근 정책으로 관리된다</title><link>https://jyukki.com/posts/2026-07-28-agent-client-access-policy-plane-trend/</link><pubDate>Tue, 28 Jul 2026 10:06:00 +0900</pubDate><guid>https://jyukki.com/posts/2026-07-28-agent-client-access-policy-plane-trend/</guid><description>GitHub Copilot 앱 전용 접근 정책과 앱·클라우드 에이전트까지 확장된 enterprise managed settings 흐름을 바탕으로, 코딩 에이전트 도입이 클라이언트별 정책 표면으로 이동하는 이유를 정리합니다.</description><content:encoded><![CDATA[<p>2026년 7월 27일 GitHub는 GitHub Copilot 앱에 전용 접근 정책을 추가했다고 공지했습니다. 이전에는 Copilot 앱 접근이 Copilot CLI 정책과 묶여 있었지만, 이제 앱과 CLI를 각각 따로 켜고 끌 수 있습니다. 같은 날 GitHub는 enterprise managed settings가 Copilot 앱과 Copilot cloud agent에도 적용된다고 발표했습니다. 즉 앱, CLI, VS Code, 클라우드 에이전트가 같은 관리 설정 체계 아래 들어오고 있습니다.</p>
<p>이 변화는 작은 관리자 메뉴 추가처럼 보일 수 있습니다. 하지만 실제 의미는 큽니다. 코딩 에이전트는 더 이상 &ldquo;IDE 플러그인 하나&quot;가 아닙니다. 데스크톱 앱에서 여러 agent session을 관리하고, CLI가 로컬에서 명령을 실행하고, cloud agent가 격리된 workspace에서 PR을 만들고, 이슈 자동화가 label과 assignee를 바꾸며, 모바일은 원격 세션 알림과 unblock 표면이 됩니다. 그래서 조직은 이제 &ldquo;AI 코딩 도구를 허용할까&quot;가 아니라 <strong>어떤 client를 어떤 팀에, 어떤 guardrail로, 어떤 증거 기준 아래 열 것인가</strong>를 결정해야 합니다.</p>
<p>이 글은 <a href="/posts/2026-07-27-agentic-development-surface-convergence-trend/">Agentic Development Surface Convergence</a>, <a href="/posts/2026-07-09-managed-dev-tool-telemetry-plane-trend/">Managed Dev-Tool Telemetry Plane</a>, <a href="/posts/2026-07-03-agent-session-ledger-ai-credit-controls-trend/">Agent Session Ledger</a>, <a href="/posts/2026-07-25-agentic-issue-intent-control-plane-trend/">Agentic Issue Intent Control Plane</a>과 이어집니다. 어제 글이 작업 표면의 수렴을 봤다면, 오늘 글은 그 표면을 <strong>클라이언트별 접근 정책과 관리 설정</strong>으로 어떻게 묶을지 봅니다.</p>
<p>참고한 공식 신호:</p>
<ul>
<li>GitHub Changelog, Manage GitHub Copilot app access with a dedicated policy: <a href="https://github.blog/changelog/2026-07-27-manage-github-copilot-app-access-with-a-dedicated-policy/">https://github.blog/changelog/2026-07-27-manage-github-copilot-app-access-with-a-dedicated-policy/</a></li>
<li>GitHub Changelog, Enterprise managed settings in the GitHub Copilot app and Copilot cloud agent: <a href="https://github.blog/changelog/2026-07-27-enterprise-managed-settings-now-apply-to-the-github-copilot-app/">https://github.blog/changelog/2026-07-27-enterprise-managed-settings-now-apply-to-the-github-copilot-app/</a></li>
<li>GitHub Changelog, Deploy managed Copilot settings via MDM in VS Code and CLI: <a href="https://github.blog/changelog/2026-07-08-deploy-managed-copilot-settings-via-mdm-in-vs-code-and-cli/">https://github.blog/changelog/2026-07-08-deploy-managed-copilot-settings-via-mdm-in-vs-code-and-cli/</a></li>
<li>GitHub Changelog, Enterprise-managed OpenTelemetry export for VS Code and CLI: <a href="https://github.blog/changelog/2026-07-08-enterprise-managed-opentelemetry-export-for-vs-code-and-cli/">https://github.blog/changelog/2026-07-08-enterprise-managed-opentelemetry-export-for-vs-code-and-cli/</a></li>
</ul>
<h2 id="이-글에서-얻는-것">이 글에서 얻는 것</h2>
<ul>
<li>코딩 에이전트 도입이 모델 선택보다 클라이언트 접근 정책 문제로 이동하는 이유를 이해합니다.</li>
<li>앱, CLI, IDE, cloud agent, issue automation, mobile steering을 같은 위험도로 보지 않는 기준을 정리합니다.</li>
<li>enterprise managed settings가 플러그인, marketplace, approval bypass, 모델 기본값을 어떤 운영 표면으로 만드는지 봅니다.</li>
<li>팀에서 바로 쓸 수 있는 client access matrix, rollout gate, drift metric 체크리스트를 가져갑니다.</li>
</ul>
<h2 id="핵심-개념이슈">핵심 개념/이슈</h2>
<h3 id="1-클라이언트는-ui가-아니라-실행-경계다">1) 클라이언트는 UI가 아니라 실행 경계다</h3>
<p>Copilot 앱, CLI, VS Code extension, cloud agent는 모두 &ldquo;Copilot&quot;이라는 이름 아래 묶일 수 있습니다. 하지만 운영 관점에서는 전혀 같은 물건이 아닙니다.</p>
<table>
  <thead>
      <tr>
          <th>Client</th>
          <th>실행 위치</th>
          <th>주된 위험</th>
          <th>기본 gate</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>IDE extension</td>
          <td>개발자 로컬 IDE</td>
          <td>파일 접근, extension drift, prompt/content 노출</td>
          <td>managed settings, CODEOWNERS</td>
      </tr>
      <tr>
          <td>CLI</td>
          <td>개발자 로컬 shell</td>
          <td>명령 실행, local token, scripts 소비</td>
          <td>command approval, path boundary</td>
      </tr>
      <tr>
          <td>Desktop app</td>
          <td>멀티 세션 command center</td>
          <td>병렬 작업, PR/diff handoff, plugin 사용</td>
          <td>client access policy, session ledger</td>
      </tr>
      <tr>
          <td>Cloud agent</td>
          <td>원격 workspace</td>
          <td>repo write, PR 생성, 비용 귀속</td>
          <td>repo allowlist, cost cap, evidence</td>
      </tr>
      <tr>
          <td>Issue automation</td>
          <td>GitHub Issues/Projects</td>
          <td>label/type/assignee/close 변경</td>
          <td>confidence threshold, suggestion queue</td>
      </tr>
      <tr>
          <td>Mobile steering</td>
          <td>휴대폰 알림/상태 제어</td>
          <td>작은 화면 승인, context 부족</td>
          <td>read-only 기본, high-risk approval 금지</td>
      </tr>
  </tbody>
</table>
<p>같은 모델을 쓰더라도 client가 다르면 위험이 달라집니다. 로컬 CLI는 개발자 장비의 파일과 shell 환경에 닿고, cloud agent는 원격 workspace와 PR 생성 권한에 닿습니다. issue automation은 코드를 바꾸지 않아도 작업 우선순위와 책임자를 바꿉니다. 따라서 정책의 기본 단위는 &ldquo;AI 기능&quot;이 아니라 &ldquo;client + action + repository + owner&quot;여야 합니다.</p>
<h3 id="2-앱과-cli를-분리-관리한다는-것은-운영-성숙도의-신호다">2) 앱과 CLI를 분리 관리한다는 것은 운영 성숙도의 신호다</h3>
<p>GitHub의 7월 27일 공지는 Copilot 앱과 CLI가 별도 policy를 갖게 됐다고 설명합니다. 선택지도 단순합니다. 전체 enabled, 전체 disabled, 조직별 결정 위임입니다. 이 단순한 세 가지가 중요한 이유는 팀마다 agent client의 적합도가 다르기 때문입니다.</p>
<p>예를 들어 플랫폼 팀은 CLI와 desktop app을 빠르게 쓰고 싶어 할 수 있습니다. 반면 규제 데이터나 고객별 격리 요구가 있는 제품 팀은 cloud agent를 제한적으로만 열고 싶을 수 있습니다. 보안팀은 CLI는 허용하되 plugin marketplace는 엄격히 제한하고 싶을 수 있습니다. 이런 요구를 하나의 &ldquo;Copilot 사용 가능&rdquo; 토글로 처리하면 너무 거칠어집니다.</p>
<p>정책 매트릭스는 아래처럼 시작할 수 있습니다.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#ff79c6">agent_client_access_policy</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">default</span>: <span style="color:#f1fa8c">&#34;disabled_until_review&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">clients</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">vscode</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">status</span>: <span style="color:#f1fa8c">&#34;enabled&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">scope</span>: <span style="color:#f1fa8c">&#34;all-engineering&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">cli</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">status</span>: <span style="color:#f1fa8c">&#34;enabled&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">scope</span>: <span style="color:#f1fa8c">&#34;platform-and-backend&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">requires</span>: [<span style="color:#f1fa8c">&#34;managed-settings&#34;</span>, <span style="color:#f1fa8c">&#34;command-approval&#34;</span>]
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">desktop_app</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">status</span>: <span style="color:#f1fa8c">&#34;pilot&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">scope</span>: <span style="color:#f1fa8c">&#34;agent-pilot-org&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">max_parallel_sessions</span>: <span style="color:#bd93f9">3</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">cloud_agent</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">status</span>: <span style="color:#f1fa8c">&#34;org-decides&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">requires</span>: [<span style="color:#f1fa8c">&#34;repo-allowlist&#34;</span>, <span style="color:#f1fa8c">&#34;cost-center&#34;</span>, <span style="color:#f1fa8c">&#34;evidence&#34;</span>]
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">mobile</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">status</span>: <span style="color:#f1fa8c">&#34;readonly&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">blocked_actions</span>: [<span style="color:#f1fa8c">&#34;merge&#34;</span>, <span style="color:#f1fa8c">&#34;deploy&#34;</span>, <span style="color:#f1fa8c">&#34;permission-change&#34;</span>]
</span></span></code></pre></div><p>이 매트릭스의 목적은 도구 사용을 막는 것이 아닙니다. 어느 팀이 어느 표면에서 어떤 책임으로 쓰는지 명확히 해, 나중에 장애나 비용 문제가 생겼을 때 &ldquo;누가 어디까지 열었나&quot;를 복원할 수 있게 하는 것입니다.</p>
<h3 id="3-enterprise-managed-settings는-표면-간-guardrail-drift를-줄인다">3) enterprise managed settings는 표면 간 guardrail drift를 줄인다</h3>
<p>같은 날 발표된 managed settings 확장은 더 중요합니다. GitHub는 Copilot 앱과 cloud agent가 enterprise managed settings를 따르게 됐고, 기존 VS Code와 CLI guardrail을 앱과 클라우드 작업에도 일관되게 적용할 수 있다고 설명합니다. 관리 설정에는 플러그인, marketplace, approval prompt bypass, auto model selection 같은 항목이 포함됩니다.</p>
<p>여기서 핵심은 drift입니다.</p>
<ul>
<li>VS Code에서는 승인 prompt bypass가 막혀 있는데 desktop app에서는 허용된다.</li>
<li>CLI는 approved plugin만 쓰는데 cloud agent는 다른 marketplace를 쓴다.</li>
<li>한 client는 auto model selection을 쓰고 다른 client는 고비용 모델을 기본값으로 둔다.</li>
<li>앱은 새로 도입됐지만 기존 관리 설정 적용 여부를 아무도 확인하지 않는다.</li>
</ul>
<p>표면이 늘어날수록 가장 약하게 관리되는 client가 전체 정책의 빈틈이 됩니다. managed settings는 이 빈틈을 줄이는 control plane입니다. 다만 설정이 &ldquo;지원된다&quot;와 &ldquo;우리 조직에서 실제 적용된다&quot;는 다릅니다. 적용률과 버전, 예외를 지표로 봐야 합니다.</p>
<h3 id="4-기본-enabled는-빠른-확산과-조용한-위험을-동시에-만든다">4) 기본 enabled는 빠른 확산과 조용한 위험을 동시에 만든다</h3>
<p>GitHub 공지에 따르면 Copilot 앱 전용 정책은 기본적으로 enabled everywhere로 설정됩니다. 제품 경험 측면에서는 자연스럽습니다. 사용자는 별도 요청 없이 새 앱을 바로 쓸 수 있습니다. 하지만 enterprise 운영에서는 기본 enabled가 조용한 확산을 만들 수 있습니다.</p>
<p>새 client가 기본 enabled일 때 확인할 질문:</p>
<ul>
<li>이 client가 어느 조직과 repository에서 열리는가?</li>
<li>기존 managed settings가 실제로 적용되는가?</li>
<li>plugin, marketplace, approval bypass, model policy가 기존 client와 같은가?</li>
<li>세션 로그, PR evidence, cost center attribution이 남는가?</li>
<li>보안·결제·인증·고객 데이터 repo에서도 동일하게 열리는가?</li>
<li>예외적으로 끄거나 조직별 위임할 기준이 있는가?</li>
</ul>
<p>기본 enabled가 항상 나쁜 것은 아닙니다. 작은 팀이나 낮은 위험 repo에서는 빠른 도입이 맞습니다. 하지만 고위험 조직은 canary org, pilot team, repo allowlist부터 여는 편이 안전합니다. 특히 앱과 cloud agent는 사용자가 느끼는 UI는 간단해도 실제로는 workspace, PR, plugin, 비용 경계에 닿습니다.</p>
<h3 id="5-approval-bypass-정책은-생산성과-안전의-접점이다">5) approval bypass 정책은 생산성과 안전의 접점이다</h3>
<p>managed settings에서 눈여겨볼 항목은 approval prompt bypass입니다. agent가 파일을 읽고, 명령을 실행하고, URL을 fetch할 때 매번 묻는 것은 답답합니다. 반대로 bypass를 너무 쉽게 열면 도구 호출이 사람의 판단을 건너뜁니다.</p>
<p>실무에서는 action 위험도별로 나눠야 합니다.</p>
<table>
  <thead>
      <tr>
          <th>Action</th>
          <th>bypass 허용 기준</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>repo read/search</td>
          <td>일반 repo에서 허용 가능</td>
      </tr>
      <tr>
          <td>test command 실행</td>
          <td>allowlisted command와 unchanged script일 때</td>
      </tr>
      <tr>
          <td>file write</td>
          <td>allowed path와 small diff일 때만</td>
      </tr>
      <tr>
          <td>URL fetch</td>
          <td>domain allowlist 필요</td>
      </tr>
      <tr>
          <td>package install</td>
          <td>기본 review 필요</td>
      </tr>
      <tr>
          <td>shell script 실행</td>
          <td>owner approval 필요</td>
      </tr>
      <tr>
          <td>external send/delete/deploy</td>
          <td>bypass 금지</td>
      </tr>
  </tbody>
</table>
<p>중요한 점은 client별 UI가 아니라 실제 action 기준으로 본다는 것입니다. desktop app에서 누른 continue, CLI의 자동 진행, cloud agent의 task assignment가 모두 같은 위험 행동을 만들 수 있습니다. <a href="/posts/2026-07-26-agent-artifact-quarantine-gate-trend/">Agent Artifact Quarantine Gate</a>에서 말한 것처럼 agent가 만든 산출물을 나중에 실행하는 경우도 함께 봐야 합니다.</p>
<h3 id="6-클라이언트-접근-정책은-비용-정책과-연결된다">6) 클라이언트 접근 정책은 비용 정책과 연결된다</h3>
<p>client가 늘어나면 비용 귀속도 복잡해집니다. IDE chat은 개인 사용량처럼 보이지만 cloud agent가 PR을 만들면 조직 repo와 cost center의 비용입니다. CLI가 GitHub Actions 안에서 돌면 user-level budget이 아니라 workflow나 organization 경로로 흘러갈 수 있습니다. desktop app에서 병렬 세션을 여러 개 돌리면 개인이 시작했더라도 reviewer queue와 credit pool을 같이 씁니다.</p>
<p>따라서 client policy에는 비용 필드가 들어가야 합니다.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#ff79c6">client_cost_policy</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">desktop_app</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">max_parallel_sessions_per_user</span>: <span style="color:#bd93f9">3</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">requires_task_id</span>: <span style="color:#ff79c6">true</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">cli</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">max_ai_credits_by_task</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">docs</span>: <span style="color:#bd93f9">80</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">bugfix</span>: <span style="color:#bd93f9">250</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">refactor</span>: <span style="color:#bd93f9">600</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">cloud_agent</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">requires_cost_center</span>: <span style="color:#ff79c6">true</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">default_credit_cap</span>: <span style="color:#bd93f9">300</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">issue_automation</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">monthly_credit_review</span>: <span style="color:#ff79c6">true</span>
</span></span></code></pre></div><p>이 기준은 <a href="/posts/2026-07-03-agent-session-ledger-ai-credit-controls-trend/">Agent Session Ledger</a>와 이어집니다. 클라이언트를 열었다면 세션, 비용, evidence를 작업 단위로 남길 수 있어야 합니다.</p>
<h2 id="실무-적용">실무 적용</h2>
<h3 id="1-agent-client-inventory부터-만든다">1) agent client inventory부터 만든다</h3>
<p>먼저 조직에서 사용 중이거나 곧 열릴 AI coding client를 적습니다.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#ff79c6">agent_client_inventory</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">github_copilot</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">vscode</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">enabled</span>: <span style="color:#ff79c6">true</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">managed_settings_applied</span>: <span style="color:#ff79c6">true</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">cli</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">enabled</span>: <span style="color:#ff79c6">true</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">managed_settings_applied</span>: <span style="color:#ff79c6">true</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">desktop_app</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">enabled</span>: <span style="color:#f1fa8c">&#34;pilot&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">managed_settings_applied</span>: <span style="color:#f1fa8c">&#34;verify&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">cloud_agent</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">enabled</span>: <span style="color:#f1fa8c">&#34;org_decides&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">managed_settings_applied</span>: <span style="color:#ff79c6">true</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">issue_automation</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">enabled</span>: <span style="color:#f1fa8c">&#34;selected_repos&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">other_clients</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">codex_cli</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">enabled</span>: <span style="color:#f1fa8c">&#34;platform-only&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">jetbrains_agent</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">enabled</span>: <span style="color:#f1fa8c">&#34;team-opt-in&#34;</span>
</span></span></code></pre></div><p>inventory에서 바로 볼 것은 누락입니다. &ldquo;누가 쓰는지 모르는 client&rdquo;, &ldquo;관리 설정 적용 여부가 확인되지 않은 client&rdquo;, &ldquo;비용 귀속이 없는 client&quot;가 가장 먼저 정리 대상입니다.</p>
<h3 id="2-client별-rollout-gate를-둔다">2) client별 rollout gate를 둔다</h3>
<p>새 client를 켤 때는 기능 데모보다 rollout gate를 먼저 봅니다.</p>
<table>
  <thead>
      <tr>
          <th>Gate</th>
          <th>통과 기준</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>정책 적용</td>
          <td>managed settings applied rate 95% 이상</td>
      </tr>
      <tr>
          <td>권한 경계</td>
          <td>allowed repo/path/action 정의</td>
      </tr>
      <tr>
          <td>비용 경계</td>
          <td>task id와 cost center 필수</td>
      </tr>
      <tr>
          <td>증거</td>
          <td>PR, issue, test, session ledger 중 최소 1개 연결</td>
      </tr>
      <tr>
          <td>보안</td>
          <td>unapproved plugin 0건, bypass attempt 관측</td>
      </tr>
      <tr>
          <td>운영</td>
          <td>owner, support channel, rollback/disable 경로</td>
      </tr>
  </tbody>
</table>
<p>pilot은 숫자가 있어야 끝납니다. &ldquo;불편하다는 말이 별로 없었다&quot;는 근거가 약합니다. 1~2주 pilot 동안 session count, failed session, missing evidence, bypass attempt, cost per completed task, reviewer wait p95를 봐야 합니다.</p>
<h3 id="3-현장-적용-예시-desktop-app은-열고-cloud-agent는-보류한다">3) 현장 적용 예시: desktop app은 열고 cloud agent는 보류한다</h3>
<p>예를 들어 한 조직에 플랫폼 팀, 결제 팀, 고객 데이터 팀이 같이 있다고 합시다. 플랫폼 팀은 반복적인 테스트 보강과 리팩터링 이슈가 많아 desktop app의 병렬 세션이 생산성에 도움이 됩니다. 반면 결제 팀은 정산 로직과 권한 토큰을 다루고, 고객 데이터 팀은 특정 고객별 격리 요구가 있습니다. 이 경우 &ldquo;Copilot 앱 전체 허용&rdquo; 또는 &ldquo;전체 금지&quot;보다 아래처럼 나눠 여는 편이 운영적으로 낫습니다.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#ff79c6">pilot_decision</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">desktop_app</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">status</span>: <span style="color:#f1fa8c">&#34;pilot&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">allowed_orgs</span>: [<span style="color:#f1fa8c">&#34;platform&#34;</span>]
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">guardrails</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;max_parallel_sessions_per_user=3&#34;</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;session_task_id_required&#34;</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;managed_settings_applied&#34;</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;unapproved_plugin_blocked&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">cli</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">status</span>: <span style="color:#f1fa8c">&#34;enabled&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">allowed_orgs</span>: [<span style="color:#f1fa8c">&#34;platform&#34;</span>, <span style="color:#f1fa8c">&#34;backend&#34;</span>]
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">blocked_actions</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;external_send&#34;</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;permission_change&#34;</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;deploy_without_ci_receipt&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">cloud_agent</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">status</span>: <span style="color:#f1fa8c">&#34;deferred&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">reason</span>: <span style="color:#f1fa8c">&#34;repo write boundary, cost center, evidence schema not yet verified&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">mobile</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">status</span>: <span style="color:#f1fa8c">&#34;readonly&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">allowed_actions</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;view_status&#34;</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;stop_session&#34;</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;request_human_review&#34;</span>
</span></span></code></pre></div><p>이 결정은 보수적으로 보일 수 있지만, 실제로는 도입 속도를 빠르게 만듭니다. 위험이 낮고 증거를 남기기 쉬운 표면부터 열면 사용자는 도구의 효용을 경험하고, 보안팀은 어떤 지표를 봐야 하는지 학습합니다. 반대로 cloud agent까지 한 번에 열면 실패 원인이 client policy인지, repository rule인지, plugin 문제인지, 비용 정책인지 분리하기 어렵습니다.</p>
<p>pilot 종료 기준도 미리 정합니다.</p>
<table>
  <thead>
      <tr>
          <th>지표</th>
          <th>승격 기준</th>
          <th>보류 기준</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>session evidence 누락</td>
          <td>2% 미만</td>
          <td>5% 이상</td>
      </tr>
      <tr>
          <td>unapproved plugin 사용</td>
          <td>0건</td>
          <td>1건 이상</td>
      </tr>
      <tr>
          <td>bypass prompt attempt</td>
          <td>감소 추세</td>
          <td>고위험 action에서 반복</td>
      </tr>
      <tr>
          <td>PR reviewer 재작업률</td>
          <td>기존 대비 10% 이내</td>
          <td>20% 이상 증가</td>
      </tr>
      <tr>
          <td>cost per completed task</td>
          <td>task type별 cap 이내</td>
          <td>cap 초과 반복</td>
      </tr>
  </tbody>
</table>
<p>이 표가 있으면 pilot 회고가 감상으로 흐르지 않습니다. &ldquo;계속 열자&quot;와 &ldquo;잠시 닫자&quot;의 기준이 숫자로 남고, 다음 client를 열 때도 같은 기준을 재사용할 수 있습니다.</p>
<h3 id="4-org별-위임은-정책-부재가-아니라-책임-위임이어야-한다">4) org별 위임은 정책 부재가 아니라 책임 위임이어야 한다</h3>
<p>GitHub의 선택지 중 &ldquo;Let organizations decide&quot;는 유용합니다. 하지만 이것이 중앙 정책 포기를 뜻하면 안 됩니다. 중앙은 최소 기준을 정하고, org는 그 안에서 client를 켜거나 끄는 편이 좋습니다.</p>
<p>중앙 최소 기준:</p>
<ul>
<li>high-risk repo에서는 cloud agent opt-in</li>
<li>plugin marketplace는 allowlist 기반</li>
<li>approval bypass는 R2 이상 action에서 금지</li>
<li>session evidence 없는 PR은 review 요청 금지</li>
<li>external send, deploy, permission change는 별도 승인</li>
</ul>
<p>조직 위임 가능 항목:</p>
<ul>
<li>desktop app pilot 여부</li>
<li>CLI 기본 허용 팀</li>
<li>cloud agent 적용 repo</li>
<li>issue automation confidence threshold</li>
<li>mobile read-only 알림 범위</li>
</ul>
<p>이렇게 나누면 중앙은 guardrail을 유지하고, 각 org는 업무 속도와 위험도에 맞게 adoption을 조절할 수 있습니다.</p>
<h3 id="5-drift-metric을-주간-리포트로-본다">5) drift metric을 주간 리포트로 본다</h3>
<p>정책은 UI에서 켰다고 끝나지 않습니다. client version, local config, device state, 로그인 계정, 조직 예외 때문에 drift가 생깁니다.</p>
<p>초기 지표:</p>
<ul>
<li><code>managed_settings_applied_rate</code> 95% 이상</li>
<li><code>unknown_agent_client_sessions</code> 0건 목표</li>
<li><code>unapproved_plugin_used</code> 0건 목표</li>
<li><code>marketplace_policy_violation</code> 0건 목표</li>
<li><code>permission_bypass_attempt</code> 주간 추세 확인</li>
<li><code>cloud_agent_without_cost_center</code> 0건 목표</li>
<li><code>desktop_session_without_task_id</code> 5% 미만</li>
<li><code>high_risk_repo_client_enabled_without_owner</code> 0건 목표</li>
</ul>
<p>이 지표는 감시가 아니라 운영 blind spot 찾기입니다. 특히 unknown client와 unapproved plugin은 빠르게 조사해야 합니다. 클라이언트가 늘수록 가장 늦게 inventory에 들어온 표면이 사고의 시작점이 됩니다.</p>
<h3 id="6-disabled-path도-사용자-경험으로-설계한다">6) disabled path도 사용자 경험으로 설계한다</h3>
<p>client를 끄면 사용자는 막혔다고 느낍니다. 단순히 &ldquo;admin disabled&quot;만 보여주면 우회 도구를 찾거나 개인 계정으로 넘어갈 수 있습니다. disabled path에는 이유와 대체 경로가 있어야 합니다.</p>
<p>좋은 안내:</p>
<ul>
<li>이 client가 아직 pilot 전이라 제한돼 있다.</li>
<li>허용된 대체 client는 무엇이다.</li>
<li>접근 요청은 어떤 issue/template으로 올린다.</li>
<li>고위험 repo에서는 어떤 추가 조건이 필요하다.</li>
<li>언제 재검토되는지 명시한다.</li>
</ul>
<p>정책의 목적은 무조건 차단이 아니라 안전한 사용 경로를 제시하는 것입니다. 승인 경로가 없으면 shadow adoption이 생깁니다.</p>
<h2 id="트레이드오프주의점">트레이드오프/주의점</h2>
<p>첫째, 클라이언트별 정책은 운영 복잡도를 늘립니다. 앱, CLI, IDE, cloud agent를 따로 관리하면 표가 많아지고 예외도 생깁니다. 하지만 하나의 큰 토글로 묶으면 실제 위험 차이를 놓칩니다. 처음에는 3단계, 즉 <code>enabled</code>, <code>pilot</code>, <code>disabled</code>만으로 시작해도 충분합니다.</p>
<p>둘째, managed settings를 과신하면 안 됩니다. 플러그인과 marketplace, bypass prompt, 모델 기본값을 통제해도 repository ruleset, token scope, branch protection, CODEOWNERS, CI secret scope가 느슨하면 변경은 여전히 위험합니다. client policy는 기존 소프트웨어 delivery control 위에 얹는 계층입니다.</p>
<p>셋째, cloud agent와 local CLI는 서로 다른 trust boundary를 가집니다. cloud agent는 격리 workspace와 PR 중심 workflow가 장점이지만, 원격 실행과 비용 귀속을 봐야 합니다. local CLI는 개발자 맥락이 풍부하지만 shell, local files, 기존 scripts와 더 가까이 닿습니다. 어느 쪽이 더 안전하다고 단정하지 말고 작업 유형별로 고릅니다.</p>
<p>넷째, 기본 enabled는 제품 확산에는 좋지만 고위험 조직에서는 너무 빠를 수 있습니다. 새 client가 출시될 때마다 &ldquo;우리 정책 기본값은 opt-out인가 opt-in인가&quot;를 확인해야 합니다. 특히 결제, 인증, 의료, 금융, 고객 데이터 repo는 canary 없이 전체 enabled를 피하는 편이 좋습니다.</p>
<p>다섯째, mobile steering은 편하지만 승인 품질이 낮아질 수 있습니다. 작은 화면에서 diff, test, unresolved review thread를 충분히 보기 어렵습니다. 모바일은 read-only status, stop, low-risk continue 정도로 시작하고 merge, deploy, permission change는 막는 편이 안전합니다.</p>
<p>의사결정 우선순위는 <strong>고객/권한 데이터 보호 &gt; 실제 실행 권한 &gt; 관리 설정 일관성 &gt; 비용 귀속 &gt; 개발자 편의성</strong>입니다. 편리한 client일수록 더 명확한 owner와 evidence가 필요합니다.</p>
<h2 id="체크리스트-또는-연습">체크리스트 또는 연습</h2>
<h3 id="체크리스트">체크리스트</h3>
<ul>
<li><input disabled="" type="checkbox"> AI coding client inventory에 IDE, CLI, desktop app, cloud agent, issue automation, mobile이 포함돼 있다.</li>
<li><input disabled="" type="checkbox"> client별 <code>enabled</code>, <code>pilot</code>, <code>disabled</code>, <code>org_decides</code> 상태가 정리돼 있다.</li>
<li><input disabled="" type="checkbox"> 새 client가 기본 enabled인지 확인했고, 고위험 org의 override 정책이 있다.</li>
<li><input disabled="" type="checkbox"> managed settings가 앱, CLI, IDE, cloud agent에 실제 적용되는지 확인한다.</li>
<li><input disabled="" type="checkbox"> plugin, marketplace, approval bypass, model default가 client별로 drift되지 않는다.</li>
<li><input disabled="" type="checkbox"> cloud agent와 desktop app session에는 task id, repo, owner, cost center가 붙는다.</li>
<li><input disabled="" type="checkbox"> mobile에서는 merge, deploy, permission change 승인을 막는다.</li>
<li><input disabled="" type="checkbox"> disabled client 안내에 대체 경로와 접근 요청 절차가 있다.</li>
</ul>
<h3 id="연습">연습</h3>
<ol>
<li>현재 팀의 AI coding client를 모두 적고, 각 client의 실행 위치와 write 권한을 표시해보세요.</li>
<li>새 desktop agent app을 pilot으로 열 때 필요한 최소 gate 5개를 정해보세요.</li>
<li><code>permission_bypass_attempt</code>가 증가했을 때 차단할 action과 허용할 action을 나눠보세요.</li>
<li>고위험 repo 3개를 골라 cloud agent를 opt-in으로 둘지, org decides로 둘지, disabled로 둘지 판단해보세요.</li>
</ol>
<h2 id="다음에-같이-보면-좋은-글">다음에 같이 보면 좋은 글</h2>
<ul>
<li><a href="/posts/2026-07-27-agentic-development-surface-convergence-trend/">Agentic Development Surface Convergence</a></li>
<li><a href="/posts/2026-07-09-managed-dev-tool-telemetry-plane-trend/">Managed Dev-Tool Telemetry Plane</a></li>
<li><a href="/posts/2026-07-03-agent-session-ledger-ai-credit-controls-trend/">Agent Session Ledger</a></li>
<li><a href="/posts/2026-07-26-agent-artifact-quarantine-gate-trend/">Agent Artifact Quarantine Gate</a></li>
<li><a href="/posts/2026-07-25-agentic-issue-intent-control-plane-trend/">Agentic Issue Intent Control Plane</a></li>
</ul>
]]></content:encoded></item></channel></rss>