전체 문서
이 페이지 목차
도구 catalog·조립·승인 모듈
도구 catalog·조립·승인 모듈 · 관계
이 대상이 사용하는 구현·계약·의존 · 20개
- 계약 사용 · activity · DB.ToolStats: read FROM/JOIN · db-pg-access-activity-72ffb7dbac
- 계약 사용 · agent_skill_visibility · DB.AgentBindingCounts: read FROM; DB.AgentSkillNames: read FROM; DB.DeleteSkillVisibility: write DELETE; DB.SetAgentSkillVisibility: write DELETE/INSERT; DB.SkillAgents: read FROM; DB.ToggleSkillVisibility: write DELETE/INSERT; DB.seedBuiltinSkillVisibility: write INSERT · db-pg-access-agent-skill-visibility-fcdfad0799 · db-pg-access-agent-skill-visibility-e620ecb222 · db-pg-access-agent-skill-visibility-21ca693b0e · db-pg-access-agent-skill-visibility-6e53f992b0 · db-pg-access-agent-skill-visibility-a06c6fc981 · db-pg-access-agent-skill-visibility-c22cf0e580 · db-pg-access-agent-skill-visibility-5e4f7d22b0
- 계약 사용 · agent_visibility · DB.AgentBindingCounts: read FROM; DB.AgentVisible: read FROM; DB.DeleteMCP: write DELETE; DB.ResourceAgents: read FROM; DB.SetAgentVisibilityKind: write DELETE/INSERT; DB.ToggleVisibility: write DELETE/INSERT · db-pg-access-agent-visibility-c6d44c1faf · db-pg-access-agent-visibility-e262281a79 · db-pg-access-agent-visibility-5804b15194 · db-pg-access-agent-visibility-96acd3b356 · db-pg-access-agent-visibility-183ce54e27 · db-pg-access-agent-visibility-3ff56d1a8f
- 계약 사용 · agents · DB.seedBuiltinSkillVisibility: read FROM · db-pg-access-agents-dd10946574
- 계약 사용 · mcp_servers · DB.DeleteMCP: write DELETE; DB.ListMCP: read FROM; DB.SaveMCP: write INSERT/UPDATE; DB.seedBuiltins: write INSERT · db-pg-access-mcp-servers-f15e8cec3a · db-pg-access-mcp-servers-84800c4c4d · db-pg-access-mcp-servers-61e6c5ce4a · db-pg-access-mcp-servers-35214faf02
- 계약 사용 · mcp_tools_cache · DB.MCPToolNames: read FROM; DB.MCPToolsDetailed: read FROM; DB.SaveMCPTools: write DELETE/INSERT · db-pg-access-mcp-tools-cache-2aa10feb7d · db-pg-access-mcp-tools-cache-4c7e318619 · db-pg-access-mcp-tools-cache-9879c7473c
- 계약 사용 · skill_usage · DB.InsertSkillUsage: write INSERT; DB.MissingSkillStats: read FROM; DB.RecentSkillCalls: read FROM; DB.SkillCallsByTask: read FROM; DB.SkillStats: read FROM · db-pg-access-skill-usage-1fd6c292b8 · db-pg-access-skill-usage-9afe4d9466 · db-pg-access-skill-usage-4ad66db7ad · db-pg-access-skill-usage-d96e8cc76f · db-pg-access-skill-usage-cceb80949c
- 계약 사용 · tool_usage · DB.InsertToolUsage: write INSERT; DB.ToolUsageCounts: read FROM · db-pg-access-tool-usage-a5f65b1eef · db-pg-access-tool-usage-f1f6e995a1
- 계약 사용 · tools · DB.AgentBindingCounts: read FROM; DB.AddAgentToToolBinding: write UPDATE; DB.CreateCustomTool: write INSERT; DB.DeleteCustomTool: write DELETE; DB.GetTool: read FROM; DB.ListCustomTools: read FROM; DB.ListTools: read FROM; DB.RefreshToolDefaults: write UPDATE; DB.RemoveAgentFromTool: write UPDATE; DB.RemoveAgentFromToolBindings: write UPDATE; DB.SeedTool: write INSERT; DB.UpdateCustomTool: write UPDATE; DB.UpdateTool: write UPDATE; DB.UpsertToolForce: write INSERT · db-pg-access-tools-07d82f89d6 · db-pg-access-tools-838d1b0c28 · db-pg-access-tools-d2bad554a2 · db-pg-access-tools-7aaef9c286 · db-pg-access-tools-91bb934a0c · db-pg-access-tools-d23945e7cb · db-pg-access-tools-de24823dd2 · db-pg-access-tools-fc94031a33 · db-pg-access-tools-599432dfc9 · db-pg-access-tools-67c2c85faa · db-pg-access-tools-8272961e1a · db-pg-access-tools-51e3843ba7 · db-pg-access-tools-7922588986 · db-pg-access-tools-2cbf2d4e27
- 계약 사용 · 도구 이름·노출 조건 전수표 · assembly/policy consumes fixed-name, role-binding and dynamic-tool contract · tool-catalog · assembly-server · host-tools-orchestration
- 의존 / 설정 · 런타임 설정 전수표 · settings/env gates determine session capability exposure · assembly-server · norma-runtime-env
- 의존 / 실행 · 역할별 조립 순서 · role-aware tool assembly · catalog-edge-37
- 의존 / 실행 · Capability 종류와 실행 경계 · capability execution kinds · catalog-edge-38
- 의존 / 실행 · Grep metadata와 bootstrap 효과 · Grep metadata/effect mismatch · catalog-edge-39
- 의존 / 실행 · Deferred schema와 Skill unlock · deferred discovery/unlock · catalog-edge-40
- 의존 / 실행 · DB catalog가 적용하는 값 · persisted catalog merge · catalog-edge-41
- 의존 / 실행 · Tool intercept·승인·실행 trace · tool approval/trace boundary · catalog-edge-42
- 의존 / 실행 · Optional LLM judge · optional model judge · catalog-edge-43
- 의존 / 실행 · 기록면 · tool usage/trace recording · catalog-edge-44
- 의존 / 실행 · 실패·불일치 조건 · tool policy failure modes · catalog-edge-45
이 모듈은 역할별 base capability, DB catalog, Skill/MCP visibility, runtime gate, intercept를 한 호출 경로로 연결한다. 이름이 source에 존재함, session prompt에 schema가 보임, 호출 gate를 통과함, 실행이 성공함, 결과가 증거로 남음은 서로 다른 상태다. 고정 이름과 역할별 기본값은 도구 전수표가 소유한다.
역할별 조립 순서
역할별 조립 순서 · 관계
이 대상이 사용하는 구현·계약·의존 · 1개
- 계약 사용 · tools · tool assembly가 persisted catalog를 소비 · core-edge-9
이 대상을 사용하는 기능·모듈·계약 · 1개
- 의존 / 실행 · 도구 catalog·조립·승인 모듈 · role-aware tool assembly · catalog-edge-37
Mermaid 원문
flowchart TD Role[agent key + task context] --> Base[domain 후보 + Norma base] Role --> Visibility[(agent MCP / Skill visibility)] Visibility --> Skills[visible Skill registry] Visibility --> DirectMCP[direct-visible enabled MCP] Skills --> GatedMCP[Skill metadata가 gate한 MCP] Host[orchestration · platform · retest · traffic · custom] --> Merge[base + extra merge] Base --> Merge DirectMCP --> Merge GatedMCP --> Merge Skills --> Merge Merge --> Catalog[(tools rows)] Catalog --> Resolve[enabled + binding + schema/default resolve] Resolve --> Runtime[coverage · capture · search · shell 조건] Runtime --> Deferred[deferred schema + unlock set] Deferred --> Guard[permission hook + ARTEX interceptor] Guard --> Execute[Go handler · process · HTTP · MCP] Execute --> Observe[activity · tool_usage · intercept trace] click Catalog "../contracts/db/agent-runtime.md#table-tools" "tools table" click Deferred "#deferred" "deferred와 Skill gate" click Guard "#intercept" "승인 경로"
- Mainagent/planner/worker/goals가 code-defined domain 후보를 만들고, 해당 run이 Norma base/optional tool을 선택한다.
- Server가 agent row와 visibility를 읽어 visible Skill을 registry 하나로 합치고 enabled MCP에 연결한다.
- Traffic capture 상태에 맞는 traffic handler, 고정 host handler, callable custom tool을 모든 agent 후보에 합친다.
ToolResolve가toolsrow가 있는 domain/host/custom 이름을 enabled와 agent binding으로 거르고 description/schema/default를 적용한다. DB 조회가 실패하면 code 후보를 그대로 돌려준다.- DB에 binding됐지만 base에 없던 domain handler는 server registry에서 주입한다. Task-less agent가 task 전용 handler를 얻어도 필요한 exploration context가 없으면 호출 때 실패한다.
- Interactive shell과
Bashenvironment hint를 합성하고 finding workflow guidance, deferred name/unlock set, panic guard를 붙인다. - Norma session이
WebFetch,TodoWrite, background, web search, deferred helper를 option에 따라 더한 뒤 hook을 거쳐 실행한다. server assembly agent assembly
Seed는 새 row의 기본값과 제한된 one-shot migration을 정할 뿐이다. 이미 편집한 binding/enabled를 매 부팅 code default로 되돌리지 않으므로 실제 DB와 fresh-DB 기본표가 다를 수 있다.
Capability 종류와 실행 경계
Capability 종류와 실행 경계 · 관계
이 대상을 사용하는 기능·모듈·계약 · 1개
- 의존 / 실행 · 도구 catalog·조립·승인 모듈 · capability execution kinds · catalog-edge-38
| 종류 | 실행 위치 | 주요 효과 | 성립 조건·한계 |
|---|---|---|---|
| ARTEX domain | Go process + PostgreSQL/file store | graph, asset, scope, fact, finding, task state read/write | handler context와 DB binding이 모두 필요; transaction 밖 side effect는 함께 rollback되지 않음 |
| ARTEX host | Server/Manager process | cross-task 제어, platform 설정, retest, traffic read | 일부는 capture 또는 conversation context가 필수 |
| Norma file/shell | agent workdir의 host filesystem/process | file edit, command, long-running/background process | workdir 경계와 child/remote side effect를 별도 확인 |
Norma Grep |
agent workdir + optional npm global prefix | content search; PATH에 rg가 없으면 첫 호출이 global package 설치를 시도할 수 있음 |
read-only metadata와 실제 bootstrap 효과가 다름; 상세 |
WebFetch/web_search |
SDK HTTP/search provider | 외부 요청과 search quota 소비 | recording proxy와 search proxy 경로가 다를 수 있음 |
custom shell |
callable 아님 | 설치된 CLI hint를 Bash 설명에 추가 |
enabled + role binding만 반영 |
custom command |
Norma Bash handler |
DB template 기반 host command | rendered command, workdir/env/timeout/output 제한을 검토 |
custom script |
configured Python process | DB code 실행, JSON parameter를 stdin으로 전달 | python_interpreter와 code/timeout/output 제한을 검토 |
custom http |
ARTEX HTTP client | rendered external request | non-empty schema 필수; redirect, response cap, target policy 확인 |
| MCP | stdio child 또는 remote HTTP/SSE server | server가 선언한 tool effect | ARTEX 밖의 실행·log·rollback은 MCP server 계약 |
| Skill | local SKILL.md를 읽는 Skill meta-tool |
model 지침 주입, metadata로 연결한 MCP unlock | 지침은 deterministic authorization이 아님 |
Callable 고정 ARTEX 이름 51개와 Norma 이름 24개, custom kind의 상세 목록은 도구 전수표를 본다. custom tool execution
Grep metadata와 bootstrap 효과
Grep metadata와 bootstrap 효과 · 관계
이 대상이 사용하는 구현·계약·의존 · 1개
- 계약 사용 · Grep의 최초 ripgrep 설치 효과 · permission metadata is evaluated against the resolver hidden first-call effect · norma-runtime-env
이 대상을 사용하는 기능·모듈·계약 · 1개
- 의존 / 실행 · 도구 catalog·조립·승인 모듈 · Grep metadata/effect mismatch · catalog-edge-39
Norma permission engine은 Grep의 ReadOnly=true와 allowReadOnly를 보고 self-allow할 수 있고 harness는 concurrent-safe로 schedule할 수 있다. 최초 resolver는 내부에서 npm install -g @vscode/ripgrep를 직접 실행하므로 이 child command는 Bash tool, ARTEX intercept, tool usage, traffic recorder의 독립 호출로 보이지 않는다. sync.Once가 동시 최초 호출의 resolution 자체는 직렬화하지만 network/global-prefix mutation을 read-only로 바꾸지는 않는다.
Default는 auto-install 허용이다. NORMA_RIPGREP_NO_INSTALL이 non-empty이면 기존 rg는 쓰되 설치하지 않고, NORMA_DISABLE_RIPGREP이 non-empty이면 기존 rg까지 건너뛰어 pure-Go 구현을 쓴다. npm 부재, 권한·network·registry·binary resolution 실패는 조용히 pure-Go로 fallback하므로 검색 성공만으로 global install이 없었다고 판단할 수 없다. 설정 값 운영 경계
Deferred schema와 Skill unlock
Deferred schema와 Skill unlock · 관계
이 대상이 사용하는 구현·계약·의존 · 1개
- 계약 사용 · tools · deferred unlock이 tool catalog schema를 소비 · core-edge-10
이 대상을 사용하는 기능·모듈·계약 · 1개
- 의존 / 실행 · 도구 catalog·조립·승인 모듈 · deferred discovery/unlock · catalog-edge-40
직접 visible이고 visible Skill metadata에 연결되지 않은 MCP tool은 session 시작부터 global deferred로 unlock된다. Visible Skill의 mcps가 지정한 server tool은 direct visibility와 관계없이 locked 상태로 시작하고 그 Skill을 호출해야 열린다. Resume은 transcript의 이전 Skill call을 replay해 unlock set을 복구한다. Custom command/script/http의 deferred 값은 Skill과 연결되지 않은 global deferred이므로 시작부터 호출 gate가 열려 있고 schema만 숨긴다. deferred assembly
Deferred는 prompt/schema 크기와 직접 호출 surface를 줄인다. Agent binding, target scope authorization, intercept, 원격 server의 자체 권한을 대신하지 않는다. SearchExtraTools/ExecuteExtraTool은 deferred 이름이 있을 때만 SDK가 추가한다.
DB catalog가 적용하는 값
DB catalog가 적용하는 값 · 관계
이 대상을 사용하는 기능·모듈·계약 · 1개
- 의존 / 실행 · 도구 catalog·조립·승인 모듈 · persisted catalog merge · catalog-edge-41
| row/value | 적용 | 적용되지 않는 것 |
|---|---|---|
enabled, agents |
domain·seeded host·custom 후보의 다음 assembly 노출 | 이미 조립된 session을 원자적으로 회수하지 않음 |
description, schema |
model-facing 계약 교체 | Go/MCP handler 의미를 교체하지 않음 |
schema property default |
model이 빠뜨린 scalar input의 호출 전 보정 | handler가 지원하지 않는 field를 구현하지 않음 |
deferred |
callable custom schema의 초기 노출 경로 | 실행 권한이나 Skill gate로 바꾸지 않음 |
custom kind, exec, timeout/output |
custom handler 선택과 side effect | shell kind를 callable로 만들지 않음 |
SDK generic tool, Skill meta-tool, MCP tool은 통상 대응 tools row가 없어 ToolResolve를 그대로 통과한다. Traffic/orchestration/platform/retest tool은 startup에서 system row를 seed하므로 catalog filter가 적용된다. 이름 충돌과 stale row를 포함한 최종 판단은 row와 현재 handler registry를 함께 봐야 한다. catalog wiring
Tool intercept·승인·실행 trace
Tool intercept·승인·실행 trace · 관계
이 대상이 사용하는 구현·계약·의존 · 9개
- 계약 사용 · activity · DB.GetInterceptExecution: read FROM · db-pg-access-activity-d1733afaac
- 계약 사용 · asset_intercept_rules · DB.CreateAssetInterceptRule: write INSERT; DB.DeleteAssetInterceptRule: write DELETE; DB.ListAssetInterceptRules: read FROM; DB.ToggleAssetInterceptRule: write UPDATE; DB.UpdateAssetInterceptRule: write UPDATE; DB.seedDefaultAssetInterceptRules: write INSERT · db-pg-access-asset-intercept-rules-268b1fbdb1 · db-pg-access-asset-intercept-rules-445d96292d · db-pg-access-asset-intercept-rules-8e1f052eac · db-pg-access-asset-intercept-rules-de1d0d5f6d · db-pg-access-asset-intercept-rules-47862794d6 · db-pg-access-asset-intercept-rules-d1098f8cc5
- 계약 사용 · conversation_activities · DB.GetInterceptExecution: read FROM · db-pg-access-conversation-activities-92d657b267
- 계약 사용 · conversations · DB.ListAllIntercepts: read JOIN; DB.ListTaskIntercepts: read JOIN; DB.GetInterceptDetail: read JOIN · db-pg-access-conversations-b25362de8d · db-pg-access-conversations-1a92e109bd · db-pg-access-conversations-6abd6be28f
- 계약 사용 · intercept_pending · DB.CreateDecidedIntercept: write INSERT; DB.CreateInterceptPending: write INSERT; DB.DecideInterceptPending: write UPDATE; DB.GetInterceptPending: read FROM; DB.ListAllIntercepts: read FROM; DB.ListPendingIntercepts: read FROM; DB.ListTaskIntercepts: read FROM; DB.listInterceptsPage: read FROM; DB.CompleteIntercept: write UPDATE; DB.GetInterceptDetail: read FROM; DB.ResolveIntercept: write UPDATE · db-pg-access-intercept-pending-bc8634fbe9 · db-pg-access-intercept-pending-5c1782648d · db-pg-access-intercept-pending-081cfd8d26 · db-pg-access-intercept-pending-0d5fe02916 · db-pg-access-intercept-pending-5320363648 · db-pg-access-intercept-pending-601e88ff73 · db-pg-access-intercept-pending-b596c420be · db-pg-access-intercept-pending-1e9d6804d6 · db-pg-access-intercept-pending-ea60f9dc96 · db-pg-access-intercept-pending-34a458a45b · db-pg-access-intercept-pending-d03eb247c8
- 계약 사용 · intercept_rules · DB.seedDefaultInterceptRules: write INSERT; DB.seedDefaultInterceptRulesV2: write INSERT; DB.seedDefaultInterceptRulesV3: read/write FROM/INSERT; DB.CreateInterceptRule: write INSERT; DB.DeleteInterceptRule: write DELETE; DB.ListAllIntercepts: read JOIN; DB.ListInterceptRules: read FROM; DB.ListTaskIntercepts: read JOIN; DB.ToggleInterceptRule: write UPDATE; DB.UpdateInterceptRule: write UPDATE; DB.GetInterceptDetail: read JOIN · db-pg-access-intercept-rules-e8c17cb440 · db-pg-access-intercept-rules-0df7705bea · db-pg-access-intercept-rules-f298b1fcb4 · db-pg-access-intercept-rules-a79fbc6429 · db-pg-access-intercept-rules-accf9f668f · db-pg-access-intercept-rules-c7987f8723 · db-pg-access-intercept-rules-4d227a0c05 · db-pg-access-intercept-rules-b7dff7dc43 · db-pg-access-intercept-rules-e0526c89b1 · db-pg-access-intercept-rules-4a0a98fe63 · db-pg-access-intercept-rules-b4f161c3ec
- 계약 사용 · task_intercept_rules · AssetStore.CreateTaskInterceptRule: write INSERT; AssetStore.DeleteTaskInterceptRule: write DELETE; AssetStore.ListTaskInterceptRules: read FROM; AssetStore.ToggleTaskInterceptRule: write UPDATE; AssetStore.UpdateTaskInterceptRule: write UPDATE; insertTaskInterceptRules: write INSERT · db-pg-access-task-intercept-rules-05a2133849 · db-pg-access-task-intercept-rules-70760af03b · db-pg-access-task-intercept-rules-ea22772e81 · db-pg-access-task-intercept-rules-26009d3fc6 · db-pg-access-task-intercept-rules-e10d568bcc · db-pg-access-task-intercept-rules-5289e2be79
- 계약 사용 · tasks · DB.GetInterceptExecution: read FROM · db-pg-access-tasks-823cf1ab14
- 계약 사용 · Tool intercept와 승인 · 기능/모듈이 적용하는 보안·신뢰 규칙 · rule-edge-3
이 대상을 사용하는 기능·모듈·계약 · 1개
- 의존 / 실행 · 도구 catalog·조립·승인 모듈 · tool approval/trace boundary · catalog-edge-42
ARTEX Guard는 Norma hook event의 tool name/input과 task/session review context를 Interceptor에 넘긴다. Enabled-tool set에 없는 이름은 이 정책면에서 그대로 진행된다. 대상 이름이면 ordered rule, optional LLM judge, user decision에 따라 allow, deny, ask를 결정하고, 승인된 호출만 handler로 간다. Exact settings와 기본값은 runtime settings에 있다. Guard Interceptor
Mermaid 원문
stateDiagram-v2 [*] --> target_check target_check --> executing: intercept 대상 아님 target_check --> evaluate: 대상 이름 evaluate --> executing: allow rule 또는 default allow evaluate --> denied: deny rule evaluate --> pending: ask rule evaluate --> judge: rule miss + judge enabled judge --> executing: allow verdict 또는 fail action=allow judge --> denied: deny verdict 또는 deny timeout judge --> pending: ask verdict pending --> executing: 사용자 approve pending --> denied: reject · cancel · expiry executing --> completed executing --> failed
Trace는 tool-use id, input digest, rule/model/user decision, execution result를 연결한다. Concurrent candidate가 모호하면 임의 실행 result를 승인 row에 붙이지 않는다. Approval history가 있다는 사실만으로 MCP나 child process의 후속 side effect가 완료됐다고 볼 수 없다. execution trace
Optional LLM judge
Optional LLM judge · 관계
이 대상을 사용하는 기능·모듈·계약 · 1개
- 의존 / 실행 · 도구 catalog·조립·승인 모듈 · optional model judge · catalog-edge-43
Judge는 rule miss 때만 고정 JSON verdict protocol로 별도 provider/profile을 호출한다. 기본값은 disabled이고 timeout 15초, failure action allow, ask timeout 300초, ask-timeout action deny다. Provider 오류, timeout, unparsable response는 configured failure action으로 간다. 그래서 high-impact command는 model judge의 가용성에 기대기보다 deterministic rule로 먼저 막아야 한다. judge implementation
기록면
기록면 · 관계
이 대상을 사용하는 기능·모듈·계약 · 1개
- 의존 / 실행 · 도구 catalog·조립·승인 모듈 · tool usage/trace recording · catalog-edge-44
| 기록면 | 포함 | 빠질 수 있는 것 |
|---|---|---|
| activity | tool use/result, text, usage, worker/session metadata | process 밖에서 이어지는 side effect |
| intercept trace/history | 판정 input digest, rule/model/user decision, execution correlation | enabled-tool set 밖 capability |
tool_usage |
tool key, agent/task/session usage | insert 실패, 원격 MCP 내부 세부 호출 |
| LLM records/usage | model request/response/usage | ensure table 실패, provider 내부 retry |
| traffic store | recording proxy를 통과한 HTTP | direct DNS/raw socket, MCP server-side request, tunnel/pass 경로 |
실패·불일치 조건
실패·불일치 조건 · 관계
이 대상을 사용하는 기능·모듈·계약 · 1개
- 의존 / 실행 · 도구 catalog·조립·승인 모듈 · tool policy failure modes · catalog-edge-45
- Catalog 조회 실패는 fail-closed가 아니라 code 후보 pass-through다.
- Enabled/bound row만 있고 현재 assembly에 handler가 없으면 도구는 생기지 않는다.
- Capture off면 traffic row가 enabled/bound여도 세 traffic handler가 없다.
- Interactive shell은
toolsbinding이 아니라 agent flag와 process env gate를 따른다. Grep는 read-only/self-allow로 보고되지만 기본 첫 호출이 network와 npm global prefix를 변경할 수 있다.- Custom/MCP schema와 설명이 실제 side effect를 완전히 서술한다는 보장은 없다.
- Cancellation은 remote server나 이미 시작된 process의 rollback 계약이 아니다.
- Shipped
scopesentrySkill metadata와db.go주석은 현재 서로 맞지 않아 ScopeSentry MCP를 자동 gate하지 않는다. source 불일치