agentlas 0.9.10 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +319 -341
  3. package/bin/agentlas.cjs +32 -9
  4. package/engine/agentlas-banner.cjs +24 -3
  5. package/engine/agentlas-composer.cjs +239 -31
  6. package/engine/agentlas-config.cjs +103 -7
  7. package/engine/agentlas-core-harness.cjs +48 -4
  8. package/engine/agentlas-evolution.cjs +3 -4
  9. package/engine/agentlas-i18n.cjs +88 -32
  10. package/engine/agentlas-input.cjs +234 -18
  11. package/engine/agentlas-memory-governance.cjs +3 -5
  12. package/engine/agentlas-memory-import.cjs +3 -3
  13. package/engine/agentlas-native-host.cjs +200 -9
  14. package/engine/agentlas-onboard.cjs +112 -20
  15. package/engine/agentlas-permissions.cjs +14 -7
  16. package/engine/agentlas-sqlite-policy.cjs +34 -0
  17. package/engine/agentlas-ui.cjs +93 -42
  18. package/engine/agentlas-workforce.cjs +472 -58
  19. package/engine/agentlas-workload-routing.cjs +8 -3
  20. package/engine/agentlas.cjs +140 -12367
  21. package/engine/agents/files.cjs +61 -0
  22. package/engine/agents/import-local.cjs +237 -0
  23. package/engine/agents/registry.cjs +158 -0
  24. package/engine/agents/router.cjs +565 -0
  25. package/engine/agents/routes.cjs +43 -0
  26. package/engine/architecture.data.json +2 -2
  27. package/engine/automation/daemon.cjs +335 -0
  28. package/engine/automation/schedule.cjs +181 -0
  29. package/engine/automation/store.cjs +209 -0
  30. package/engine/cloud/auth.cjs +279 -0
  31. package/engine/cloud/hub-client.cjs +239 -0
  32. package/engine/cloud-assets/cargo.cjs +49 -0
  33. package/engine/cloud-assets/cas.cjs +235 -0
  34. package/engine/cloud-assets/commands.cjs +273 -0
  35. package/engine/cloud-assets/package.cjs +936 -0
  36. package/engine/cloud-assets/restore.cjs +172 -0
  37. package/engine/cloud-assets/state.cjs +268 -0
  38. package/engine/commands/automation.cjs +195 -0
  39. package/engine/commands/billing.cjs +96 -0
  40. package/engine/commands/browser.cjs +20 -0
  41. package/engine/commands/build.cjs +33 -0
  42. package/engine/commands/call.cjs +24 -0
  43. package/engine/commands/career-graph.cjs +51 -0
  44. package/engine/commands/cd.cjs +22 -0
  45. package/engine/commands/chat.cjs +12 -0
  46. package/engine/commands/chats.cjs +28 -0
  47. package/engine/commands/cloud.cjs +17 -0
  48. package/engine/commands/connect.cjs +20 -0
  49. package/engine/commands/context.cjs +66 -0
  50. package/engine/commands/creds.cjs +203 -0
  51. package/engine/commands/doctor.cjs +68 -0
  52. package/engine/commands/env.cjs +33 -0
  53. package/engine/commands/evolve.cjs +23 -0
  54. package/engine/commands/experience.cjs +34 -0
  55. package/engine/commands/film.cjs +8 -0
  56. package/engine/commands/firm.cjs +115 -0
  57. package/engine/commands/help.cjs +65 -0
  58. package/engine/commands/hep.cjs +23 -0
  59. package/engine/commands/import.cjs +35 -0
  60. package/engine/commands/index.cjs +136 -0
  61. package/engine/commands/install.cjs +27 -0
  62. package/engine/commands/journal.cjs +31 -0
  63. package/engine/commands/legacy-network.cjs +29 -0
  64. package/engine/commands/list.cjs +49 -0
  65. package/engine/commands/login.cjs +68 -0
  66. package/engine/commands/logout.cjs +28 -0
  67. package/engine/commands/mcp.cjs +91 -0
  68. package/engine/commands/memory.cjs +21 -0
  69. package/engine/commands/multimodal.cjs +91 -0
  70. package/engine/commands/native.cjs +34 -0
  71. package/engine/commands/netadmin.cjs +31 -0
  72. package/engine/commands/oberon.cjs +70 -0
  73. package/engine/commands/ontology.cjs +24 -0
  74. package/engine/commands/open.cjs +48 -0
  75. package/engine/commands/plugin.cjs +101 -0
  76. package/engine/commands/project.cjs +47 -0
  77. package/engine/commands/research.cjs +36 -0
  78. package/engine/commands/route.cjs +37 -0
  79. package/engine/commands/run.cjs +149 -0
  80. package/engine/commands/search.cjs +55 -0
  81. package/engine/commands/setup.cjs +45 -0
  82. package/engine/commands/storm.cjs +75 -0
  83. package/engine/commands/swarm.cjs +75 -0
  84. package/engine/commands/telegram.cjs +32 -0
  85. package/engine/commands/uninstall.cjs +68 -0
  86. package/engine/commands/update.cjs +54 -0
  87. package/engine/commands/upload.cjs +18 -0
  88. package/engine/commands/usage.cjs +35 -0
  89. package/engine/commands/variant.cjs +25 -0
  90. package/engine/commands/version.cjs +9 -0
  91. package/engine/commands/whoami.cjs +38 -0
  92. package/engine/commands/workforce.cjs +103 -0
  93. package/engine/core/db.cjs +160 -0
  94. package/engine/core/paths.cjs +35 -0
  95. package/engine/experience/build.cjs +181 -0
  96. package/engine/experience/intents.cjs +492 -0
  97. package/engine/experience/runtime.cjs +242 -0
  98. package/engine/experience/variant.cjs +196 -0
  99. package/engine/firms/orchestrate.cjs +333 -0
  100. package/engine/hephaestus/runtime.cjs +697 -0
  101. package/engine/hub/install.cjs +872 -0
  102. package/engine/hub/plugins.cjs +213 -0
  103. package/engine/mcp/consent.cjs +289 -0
  104. package/engine/mcp/contract.cjs +202 -0
  105. package/engine/mcp/index.cjs +43 -0
  106. package/engine/mcp/inventory.cjs +322 -0
  107. package/engine/mcp/plan.cjs +286 -0
  108. package/engine/mcp/probe.cjs +151 -0
  109. package/engine/memory-cli/curate.cjs +163 -0
  110. package/engine/oberon/common.cjs +69 -0
  111. package/engine/oberon/manifest.cjs +164 -0
  112. package/engine/oberon/outputs.cjs +70 -0
  113. package/engine/oberon/render.cjs +164 -0
  114. package/engine/project/career-graph.cjs +249 -0
  115. package/engine/project/credentials.cjs +262 -0
  116. package/engine/project/env-file.cjs +46 -0
  117. package/engine/project/index.cjs +27 -0
  118. package/engine/project/memory-context.cjs +453 -0
  119. package/engine/project/ontology.cjs +467 -0
  120. package/engine/project/paths.cjs +39 -0
  121. package/engine/project/seed.cjs +200 -0
  122. package/engine/project/state.cjs +403 -0
  123. package/engine/project/super-ontology-seed.json +3288 -0
  124. package/engine/runtimes/detect.cjs +54 -0
  125. package/engine/runtimes/overrides.cjs +139 -0
  126. package/engine/runtimes/resolve.cjs +64 -0
  127. package/engine/sessions/apply-fences.cjs +188 -0
  128. package/engine/sessions/fences.cjs +362 -0
  129. package/engine/sessions/orchestrator.cjs +170 -0
  130. package/engine/sessions/prompt.cjs +212 -0
  131. package/engine/sessions/session.cjs +245 -0
  132. package/engine/sessions/sink.cjs +54 -0
  133. package/engine/sessions/store.cjs +79 -0
  134. package/engine/storm/deps.cjs +88 -0
  135. package/engine/storm/storm.cjs +218 -0
  136. package/engine/storm/swarm.cjs +422 -0
  137. package/engine/ui/palette.cjs +105 -0
  138. package/engine/ui/renderer.cjs +85 -0
  139. package/engine/ui/repl.cjs +444 -0
  140. package/engine/workforce/capture.cjs +701 -0
  141. package/engine/workforce/deps.cjs +472 -0
  142. package/package.json +2 -6
  143. package/engine/agentlas-experience-mcp.cjs +0 -1709
  144. package/engine/agentlas-parity.cjs +0 -1499
  145. package/engine/agentlas-repl.cjs +0 -1780
