본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
엔터프라이즈 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 에이전트›Ch11. Schedules, State, Hooks
한국어English

Ch11. Schedules, State, Hooks

Eve의 cron schedule, durable state, stream event hook을 운영 자동화와 감사 체계로 연결한다.

핵심 요약

  • Schedules, state, hooks는 대화 밖에서도 에이전트를 운영 시스템으로 굴리게 해주는 표면입니다.
  • durable state는 작은 session-scoped 기억에 쓰고, 데이터베이스 대신 쓰면 안 됩니다.
  • hook은 stream event 뒤에 실행되는데, 여기서 실패하면 session 전체가 실패할 수 있습니다. 그래서 관측/감사 코드도 운영 품질로 봐야 합니다.

프로덕션 에이전트는 사용자가 말을 걸 때만 움직이는 게 아닙니다. 정기적으로 점검하고, 세션 도중 상태를 기억하고, 실행을 빠짐없이 감사해야 합니다. Eve의 schedule, state, hook이 이 운영면을 맡습니다.

Schedules

Schedule은 agent/schedules/ 아래에서 정의합니다. root-only 슬롯이며 subagent에는 없습니다.

형태는 두 가지입니다.

형태사용
markdownfire-and-forget task-mode prompt
run handlerchannel handoff, branching, waitUntil이 필요한 작업

Markdown schedule

agent/schedules/heartbeat.ts
import { defineSchedule } from "eve/schedules";

export default defineSchedule({
  cron: "*/5 * * * *",
  markdown: "Check the system heartbeat and summarize anomalies.",
});

Task-mode schedule은 output을 버릴 수 있고 사람 입력이나 OAuth sign-in을 기다리지 못합니다. write action이나 approval이 필요한 작업이라면 handler form을 쓰는 편이 낫습니다.

Handler schedule

agent/schedules/daily-digest.ts
import { defineSchedule } from "eve/schedules";
import slack from "../channels/slack.js";

export default defineSchedule({
  cron: "0 9 * * 1-5",
  async run({ receive, waitUntil, appAuth }) {
    waitUntil(
      receive(slack, {
        message: "Summarize yesterday's incidents and post a digest.",
        target: { channelId: "C0123ABC" },
        auth: appAuth,
      }),
    );
  },
});

Vercel에서는 cron을 UTC 기준으로 평가합니다. self-host라면 eve start가 Nitro schedule runner를 띄워야 합니다. custom hosting에서 HTTP server만 올리면 schedule이 안 돌 수 있습니다.

Schedule 운영 기준

항목기준
cron timezoneUTC 기준 문서화
idempotency동일 cron 중복 실행 대비
outputchannel handoff 또는 external store
authapp principal과 service principal 구분
evalschedule prompt가 task-mode에서 완료되는지
observabilityrun logs와 failure alert

Durable state

defineState는 session-scoped durable memory입니다.

agent/lib/budget.ts
import { defineState } from "eve/context";

export const budget = defineState("ops-agent.budget", () => ({
  count: 0,
  cap: 25,
}));

tool/hook 안에서 읽고 씁니다.

const current = budget.get();
budget.update((state) => ({ ...state, count: state.count + 1 }));

주의:

  • active Eve runtime context 밖에서 호출하면 throw합니다.
  • subagent와는 state를 공유하지 않습니다.
  • session이 끝나면 사라지므로 장기 비즈니스 저장소로 쓰기 어렵습니다.

State 사용 기준

사용적합 여부
세션 내 query budget적합
현재 plan/checklist적합
user profile 영구 저장부적합
tenant shared memory부적합
OAuth token cache직접 구현 부적합, connection auth 사용
컴팩션 후 보존할 working memory적합

영구적이거나 공유하거나 분석해야 하는 데이터는 external DB나 connection으로 옮깁니다.

Hooks

Hook은 stream event 이후 실행되는 extension point입니다.

agent/hooks/audit.ts
import { defineHook } from "eve/hooks";

export default defineHook({
  events: {
    async "action.result"(event, ctx) {
      await writeAuditLog({
        sessionId: ctx.session.id,
        result: event.data.result,
      });
    },
  },
});

