전체 문서
이 페이지 목차
에이전트 런타임과 모델 경계
ARTEX는 범용 Norma session을 그대로 노출하지 않고 역할별 system prompt, tool set, transcript, context/settlement, proxy와 writeback callback을 조립한다. 모델은 다음 행동과 가설을 선택하지만 task state transition, DB transaction, asset gate, runtime budget 같은 경계는 host 코드가 담당한다.
역할과 책임
| 역할 | trigger·입력 | 허용된 결정 | 영속 결과 |
|---|---|---|---|
| Goal decomposer | 새 task의 raw goal·source context | goals, constraints, task scope 초기화 | graph goal/constraint/scope |
| Planner | graph overview, trigger delta, persistent Todo | intent 추가, goal proof, running work steer/kill | intent/goal/graph activity |
| Worker | 하나의 intent, anchor assets, constraints, task deadline | tool을 반복 선택하고 asset/fact/finding writeback | activity, transcript, graph/assets/findings |
| Main Agent | 사람 메시지와 task context | goal/hint/intent/constraint/scope 변경, work 제어 | main session/activity + task state |
| Reporter | finding event/trace/evidence | Markdown report 작성/갱신 | finding report/version |
| Retester | 사람이 시작한 finding retest | 제한된 재검증 후 verdict/summary/evidence | retest row + conversation |
| Triggered custom agent | interval/finding/tool/task-create event | 구성 prompt와 binding tool 범위 내 행동 | conversation/activity/tool effects |
| Side-question agent | parent context snapshot + 질문 | 별도 답·도구 사용 | side request/memory/events |
역할은 같은 provider/profile을 사용할 수 있지만 tool binding, prompt, runtime, transcript/session id와 writeback callback이 다르다. Runtime 조립
Planner session
Planner session · 관계
이 대상을 사용하는 기능·모듈·계약 · 5개
- 구현 담당 · 1. 접수와 부트스트랩 · 기능 단계의 직접 상태/실행 구현 · feature-impl-1
- 구현 담당 · 3. 자율 feedback loop · 기능 단계의 직접 상태/실행 구현 · feature-impl-3
- 구현 담당 · 6. 종료·settlement·사람 개입 · 기능 단계의 직접 상태/실행 구현 · feature-impl-5
- 구현 담당 · Task Main Agent · 기능 단계의 직접 상태/실행 구현 · feature-impl-15
- 의존 / 실행 · ARTEX 현재 시스템 지도 · system bootstrap가 agent manager 구성 · core-edge-6
Planner는 wake-up마다 새 Norma session을 만들되 task/exploration별 TodoStore를 ARTEX memory에서 재사용하고 transcript가 있으면 session을 resume한다. graph overview는 최근/진행중/냉각 요약을 제한된 창으로 제공하며, trigger delta가 이번 변화에 주의를 돌린다. Planner
Planner 전용 tool은 goal proof, intent creation, graph/asset/finding query, work output/steer/kill 등이다. add_intent handler는 parent가 fact/finding인지 검사하고 top-level이면 origin fact에 연결하며 asset anchor를 gate한다. 따라서 모델의 자유로운 계획과 graph lineage 불변조건을 분리한다. Tool handler
Worker session
Worker session · 관계
이 대상을 사용하는 기능·모듈·계약 · 1개
- 구현 담당 · Standalone conversation · 기능 단계의 직접 상태/실행 구현 · feature-impl-18
Worker는 intent별 work directory와 session id를 만들고 task deadline으로 wall-clock budget을 clamp한다. system prompt 끝에 task constraint, intent JSON, anchor asset JSON, graph context와 “이 intent만 수행하고 결과를 writeback한 뒤 멈춤” 규칙을 넣는다. Worker
Mermaid 원문
sequenceDiagram
participant E as Engine
participant W as ARTEX Worker
participant N as Norma Session
participant T as Tools/Hooks
participant D as DB/Files
E->>W: claimed intent + deadline
W->>W: role config·proxy·workdir·context 조립
W->>N: Resume(session id)
loop model/tool turns
N->>T: tool call
T->>T: permission/intercept/asset gate
T->>D: 실행·writeback
D-->>T: result/evidence id
T-->>N: tool result
end
N-->>W: terminal reason + usage
W->>D: activity/result 상태
W-->>E: done/finding wake
Session의 자연어 최종 답보다 structured write counts와 graph/finding/tool activity가 planner와 UI에 더 강한 입력이다. 모델이 결과를 말만 하고 write tool을 호출하지 않으면 탐색 상태에는 반영되지 않는다.
Norma 외부 경계
ARTEX에서 확인한 것은 agentcore.Options와 session lifecycle이다.
| ARTEX가 설정 | Norma가 내부에서 수행 | ARTEX가 다시 수집 |
|---|---|---|
| provider/model/system prompt | model turn·tool-use loop | thinking/text/tool_use/tool_result/result event |
| tools/deferred tools/unlock set | schema 노출·tool dispatch | capture callback과 activity |
| permission mode/hook context | permission/hook 실행 순서 | approval metadata/terminal error |
| transcript/session id | message resume/persist | 다음 ARTEX run의 resume |
| compaction/Noa/settlement | context budget·마지막 정리 turn | terminal reason, summary, usage |
| web fetch/search/proxy/bash env | SDK tool 실행 | tool result와 proxy에 잡힌 traffic |
한 model turn 안의 정확한 retry, streaming parse, permission 구현, transcript serialization은 ARTEX 소스만으로 확정하지 않는다. 같은 저장소에 생성되는 Norma 문서는 별도 문서 bundle이므로 이 ARTEX bundle의 내부 링크로 취급하지 않는다. Event capture
Provider routing과 failover
Provider routing과 failover · 관계
이 대상이 사용하는 구현·계약·의존 · 7개
- 계약 사용 · agents · DB.SetAgentLLMProfile: read/write FROM/UPDATE; DB.deleteProfile: read FROM · db-pg-access-agents-9fd4bd5238 · db-pg-access-agents-83239d7785
- 계약 사용 · llm_profile_health · DB.ClearLLMHealth: write DELETE; DB.LoadLLMHealth: read FROM; DB.SaveLLMHealth: write INSERT · db-pg-access-llm-profile-health-ec65e5a507 · db-pg-access-llm-profile-health-ce50ed16a5 · db-pg-access-llm-profile-health-f52b5efe5f
- 계약 사용 · llm_profiles · DB.ActiveProfile: read FROM; DB.ListProfiles: read FROM; DB.PoolProfiles: read FROM; DB.ProfileByID: read FROM; DB.SaveProfile: write INSERT/UPDATE; DB.SetActiveProfile: write UPDATE; DB.deleteProfile: read/write DELETE/FROM; lockLLMProfileForReference: read FROM · db-pg-access-llm-profiles-eaec5da39c · db-pg-access-llm-profiles-3fcac6dc00 · db-pg-access-llm-profiles-f4364ceaa1 · db-pg-access-llm-profiles-b958272071 · db-pg-access-llm-profiles-dfee149965 · db-pg-access-llm-profiles-5d1d592ee5 · db-pg-access-llm-profiles-880cbddcb0 · db-pg-access-llm-profiles-9d5f2d7cbf
- 계약 사용 · llm_records · DB.DeleteLLMRecords: write DELETE; DB.GetLLMRecord: read FROM; DB.InsertLLMRecord: write INSERT; DB.LLMTasks: read FROM; DB.ListLLMRecords: read FROM; DB.DeleteTaskCascadePrepared: write DELETE · db-pg-access-llm-records-9aca9bea84 · db-pg-access-llm-records-cab673cf7a · db-pg-access-llm-records-6d63fd4190 · db-pg-access-llm-records-30b3dfbfb4 · db-pg-access-llm-records-617fe0723a · db-pg-access-llm-records-27d38e6b28
- 계약 사용 · llm_usage · DB.InsertLLMUsage: write INSERT; DB.JudgeUsageStats: read FROM; DB.TokenByModel: read FROM; DB.UsageByProfile: read FROM; DB.UsageDaily: read FROM · db-pg-access-llm-usage-c31f6c2e58 · db-pg-access-llm-usage-1e4f16e088 · db-pg-access-llm-usage-6b6d0f6e83 · db-pg-access-llm-usage-bcfba2f79c · db-pg-access-llm-usage-cde6f94cdb
- 계약 사용 · task_llm_profiles · DB.deleteProfile: read/write DELETE/FROM; DB.ReplaceTaskLLMProfiles: write DELETE; DB.TaskLLMProfiles: read FROM; DB.hydrateTasksContext: read JOIN; DB.markTaskLLMProfileQuotaExhausted: read/write FROM/UPDATE; DB.taskLLMContext: read JOIN; insertTaskLLMProfiles: write INSERT · db-pg-access-task-llm-profiles-0d9ee1601d · db-pg-access-task-llm-profiles-511b963d68 · db-pg-access-task-llm-profiles-9891428a2e · db-pg-access-task-llm-profiles-3454e63b94 · db-pg-access-task-llm-profiles-89576d006e · db-pg-access-task-llm-profiles-6ec5c4a784 · db-pg-access-task-llm-profiles-d62d6248f4
- 계약 사용 · tasks · DB.deleteProfile: read/write FROM/JOIN/UPDATE; DB.ReplaceTaskLLMProfiles: read/write FROM/UPDATE; DB.markTaskLLMProfileQuotaExhausted: read/write FROM/UPDATE; DB.taskLLMContext: read FROM · db-pg-access-tasks-f552395a40 · db-pg-access-tasks-530db8c688 · db-pg-access-tasks-6fd7255485 · db-pg-access-tasks-62adc688f8
Provider adapter는 Anthropic/OpenAI compatible endpoint와 env fallback을 조립한다. PostgreSQL llm_profiles, task별 ordered chain, agent별 profile binding, conversation binding과 active profile을 task runtime이 해석한다. profile health/pool 상태와 quota failure는 다음 profile 전환 및 blocked intent 재개에 사용된다. Provider Task LLM
| 설정 | 적용 시점 | 경계 |
|---|---|---|
| endpoint/key/model/format | profile/provider 생성 | 연결 성공과 모델 의미 품질은 별개 |
| streaming/non-streaming | session별 resolver | response mode가 tool semantics를 바꾸지는 않음 |
| max tokens/custom field | request 구성 | endpoint 지원/해석은 외부 계약 |
| retry connect/empty/stream | provider policy | 비멱등 tool은 model retry와 분리 |
| session header | context session id가 있을 때 transport에 주입 | goal/compactor도 별도 stable id를 설정 |
| task profile chain | task router | quota/health 전환 시 active profile/revision 변경 |
Tool, MCP, Skill 조립
Tool, MCP, Skill 조립 · 관계
이 대상을 사용하는 기능·모듈·계약 · 2개
- 구현 담당 · Agent write와 provenance · 기능 단계의 직접 상태/실행 구현 · feature-impl-7
- 구현 담당 · 조립됐지만 실행 진입점이 없는 비 AI enrichment · 기능 단계의 직접 상태/실행 구현 · feature-impl-10
ARTEX는 역할 base tools에 visible Skill registry, direct-visible 또는 skill-gated MCP, traffic/custom host tools를 합친 뒤 DB tools row의 enabled/binding/schema override/default를 적용한다. deferred MCP/custom tool은 schema를 초기 prompt에서 숨기고 Skill 또는 search 경로로 unlock한다. 자세한 결정 순서는 도구와 정책을 본다. Server assembly
Context와 장기 상태
Context와 장기 상태 · 관계
이 대상이 사용하는 구현·계약·의존 · 4개
- 계약 사용 · activity · DB.ListCommands: read FROM/JOIN; DB.LastActivityAll: read FROM; DB.TaskListMetricsAll: read FROM; DB.TokenDailyAll: read FROM; DB.TokenTotalsAll: read FROM; ExplorationStore.ActivityByIDs: read FROM; ExplorationStore.ActivityByIDsForTerminalIntents: read FROM; ExplorationStore.ActivityDetail: read FROM; ExplorationStore.ActivityList: read FROM; ExplorationStore.ActivityListForTerminalIntent: read FROM; ExplorationStore.ActivityMaxID: read FROM; ExplorationStore.ActivityPage: read FROM; ExplorationStore.ActivityPageForTerminalIntent: read FROM; ExplorationStore.ActivityTrace: read FROM; ExplorationStore.ActivityTraceForTerminalIntent: read FROM; ExplorationStore.ActivityTraceSearch: read FROM; ExplorationStore.ActivityTraceSearchExcluding: read FROM; ExplorationStore.ActivityTraceSearchForTerminalIntent: read FROM; ExplorationStore.ActivityTraceSearchTerminalIntents: read FROM; ExplorationStore.AppendActivity: write INSERT; ExplorationStore.CancelIntent: write DELETE/INSERT; ExplorationStore.TokenStatsBySession: read FROM; ExplorationStore.TokenStatsByWorker: read FROM; ExplorationStore.TokenTotal: read FROM; intentTokenRollup: read FROM; ExplorationStore.DiscardOpenIntent: write DELETE · db-pg-access-activity-e60a1bb046 · db-pg-access-activity-06873ea5ba · db-pg-access-activity-5bad9011aa · db-pg-access-activity-3a8fbeae9a · db-pg-access-activity-5667024f17 · db-pg-access-activity-b8a7471493 · db-pg-access-activity-c6ab40468d · db-pg-access-activity-8dee84ba63 · db-pg-access-activity-cdc07f17b4 · db-pg-access-activity-ee8260e4b6 · db-pg-access-activity-16be78d8ef · db-pg-access-activity-0d669b74a9 · db-pg-access-activity-614aa5e140 · db-pg-access-activity-01e7477130 · db-pg-access-activity-04de768c7d · db-pg-access-activity-6906efe726 · db-pg-access-activity-a7b6b38455 · db-pg-access-activity-3cba83cb26 · db-pg-access-activity-463f0ca1de · db-pg-access-activity-fcba803edd · db-pg-access-activity-b51fa97fd0 · db-pg-access-activity-3c8b33d651 · db-pg-access-activity-4798d96f03 · db-pg-access-activity-511cbb267f · db-pg-access-activity-db5d149f27 · db-pg-access-activity-2799bfe0df
- 계약 사용 · agent_prompt_vars · DB.PromptVars: read FROM; DB.seedBuiltins: write DELETE/INSERT · db-pg-access-agent-prompt-vars-c7e87c2bdd · db-pg-access-agent-prompt-vars-af868cc140
- 계약 사용 · agent_prompts · DB.CurrentPrompt: read JOIN; DB.ListPromptVersions: read FROM; DB.SavePrompt: read/write FROM/INSERT · db-pg-access-agent-prompts-a685c1232c · db-pg-access-agent-prompts-8df6bbcbcf · db-pg-access-agent-prompts-8c714086b3
- 계약 사용 · agents · DB.CreateAgent: write INSERT; DB.CurrentPrompt: read FROM; DB.DeleteAgent: write DELETE; DB.GetAgentByKey: read FROM; DB.ListAgents: read FROM; DB.SavePrompt: write UPDATE; DB.SeedPromptIfEmpty: read FROM; DB.SetAgentInteractiveShell: write UPDATE; DB.SetAgentMaxTurns: write UPDATE; DB.SetAgentRunSeconds: write UPDATE; DB.SetAgentTaskTimeoutWrapup: write UPDATE; DB.SetAgentWebSearch: write UPDATE; DB.SetAgentWrapupMaxTurns: write UPDATE; DB.SetAgentWrapupPrompt: write UPDATE; DB.UpdateAgentMeta: write UPDATE; DB.seedBuiltins: write INSERT/UPDATE · db-pg-access-agents-2c284773a1 · db-pg-access-agents-c2bf78d332 · db-pg-access-agents-f9ae139553 · db-pg-access-agents-4b59fc5a5e · db-pg-access-agents-9fddeb0f2c · db-pg-access-agents-0a71e429d2 · db-pg-access-agents-77eea5cf6c · db-pg-access-agents-983020c62e · db-pg-access-agents-cc8b6daccc · db-pg-access-agents-e55b0b44a3 · db-pg-access-agents-219ad7a5cb · db-pg-access-agents-974caa7851 · db-pg-access-agents-a253d0b0c9 · db-pg-access-agents-16ef29d2ab · db-pg-access-agents-61e77a4c94 · db-pg-access-agents-3a3635b6f6
| 층 | 보존 범위 | 소실/왜곡 가능성 |
|---|---|---|
| PostgreSQL graph | task 수명과 archive 범위 | payload summary 자체가 모델 write |
| activity | tool/text/result/usage cursor | append 실패·보존/삭제 경계 |
| transcript files | 역할/session id별 raw conversation | archive/restore와 file 일관성 필요 |
| Planner TodoStore | server process의 task planner | process restart 시 DB graph보다 약함 |
| built-in compaction | session context window | summary가 원 turn을 완전히 대체하지 않음 |
| cold graph digest | settled graph branch 요약 | hot/cold 선정·model digest 품질 |
| experimental Noa | 별도 persistent archive/context | 설정에 따라 built-in path와 다름 |
| side-question memory | parent key별 PostgreSQL JSON | parent snapshot 이후 변화 |
Cold compactor는 planner round에서 graph의 live branch를 제외하고 안정된 cold group을 digest로 접는다. signature/content version/round stamp로 반복 압축을 제어한다. 이것은 storage node 삭제와 같은 의미가 아니며 원 graph와 digest의 사용 경계를 확인해야 한다. Compactor Noa
주 탐색 밖의 보조 루프
주 탐색 밖의 보조 루프 · 관계
이 대상을 사용하는 기능·모듈·계약 · 2개
- 구현 담당 · Reporter, retest, export · 기능 단계의 직접 상태/실행 구현 · feature-impl-14
- 구현 담당 · Side Question(/btw) · 기능 단계의 직접 상태/실행 구현 · feature-impl-17
- Reporter와 retest는 finding을 중심으로 별도 session을 열며 primary worker transcript를 그대로 이어가는 구조가 아니다.
- Scheduler는 interval trigger를 선택하고 agent run을 제출한다.
- Notifier는 DB delivery를 lease/retry/digest하며 model agent가 아니다.
- Enrichment는 DNS/HTTP 규칙 기반 worker pool이며 model reasoning을 쓰지 않는다. 이 snapshot에서는 engine 조립까지만 되고 실제
ResolveDomain/ProbeSite호출 경로가 연결되지 않았다. - Side-question은 parent context를 bounded snapshot으로 구성하는 별도 session이다.
이 loop들의 완료·재시도·보존은 저장·서비스 모듈과 운영에 연결한다.
Runtime 실패를 해석하는 기준
- provider failover가 성공해도 이전 profile이 어떤 tool call 직전/후 실패했는지 activity와 함께 본다.
- context compaction 성공은 security-relevant 세부가 보존됐다는 자동 증거가 아니다.
- permission bypass mode는 ARTEX host의 Guard/asset gate가 모두 적용됐다는 뜻이 아니다.
- resumed transcript와 persistent graph가 불일치하면 graph/DB를 업무 상태의 권위 원본으로 보고 transcript는 실행 맥락으로 해석한다.
- tool result가 truncation되면 model이 원 출력 전체를 보지 못할 수 있으므로 artifact/output file과 structured writeback을 확인한다.