package/README.md CHANGED
@@ -9,372 +9,187 @@
9
9
  ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝
10
10
  ```
11
11
 
12
- **The operating system for agents in your terminal.** Chat with your AI
13
- agents and teams, build new ones, and run the full Agentlas OS surface
14
- (`build` · `search` · `install` · `storm` · `network` · …) from one command.
15
- Claude Code style, standalone: **no desktop app required.**
16
-
17
- Agentlas Terminal is the already-shipped independent terminal product. It is
18
- not a Desktop `cli/` mirror and does not require the Desktop app to run.
19
-
20
- > **Current source release candidate (2026-07-26):** `v0.9.10`. A source commit
21
- > does not prove npm publication. Verify the independently published package
22
- > before installation with `npm view agentlas version`.
23
-
24
- Release tags are published to npm through the repository's OIDC trusted
25
- publisher workflow. The workflow accepts only an exact immutable `vX.Y.Z` tag,
26
- runs the Core/project-bootstrap contracts and smoke suite, and verifies the
27
- registry result after publishing. No long-lived npm publish token is stored in
28
- GitHub.
29
-
30
- Release history and the source-versus-registry boundary are recorded in
31
- [CHANGELOG.md](CHANGELOG.md). A published version must always come from its
32
- exact tag: post-tag `main` changes are the next version and must never be
33
- republished under an older version number.
12
+ **Agentlas 터미널 CLI**`npm install -g agentlas` 하나로 깔리고 `agentlas`
13
+ 하나로 도는 독립 에이전트 터미널. 설치된 AI 에이전트·팀과 대화하고, 새로 만들고,
14
+ 멀티세션으로 굴린다. 데스크탑 앱이 없어도 동작하며, 앱이 깔려 있으면 같은
15
+ SQLite(userData)를 공유해 에이전트·대화·자동화가 양쪽에서 그대로 보인다.
16
+ 모델은 당신 것을 쓴다 — Claude Code / Codex / Gemini CLI 구독 또는 BYOK API 키.
34
17
 
35
18
  > **We are Agent Trust. Your agent is not a program. It is an asset. — Agentlas —**
36
19
 
37
- Agent Trust means owner-scoped, portable, inspectable, and restorable agent
38
- packages. It is a product principle, not a claim of regulated financial or
39
- legal trust services. Private Agent Cloud stores owned packages; this existing
40
- Terminal verifies and runs their local execution copies through supported
41
- runtimes.
42
-
43
- ```sh
44
- npm install -g agentlas
45
- agentlas
46
- ```
47
-
48
- Type a task and it auto-routes to the right agent. Your model, your choice:
49
- Claude Code / Codex / Gemini CLI subscriptions or BYOK API keys.
50
-
51
- For team, builder, and swarm decomposition, the parent LLM first receives this
52
- host's privacy-safe **live runtime inventory** and chooses an exact
53
- `runtimeId`, `exactModelId`, and reasoning effort for every child and final
54
- synthesis. When both Claude Code and Codex are connected, workers can run in
55
- parallel across both; a plugin host only exposes the runtimes available in that
56
- host. Terminal validates that each exact selection is still live, honors
57
- explicit `/model <id>` and `/effort <level>` pins, and records visible fallback
58
- reasons if a selected runtime/model disappears. It never derives a new model
59
- name from task keywords or a fixed role table. Decision receipts contain a task
60
- hash, not the raw prompt, in the private Agentlas user-data directory.
61
- Operators can set `AGENTLAS_MODEL_MAX_TIER=economy|balanced|frontier` as a hard
62
- cost ceiling.
20
+ Agent Trust 에이전트 패키지를 소유자 범위·이식 가능·검사 가능·복원 가능하게
21
+ 다룬다는 **제품 원칙**이다. 금융·법률상 신탁(trust) 서비스를 뜻하지 않는다.
22
+ Agent Cloud는 소유한 패키지를 보관하고, 터미널은 로컬 실행 사본을 지원
23
+ 런타임으로 검증·실행한다.
63
24
 
64
25
  ---
65
26
 
66
- **Agentlas 터미널 CLI** — Claude Code(`claude`), Codex(`codex`)처럼
67
- `npm install` 하나로 깔리고, `agentlas` 하나로 도는 독립 에이전트 터미널.
68
- **데스크탑 앱이 없어도 동작한다.**
27
+ ## 요구사항
69
28
 
70
- - 엔진(대화형 REPL·에이전트 라우팅·팀 실행·클라우드 설치·자격증명 관리)이
71
- 패키지에 통째로 번들되어 있다.
72
- - 실행 앱과 동일한 SQLite 스키마를 직접 부트스트랩하고 빌트인
73
- 에이전트(오케스트레이터·PM 소울·메모리 큐레이터 ) 시드한다.
74
- - 데스크탑 앱이 설치돼 있으면 같은 데이터(에이전트·채팅·키체인)를 자동
75
- 공유한다 — 앱에서 설치한 에이전트가 터미널에 바로 보인다.
29
+ | 항목 | 내용 |
30
+ | --- | --- |
31
+ | Node | **22+ 권장.** `package.json`의 `engines`는 `>=20`이지만, 런처는 optional 네이티브 의존성 `better-sqlite3` 빌드가 실패하면 Node 22+의 `node:sqlite`로만 폴백한다 (`bin/agentlas.cjs`). **Node 20은 better-sqlite3 네이티브 빌드가 성공할 때만** 동작한다. |
32
+ | 에이전트 CLI | 실행에는 `claude` · `codex` · `gemini` 중 최소 하나가 PATH에 필요하다. 하나도 없으면 `no_runtime`으로 정직하게 멈춘다(가짜 응답 폴백 없음). |
33
+ | OS | macOS / Linux 검증. Windows는 런처·설치 스크립트가 있으나 미검증. |
34
+
35
+ `kimi` · `grok` · `cursor-agent`는 **탐지만 되고 아직 구동되지 않는다**
36
+ (`engine/runtimes/resolve.cjs`의 `EXECUTABLE_KINDS = claude-code, codex, gemini`).
37
+ `doctor`가 이들을 "감지됨"으로 표시해도 `--runtime`으로 지정하면
38
+ `has no v2 streaming driver yet`으로 거절한다.
76
39
 
77
40
  ## 설치
78
41
 
79
42
  ```sh
80
43
  npm install -g agentlas
81
44
  # 또는 이 폴더에서: npm install -g .
82
- # 또는: sh install.sh # ~/.local/bin/agentlas 심링크 (sudo 불필요)
45
+ # 또는: sh install.sh # ~/.local/bin/agentlas 심링크 (sudo 불필요)
46
+ # 또는: sh install.sh --prefix /usr/local/bin
83
47
  ```
84
48
 
85
49
  Windows(미검증): `powershell -ExecutionPolicy Bypass -File install.ps1`
86
50
 
87
- 요구사항: Node 20+ (better-sqlite3 빌드 실패 시 Node 22+의 `node:sqlite` 폴백).
88
- 에이전트 실행에는 claude / codex / gemini 중 하나의 CLI가 필요하다(BYOK API 키도 가능).
89
-
90
- ## 사용
51
+ ## 빠른 시작
91
52
 
92
53
  ```sh