Hook은 모델 컨텍스트를 주입하는 기능이 아닙니다. 모델에 동적 컨텍스트를 주려면 dynamic instructions/skills/tools를 씁니다.

Hook failure는 실제 실패다

Eve 문서와 구현을 보면 hook throw가 turn failure로 번질 수 있습니다. failure cascade event에서 또 throw하면 session failure까지 커집니다.

그래서 감사/메트릭 hook은 안에서 실패를 격리해 둬야 합니다.

export default defineHook({
  events: {
    async "action.result"(event, ctx) {
      try {
        await writeAuditLog({ sessionId: ctx.session.id, result: event.data.result });
      } catch (error) {
        console.error("audit hook failed", error);
      }
    },
  },
});

감사 로그가 반드시 남아야 하는 regulated action이라면 반대로 hook 실패를 turn failure로 남기는 게 맞습니다. 이 정책은 명시해 둡니다.

Hook vs channel event handler

필요선택
모든 채널 공통 감사hook
Slack message updatechannel event handler
metric/alert exporthook
channel state mutationchannel event handler
model context 추가dynamic resolver

Event order상 channel handler가 먼저 돌고 hook이 뒤따릅니다. hook은 durable stream에 event가 기록된 다음 실행됩니다.

Tool result narrowing

toolResultFrom으로 특정 tool/connection result를 type-safe하게 좁힙니다.

import { defineHook } from "eve/hooks";
import { toolResultFrom } from "eve/tools";
import refundCharge from "../tools/refund_charge";

export default defineHook({
  events: {
    "action.result"(event) {
      const refund = toolResultFrom(event.data.result, refundCharge);
      if (!refund) return;
      console.log(refund.output);
    },
  },
});

감사/비용/보안 이벤트를 tool별로 나누는 데 유용합니다.

운영 패턴

패턴구성
세션 예산defineState + query tool budget check + hook metric
일일 digestschedule handler + Slack channel + eval
승인 감사approval-gated tool + action.result hook
incident watchercustom webhook channel + state + schedule heartbeat
drift monitorschedule + eval-like tool call + alert hook

체크리스트

항목기준
schedulesUTC, idempotency, failure alert
statesession-scoped인지 확인
hooks실패 격리 또는 의도적 failure 정책
channel statemetadata projection에 민감값 없음
evalschedule/hook/state behavior를 실제 session으로 검증
observabilityhook 결과와 Eve stream event를 상호 참조 가능

Schedules, state, hooks는 에이전트를 “대화형 데모”에서 “운영 자동화 시스템”으로 끌어올리는 표면입니다.

관련 문서

Ch9. Channels, Auth, Streaming

Eve channel이 세션 생성, continuation token, route auth, NDJSON stream을 어떻게 책임지는지 분석한다.

Ch6. Context, Skills, Dynamic Capabilities

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

Cmd. /hooks

Codex 명령어 마스터 · Codex lifecycle hooks를 검토하고 신뢰/비활성화 상태를 관리하는 명령

그래프 중심 오케스트레이션

Vercel 엔터프라이즈 AI 플랫폼 · LangGraph 스타일의 graph/state-machine 사고방식을 Vercel의 code-first orchestration으로 매핑하는 방법을 정리합니다.

Ch5. Hooks 시스템

Kiro 고급 활용 · 이벤트 기반 자동화, askAgent와 runCommand 타입, 실전 레시피

Ch10. Subagents, Workflows, Remote Agents

Eve의 built-in agent tool, declared subagents, remote agents, experimental Workflow를 활용한 멀티에이전트 설계를 정리한다.

Ch12. Evals와 품질 게이트

Eve eval runner와 assertion surface를 활용해 에이전트 회귀를 막는 품질 게이트를 설계한다.

On this page

SchedulesMarkdown scheduleHandler scheduleSchedule 운영 기준Durable stateState 사용 기준HooksHook failure는 실제 실패다Hook vs channel event handlerTool result narrowing운영 패턴체크리스트