본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
엔터프라이즈 Eve 에이전트 개발

기초 아키텍처

Ch1. Eve 멘탈 모델Ch2. 소스 코드 지도Ch3. 프로젝트 레이아웃과 DiscoveryCh4. Compiler와 Runtime Graph

에이전트 품질 설계

Ch5. agent.ts, 모델, 컴팩션Ch6. Context, Skills, Dynamic CapabilitiesCh7. Tools, Approval, ConnectionsCh8. Sandbox 보안 런타임

운영 런타임

Ch9. Channels, Auth, StreamingCh10. Subagents, Workflows, Remote AgentsCh11. Schedules, State, HooksCh12. Evals와 품질 게이트

프로덕션 운영

Ch13. Observability와 DeploymentCh14. Enterprise PatternsCh15. Migration과 Governance

부록

공식 문서 대조표검증 리포트업데이트 내역
핸드북›엔터프라이즈 Eve 에이전트›Ch7. Tools, Approval, Connections
한국어English

Ch7. Tools, Approval, Connections

Eve 도구 실행, 사람 승인, MCP/OpenAPI 연결, OAuth 흐름을 엔터프라이즈 보안 경계로 설계한다.

핵심 요약

  • authored tool의 execute는 sandbox가 아니라 app runtime에서 돌아갑니다. privileged surface로 다뤄야 합니다.
  • toModelOutput, needsApproval, auth scope는 tool이 어떤 데이터를 노출하고 어떤 위험 행동을 하는지 막는 핵심 장치입니다.
  • MCP/OpenAPI connection은 확장이 빠른 만큼 allowlist, approval, OAuth 책임 경계를 함께 설계해야 합니다.

Eve에서 tool은 모델이 호출하는 typed action입니다. 한 가지만 기억하면 됩니다. authored tool의 execute는 sandbox가 아니라 app runtime에서 돌아갑니다. 그래서 tool은 비밀값과 내부 서비스를 건드릴 수 있는 privileged surface입니다.

Tool 기본 구조

agent/tools/get_weather.ts
import { defineTool } from "eve/tools";
import { z } from "zod";

export default defineTool({
  description: "Return mock weather data for a city.",
  inputSchema: z.object({ city: z.string().min(1) }),
  async execute({ city }, ctx) {
    return { city, condition: "Sunny", temperatureF: 72 };
  },
});

운영 기준:

  • description은 모델이 언제 호출할지 판단하는 문장이다.
  • inputSchema는 방어선이다. 빈 입력도 z.object({})로 명시한다.
  • execute는 재시도와 재실행을 염두에 두고 짠다.
  • 반환값은 모델 history에 남으니 최소화한다.

toModelOutput으로 모델 가시성 줄이기

channel/hook에는 rich output을 주되 모델에는 요약만 보여야 할 때 toModelOutput을 씁니다.

toModelOutput(output) {
  return {
    type: "text",
    value: `Report ${output.id}: risk ${output.riskLevel}.`,
  };
}

엔터프라이즈에서는 이 패턴이 사실상 필수입니다. CRM row, audit payload, pricing table, PII를 모델에 그대로 돌려주면 후속 응답과 telemetry에 그 값이 섞여 들어갑니다.

승인 정책

Eve는 tool 단위로 needsApproval을 둡니다.

Helper동작
never()승인 불필요. 생략 시 기본값
once()세션에서 첫 실행만 승인
always()매 실행 승인
predicate입력값에 따라 승인 여부 결정

민감한 side effect는 생략 기본값에 기대면 안 됩니다.

agent/tools/refund_charge.ts
import { defineTool } from "eve/tools";
import { always } from "eve/tools/approval";
import { z } from "zod";

export default defineTool({
  description: "Refund a customer charge.",
  inputSchema: z.object({
    chargeId: z.string(),
    amount: z.number().positive(),
  }),
  needsApproval: always(),
  async execute(input) {
    return refundCharge(input);
  },
});

입력 기반 approval

금액, 대상, 계정 tier에 따라 승인 기준을 바꿀 수 있습니다.

needsApproval: ({ toolInput }) => {
  const amount = Number(toolInput?.amount ?? 0);
  return amount > 1000;
}

실무에서는 predicate 안에 비즈니스 로직을 욱여넣지 말고 agent/lib/policy.ts에 순수 함수로 떼어 unit test를 붙입니다.

HITL은 durable park다

승인이 필요하면 Eve는 input.requested event를 내고 session을 session.waiting로 park합니다. compute를 붙잡고 기다리는 게 아니라 workflow가 durably suspend됩니다. 사용자가 승인하거나 거절하면 같은 session이 다시 살아납니다.

장기 백오피스 작업에서 이 특성이 빛을 봅니다.

상황Eve 동작
담당자가 3시간 뒤 승인session이 이어짐
프로세스 재시작마지막 checkpoint에서 재개
승인 중 새 메시지 도착approval resolution과 message가 분리 처리될 수 있음
tool step 재실행approval 기록이 state에 남아 중복 prompt를 피함

Connections: 외부 tool provider