93
- agentlas # 대화형 TUI (워드마크 → 할 일 입력 → 스트리밍 REPL)
94
- agentlas "할 일" # 자동 라우팅 후 1회 실행
54
+ agentlas
95
55
  ```
96
56
 
97
- **대화 & 실행**
98
- ```sh
99
- agentlas <agent> # 해당 에이전트와 대화 (예: agentlas seo)
100
- agentlas run [agent] "프롬프트" # 1회 실행 (agent 생략 시 자동 라우팅, prompt 없으면 stdin)
101
- agentlas firm <firm> "프롬프트" # 회사(팀) CEO에 위임
102
- agentlas chats [n] # 최근 대화 목록
103
- ```
57
+ **1. 실행 마법사** — TTY 첫 실행에서 3단계 온보딩이 뜬다: 언어 → 기본 런타임
58
+ (`auto` 또는 설치된 CLI) → 기본 권한(read/write/full). 결과는 `cli-prefs.json`에
59
+ 저장되고, 언제든 `agentlas setup`으로 다시 돌린다. 같은 실행에서 데이터 폴더가
60
+ 없으면 데스크탑과 동일한 스키마로 SQLite를 부트스트랩하고 빌트인 에이전트
61
+ (오케스트레이터·PM 소울·메모리 큐레이터 ) 시드한다.
104
62
 
105
- **에이전트 & 허브** (Agentlas OS 표면)
106
- ```sh
107
- agentlas search "할 일" # Hub에서 에이전트 발견 (hep-search)
108
- agentlas install <slug> # 공개 Hub 에이전트 설치 (hep-cloud)
109
- agentlas build "요청" # 에이전트/팀 빌드·수리·패키징 (hep-build)
110
- agentlas upload <경로> # 내 Agent Cloud에 비공개 저장 (hep-upload)
111
- agentlas upload <경로> --visibility marketplace
112
- # 호환 flag: Agentlas Hub 공개 발행
113
- agentlas connect # Telegram/플랫폼 연결 (hep-connect)
114
- agentlas import <폴더> # 로컬 에이전트/팀 임포트
115
- agentlas list # 설치된 에이전트/회사 + 활성 런타임
116
- ```
63
+ **2. 실제 작업 돌리기**
117
64
 
118
- **프로젝트 의존관계 지도**
119
65
  ```sh
120
- agentlas project status
121
- agentlas project init
122
- agentlas context refresh
123
- agentlas context refs resolveHubEntityKind
124
- agentlas context slice --task "entity kind 라우팅 수정" \
125
- --target src/package-kind.ts --render
126
- agentlas context impact --changed src/package-kind.ts
127
- agentlas context verify --changed src/package-kind.ts \
128
- --reviewed src/register/route.ts
66
+ agentlas "이 저장소의 테스트 실패 원인을 찾아줘" # 자동 라우팅 → 1회 실행
67
+ agentlas run -p "CHANGELOG 최근 3개 요약" # 최종 답만 stdout (파이프용)
68
+ git log --oneline -20 | agentlas run # 프롬프트 없으면 stdin을 읽는다
69
+ agentlas <agent> # 에이전트와 대화형 REPL
70
+ agentlas firm <firm> "요청" # 회사(팀) CEO에 위임
129
71
  ```
130
72
 
131
- `agentlas project init`으로 명시적으로 초기화한 프로젝트에서만 일반
132
- 실행, 팀, Stormbreaker, Workforce가 작업이 구체화된 같은 로컬 Context
133
- Slice를 자동으로 받는다. 읽기·쓰기·전체 권한만으로는 `.agentlas/`나
134
- `.gitignore`를 만들거나 수정하지 않는다. Hub/Cloud 검색에는 코드맵,
135
- 소스 경로, 프로젝트 파일 내용이 전송되지 않는다.
73
+ 자동 라우팅은 호스트 LLM 판정이 고른다. 어휘 점수는 후보 모집에만 쓰고 선택은
74
+ 하지 않는다. 판정 런타임이 없으면 기본 에이전트로 폴백하되 사실을 stderr에
75
+ 반드시 남긴다(조용한 오라우팅 금지).
136
76
 
137
- **Portable Experience Bundle과 Variant**
138
- ```sh
139
- agentlas experience list
140
- agentlas experience inspect <exact-release-id|bundle-id|upload-id>
141
- agentlas experience validate <bundle.agentlas-experience.json>
142
- agentlas experience save <bundle> --base-cloud-id <id> --base-package-hash sha256:<hash>
143
- agentlas experience publish <bundle> --visibility unlisted \
144
- --base-cloud-id <id> --base-package-hash sha256:<hash>
145
- agentlas experience status <bundle-id|upload-id>
146
- agentlas experience export <bundle-id|upload-id> [--out <file>] [--overwrite]
147
- agentlas experience unpublish <exact-release-id|bundle-id|upload-id> [--dry-run]
148
- # withdraw는 unpublish와 같은 exact receipt/revision 계약의 호환 별칭
149
- agentlas experience withdraw <exact-release-id|bundle-id|upload-id>
150
-
151
- # 로컬 0600 캐시만 만들고 Hub에는 보내지 않음
152
- agentlas experience save <bundle> --local-only
153
-
154
- # 이전 pack-only 로컬 의도 호환 명령
155
- agentlas experience legacy-list
156
- agentlas experience legacy-inspect <pack-id|release-id>
157
- agentlas experience legacy-publish .agentlas/experience-pack.json
158
- agentlas experience legacy-unpublish <pack-id|release-id>
159
-
160
- agentlas variant resolve --candidates variants.json --base-release <release-id>
161
- ```
77
+ **3. 대화 이어가기**
162
78
 
163
- `validate`는 256 items/3 MiB 한도, NFC canonical hash, 비밀값·PII·raw prompt/transcript·
164
- 로컬 경로·base package·MCP 실행 정의 유입을 모델 호출 없이 검사한다. `save`는 정확한
165
- Cloud base artifact를 서버에서 확인한 뒤 owner-private `draft-saved`로 저장한다.
166
- `publish`도 곧바로 공개하지 않고 `verification-requested`까지만 요청한다. evaluator가
167
- 검증한 새 release와 별도 Variant가 없으면 공개 활성·평판·자동대여 권위가 생기지 않는다.
168
- 모든 변경 요청은 기존 로그인 세션, Idempotency-Key, exact revision ETag를 사용하고,
169
- Terminal은 서버 영수증과 별도의 0600 로컬 상태만 보관한다. `--dry-run`은 로그인 확인,
170
- 네트워크, 로컬 저장을 모두 하지 않는다.
171
- `list`와 `inspect`는 현재 프로젝트에 저장된 Portable Bundle만 다시 검증해 보여주며,
172
- owner/account, 로컬 경로, raw content, prompt/transcript, credential은 출력하지 않는다.
173
- pack ID가 여러 release를 가리키면 최신 것을 임의 선택하지 않고 정확한 release/bundle/
174
- upload ID를 요구한다. `unpublish --dry-run`은 로컬에서 검증된 exact server receipt와
175
- revision이 있을 때만 조건부 삭제 계획을 보여주며 네트워크와 로컬 쓰기를 모두 0으로
176
- 유지한다. 실제 `unpublish`는 그 revision을 `If-Match`로 보내고 서버의 새 `withdrawn`
177
- 영수증을 검증한 뒤에만 로컬 상태를 전진시킨다.
178
- `export`는 서버가 돌려준 bundle hash/semantic content/영수증 owner를 다시 검증한 뒤
179
- 0600 파일로 원자적으로 저장한다. 기본은 기존 출력 파일을 덮어쓰지 않고 symlink는
180
- 항상 거절하며, 같은 일반 파일을 명시적으로 교체할 때만 `--overwrite`를 사용한다.
181
-
182
- 이전 pack-only 동작은 `legacy-list|legacy-inspect|legacy-publish|legacy-unpublish`로만
183
- 명시적으로 접근한다. full Portable Bundle을 `publish`하면 새 서버 교환 경로를 사용한다. Experience Bundle은
184
- base release를 참조할 뿐 base package를 복사하지 않는다.
185
-
186
- `variant resolve`도 로컬 호환성 미리보기다. 후보 JSON의 `score`나
187
- `compatibilityStatus: verified`는 사용자가 직접 쓸 수 있으므로 평판·결제·대여·실행
188
- 권위로 인정하지 않는다. 실제 자동대여에는 Agentlas Web이 발급·검증한 서버 resolution
189
- receipt가 별도로 필요하다.
190
-
191
- **빌드 전 MCP 계획**
192
79
  ```sh
193
- agentlas build "GitHub 이슈를 정리하는 에이전트" --mcp-plan-only
194
- agentlas build "GitHub 이슈를 정리하는 에이전트" --approve-mcp github
195
- agentlas build "오프라인 에이전트" --no-mcp
196
- agentlas build "Windows 셸 에이전트" \
197
- --experience-base-release <exact-release-id> \
198
- --experience-pack-release <exact-experience-release-id> \
199
- --experience-task-signature agentlas.task.v1/debugging \
200
- --experience-environment agentlas.env.v1/os/windows,agentlas.env.v1/arch/x64,agentlas.env.v1/runtime/terminal
201
- agentlas run <agent> "Windows 오류를 디버깅해줘" \
202
- --experience-base-release <exact-release-id> \
203
- --experience-pack-release <exact-experience-release-id> \
204
- --experience-task-signature agentlas.task.v1/debugging \
205
- --experience-environment agentlas.env.v1/os/windows,agentlas.env.v1/arch/x64,agentlas.env.v1/runtime/terminal
206
-
207
- # Desktop에서 사용자가 이미 승인해 현재 장착된 exact loadout만 명시적으로 사용
208
- agentlas run <agent> "Windows 오류를 디버깅해줘" --experience-desktop-loadout
80
+ agentlas chats # 최근 대화 목록 (데스크탑과 같은 DB)
81
+ agentlas chats 30
82
+ agentlas open <chat-id> # 챗의 에이전트로 REPL 재개
209
83
  ```
210
84
 
211
- 로컬에 호환 Experience가 저장되어 있다는 사실만으로는 장착으로 보지 않는다. 빌드와
212
- 실행은 사용자가 선택했거나 권위 있는 loadout이 넘긴 정확한 Experience release ID가
213
- 있을 때만 그 릴리스의 항목을 조회한다. 응답 유실이나 재시작도 다른 릴리스를 대신
214
- 붙이는 근거가 되지 않는다.
215
-
216
- Desktop 연동도 자동 장착이 아니다. `--experience-desktop-loadout`을 준 그 실행에서만
217
- Desktop이 canonical `terminal-bridge/ontology-loadout-v2.json`에 원자적으로 쓴 0600
218
- 로컬 권위 receipt를 읽는다. 임의 receipt 경로는 지원하지 않는다. Terminal은 로컬 DB의
219
- exact 설치 에이전트 ↔ Hub base release 결속, Desktop 설치 authority instance와 단조
220
- sequence를 다시 확인한다. 5분이 지난 receipt, 권한이 넓은 파일, symlink, 손상·변조된
221
- JSON, 다른 Desktop 설치에서 복사한 receipt, rollback된 sequence, 다른 설치 에이전트,
222
- 다른 base release는 모두 Experience 없는 안전 모드로 건너뛴다. 이 receipt는 Hub 서버
223
- 서명이 아니라 같은 로컬 Agentlas DB에 결속된 Desktop 권위 증명이다. 같은 OS 사용자
224
- 권한으로 DB와 canonical receipt를 함께 완전히 장악한 경우는 로컬 호스트 침해로 간주한다.
225
- 수동 exact 플래그가 receipt와 다르면 둘 중 하나를 추정하지 않고 Experience를 끈다.
226
- `--no-experience`가 항상 최우선이다.
227
-
228
- 설치 에이전트의 성공한 실행이 새 `procedure|decision|risk` Memory를 큐레이션하면,
229
- Terminal은 exact 에이전트/base release/현재 OS·arch·runtime에 묶인 Operational Experience
230
- 후보를 기존 로컬 exchange store에 `private + draft + candidate`로 저장한다. 실행 자체는
231
- 검증 통과로 간주하지 않으므로 후보는 자동 장착·promote·publish·Hub 전송되지 않는다.
232
- raw prompt/transcript, 로컬 경로, URL, 이메일·전화·고객 식별자, credential, base package
233
- 재료가 감지되면 내용은 복사하지 않고 reason code만 로컬 run ledger에 남긴다. 같은
234
- 실행/Memory/base/environment 재처리는 같은 후보를 재사용한다. 실패 실행과 큐레이션된
235
- 근거가 없는 성공 실행은 RunReceipt만 남기며 후보를 만들지 않는다. `preference`는
236
- Operational 후보에 섞지 않고 내용 없는 로컬 Taste observation으로만 분리한다.
237
-
238
- 빌드 전에는 Agentlas 시스템 전역 MCP 레지스트리의 메타데이터를 먼저 읽고, 관련
239
- MCP·키 필요 여부·키 존재 여부만 한 번에 보여 준다. 승인 뒤에만 정확한 시스템 전역
240
- DB 행을 다시 읽어 MCP initialize/tools-list 연결을 개별 검사한다. 성공한 행만 private
241
- structured allowlist로 native 빌더 경계에 전달되며, 자연어 prompt는 실행 권한이 아니다.
242
- 이 첫 출력은 추천일 뿐이다. 한 번의 명시 동의 전에는 어떤 MCP도 붙이지 않고,
243
- 네트워크 key probe나 설치도 수행하지 않는다.
244
- 성공한 Build 승인에는 서버 ID·transport·command·args·키 이름을 묶은 비밀 없는 지문만
245
- 로컬 영수증으로 남는다. 이후 일반 `full` 턴은 enabled 상태와 이 exact 지문이 모두 맞는
246
- 서버만 붙이며, 행이 바뀌거나 비활성화되면 자동으로 empty-MCP로 돌아간다. Playwright를
247
- 포함한 어떤 서버도 legacy 기본값으로 자동 주입하지 않는다.
248
- 명령·인자는 로컬 host config에만 있고 package/prompt/영수증에는 들어가지 않으며 URL·키
249
- 값은 전달하지 않는다. LLM provider는 자기 로그인 환경을 유지하지만 실제 MCP 자식은
250
- Agentlas 소유 wrapper를 거쳐 별도 HOME과 최소 실행 환경을 받는다. 이때 post-consent
251
- 레지스트리의 `env_keys_json`에 적힌 키 이름만 값이 전달되고, 나머지 process/global/project/
252
- agent 자격증명은 상속되지 않는다. wrapper 설정과 로그에는 키 값이 기록되지 않는다.
253
- HOME과 임시 폴더도 서버별 전용 디렉터리다. PATH/OS 실행 필수값 외의 proxy·TLS override·
254
- NODE_OPTIONS 같은 host-control 변수는 `env_keys_json`에 적혀 있어도 거절한다.
255
- 최대 3개 probe만 병렬 실행하고 전체 12초 deadline을 적용하므로 8개 서버가 순차로 64초를
256
- 소모하지 않는다. 한 probe의 timeout/실패는 그 서버에만 남는다. 비대화형 실행은 묻지 않고 기본적으로 아무 MCP도 승인하지 않아
257
- CI가 멈추지 않는다. 한 MCP가 없거나 키가 없어도 그 기능만 degraded가 되며 빌드는
258
- 나머지 연결 또는 empty-MCP 모드로 계속된다. `--require-mcp <catalog-id>`는 빌드 전체를 중단시키지 않고
259
- Variant 대여 판단에서 해당 Variant만 제외하는 계약을 만든다.
260
- 한 requirement에 승인된 alternatives가 있으면 primary 실패 뒤 같은 12초 deadline 안에서
261
- 그 그룹만 순차 fallback하며, 다른 requirement의 probe와 결과는 격리한다.
262
- 시스템 전역 레지스트리를 읽지 못한 경우도 `registry: unavailable`로 명확히 구분하고,
263
- 설치나 네트워크 폴백 없이 empty-MCP 모드로 계속한다.
264
- REPL의 `/build`도 top-level `agentlas build`와 같은 계획·한 번 동의·결과 경로를
265
- 사용하며, MCP 사전 계획을 건너뛰는 별도 builder 지름길은 없다.
266
- 로컬 promoted Experience도 같은 handler에서 사용자가 고른 exact Experience release,
267
- exact base release, 현재 프로젝트, task signature, environment constraint가 모두 맞을 때만
268
- 조회한다. 일반 `agentlas run`의 내부 loadout 경로 역시 설치된 Cloud package marker와
269
- 로컬의 서버 확인 baseResolution이 hash/slug/release까지 정확히 같고, 권위 있는 loadout이
270
- 정확한 Experience release ID를 넘긴 경우에만 후보가 된다. 현재 요청은 고정된 양언어
271
- 키워드 표로 분류하며 허용된 `agentlas.task.v1/<class>` ID가 그 장착 릴리스의 item에 있을
272
- 때만 조회한다. 환경도 현재 host가 만든 `agentlas.env.v1/os|arch|runtime/...` 태그와 정확히
273
- 맞아야 한다. opaque hash, `general`, legacy signature/constraint는 저장·교환은 가능하지만
274
- 활성하지 않고 stderr에 skip reason을 남긴다. 동의어·embedding 추정은 쓰지 않으며 CLI의
275
- 명시 task class는 자동 분류보다 우선한다.
276
- 분류표는 `engine/experience-taxonomy-v1.json`의 checksum
277
- `sha256:413833472e423352518f9591cd0e051c5bc0a7971e53ab3dc7b5aaf7d50c37ab`으로 고정한다.
278
- OS는 macos/windows/linux/ios/android/unknown, arch는 arm64/x64/unknown만 허용하고 runtime은
279
- 최소 2자다. 알 수 없는 OS/arch는 해당 item만 `unknown`/ineligible 처리하며 base agent는 유지한다.
280
- 합계 8개/800
281
- 추정 토큰을 넘지 않으며, prompt에는 `NO SERVER RENTAL-RESOLUTION RECEIPT`가 표시되어
282
- 로컬 사용자 증언을 서버 검증 평판처럼 오인하지 않게 한다.
283
-
284
- API/BYOK 경로의 항상 켜진 Memory emitter는 UTF-8 bytes/3 기준 150토큰 이하 core만
285
- 주입한다. 전체 Memory Events schema는 기억·메모리 작업에서만, 로컬 credential index
286
- 안내는 deploy/release/billing/auth/API/cloud 작업에서만 별도로 로드한다.
287
-
288
- **내 Agent Cloud 자산**
289
- ```sh
290
- agentlas cloud save <경로> # 소유자 전용 비공개 저장(공개 심사/라우팅 카드 없음)
291
- agentlas cloud publish <경로> # Agentlas Hub에 명시적으로 공개 발행
292
- agentlas cloud list # 로그인한 소유자의 비공개 패키지 조회
293
- agentlas cloud restore <slug> # 전체 hash 검증 후 이 컴퓨터에 exact snapshot 복원
294
- ```
85
+ ## 명령 목록
295
86
 
296
- 비공개 저장도 업로드 로컬에서 비밀값, 안전하지 않은 경로, 파일별 hash와
297
- 전체 package hash를 검사한다. 공개 Hub 발행에만 라우팅 카드와 공개 검토가 붙는다.
298
- `.agentlas/experience-relations.jsonl`과 `.previous`/hidden temp siblings는 로컬에서
299
- 재생성되는 Experience 관계 인덱스이므로 base Agent hash와 Cloud bundle에서 제외된다.
87
+ `agentlas help`가 정본이다. 아래는 같은 그룹 구성이다.
300
88
 
301
- `agentlas cloud install <slug>`은 기존 호환 명령이며 공개 Hub 설치다. 비공개
302
- Agent Cloud 소유자 복원은 반드시 `agentlas cloud restore <slug>`를 사용한다.
89
+ ### TALK & RUN
90
+ ```sh
91
+ agentlas <agent> # 에이전트와 대화 (= chat <agent>)
92
+ agentlas chat <agent>
93
+ agentlas run [agent] [prompt] # 1회 실행 (-p · --runtime · --permission · stdin)
94
+ agentlas firm <firm> [task] # 회사 CEO에 위임
95
+ agentlas chats [n] # 최근 대화
96
+ agentlas open <chat-id> # 대화 재개
97
+ agentlas cd <agent> # 그 에이전트 폴더 경로만 출력 (cd "$(agentlas cd x)")
98
+ ```
303
99
 
304
- **실행 엔진**
100
+ ### AGENTS & HUB
305
101
  ```sh