Connections는 agent가 직접 짜지 않은 외부 MCP/OpenAPI tool을 모델에 노출합니다.

연결정의 helper모델-visible tool name
MCPdefineMcpClientConnectionconnection__<connection>__<tool>
OpenAPIdefineOpenAPIConnectionconnection__<connection>__<operationId>

모델은 먼저 connection__search로 연결 도구를 찾은 뒤 qualified tool을 호출합니다.

MCP 연결 예

agent/connections/linear.ts
import { defineMcpClientConnection } from "eve/connections";
import { once } from "eve/tools/approval";

export default defineMcpClientConnection({
  url: "https://mcp.linear.app/sse",
  description: "Linear workspace: issues, projects, cycles, and comments.",
  auth: {
    getToken: async () => ({ token: process.env.LINEAR_API_TOKEN! }),
  },
  tools: { allow: ["search_issues", "get_issue"] },
  approval: once(),
});

좋은 connection definition은 네 가지를 명시합니다.

  • description: 모델 routing용
  • auth: token source와 principal scope
  • allow/block filter: tool exposure 제한
  • approval: write/sensitive action 게이트

Token은 모델에게 보이지 않는다

Connection token은 app runtime에서 resolve돼 outbound request에 주입됩니다. per-step cache는 되지만 durable state나 모델 history로는 직렬화되지 않습니다. 이게 Eve의 핵심 안전장치입니다.

다만 token scope를 잘못 주면 그래도 위험합니다.

위험대응
shared app token이 모든 tenant 데이터 접근user principal token 또는 tenant-scoped token
MCP 서버가 너무 많은 tool 노출allow-list
write operation이 approval 없이 실행connection approval: always() 또는 operation별 분리
token revoked mid-callprovider 401을 ctx.requireAuth()로 매핑

Tool auth와 connection auth

개별 tool도 OAuth auth를 가질 수 있습니다. ctx.getToken()과 ctx.requireAuth()가 해당 tool의 auth 전략을 사용합니다.

사용기준
connection auth외부 MCP/OpenAPI 서버의 여러 tool을 묶어 인증
tool auth특정 custom tool 하나가 OAuth를 필요로 함
route auth사용자가 Eve route에 접근 가능한지 판단

셋은 서로 다른 layer입니다. route auth를 걸었다고 tool/connection token scope까지 안전해지지는 않습니다.

ask_question과 approval의 차이

ask_question은 모델이 사용자에게 되묻는 built-in tool이고, approval은 사람이 tool 실행을 허용하거나 거절하는 gate입니다. 둘 다 같은 input.requested pause protocol을 쓰지만 쓰임은 다릅니다.

목적기능
실행 허가needsApproval
정보 부족 해결ask_question
OAuth consentconnection/tool auth

Tool 설계 체크리스트

항목기준
input schema모든 필드 검증, enum/limit 명시
output minimization모델에는 필요한 요약만
idempotency외부 side effect에는 key/ledger
approvalirreversible/sensitive action은 always() 또는 predicate
authtoken scope와 principal type 명시
observabilityaction.result hook으로 audit 가능
evalcalledTool, noFailedActions, output schema 검증

도구는 에이전트의 손입니다. 손을 움직이는 프로토콜은 Eve가 주지만, 어떤 손에 얼마나 센 권한을 쥐여줄지는 작성자가 정합니다.

관련 문서

Ch15. Migration과 Governance

기존 에이전트와 자동화 시스템을 Eve로 전환하고 운영 거버넌스를 세우는 방법을 정리한다.

Ch14. Enterprise Patterns

Eve로 고객지원, 내부 리서치, 코드 작업, 백오피스 자동화, 데이터 분석 에이전트를 설계하는 패턴을 정리한다.

API 문서 & 스펙

에이전틱 시대의 문서화 혁신 · OpenAPI 3.2, tool schema, MCP Resource까지 연결하는 agent-first API 문서

Ch11. MCP 연동

Codex 고급 활용 · STDIO·Streamable HTTP MCP 서버 등록(codex mcp add), allowlist·enabled_tools·timeout 정책, resource/action 서버 분리와 plugin 마켓플레이스 라이프사이클로 외부 도구 연동을 통제하는 운영 가이드

에이전트 문서 보안

에이전틱 시대의 문서화 혁신 · Prompt injection, MCP tool poisoning, Plugin 공급망, excessive agency를 줄이는 문서 보안 기준

Ch6. Context, Skills, Dynamic Capabilities

Eve의 컨텍스트 제어 원칙과 skills, dynamic tools, dynamic instructions를 활용한 고급 에이전트 설계를 정리한다.

Ch8. Sandbox 보안 런타임

Eve sandbox의 trust boundary, backend, network policy, credential brokering, workspace lifecycle을 운영 기준으로 정리한다.

On this page

Tool 기본 구조toModelOutput으로 모델 가시성 줄이기승인 정책입력 기반 approvalHITL은 durable park다Connections: 외부 tool providerMCP 연결 예Token은 모델에게 보이지 않는다Tool auth와 connection authask_question과 approval의 차이Tool 설계 체크리스트