306
- agentlas storm "목표" # Agentlas 자체 Goal+UltraCode: 계획→런타임/모델/effort 배정→실행→검증 [--research]
307
- agentlas swarm "목표" # emergent 에이전트 스웜 [--parallel N]
308
- agentlas network "요청" # 상위 LLM이 Workforce Ontology에서 exact-release TF 선발·실행
309
- agentlas network "요청" --benchmark # child/synthesis/verifier 영수증 누락 시 실패
310
- agentlas legacy-network "요청" # 이전 hep-network 호환 경로(명시 실행만)
311
- agentlas call "a,b" "컨텍스트" # 지정 에이전트 호출 (hep-call)
312
- agentlas browser # 실제 브라우저 하드포인트 (hep-browser)
313
- agentlas route "요청" # 라우팅 미리보기 (실행 없음)
102
+ agentlas search "<필요한 일>" # Hub 에이전트 검색 (로그인 불필요)
103
+ agentlas install <slug> # Hub 에이전트 로컬 설치 (아래 설치 게이트 참고)
104
+ agentlas plugin add <slug> # Hub 플러그인(MCP 서버) 추가
105
+ agentlas plugin list # (= agentlas plugins)
106
+ agentlas build "<요청>" # 에이전트/팀 빌드·수리·패키징
107
+ agentlas upload <경로> # 기본은 owner-private Agent Cloud 저장
108
+ agentlas upload <경로> --visibility marketplace # 명시적 공개 Hub 발행
109
+ agentlas connect <sub> # Telegram 플랫폼 연결 (무인자는 usage, exit 0)
110
+ agentlas import <폴더> # 로컬 에이전트/팀 임포트
111
+ agentlas native prepare <agent> # 네이티브 CLI 문맥 파일 생성
112
+ agentlas list # 설치 에이전트/회사 + 활성 런타임
113
+ agentlas uninstall <agent> # 설치 에이전트 제거 (빌트인 거부)
114
+ agentlas experience <sub> # list|inspect|validate|save|publish|status|export|unpublish|withdraw
115
+ agentlas variant resolve # 로컬 variant 호환성 프리뷰 (권위 없음)
314
116
  ```
315
117
 
316
- `swarm`은 먼저 상위 LLM이 독립 작업과 의존성을 나누고, 이 호스트에서 실제 실행
317
- 가능한 런타임·모델·effort 목록을 보고 각 워커 및 최종 종합의 정확한
318
- `runtimeId + exactModelId + effort`를 고른다. Claude Code와 Codex가 둘 다 연결돼
319
- 있으면 둘로 병렬 분배한다. 플러그인 안에서는 그 플러그인을 호스트하는 CLI의 목록만
320
- 노출한다. 터미널 코드는 이 판단을 키워드 규칙이나 고정 모델명으로 대체하지 않고,
321
- 선택이 여전히 가능한지·capability·context·비용 상한·명시적 사용자 고정만 검증한다.
322
- 배정 JSON이 깨지거나 런타임/모델이 사라지면 현재 모델로 폴백하고 그 이유를 화면과
323
- 비공개 영수증에 남긴다.
324
-
325
- `network`는 새 Agent Workforce Ontology 경로다. 활성 상위 LLM이 먼저 redacted
326
- work order와 역할 슬롯을 만든 뒤 Hub MCP의 `workforce.search_candidates`를 직접
327
- 호출하고, 반환된 직무·skill·MCP/tool·eval 증거 안에서 정확한 release를 고른다.
328
- 호스트 코드는 팀을 고르지 않고 계약만 검사한다. 선택은
329
- `workforce.validate_selection`으로 검증하고, `workforce.prepare_execution`이 같은
330
- release/version/package hash/content digest에 고정한 directive bundle을 반환한 뒤에만
331
- manager plan → 별도 worker → synthesis → verifier 순서로 실행한다. 후보 밖 release,
332
- digest 불일치, 실행 불가, 대체 release, 잘못된 planner JSON은 기존 검색이나 로컬
333
- 에이전트로 폴백하지 않고 실패한다. `--benchmark`는 planner fallback 0건, 모든 child,
334
- synthesis, verifier 영수증과 verifier pass를 모두 요구한다. 이전 Hephaestus 분해기는
335
- `legacy-network`로만 명시 호출할 수 있다.
336
-
337
- 새 설치와 아직 network 설정을 건드리지 않은 설치에서는 일반적인 실작업형 요청도
338
- 이 Workforce 경로로 자동 진입한다. 사용자가 `/config network off`로 명시적으로 끈
339
- 값은 업그레이드 후에도 보존된다. 질문·잡담과 이미 특정 에이전트를 고른 대화에는
340
- 자동 TF를 붙이지 않는다.
341
-
342
- **지식 & 리서치**
118
+ ### EXECUTE
343
119
  ```sh
344
- agentlas research <sub> # Research Engine (status|gather|search|read|plan)
345
- agentlas ontology <sub> # 프로젝트 지식 (status|list|add)
346
- agentlas journal <sub> # Stormbreaker 저널 (status|verify|repair|gate)
120
+ agentlas storm "<목표>" # Goal+UltraCode 하네스: 계획 → 배정 → 실행 → 검증 [--research]
121
+ agentlas swarm "<목표>" # emergent 에이전트 스웜 [--parallel N]
122
+ agentlas workforce "<요청>" # Agent Workforce Ontology 라우트
123
+ agentlas network "<요청>" # workforce 별칭
124
+ agentlas taskforce "<요청>" # workforce 별칭
125
+ agentlas legacy-network "<요청>" # 이전 Hephaestus 분해기 (명시 호출 전용)
126
+ agentlas call "a,b" "<맥락>" # 이름을 정확히 지정한 Hub/Cloud 에이전트 호출
127
+ agentlas browser [...] # 실제 브라우저 하드포인트
128
+ agentlas route "<요청>" [--json] # 라우팅 미리보기 (실행 없음)
129
+ agentlas research <sub> # status|gather|search|read|plan
347
130
  ```
348
131
 
349
- **계정 & 운영**
132
+ ### KNOWLEDGE
350
133
  ```sh
351
- agentlas login | logout | whoami # Agentlas Cloud 로그인 (브라우저 플로우)
352
- agentlas automation <sub> # list|add|on|off|remove|run <id>|runs|daemon (로컬 스케줄러)
353
- agentlas creds <sub> · env # 자격증명 볼트 · env
354
- agentlas multimodal # 이미지/영상/음성 provider
355
- agentlas usage · telegram · mcp # 사용 현황 · 텔레그램 · MCP 서버
356
- agentlas doctor # 런타임/데이터 점검
357
- agentlas update # npm 최신판 확인
358
- agentlas setup # 온보딩 다시 실행
134
+ agentlas memory import <경로> --agent <id> [--apply]
135
+ agentlas evolve [list|apply <id>|revert <id>]
136
+ agentlas ontology <sub> # status|list|add
137
+ agentlas career-graph <sub> # 상태·소스 등록 + ingest|query|verify|trace|public-card 위임
138
+ agentlas journal <sub> # status|verify|repair|gate
139
+ agentlas project [status|init] # `.agentlas/` 를 만드는 유일한 진입점
140
+ agentlas context <sub> # refresh|locate|refs|slice|impact|verify
359
141
  ```
360
142
 
361
- **고급**
143
+ `agentlas project init`으로 **명시 초기화한 프로젝트에서만** 일반 실행·팀·
144
+ Stormbreaker·Workforce가 같은 로컬 Context Slice를 받는다. 읽기·쓰기·전체 권한만
145
+ 으로는 `.agentlas/`나 `.gitignore`를 만들거나 고치지 않는다. Hub/Cloud 검색에는
146
+ 코드맵·소스 경로·프로젝트 파일 내용이 전송되지 않는다.
147
+
148
+ ### ACCOUNT & OPS
362
149
  ```sh
363
- agentlas hep <sub…> # 전체 Hephaestus 패스스루 (wizard·security·cards·ao·plugins…)
364
- agentlas netadmin <sub> # 로컬 네트워크 관리 (init|status|reindex|bench)
365
- agentlas cloud <sub> # 자산 저장·공개·복원 (save|publish|package|list|restore|…)
150
+ agentlas login | logout | whoami # Agentlas Cloud 로그인 (loopback 브라우저 플로우)
151
+ agentlas billing # 크레딧 잔액
152
+ agentlas cloud <sub> # save|publish|package|list|restore|delete|search|install
153
+ # |security scan|runtime bundle|field-test (cloud help 참고)
154
+ agentlas automation <sub> # list|add|on|off|remove|run <id>|runs|daemon
155
+ agentlas creds save --provider <n> --key <ENV> --value <v>
156
+ agentlas creds file --source <경로> [--env <ENV>] # 값은 어떤 경로로도 출력하지 않음
157
+ agentlas env # 공유 env 키 이름만 열거 (값 없음)
158
+ agentlas usage # 로컬 사용 현황 (공급자 쿼터 대시보드는 데스크탑)
159
+ agentlas telegram # 바인딩 현황 (읽기 전용)
160
+ agentlas mcp # MCP 서버 목록
161
+ agentlas mcp probe <id> # initialize→tools/list 핸드셰이크만 확인
162
+ agentlas multimodal # 이미지/영상/음성 provider 설정
163
+ agentlas doctor # 런타임·데이터·세션 점검
164
+ agentlas setup # 첫 실행 마법사 재실행 (TTY 필요)
165
+ agentlas update # npm 최신판 확인 (자기 패키지만)
166
+ agentlas oberon <sub> # AI 필름 렌더: scaffold|render|list|open (= agentlas film)
167
+ agentlas hep <sub…> # Hephaestus 네이티브 전체 패스스루
168
+ agentlas netadmin <sub> # 로컬 네트워크 admin (init|status|reindex|bench|add-source)
169
+ agentlas version | help
366
170
  ```
367
171
 
368
- 공통 옵션: `--runtime claude-code|codex|gemini` · `--permission read|write|full`
369
- REPL 안에서는 `/`로 명령 팔레트 (`/build` `/search` `/storm` `/network` …).
172
+ 공통 옵션: `-p|--print` · `--runtime claude-code|codex|gemini` ·
173
+ `--permission read|write|full`
174
+
175
+ ### 오타 가드 / 데스크탑 표면 거절
370
176
 
371
- `storm`은 외부 CLI의 자동 실행 스위치를 켜는 명령이 아니다. Agentlas Core에서 서명된 동일한
372
- Goal/UltraCode 하네스를 읽고 SHA-256을 검증한 뒤, Terminal의 부모 플래너가 현재 연결된 런타임과
373
- 모델 목록을 보고 작업별 `runtimeId`·정확한 모델·effort를 확정한다. 독립 작업은 병렬 실행하고
374
- 증거 기반 최종 게이트에서 결과를 종합한다. Core 하네스를 읽거나 검증하지 못하면 로컬 문구로
375
- 대체하지 않고 모델 호출 전에 중단한다.
177
+ 공백 없는 **한 단어**를 넣었는데 명령도 에이전트도 아니면, 프롬프트로 흘려서
178
+ 모델을 부르지 않는다. 편집거리로 가장 가까운 명령을 최대 3개 제안하고 exit 1로
179
+ 멈춘다.
376
180
 
377
- 권한은 이름과 실제 런타임 실행 범위를 일치시킨다.
181
+ ```
182
+ $ agentlas lst
183
+ 'lst' 은(는) agentlas 명령이 아닙니다. 혹시: list
184
+ 명령 목록: agentlas help · 한 단어를 그대로 실행하려면: agentlas run -p "lst"
185
+ ```
186
+
187
+ 데스크탑 전용 표면 이름(`site` `trex` `prompts` `dashboard` `marketplace`
188
+ `library` `groups` `settings` `apps` `quests` `bookmarks` `one` …)도 같은 방식으로
189
+ 멈추고 터미널 대체 경로를 안내한다. 진짜 그 단어를 작업으로 돌리려면 따옴표로
190
+ 감싸거나 `run -p`를 쓴다.
191
+
192
+ ### 권한
378
193
 
379
194
  | Agentlas 권한 | Claude Code | Codex | Gemini CLI |
380
195
  | --- | --- | --- | --- |
@@ -382,46 +197,209 @@ Goal/UltraCode 하네스를 읽고 SHA-256을 검증한 뒤, Terminal의 부모
382
197
  | `write` | `acceptEdits` | `workspace-write` sandbox | `auto_edit` |
383
198
  | `full` | permission 검사 우회 | approval + sandbox 우회 | `yolo` |
384
199
 
385
- `write`는 무제한 권한의 다른 이름이 아니다. 외부 상태를 바꿀 수 있는 MCP 도구는
386
- `full`이면서 exact 동의 지문이 유효한 턴에만 주입한다. 입력창에서 `Shift-Tab`으로 권한을 순환할 수 있지만,
387
- `write full`은 5초 안에 연속 눌러야 하며 이 변경은 현재 세션에만 적용된다.
388
- 실행 중 `Ctrl-T`는 Claude Todo/Task, Codex `todo_list`, Gemini `write_todos`가 실제로
389
- 보낸 체크리스트만 열고 접는다. 일반 Bash/Read 실행을 계획 항목처럼 꾸며내지 않는다.
200
+ 저장된 `full`은 세션 한정이라 다음 실행에서 `write`로 fail-closed 강등된다.
201
+ REPL의 `!<셸명령>`은 작업 공간 경계를 강제할 없어 **`full`에서만** 실행되며,
202
+ 출력 8MB 캡·표시 시크릿 마스킹·프로세스 그룹 종료가 걸린다.
203
+
204
+ ## REPL & Orca 멀티세션
205
+
206
+ `agentlas`를 인자 없이 실행하면 REPL로 들어간다. 포그라운드 턴도 하나의 세션이고,
207
+ `/spawn`으로 만든 서브에이전트는 백그라운드 세션으로 병렬로 돈다. 화면은 활성
208
+ 세션 하나만 스트리밍하고, 백그라운드 턴 종료는 한 줄 알림으로 뜬다.
209
+
210
+ ### 슬래시 명령 (정본: `engine/ui/palette.cjs`)
211
+
212
+ | 명령 | 하는 일 |
213
+ | --- | --- |
214
+ | `/help` | 명령·단축키 |
215
+ | `/sessions` · `/tree` | 세션 표 / 부모-자식 트리 |
216
+ | `/s <n>` · `/switch <n>` | 활성 세션 전환 (tail 재생 + 라이브 구독) |
217
+ | `/spawn <agent> [task]` | 서브에이전트 세션 생성(+task 주면 즉시 실행) |
218
+ | `/steer <n> <msg>` | 그 세션의 다음 턴에 지시 큐잉 |
219
+ | `/kill <n>` | 실행 중 턴 중단 |
220
+ | `/rm <n>` | 세션 제거 |
221
+ | `/broadcast <msg>` | 모든 세션에 같은 지시 |
222
+ | `/use <agent>` | 메인 세션 에이전트 교체 |
223
+ | `/agents` · `/list` | 설치 에이전트 목록 |
224
+ | `/chats [n]` | 최근 대화 |
225
+ | `/mcp` | MCP 서버 목록 |
226
+ | `/doctor` | 런타임·데이터 점검 |
227
+ | `/runtime <kind>` | 새 세션 런타임 지정 (claude-code\|codex\|gemini) |
228
+ | `/permission <level>` | 새 세션 권한 지정 (read\|write\|full) |
229
+ | `/quit` · `/exit` | 종료 |
230
+
231
+ 목록에 없는 슬래시는 `unknown: /xxx (see /help)`로 멈춘다 — REPL 슬래시는
232
+ top-level 명령으로 흘러가지 않는다.
233
+
234
+ ### 키·입력
235
+
236
+ | 입력 | 동작 |
237
+ | --- | --- |
238
+ | 실행 중 타이핑 후 Enter | 그 세션의 **다음 턴 스티어링 큐**에 들어간다 (턴을 끊지 않음) |
239
+ | `ctrl-c` (실행 중) | 현재 턴만 중단 |
240
+ | `ctrl-c` (유휴) | 1회는 경고, **2회 연속이면 종료** |
241
+ | `Tab` | 슬래시 명령 · 에이전트/회사 슬러그 · **살아있는 세션 키(s1, s2…)** · `/runtime` `/permission` 값 완성 |
242
+ | `@경로` + `Tab` | 파일 경로 완성 |
243
+ | `↑` / `↓` | 입력 히스토리 |
244
+ | `!<셸명령>` | 셸 실행 — **`full` 권한에서만** |
245
+
246
+ 동시 실행 상한은 기본 4다. 초과 스폰은 대기가 아니라 정직한 거부이며
247
+ `AGENTLAS_MAX_PARALLEL`(최대 16)로 올린다.
390
248
 
391
249
  ## 동작 방식
392
250
 
393
- 런처(`bin/agentlas.cjs`)가 패키지의 `engine/`(정본)을 시스템 Node로 실행한다
394
- 데스크탑 앱과 완전히 독립이며, 앱이 설치돼 있으면 같은 userData(SQLite)를 써서
395
- 데이터만 자연스럽게 공유된다. `engine/ENGINE_META.json`에 최초 임포트 출처가 기록돼 있다.
251
+ ### 엔진 경계 터미널은 Agentlas OS를 재구현하지 않는다
252
+
253
+ 이건 자주 오해된다. 터미널은 **설치된 Agentlas OS(Hephaestus/Core) 런타임을 찾아
254
+ 그 런타임을 실행**한다. 자체 사본을 들고 있지 않다.
255
+
256
+ 탐색 순서 (`engine/agentlas-core-harness.cjs`, `engine/hephaestus/runtime.cjs`):
257
+
258
+ 1. `HEPHAESTUS_BIN` / `HEPHAESTUS_RUNTIME_ROOT`
259
+ 2. `~/.agentlas/runtime/current`
260
+ 3. 패키징된 Core (`<resources>/Hephaestus`, macOS는
261
+ `/Applications/Agentlas.app/Contents/Resources/Hephaestus`)
262
+
263
+ `storm` · `swarm` · `workforce`/`network` · `route` · `research` · `context` ·
264
+ `career-graph`(파생 인덱스) · `journal` · `netadmin` · `hep` · `build` · `call` ·
265
+ `browser` · `connect`은 이 런타임으로 넘어가는 **패스스루**다. 런타임이 없으면
266
+ 로컬 모조 실행이나 어휘 폴백을 만들지 않고 무엇이 없는지 말하고 exit 1 한다
267
+ (예: `storm`은 `stormbreaker-core-harness-unavailable`, `context`는 Core/Python
268
+ 부재를 보고). 이 정직 정지가 계약이다.
269
+
270
+ 터미널 자체가 소유한 것: REPL·세션 오케스트레이션·에이전트 레지스트리·Hub/Cloud
271
+ HTTP 표면·자격증명·MCP 프리플라이트·자동화 스케줄러·SQLite 스키마.
272
+
273
+ ### 공유 상태 — 데스크탑과 같은 DB
274
+
275
+ 런처(`bin/agentlas.cjs`)가 이 패키지의 `engine/`(정본)을 시스템 Node로 실행한다.
276
+ 데이터 폴더는 데스크탑 앱과 **동일한 userData**다 (`engine/core/paths.cjs`):
277
+
278
+ | OS | 경로 |
279
+ | --- | --- |
280
+ | macOS | `~/Library/Application Support/Agentlas` |
281
+ | Windows | `%APPDATA%\Agentlas` |
282
+ | Linux | `$XDG_CONFIG_HOME/Agentlas` (기본 `~/.config/Agentlas`) |
283
+
284
+ DB는 그 폴더의 `agentlas.sqlite`. 첫 실행 시 `engine/bootstrap-schema.sql`
285
+ (`user_version=45`)로 부트스트랩하며, 앱을 나중에 깔면 앱이 거기서부터
286
+ 마이그레이션한다. 결과적으로 **에이전트·챗·자동화·MCP 등록이 양쪽에서 같이
287
+ 보인다.** `/spawn`으로 만든 서브에이전트 세션은 데스크탑의 `division` 서브챗
288
+ (`kind='division'` + `parent_chat_id`)으로 그대로 남는다.
289
+
290
+ SQLite 드라이버 사다리: `better-sqlite3`(optionalDependency, 네이티브 빌드
291
+ 성공 시) → 실패하면 Node 22+ `node:sqlite`.
292
+
293
+ ### Hub는 빌려 쓰는 게 기본, 설치는 예외
294
+
295
+ `engine/hub/install.cjs`의 `assertHubInstallAllowed`가 로컬 설치를 게이트한다.
296
+ 막히는 경우:
297
+
298
+ - **cloud-callable / call-only 에이전트** — 로컬 설치 불가. 빌려 쓴다:
299
+ `agentlas call <slug>` (데스크탑에서는 북마크). 소유자는
300
+ `agentlas cloud restore <slug>`로 자기 패키지를 복원한다.
301
+ - **지시문 없는 패키지** — 안전한 로컬 설치에 필요한 instructions가 없으면 거절.
302
+ - **trustGrade가 A/B가 아님** — 사이드로드는 명시 승인이 필요하다며 차단.
303
+ - **web-only 에이전트** — 터미널에서 제공하지 않는다.
304
+ - **회수된 공개 리스팅** — 데스크탑 마켓플레이스와 같은 관측 결과
305
+ (`Hub agent not found`).
306
+
307
+ `upload`도 같은 방향이다: 기본은 owner-private Agent Cloud 저장이고, 공개 Hub
308
+ 발행은 `--visibility marketplace`를 명시할 때만 일어난다.
309
+
310
+ ## 데스크탑 전용 (터미널에서 약속하지 않는 것)
311
+
312
+ - Telegram 봇 발급·포트 관리 (터미널의 `telegram`은 **읽기 전용 바인딩 조회**)
313
+ - 에이전트 그룹(조합)
314
+ - 승인 인박스 / 브라우저 승인 시트
315
+ - MCP 커스텀 서버 추가·토글 (터미널은 목록 + `mcp probe`만)
316
+ - Site 스튜디오 · T-rex 슬라이드 스튜디오 · Prompt Store
317
+ - 모바일 페어링
318
+ - 퀘스트
319
+ - Hub 북마크
320
+ - 공급자 쿼터 대시보드, Marketplace/Library 브라우징, Agentlas One
321
+
322
+ ## 환경변수
323
+
324
+ | 변수 | 효과 |
325
+ | --- | --- |
326
+ | `AGENTLAS_USER_DATA_DIR` | 데이터 폴더 override (기본: 데스크탑과 같은 userData) |
327
+ | `AGENTLAS_LANG` | `ko` \| `en` — prefs와 `LANG`보다 우선 |
328
+ | `AGENTLAS_MAX_PARALLEL` | 동시 실행 세션 상한 (기본 4, 최대 16) |
329
+ | `AGENTLAS_SESSION` | Agentlas Cloud 세션 쿠키 값. 해석 순서는 env → 세션 파일이라, 설정돼 있으면 `logout` 후에도 로그인 상태로 보인다 |
330
+ | `AGENTLAS_WEB_BASE_URL` | 웹 베이스 (기본 `https://agentlas.cloud`) |
331
+ | `AGENTLAS_MCP_BASE_URL` | Hub MCP 베이스 (기본 `<web>/api/mcp/v1`) |
332
+ | `HEPHAESTUS_BIN` · `HEPHAESTUS_RUNTIME_ROOT` | Agentlas OS 런타임 위치 지정 (탐색 사다리 1순위) |
333
+ | `AGENTLAS_MODEL_MAX_TIER` | `economy`\|`balanced`\|`frontier` — **swarm 배정 한정** 비용 상한 |
334
+ | `NO_COLOR` | 비어 있지 않으면 컬러 출력 끔 (`FORCE_COLOR=1`로 강제 켜기, `AGENTLAS_NO_COLOR=1`도 끔) |
335
+
336
+ ## 문제 해결
396
337
 
397
- SQLite는 `better-sqlite3`(optionalDependency, npm이 네이티브 빌드) → 실패 시
398
- Node 22+ `node:sqlite` 폴백. 데이터 폴더는 앱과 동일한 userData
399
- (macOS `~/Library/Application Support/Agentlas`)이며 `AGENTLAS_USER_DATA_DIR`로
400
- 바꿀 수 있다.
338
+ ```sh
339
+ agentlas doctor # DB · PATH의 런타임 · 활성 런타임 · 클라우드 세션
340
+ agentlas --where # 런처/엔진/DB 해석 결과 + sqlite 드라이버 + Node 버전 JSON
341
+ ```
401
342
 
402
- ### 개발
343
+ - **`no_runtime: no agent CLI found`** — `claude` / `codex` / `gemini` 중 하나를
344
+ 설치하고 PATH에 올린다. `doctor`가 `kimi`/`grok`/`cursor-agent`를 감지했더라도
345
+ 구동 드라이버가 없어 실행 대상이 아니다.
346
+ - **`runtime '<kind>' has no v2 streaming driver yet`** — `--runtime`에 아직
347
+ 구동되지 않는 런타임을 지정했다. `claude-code` · `codex` · `gemini`만 된다.
348
+ - **`Node vX — Node 22+ (node:sqlite) is required when better-sqlite3 is
349
+ unavailable.`** — Node 20/21에서 `better-sqlite3` 네이티브 빌드가 실패했다.
350
+ Node 22+로 올리거나 빌드 도구를 갖추고 재설치한다. `--where`의 `sqliteDriver`가
351
+ 실제 사용 드라이버를 알려준다.
352
+ - **`storm`/`context`/`hep`가 런타임 없음으로 멈춤** — Agentlas OS 런타임이 없다.
353
+ 설치하거나 `HEPHAESTUS_BIN=<경로>`를 지정한다.
354
+ - **`'xxx' 은(는) agentlas 명령이 아닙니다`** — 오타 가드다. 작업으로 돌리려면
355
+ `agentlas run -p "xxx"`.
356
+ - **`logout` 했는데 로그인 상태** — `AGENTLAS_SESSION`이 설정돼 있다. env를 지운다.
357
+ - **`agentlas setup requires an interactive terminal`** — 비-TTY에서 마법사를 돌리면
358
+ 조용한 성공으로 위장되므로 거절한다.
359
+
360
+ ## 개발
403
361
 
404
362
  엔진 소스는 `engine/*.cjs` — 여기가 정본이므로 직접 수정한다.
405
- 첫 실행용 스키마가 데스크탑 DB 마이그레이션과 어긋나면 재생성:
406
363
 
407
364
  ```sh
408
- sh scripts/gen-bootstrap-schema.sh [db-path] # engine/bootstrap-schema.sql 재생성
365
+ sh test/smoke.sh # 기본 표면 + 무인자 가드 + 신선 환경 첫 실행
366
+ # + 계약 테스트 + Runtime Doctor 3제품 패리티 게이트
367
+ npm run smoke # 동일 (= npm run test:release-contracts)
368
+ sh scripts/gen-bootstrap-schema.sh [db-path] # engine/bootstrap-schema.sql 재생성
409
369
  ```
410
370
 
411
- ### 진단
412
-
413
- ```sh
414
- agentlas --where # 엔진/DB 해석 결과 JSON
415
- sh test/smoke.sh # where/version/list/doctor + 신선 환경 첫 실행
416
- ```
371
+ 스모크는 임시 `AGENTLAS_USER_DATA_DIR`에서 돌아 실제 데이터를 건드리지 않는다.
372
+ 런타임 진단·수리 규칙(`engine/agentlas-doctor.cjs`)을 고쳤다면 3제품 패리티
373
+ 게이트를 반드시 통과시켜라.
417
374
 
418
375
  ## 제거
419
376
 
420
377
  ```sh
421
- npm uninstall -g agentlas # npm 설치 시
422
- rm ~/.local/bin/agentlas # install.sh 설치 시
378
+ npm uninstall -g agentlas # npm 설치 시
379
+ rm ~/.local/bin/agentlas # install.sh 설치 시 (또는 지정한 --prefix)
423
380
  ```
424
381
 
382
+ 데이터는 userData 폴더에 남는다 (위 "공유 상태" 표 참고) — 데스크탑 앱과 공유하는
383
+ 폴더이므로 지우기 전에 확인한다. `agentlas uninstall <agent>`는 **설치 에이전트**를
384
+ 지우는 별개 명령이며 CLI 자체를 제거하지 않는다.
385
+
386
+ ## 릴리스 / npm 경계
387
+
388
+ published 버전은 `npm view agentlas version`이 알려주는 값이 정본이다. 이
389
+ 저장소의 소스 커밋이나 `package.json`의 버전은 GitHub 릴리스나 npm 발행을 증명하지
390
+ 않는다 — 설치 전에 레지스트리를 직접 확인하라.
391
+
392
+ 발행은 저장소의 OIDC trusted publisher 워크플로(`.github/workflows/npm-publish.yml`)
393
+ 하나로만 이뤄진다. 정확한 immutable `vX.Y.Z` 태그(또는 현재 main의 정확한 커밋
394
+ SHA + 명시 버전)만 받고, 태그↔패키지 identity 검증 → 릴리스 계약 + 스모크 →
395
+ `npm pack` 산출물 allowlist 검사(test/docs/fixtures/scripts 등 개발 전용 경로 차단)
396
+ → 발행 → 레지스트리 재확인 순으로 진행한다. 장기 npm publish 토큰은 GitHub에
397
+ 저장하지 않는다.
398
+
399
+ 릴리스 이력과 소스-대-레지스트리 경계는 [CHANGELOG.md](CHANGELOG.md)에 기록된다.
400
+ 발행된 버전은 언제나 그 정확한 태그에서 나와야 하고, 태그 이후의 `main` 변경은
401
+ 다음 버전이지 옛 번호로 재발행되지 않는다.
402
+
425
403
  ## License
426
404
 
427
405
  Apache-2.0 — Agentlas Terminal is the independent terminal runtime for the