luca 3.0.0 → 3.1.0

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 (388) hide show
  1. package/.github/workflows/release.yaml +1 -0
  2. package/CLAUDE.md +10 -2
  3. package/README.md +130 -112
  4. package/assistants/codingAssistant/CORE.md +6 -1
  5. package/assistants/codingAssistant/hooks.ts +1 -1
  6. package/assistants/inkbot/hooks.ts +1 -1
  7. package/assistants/inkbot/tools.ts +1 -1
  8. package/bun.lock +264 -321
  9. package/commands/audit-docs.ts +2 -2
  10. package/commands/build-bootstrap.ts +2 -3
  11. package/commands/build-python-bridge.ts +2 -3
  12. package/commands/build-scaffolds.ts +2 -3
  13. package/commands/bundle-consumer-project.ts +521 -0
  14. package/commands/generate-api-docs.ts +2 -2
  15. package/commands/inkbot.ts +2 -2
  16. package/commands/release.ts +2 -2
  17. package/commands/social.ts +137 -0
  18. package/commands/try-all-challenges.ts +3 -3
  19. package/commands/try-challenge.ts +3 -3
  20. package/datasets/lora/agentic-loop-session-candidates.jsonl +91 -0
  21. package/datasets/lora/agentic-loop-session-curation-summary.json +123 -0
  22. package/datasets/lora/luca-session-candidates.jsonl +29 -0
  23. package/datasets/lora/luca-session-curation-summary.json +121 -0
  24. package/datasets/lora/review-batch-1.jsonl +30 -0
  25. package/datasets/lora/review-manifest.json +41 -0
  26. package/datasets/lora/review-queue.jsonl +120 -0
  27. package/datasets/lora/review-schema.json +134 -0
  28. package/datasets/lora/review-template.jsonl +2 -0
  29. package/datasets/lora/review-ui.html +725 -0
  30. package/dist/agi/container.server.d.ts +2 -2
  31. package/dist/agi/features/assistant.d.ts +2 -2
  32. package/dist/agi/features/assistants-manager.d.ts +1 -1
  33. package/dist/agi/features/autonomous-assistant.d.ts +1 -1
  34. package/dist/agi/features/browser-use.d.ts +1 -1
  35. package/dist/agi/features/claude-code.d.ts +1 -1
  36. package/dist/agi/features/conversation-history.d.ts +2 -2
  37. package/dist/agi/features/conversation.d.ts +1 -1
  38. package/dist/agi/features/docs-reader.d.ts +1 -1
  39. package/dist/agi/features/file-tools.d.ts +1 -1
  40. package/dist/agi/features/luca-coder.d.ts +1 -1
  41. package/dist/agi/features/openai-codex.d.ts +1 -1
  42. package/dist/agi/features/skills-library.d.ts +1 -1
  43. package/dist/clients/civitai/index.d.ts +4 -4
  44. package/dist/clients/client-template.d.ts +4 -4
  45. package/dist/clients/comfyui/index.d.ts +2 -2
  46. package/dist/clients/elevenlabs/index.d.ts +2 -2
  47. package/dist/clients/openai/index.d.ts +2 -2
  48. package/dist/clients/supabase/index.d.ts +3 -3
  49. package/dist/command.d.ts +1 -1
  50. package/dist/node/container.d.ts +1 -1
  51. package/dist/node/features/helpers.d.ts +3 -3
  52. package/dist/node/features/semantic-search.d.ts +1 -1
  53. package/dist/node/features/vm.d.ts +3 -3
  54. package/dist/node.d.ts +1 -1
  55. package/dist/scaffolds/generated.d.ts +1 -1
  56. package/dist/selector.d.ts +1 -1
  57. package/features/cipher-social.ts +493 -0
  58. package/index.html +217 -190
  59. package/luca.console.ts +1 -1
  60. package/package.json +7 -2
  61. package/public/index.html +217 -190
  62. package/public/slides-ai-native.html +1 -1
  63. package/public/slides-intro.html +2 -2
  64. package/scripts/curate-claude-sessions.ts +561 -0
  65. package/scripts/examples/ask-luca-expert.ts +1 -1
  66. package/scripts/examples/assistant-questions.ts +1 -1
  67. package/scripts/examples/excalidraw-expert.ts +1 -1
  68. package/scripts/examples/file-manager.ts +1 -1
  69. package/scripts/examples/ideas.ts +1 -1
  70. package/scripts/examples/interactive-chat.ts +1 -1
  71. package/scripts/examples/opening-a-web-browser.ts +1 -1
  72. package/scripts/examples/telegram-bot.ts +1 -1
  73. package/scripts/examples/using-assistant-with-mcp.ts +1 -1
  74. package/scripts/examples/using-claude-code.ts +1 -1
  75. package/scripts/examples/using-contentdb.ts +2 -2
  76. package/scripts/examples/using-conversations.ts +1 -1
  77. package/scripts/examples/using-disk-cache.ts +1 -1
  78. package/scripts/examples/using-docker-shell.ts +1 -1
  79. package/scripts/examples/using-elevenlabs.ts +1 -1
  80. package/scripts/examples/using-google-calendar.ts +1 -1
  81. package/scripts/examples/using-google-docs.ts +1 -1
  82. package/scripts/examples/using-google-drive.ts +1 -1
  83. package/scripts/examples/using-google-sheets.ts +1 -1
  84. package/scripts/examples/using-nlp.ts +1 -1
  85. package/scripts/examples/using-ollama.ts +1 -1
  86. package/scripts/examples/using-postgres.ts +1 -1
  87. package/scripts/examples/using-runpod.ts +1 -1
  88. package/scripts/examples/using-tts.ts +1 -1
  89. package/scripts/scaffold.ts +5 -5
  90. package/scripts/scratch.ts +1 -1
  91. package/scripts/test-assistant-hooks.ts +1 -1
  92. package/scripts/test-docs-reader.ts +1 -1
  93. package/src/agi/container.server.ts +6 -2
  94. package/src/agi/features/agent-memory.ts +25 -25
  95. package/src/agi/features/assistant.ts +34 -5
  96. package/src/agi/features/assistants-manager.ts +122 -6
  97. package/src/agi/features/autonomous-assistant.ts +1 -1
  98. package/src/agi/features/browser-use.ts +20 -1
  99. package/src/agi/features/claude-code.ts +51 -5
  100. package/src/agi/features/coding-tools.ts +1 -1
  101. package/src/agi/features/conversation-history.ts +181 -4
  102. package/src/agi/features/conversation.ts +186 -15
  103. package/src/agi/features/docs-reader.ts +2 -2
  104. package/src/agi/features/file-tools.ts +49 -2
  105. package/src/agi/features/luca-coder.ts +7 -5
  106. package/src/agi/features/mcp-bridge.ts +532 -0
  107. package/src/agi/features/openai-codex.ts +2 -2
  108. package/src/agi/features/skills-library.ts +131 -52
  109. package/src/agi/lib/token-counter.ts +80 -0
  110. package/src/bootstrap/generated.ts +56 -57
  111. package/src/browser.ts +1 -1
  112. package/src/cli/build-info.ts +2 -2
  113. package/src/cli/cli.ts +2 -2
  114. package/src/clients/civitai/index.ts +5 -5
  115. package/src/clients/client-template.ts +4 -4
  116. package/src/clients/comfyui/index.ts +4 -4
  117. package/src/clients/elevenlabs/index.ts +4 -4
  118. package/src/clients/openai/index.ts +7 -7
  119. package/src/clients/supabase/index.ts +4 -4
  120. package/src/clients/voicebox/index.ts +4 -4
  121. package/src/command.ts +2 -1
  122. package/src/commands/chat.ts +1 -0
  123. package/src/commands/eval.ts +2 -56
  124. package/src/commands/introspect.ts +1 -1
  125. package/src/commands/prompt.ts +41 -9
  126. package/src/container-describer.ts +8 -1
  127. package/src/container.ts +13 -0
  128. package/src/entity.ts +2 -2
  129. package/src/helper.ts +1 -1
  130. package/src/introspection/generated.agi.ts +29596 -27654
  131. package/src/introspection/generated.node.ts +20284 -19247
  132. package/src/introspection/generated.web.ts +605 -584
  133. package/src/introspection/scan.ts +11 -6
  134. package/src/node/container.ts +9 -1
  135. package/src/node/features/content-db.ts +39 -2
  136. package/src/node/features/display-result.ts +57 -0
  137. package/src/node/features/helpers.ts +46 -7
  138. package/src/node/features/python.ts +25 -19
  139. package/src/node/features/repl.ts +1 -1
  140. package/src/node/features/secure-shell.ts +11 -17
  141. package/src/node/features/semantic-search.ts +2 -2
  142. package/src/node/features/socket-repl.ts +336 -0
  143. package/src/node/features/telnyx-assistant-connector.ts +1206 -0
  144. package/src/node/features/transpiler.ts +2 -3
  145. package/src/node/features/ui.ts +5 -0
  146. package/src/node/features/vm.ts +20 -3
  147. package/src/node.ts +3 -3
  148. package/src/python/generated.ts +0 -1
  149. package/src/scaffolds/generated.ts +82 -83
  150. package/src/selector.ts +1 -1
  151. package/src/servers/express.ts +1 -1
  152. package/src/web/features/helpers.ts +22 -0
  153. package/tsconfig.json +12 -12
  154. package/docs/CLI.md +0 -335
  155. package/docs/CNAME +0 -1
  156. package/docs/README.md +0 -60
  157. package/docs/TABLE-OF-CONTENTS.md +0 -183
  158. package/docs/apis/clients/elevenlabs.md +0 -308
  159. package/docs/apis/clients/graph.md +0 -107
  160. package/docs/apis/clients/openai.md +0 -429
  161. package/docs/apis/clients/rest.md +0 -161
  162. package/docs/apis/clients/websocket.md +0 -174
  163. package/docs/apis/features/agi/assistant.md +0 -625
  164. package/docs/apis/features/agi/assistants-manager.md +0 -282
  165. package/docs/apis/features/agi/auto-assistant.md +0 -279
  166. package/docs/apis/features/agi/browser-use.md +0 -802
  167. package/docs/apis/features/agi/claude-code.md +0 -884
  168. package/docs/apis/features/agi/conversation-history.md +0 -364
  169. package/docs/apis/features/agi/conversation.md +0 -548
  170. package/docs/apis/features/agi/docs-reader.md +0 -99
  171. package/docs/apis/features/agi/file-tools.md +0 -163
  172. package/docs/apis/features/agi/luca-coder.md +0 -407
  173. package/docs/apis/features/agi/openai-codex.md +0 -396
  174. package/docs/apis/features/agi/openapi.md +0 -138
  175. package/docs/apis/features/agi/semantic-search.md +0 -387
  176. package/docs/apis/features/agi/skills-library.md +0 -239
  177. package/docs/apis/features/node/container-link.md +0 -192
  178. package/docs/apis/features/node/content-db.md +0 -450
  179. package/docs/apis/features/node/disk-cache.md +0 -379
  180. package/docs/apis/features/node/dns.md +0 -652
  181. package/docs/apis/features/node/docker.md +0 -706
  182. package/docs/apis/features/node/downloader.md +0 -81
  183. package/docs/apis/features/node/esbuild.md +0 -60
  184. package/docs/apis/features/node/file-manager.md +0 -191
  185. package/docs/apis/features/node/fs.md +0 -1217
  186. package/docs/apis/features/node/git.md +0 -371
  187. package/docs/apis/features/node/google-auth.md +0 -193
  188. package/docs/apis/features/node/google-calendar.md +0 -202
  189. package/docs/apis/features/node/google-docs.md +0 -173
  190. package/docs/apis/features/node/google-drive.md +0 -246
  191. package/docs/apis/features/node/google-mail.md +0 -214
  192. package/docs/apis/features/node/google-sheets.md +0 -194
  193. package/docs/apis/features/node/grep.md +0 -292
  194. package/docs/apis/features/node/helpers.md +0 -164
  195. package/docs/apis/features/node/ink.md +0 -334
  196. package/docs/apis/features/node/ipc-socket.md +0 -249
  197. package/docs/apis/features/node/json-tree.md +0 -86
  198. package/docs/apis/features/node/networking.md +0 -316
  199. package/docs/apis/features/node/nlp.md +0 -133
  200. package/docs/apis/features/node/opener.md +0 -97
  201. package/docs/apis/features/node/os.md +0 -146
  202. package/docs/apis/features/node/package-finder.md +0 -392
  203. package/docs/apis/features/node/postgres.md +0 -234
  204. package/docs/apis/features/node/proc.md +0 -399
  205. package/docs/apis/features/node/process-manager.md +0 -305
  206. package/docs/apis/features/node/python.md +0 -604
  207. package/docs/apis/features/node/redis.md +0 -380
  208. package/docs/apis/features/node/repl.md +0 -88
  209. package/docs/apis/features/node/runpod.md +0 -674
  210. package/docs/apis/features/node/secure-shell.md +0 -176
  211. package/docs/apis/features/node/semantic-search.md +0 -408
  212. package/docs/apis/features/node/sqlite.md +0 -233
  213. package/docs/apis/features/node/telegram.md +0 -279
  214. package/docs/apis/features/node/transpiler.md +0 -74
  215. package/docs/apis/features/node/tts.md +0 -133
  216. package/docs/apis/features/node/ui.md +0 -701
  217. package/docs/apis/features/node/vault.md +0 -59
  218. package/docs/apis/features/node/vm.md +0 -75
  219. package/docs/apis/features/node/yaml-tree.md +0 -85
  220. package/docs/apis/features/node/yaml.md +0 -176
  221. package/docs/apis/features/web/asset-loader.md +0 -59
  222. package/docs/apis/features/web/container-link.md +0 -192
  223. package/docs/apis/features/web/esbuild.md +0 -54
  224. package/docs/apis/features/web/helpers.md +0 -164
  225. package/docs/apis/features/web/network.md +0 -44
  226. package/docs/apis/features/web/speech.md +0 -69
  227. package/docs/apis/features/web/vault.md +0 -59
  228. package/docs/apis/features/web/vm.md +0 -75
  229. package/docs/apis/features/web/voice.md +0 -84
  230. package/docs/apis/servers/express.md +0 -171
  231. package/docs/apis/servers/mcp.md +0 -238
  232. package/docs/apis/servers/websocket.md +0 -170
  233. package/docs/bootstrap/CLAUDE.md +0 -101
  234. package/docs/bootstrap/SKILL.md +0 -341
  235. package/docs/bootstrap/templates/about-command.ts +0 -41
  236. package/docs/bootstrap/templates/docs-models.ts +0 -22
  237. package/docs/bootstrap/templates/docs-readme.md +0 -43
  238. package/docs/bootstrap/templates/example-feature.ts +0 -53
  239. package/docs/bootstrap/templates/health-endpoint.ts +0 -15
  240. package/docs/bootstrap/templates/luca-cli.ts +0 -30
  241. package/docs/bootstrap/templates/runme.md +0 -54
  242. package/docs/challenges/caching-proxy.md +0 -16
  243. package/docs/challenges/content-db-round-trip.md +0 -14
  244. package/docs/challenges/custom-command.md +0 -9
  245. package/docs/challenges/file-watcher-pipeline.md +0 -11
  246. package/docs/challenges/grep-audit-report.md +0 -15
  247. package/docs/challenges/multi-feature-dashboard.md +0 -14
  248. package/docs/challenges/process-orchestrator.md +0 -17
  249. package/docs/challenges/rest-api-server-with-client.md +0 -12
  250. package/docs/challenges/script-runner-with-vm.md +0 -11
  251. package/docs/challenges/simple-rest-api.md +0 -15
  252. package/docs/challenges/websocket-serve-and-client.md +0 -11
  253. package/docs/challenges/yaml-config-system.md +0 -14
  254. package/docs/command-system-overhaul.md +0 -94
  255. package/docs/documentation-audit.md +0 -134
  256. package/docs/examples/assistant/CORE.md +0 -18
  257. package/docs/examples/assistant/hooks.ts +0 -3
  258. package/docs/examples/assistant/tools.ts +0 -10
  259. package/docs/examples/assistant-hooks-reference.ts +0 -171
  260. package/docs/examples/assistant-with-process-manager.md +0 -84
  261. package/docs/examples/content-db.md +0 -77
  262. package/docs/examples/disk-cache.md +0 -83
  263. package/docs/examples/docker.md +0 -101
  264. package/docs/examples/downloader.md +0 -70
  265. package/docs/examples/entity.md +0 -124
  266. package/docs/examples/esbuild.md +0 -80
  267. package/docs/examples/feature-as-tool-provider.md +0 -143
  268. package/docs/examples/file-manager.md +0 -82
  269. package/docs/examples/fs.md +0 -83
  270. package/docs/examples/git.md +0 -85
  271. package/docs/examples/google-auth.md +0 -88
  272. package/docs/examples/google-calendar.md +0 -94
  273. package/docs/examples/google-docs.md +0 -82
  274. package/docs/examples/google-drive.md +0 -96
  275. package/docs/examples/google-sheets.md +0 -95
  276. package/docs/examples/grep.md +0 -85
  277. package/docs/examples/ink-blocks.md +0 -75
  278. package/docs/examples/ink-renderer.md +0 -41
  279. package/docs/examples/ink.md +0 -103
  280. package/docs/examples/ipc-socket.md +0 -103
  281. package/docs/examples/json-tree.md +0 -91
  282. package/docs/examples/networking.md +0 -58
  283. package/docs/examples/nlp.md +0 -91
  284. package/docs/examples/opener.md +0 -78
  285. package/docs/examples/os.md +0 -72
  286. package/docs/examples/package-finder.md +0 -89
  287. package/docs/examples/postgres.md +0 -91
  288. package/docs/examples/proc.md +0 -81
  289. package/docs/examples/process-manager.md +0 -79
  290. package/docs/examples/python.md +0 -132
  291. package/docs/examples/repl.md +0 -93
  292. package/docs/examples/runpod.md +0 -119
  293. package/docs/examples/secure-shell.md +0 -92
  294. package/docs/examples/sqlite.md +0 -86
  295. package/docs/examples/structured-output-with-assistants.md +0 -144
  296. package/docs/examples/telegram.md +0 -77
  297. package/docs/examples/tts.md +0 -86
  298. package/docs/examples/ui.md +0 -80
  299. package/docs/examples/vault.md +0 -70
  300. package/docs/examples/vm.md +0 -86
  301. package/docs/examples/websocket-ask-and-reply-example.md +0 -128
  302. package/docs/examples/yaml-tree.md +0 -93
  303. package/docs/examples/yaml.md +0 -104
  304. package/docs/ideas/assistant-factory-pattern.md +0 -142
  305. package/docs/in-memory-fs.md +0 -4
  306. package/docs/introspection-audit.md +0 -49
  307. package/docs/introspection.md +0 -164
  308. package/docs/mcp/readme.md +0 -162
  309. package/docs/models.ts +0 -41
  310. package/docs/philosophy.md +0 -86
  311. package/docs/principles.md +0 -7
  312. package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +0 -34
  313. package/docs/prompts/check-for-undocumented-features.md +0 -27
  314. package/docs/prompts/mcp-test-easy-command.md +0 -27
  315. package/docs/scaffolds/client.md +0 -149
  316. package/docs/scaffolds/command.md +0 -120
  317. package/docs/scaffolds/endpoint.md +0 -171
  318. package/docs/scaffolds/feature.md +0 -158
  319. package/docs/scaffolds/selector.md +0 -91
  320. package/docs/scaffolds/server.md +0 -196
  321. package/docs/selectors.md +0 -115
  322. package/docs/sessions/custom-command/attempt-log-2.md +0 -195
  323. package/docs/sessions/file-watcher-pipeline/attempt-log-1.md +0 -728
  324. package/docs/sessions/file-watcher-pipeline/attempt-log-2.md +0 -555
  325. package/docs/sessions/grep-audit-report/attempt-log-1.md +0 -289
  326. package/docs/sessions/multi-feature-dashboard/attempt-log-2.md +0 -679
  327. package/docs/sessions/rest-api-server-with-client/attempt-log-1.md +0 -1
  328. package/docs/sessions/rest-api-server-with-client/attempt-log-3.md +0 -920
  329. package/docs/sessions/simple-rest-api/attempt-log-1.md +0 -593
  330. package/docs/sessions/websocket-serve-and-client/attempt-log-2.md +0 -995
  331. package/docs/tutorials/00-bootstrap.md +0 -166
  332. package/docs/tutorials/01-getting-started.md +0 -106
  333. package/docs/tutorials/02-container.md +0 -210
  334. package/docs/tutorials/03-scripts.md +0 -194
  335. package/docs/tutorials/04-features-overview.md +0 -196
  336. package/docs/tutorials/05-state-and-events.md +0 -171
  337. package/docs/tutorials/06-servers.md +0 -157
  338. package/docs/tutorials/07-endpoints.md +0 -198
  339. package/docs/tutorials/08-commands.md +0 -252
  340. package/docs/tutorials/09-clients.md +0 -162
  341. package/docs/tutorials/10-creating-features.md +0 -203
  342. package/docs/tutorials/11-contentbase.md +0 -191
  343. package/docs/tutorials/12-assistants.md +0 -215
  344. package/docs/tutorials/13-introspection.md +0 -157
  345. package/docs/tutorials/14-type-system.md +0 -174
  346. package/docs/tutorials/15-project-patterns.md +0 -222
  347. package/docs/tutorials/16-google-features.md +0 -534
  348. package/docs/tutorials/17-tui-blocks.md +0 -530
  349. package/docs/tutorials/18-semantic-search.md +0 -334
  350. package/docs/tutorials/19-python-sessions.md +0 -401
  351. package/docs/tutorials/20-browser-esm.md +0 -234
  352. package/index.ts +0 -1
  353. package/src/agi/endpoints/ask.ts +0 -60
  354. package/src/agi/endpoints/conversations/[id].ts +0 -45
  355. package/src/agi/endpoints/conversations.ts +0 -31
  356. package/src/agi/endpoints/experts.ts +0 -37
  357. package/test/assistant-hooks.test.ts +0 -306
  358. package/test/assistant.test.ts +0 -81
  359. package/test/bus.test.ts +0 -134
  360. package/test/clients-servers.test.ts +0 -217
  361. package/test/command.test.ts +0 -267
  362. package/test/container-link.test.ts +0 -274
  363. package/test/conversation.test.ts +0 -220
  364. package/test/features.test.ts +0 -160
  365. package/test/fork-and-research.test.ts +0 -450
  366. package/test/integration.test.ts +0 -787
  367. package/test/interceptor-chain.test.ts +0 -61
  368. package/test/node-container.test.ts +0 -121
  369. package/test/python-session.test.ts +0 -105
  370. package/test/rate-limit.test.ts +0 -272
  371. package/test/semantic-search.test.ts +0 -550
  372. package/test/state.test.ts +0 -121
  373. package/test/vm-context.test.ts +0 -146
  374. package/test/vm-loadmodule.test.ts +0 -213
  375. package/test/websocket-ask.test.ts +0 -101
  376. package/test-integration/assistant.test.ts +0 -138
  377. package/test-integration/assistants-manager.test.ts +0 -113
  378. package/test-integration/claude-code.test.ts +0 -98
  379. package/test-integration/conversation-history.test.ts +0 -205
  380. package/test-integration/conversation.test.ts +0 -137
  381. package/test-integration/elevenlabs.test.ts +0 -55
  382. package/test-integration/google-services.test.ts +0 -80
  383. package/test-integration/helpers.ts +0 -89
  384. package/test-integration/memory.test.ts +0 -204
  385. package/test-integration/openai-codex.test.ts +0 -93
  386. package/test-integration/runpod.test.ts +0 -58
  387. package/test-integration/server-endpoints.test.ts +0 -97
  388. package/test-integration/telegram.test.ts +0 -46
@@ -1,884 +0,0 @@
1
- # ClaudeCode (features.claudeCode)
2
-
3
- Claude Code CLI wrapper feature. Spawns and manages Claude Code sessions as subprocesses, streaming structured JSON events back through the container's event system. Sessions are long-lived: each call to `run()` spawns a `claude -p` process with `--output-format stream-json`, parses NDJSON from stdout line-by-line, and emits typed events on the feature's event bus.
4
-
5
- ## Usage
6
-
7
- ```ts
8
- container.feature('claudeCode', {
9
- // Claude CLI session ID to resume by default
10
- session,
11
- // Path to the claude CLI binary
12
- claudePath,
13
- // Default model to use for sessions
14
- model,
15
- // Default working directory for sessions
16
- cwd,
17
- // Default system prompt prepended to all sessions
18
- systemPrompt,
19
- // Default append system prompt for all sessions
20
- appendSystemPrompt,
21
- // Default permission mode for Claude CLI sessions
22
- permissionMode,
23
- // Default allowed tools for sessions
24
- allowedTools,
25
- // Default disallowed tools for sessions
26
- disallowedTools,
27
- // Whether to stream partial messages token-by-token
28
- streaming,
29
- // MCP config file paths to pass to sessions
30
- mcpConfig,
31
- // MCP server configs keyed by name, injected into sessions via temp config file
32
- mcpServers,
33
- // Path to write a parseable NDJSON session log file
34
- fileLogPath,
35
- // Verbosity level for file logging. Defaults to "normal"
36
- fileLogLevel,
37
- // Default effort level for Claude reasoning
38
- effort,
39
- // Maximum cost budget in USD per session
40
- maxBudgetUsd,
41
- // Fallback model when the primary model is unavailable
42
- fallbackModel,
43
- // Default agent to use
44
- agent,
45
- // Disable session persistence across runs
46
- noSessionPersistence,
47
- // Default tools to make available
48
- tools,
49
- // Require strict MCP config validation
50
- strictMcpConfig,
51
- // Path to a custom settings file
52
- settingsFile,
53
- // Directories containing Claude Code skills to load into sessions
54
- skillsFolders,
55
- // Launch Claude Code with a Chrome browser tool
56
- chrome,
57
- })
58
- ```
59
-
60
- ## Options (Zod v4 schema)
61
-
62
- | Property | Type | Description |
63
- |----------|------|-------------|
64
- | `session` | `string` | Claude CLI session ID to resume by default |
65
- | `claudePath` | `string` | Path to the claude CLI binary |
66
- | `model` | `string` | Default model to use for sessions |
67
- | `cwd` | `string` | Default working directory for sessions |
68
- | `systemPrompt` | `string` | Default system prompt prepended to all sessions |
69
- | `appendSystemPrompt` | `string` | Default append system prompt for all sessions |
70
- | `permissionMode` | `string` | Default permission mode for Claude CLI sessions |
71
- | `allowedTools` | `array` | Default allowed tools for sessions |
72
- | `disallowedTools` | `array` | Default disallowed tools for sessions |
73
- | `streaming` | `boolean` | Whether to stream partial messages token-by-token |
74
- | `mcpConfig` | `array` | MCP config file paths to pass to sessions |
75
- | `mcpServers` | `object` | MCP server configs keyed by name, injected into sessions via temp config file |
76
- | `fileLogPath` | `string` | Path to write a parseable NDJSON session log file |
77
- | `fileLogLevel` | `string` | Verbosity level for file logging. Defaults to "normal" |
78
- | `effort` | `string` | Default effort level for Claude reasoning |
79
- | `maxBudgetUsd` | `number` | Maximum cost budget in USD per session |
80
- | `fallbackModel` | `string` | Fallback model when the primary model is unavailable |
81
- | `agent` | `string` | Default agent to use |
82
- | `noSessionPersistence` | `boolean` | Disable session persistence across runs |
83
- | `tools` | `array` | Default tools to make available |
84
- | `strictMcpConfig` | `boolean` | Require strict MCP config validation |
85
- | `settingsFile` | `string` | Path to a custom settings file |
86
- | `skillsFolders` | `array` | Directories containing Claude Code skills to load into sessions |
87
- | `chrome` | `boolean` | Launch Claude Code with a Chrome browser tool |
88
-
89
- ## Methods
90
-
91
- ### assertMinVersion
92
-
93
- Assert that the detected CLI version meets a minimum major.minor requirement. Throws if the CLI version is below the specified minimum.
94
-
95
- **Parameters:**
96
-
97
- | Name | Type | Required | Description |
98
- |------|------|----------|-------------|
99
- | `major` | `number` | ✓ | Minimum major version |
100
- | `minor` | `number` | ✓ | Minimum minor version |
101
-
102
- **Returns:** `void`
103
-
104
-
105
-
106
- ### checkAvailability
107
-
108
- Check if the Claude CLI is available and capture its version.
109
-
110
- **Returns:** `Promise<boolean>`
111
-
112
- ```ts
113
- const available = await cc.checkAvailability()
114
- if (!available) throw new Error('Claude CLI not found')
115
- ```
116
-
117
-
118
-
119
- ### writeMcpConfig
120
-
121
- Write an MCP server config map to a temp file suitable for `--mcp-config`.
122
-
123
- **Parameters:**
124
-
125
- | Name | Type | Required | Description |
126
- |------|------|----------|-------------|
127
- | `servers` | `Record<string, McpServerConfig>` | ✓ | Server configs keyed by name |
128
-
129
- **Returns:** `Promise<string>`
130
-
131
- ```ts
132
- const configPath = await cc.writeMcpConfig({
133
- 'my-api': { type: 'http', url: 'https://api.example.com/mcp' },
134
- 'local-tool': { type: 'stdio', command: 'bun', args: ['run', 'server.ts'] }
135
- })
136
- ```
137
-
138
-
139
-
140
- ### run
141
-
142
- Run a prompt in a new Claude Code session. Spawns a subprocess, streams NDJSON events, and resolves when the session completes.
143
-
144
- **Parameters:**
145
-
146
- | Name | Type | Required | Description |
147
- |------|------|----------|-------------|
148
- | `prompt` | `string` | ✓ | The instruction/prompt to send |
149
- | `options` | `RunOptions` | | Session configuration overrides |
150
-
151
- `RunOptions` properties:
152
-
153
- | Property | Type | Description |
154
- |----------|------|-------------|
155
- | `model` | `string` | Override model for this session. |
156
- | `cwd` | `string` | Override working directory. |
157
- | `systemPrompt` | `string` | System prompt for this session. |
158
- | `appendSystemPrompt` | `string` | Append system prompt for this session. |
159
- | `permissionMode` | `'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'dontAsk'` | Permission mode override. |
160
- | `allowedTools` | `string[]` | Allowed tools override. |
161
- | `disallowedTools` | `string[]` | Disallowed tools override. |
162
- | `streaming` | `boolean` | Whether to stream partial messages. |
163
- | `resumeSessionId` | `string` | Resume a previous session by ID. |
164
- | `continue` | `boolean` | Continue the most recent conversation. |
165
- | `addDirs` | `string[]` | Additional directories to allow tool access to. |
166
- | `skillsFolders` | `string[]` | Directories containing Claude Code skills (SKILL.md files) to load into sessions. Merged with addDirs as --add-dir. |
167
- | `mcpConfig` | `string[]` | MCP config file paths. |
168
- | `mcpServers` | `Record<string, McpServerConfig>` | MCP servers to inject, keyed by server name. |
169
- | `dangerouslySkipPermissions` | `boolean` | Skip all permission checks (only for sandboxed environments). |
170
- | `extraArgs` | `string[]` | Additional arbitrary CLI flags. |
171
- | `fileLogPath` | `string` | Path to write a parseable NDJSON session log file. Overrides feature-level fileLogPath. |
172
- | `fileLogLevel` | `FileLogLevel` | Verbosity level for file logging. Overrides feature-level fileLogLevel. |
173
- | `effort` | `'low' | 'medium' | 'high'` | Effort level for Claude reasoning. |
174
- | `maxBudgetUsd` | `number` | Maximum cost budget in USD. |
175
- | `fallbackModel` | `string` | Fallback model when the primary is unavailable. |
176
- | `jsonSchema` | `string | object` | JSON schema for structured output validation. |
177
- | `agent` | `string` | Agent to use for this session. |
178
- | `sessionId` | `string` | Resume or fork a specific Claude session by ID. |
179
- | `noSessionPersistence` | `boolean` | Disable session persistence for this run. |
180
- | `forkSession` | `boolean` | Fork from an existing session instead of resuming. |
181
- | `tools` | `string[]` | Tools to make available. |
182
- | `strictMcpConfig` | `boolean` | Require strict MCP config validation. |
183
- | `debug` | `string | boolean` | Enable debug output. Pass a string for specific debug channels, or true for all. |
184
- | `debugFile` | `string` | Path to write debug output to a file. |
185
- | `settingsFile` | `string` | Path to a custom settings file. |
186
- | `chrome` | `boolean` | Launch Claude Code with a Chrome browser tool. |
187
-
188
- **Returns:** `Promise<ClaudeSession>`
189
-
190
- ```ts
191
- // Simple one-shot
192
- const session = await cc.run('What files are in this project?')
193
- console.log(session.result)
194
-
195
- // With options
196
- const session = await cc.run('Refactor the auth module', {
197
- model: 'opus',
198
- cwd: '/path/to/project',
199
- permissionMode: 'acceptEdits',
200
- streaming: true
201
- })
202
-
203
- // With injected MCP servers
204
- const session = await cc.run('Use the database tools to list tables', {
205
- mcpServers: {
206
- 'db-tools': { type: 'stdio', command: 'bun', args: ['run', 'db-mcp.ts'] },
207
- 'api': { type: 'http', url: 'https://api.example.com/mcp' }
208
- }
209
- })
210
-
211
- // Resume a previous session
212
- const session = await cc.run('Now add tests for that', {
213
- resumeSessionId: previousSession.sessionId
214
- })
215
- ```
216
-
217
-
218
-
219
- ### start
220
-
221
- Run a prompt without waiting for completion. Returns the session ID immediately so you can subscribe to events.
222
-
223
- **Parameters:**
224
-
225
- | Name | Type | Required | Description |
226
- |------|------|----------|-------------|
227
- | `prompt` | `string` | ✓ | The instruction/prompt to send |
228
- | `options` | `RunOptions` | | Session configuration overrides |
229
-
230
- `RunOptions` properties:
231
-
232
- | Property | Type | Description |
233
- |----------|------|-------------|
234
- | `model` | `string` | Override model for this session. |
235
- | `cwd` | `string` | Override working directory. |
236
- | `systemPrompt` | `string` | System prompt for this session. |
237
- | `appendSystemPrompt` | `string` | Append system prompt for this session. |
238
- | `permissionMode` | `'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'dontAsk'` | Permission mode override. |
239
- | `allowedTools` | `string[]` | Allowed tools override. |
240
- | `disallowedTools` | `string[]` | Disallowed tools override. |
241
- | `streaming` | `boolean` | Whether to stream partial messages. |
242
- | `resumeSessionId` | `string` | Resume a previous session by ID. |
243
- | `continue` | `boolean` | Continue the most recent conversation. |
244
- | `addDirs` | `string[]` | Additional directories to allow tool access to. |
245
- | `skillsFolders` | `string[]` | Directories containing Claude Code skills (SKILL.md files) to load into sessions. Merged with addDirs as --add-dir. |
246
- | `mcpConfig` | `string[]` | MCP config file paths. |
247
- | `mcpServers` | `Record<string, McpServerConfig>` | MCP servers to inject, keyed by server name. |
248
- | `dangerouslySkipPermissions` | `boolean` | Skip all permission checks (only for sandboxed environments). |
249
- | `extraArgs` | `string[]` | Additional arbitrary CLI flags. |
250
- | `fileLogPath` | `string` | Path to write a parseable NDJSON session log file. Overrides feature-level fileLogPath. |
251
- | `fileLogLevel` | `FileLogLevel` | Verbosity level for file logging. Overrides feature-level fileLogLevel. |
252
- | `effort` | `'low' | 'medium' | 'high'` | Effort level for Claude reasoning. |
253
- | `maxBudgetUsd` | `number` | Maximum cost budget in USD. |
254
- | `fallbackModel` | `string` | Fallback model when the primary is unavailable. |
255
- | `jsonSchema` | `string | object` | JSON schema for structured output validation. |
256
- | `agent` | `string` | Agent to use for this session. |
257
- | `sessionId` | `string` | Resume or fork a specific Claude session by ID. |
258
- | `noSessionPersistence` | `boolean` | Disable session persistence for this run. |
259
- | `forkSession` | `boolean` | Fork from an existing session instead of resuming. |
260
- | `tools` | `string[]` | Tools to make available. |
261
- | `strictMcpConfig` | `boolean` | Require strict MCP config validation. |
262
- | `debug` | `string | boolean` | Enable debug output. Pass a string for specific debug channels, or true for all. |
263
- | `debugFile` | `string` | Path to write debug output to a file. |
264
- | `settingsFile` | `string` | Path to a custom settings file. |
265
- | `chrome` | `boolean` | Launch Claude Code with a Chrome browser tool. |
266
-
267
- **Returns:** `Promise<string>`
268
-
269
- ```ts
270
- const sessionId = cc.start('Build a REST API for users')
271
-
272
- cc.on('session:delta', ({ sessionId: sid, text }) => {
273
- if (sid === sessionId) process.stdout.write(text)
274
- })
275
-
276
- cc.on('session:result', ({ sessionId: sid, result }) => {
277
- if (sid === sessionId) console.log('\nDone:', result)
278
- })
279
- ```
280
-
281
-
282
-
283
- ### abort
284
-
285
- Kill a running session's subprocess.
286
-
287
- **Parameters:**
288
-
289
- | Name | Type | Required | Description |
290
- |------|------|----------|-------------|
291
- | `sessionId` | `string` | ✓ | The local session ID to abort |
292
-
293
- **Returns:** `void`
294
-
295
- ```ts
296
- const sessionId = cc.start('Do something long')
297
- // ... later
298
- cc.abort(sessionId)
299
- ```
300
-
301
-
302
-
303
- ### getSession
304
-
305
- Get a session by its local ID.
306
-
307
- **Parameters:**
308
-
309
- | Name | Type | Required | Description |
310
- |------|------|----------|-------------|
311
- | `sessionId` | `string` | ✓ | The local session ID |
312
-
313
- **Returns:** `ClaudeSession | undefined`
314
-
315
- ```ts
316
- const session = cc.getSession(sessionId)
317
- if (session?.status === 'completed') {
318
- console.log(session.result)
319
- }
320
- ```
321
-
322
-
323
-
324
- ### waitForSession
325
-
326
- Wait for a running session to complete.
327
-
328
- **Parameters:**
329
-
330
- | Name | Type | Required | Description |
331
- |------|------|----------|-------------|
332
- | `sessionId` | `string` | ✓ | The local session ID |
333
-
334
- **Returns:** `Promise<ClaudeSession>`
335
-
336
- ```ts
337
- const id = cc.start('Build something cool')
338
- const session = await cc.waitForSession(id)
339
- console.log(session.result)
340
- ```
341
-
342
-
343
-
344
- ### usage
345
-
346
- Get aggregated usage statistics across all sessions, or for a specific session.
347
-
348
- **Parameters:**
349
-
350
- | Name | Type | Required | Description |
351
- |------|------|----------|-------------|
352
- | `sessionId` | `string` | | Optional session ID to get usage for a single session |
353
-
354
- **Returns:** `{ totalCostUsd: number; totalInputTokens: number; totalOutputTokens: number; totalCacheReadTokens: number; totalCacheCreationTokens: number; totalTurns: number; sessionCount: number; sessions: Array<{ id: string; costUsd: number; turns: number; inputTokens: number; outputTokens: number; status: string`
355
-
356
- ```ts
357
- const stats = cc.usage()
358
- console.log(`Total cost: $${stats.totalCostUsd.toFixed(4)}`)
359
- console.log(`Tokens: ${stats.totalInputTokens} in / ${stats.totalOutputTokens} out`)
360
-
361
- // Single session
362
- const sessionStats = cc.usage(sessionId)
363
- ```
364
-
365
-
366
-
367
- ### sessionHistoryToMarkdown
368
-
369
- Export session history as a readable markdown document. Reads from a raw JSONL file (Claude CLI session log or this feature's NDJSON log) so it works independently of in-memory state. Can also accept a local session ID to export from in-memory state as a fallback.
370
-
371
- **Parameters:**
372
-
373
- | Name | Type | Required | Description |
374
- |------|------|----------|-------------|
375
- | `source` | `string` | | Path to a JSONL file, a local session ID, or omit for the most recent session |
376
-
377
- **Returns:** `Promise<string>`
378
-
379
- ```ts
380
- // From a JSONL file (works without any prior state)
381
- const md = await cc.sessionHistoryToMarkdown('/path/to/session.jsonl')
382
-
383
- // From the most recent in-memory session
384
- const md = await cc.sessionHistoryToMarkdown()
385
-
386
- // From a specific local session ID
387
- const md = await cc.sessionHistoryToMarkdown(localSessionId)
388
- ```
389
-
390
-
391
-
392
- ### listProcessSessions
393
-
394
- List all Claude Code processes currently registered in ~/.claude/sessions/. Returns each session's metadata along with whether the process is still alive.
395
-
396
- **Returns:** `Promise<Array<{
397
- pid: number
398
- sessionId: string
399
- cwd: string
400
- startedAt: number
401
- kind: string
402
- entrypoint: string
403
- alive: boolean
404
- }>>`
405
-
406
- ```ts
407
- const sessions = await cc.listProcessSessions()
408
- for (const s of sessions) {
409
- console.log(`[${s.alive ? 'LIVE' : 'dead'}] PID ${s.pid} in ${s.cwd}`)
410
- }
411
- ```
412
-
413
-
414
-
415
- ### getProcessSession
416
-
417
- Read a single process session by PID from ~/.claude/sessions/<pid>.json.
418
-
419
- **Parameters:**
420
-
421
- | Name | Type | Required | Description |
422
- |------|------|----------|-------------|
423
- | `pid` | `number` | ✓ | The process ID |
424
-
425
- **Returns:** `Promise<{
426
- pid: number
427
- sessionId: string
428
- cwd: string
429
- startedAt: number
430
- kind: string
431
- entrypoint: string
432
- } | null>`
433
-
434
- ```ts
435
- const session = await cc.getProcessSession(12345)
436
- console.log(session?.cwd)
437
- ```
438
-
439
-
440
-
441
- ### getConversationHistory
442
-
443
- Read the conversation history for a Claude Code session from its JSONL file in ~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl. Returns an array of parsed message objects (user, assistant, tool_use, tool_result).
444
-
445
- **Parameters:**
446
-
447
- | Name | Type | Required | Description |
448
- |------|------|----------|-------------|
449
- | `sessionId` | `string` | ✓ | The Claude CLI session ID (from listProcessSessions or getProcessSession) |
450
- | `cwd` | `string` | | The working directory of the session (used to locate the project folder) |
451
-
452
- **Returns:** `Promise<any[]>`
453
-
454
- ```ts
455
- const sessions = await cc.listProcessSessions()
456
- const s = sessions[0]
457
- const history = await cc.getConversationHistory(s.sessionId, s.cwd)
458
- console.log(history.length, 'turns')
459
- ```
460
-
461
-
462
-
463
- ### listSessionsForCwd
464
-
465
- List all conversation sessions stored for a given working directory. Reads ~/.claude/projects/<encoded-cwd>/ and returns metadata for each .jsonl file.
466
-
467
- **Parameters:**
468
-
469
- | Name | Type | Required | Description |
470
- |------|------|----------|-------------|
471
- | `cwd` | `string` | | The working directory path to look up |
472
-
473
- **Returns:** `Promise<Array<{
474
- sessionId: string
475
- filePath: string
476
- messageCount: number
477
- }>>`
478
-
479
- ```ts
480
- const sessions = await cc.listSessionsForCwd('/Users/me/my-project')
481
- for (const s of sessions) {
482
- console.log(s.sessionId, s.messageCount, 'messages')
483
- }
484
- ```
485
-
486
-
487
-
488
- ### cleanupMcpTempFiles
489
-
490
- Clean up any temp MCP config files created during sessions.
491
-
492
- **Returns:** `Promise<void>`
493
-
494
-
495
-
496
- ### enable
497
-
498
- Initialize the feature.
499
-
500
- **Parameters:**
501
-
502
- | Name | Type | Required | Description |
503
- |------|------|----------|-------------|
504
- | `options` | `any` | | Enable options |
505
-
506
- **Returns:** `Promise<this>`
507
-
508
-
509
-
510
- ## Getters
511
-
512
- | Property | Type | Description |
513
- |----------|------|-------------|
514
- | `claudePath` | `string` | |
515
- | `parsedVersion` | `{ major: number; minor: number; patch: number } | undefined` | Parsed semver components from the detected CLI version, or undefined if not yet checked. |
516
- | `sessionId` | `string | undefined` | The Claude CLI session ID of the most recently initialized session, or the session set via the `session` option. Useful for resuming later. |
517
-
518
- ## Events (Zod v4 schema)
519
-
520
- ### session:warning
521
-
522
- Fired when the log reader encounters a warning
523
-
524
- **Event Arguments:**
525
-
526
- | Name | Type | Description |
527
- |------|------|-------------|
528
- | `sessionId` | `string` | |
529
- | `message` | `string` | |
530
-
531
-
532
-
533
- ### session:log-error
534
-
535
- Fired when the log reader encounters an error
536
-
537
- **Event Arguments:**
538
-
539
- | Name | Type | Description |
540
- |------|------|-------------|
541
- | `sessionId` | `string` | |
542
- | `error` | `any` | |
543
-
544
-
545
-
546
- ### session:event
547
-
548
- Fired for every parsed JSON event from the CLI stream
549
-
550
- **Event Arguments:**
551
-
552
- | Name | Type | Description |
553
- |------|------|-------------|
554
- | `sessionId` | `string` | |
555
- | `event` | `any` | |
556
-
557
-
558
-
559
- ### session:init
560
-
561
- Fired when the CLI emits its init system event
562
-
563
- **Event Arguments:**
564
-
565
- | Name | Type | Description |
566
- |------|------|-------------|
567
- | `sessionId` | `string` | |
568
- | `init` | `any` | |
569
-
570
-
571
-
572
- ### session:delta
573
-
574
- Fired for each text delta from an assistant message
575
-
576
- **Event Arguments:**
577
-
578
- | Name | Type | Description |
579
- |------|------|-------------|
580
- | `sessionId` | `string` | |
581
- | `text` | `string` | |
582
- | `role` | `string` | |
583
-
584
-
585
-
586
- ### session:stream
587
-
588
- Fired for stream_event type events from the CLI
589
-
590
- **Event Arguments:**
591
-
592
- | Name | Type | Description |
593
- |------|------|-------------|
594
- | `sessionId` | `string` | |
595
- | `streamEvent` | `any` | |
596
-
597
-
598
-
599
- ### session:message
600
-
601
- Fired when a complete assistant message is received
602
-
603
- **Event Arguments:**
604
-
605
- | Name | Type | Description |
606
- |------|------|-------------|
607
- | `sessionId` | `string` | |
608
- | `message` | `any` | |
609
-
610
-
611
-
612
- ### session:result
613
-
614
- Fired when a session completes with a final result
615
-
616
- **Event Arguments:**
617
-
618
- | Name | Type | Description |
619
- |------|------|-------------|
620
- | `sessionId` | `string` | |
621
- | `result` | `string` | |
622
-
623
-
624
-
625
- ### session:start
626
-
627
- Fired when a new Claude Code session is spawned
628
-
629
- **Event Arguments:**
630
-
631
- | Name | Type | Description |
632
- |------|------|-------------|
633
- | `sessionId` | `string` | |
634
- | `prompt` | `string` | |
635
-
636
-
637
-
638
- ### session:error
639
-
640
- Fired when a session encounters an error
641
-
642
- **Event Arguments:**
643
-
644
- | Name | Type | Description |
645
- |------|------|-------------|
646
- | `sessionId` | `string` | |
647
- | `error` | `any` | |
648
- | `exitCode` | `number` | |
649
-
650
-
651
-
652
- ### session:parse-error
653
-
654
- Fired when a JSON line from the CLI cannot be parsed
655
-
656
- **Event Arguments:**
657
-
658
- | Name | Type | Description |
659
- |------|------|-------------|
660
- | `sessionId` | `string` | |
661
- | `line` | `string` | |
662
-
663
-
664
-
665
- ### session:abort
666
-
667
- Fired when a session is aborted by the user
668
-
669
- **Event Arguments:**
670
-
671
- | Name | Type | Description |
672
- |------|------|-------------|
673
- | `sessionId` | `string` | |
674
-
675
-
676
-
677
- ## State (Zod v4 schema)
678
-
679
- | Property | Type | Description |
680
- |----------|------|-------------|
681
- | `enabled` | `boolean` | Whether this feature is currently enabled |
682
- | `sessions` | `object` | Map of session IDs to ClaudeSession objects |
683
- | `activeSessions` | `array` | List of currently running session IDs |
684
- | `claudeAvailable` | `boolean` | Whether the Claude CLI binary is available |
685
- | `claudeVersion` | `string` | Detected Claude CLI version string |
686
-
687
- ## Environment Variables
688
-
689
- - `TMPDIR`
690
-
691
- ## Examples
692
-
693
- **features.claudeCode**
694
-
695
- ```ts
696
- const cc = container.feature('claudeCode')
697
-
698
- // Listen for events
699
- cc.on('session:delta', ({ sessionId, text }) => process.stdout.write(text))
700
- cc.on('session:result', ({ sessionId, result }) => console.log('Done:', result))
701
-
702
- // Run a prompt
703
- const session = await cc.run('Explain the architecture of this project')
704
- console.log(session.result)
705
- ```
706
-
707
-
708
-
709
- **checkAvailability**
710
-
711
- ```ts
712
- const available = await cc.checkAvailability()
713
- if (!available) throw new Error('Claude CLI not found')
714
- ```
715
-
716
-
717
-
718
- **writeMcpConfig**
719
-
720
- ```ts
721
- const configPath = await cc.writeMcpConfig({
722
- 'my-api': { type: 'http', url: 'https://api.example.com/mcp' },
723
- 'local-tool': { type: 'stdio', command: 'bun', args: ['run', 'server.ts'] }
724
- })
725
- ```
726
-
727
-
728
-
729
- **run**
730
-
731
- ```ts
732
- // Simple one-shot
733
- const session = await cc.run('What files are in this project?')
734
- console.log(session.result)
735
-
736
- // With options
737
- const session = await cc.run('Refactor the auth module', {
738
- model: 'opus',
739
- cwd: '/path/to/project',
740
- permissionMode: 'acceptEdits',
741
- streaming: true
742
- })
743
-
744
- // With injected MCP servers
745
- const session = await cc.run('Use the database tools to list tables', {
746
- mcpServers: {
747
- 'db-tools': { type: 'stdio', command: 'bun', args: ['run', 'db-mcp.ts'] },
748
- 'api': { type: 'http', url: 'https://api.example.com/mcp' }
749
- }
750
- })
751
-
752
- // Resume a previous session
753
- const session = await cc.run('Now add tests for that', {
754
- resumeSessionId: previousSession.sessionId
755
- })
756
- ```
757
-
758
-
759
-
760
- **start**
761
-
762
- ```ts
763
- const sessionId = cc.start('Build a REST API for users')
764
-
765
- cc.on('session:delta', ({ sessionId: sid, text }) => {
766
- if (sid === sessionId) process.stdout.write(text)
767
- })
768
-
769
- cc.on('session:result', ({ sessionId: sid, result }) => {
770
- if (sid === sessionId) console.log('\nDone:', result)
771
- })
772
- ```
773
-
774
-
775
-
776
- **abort**
777
-
778
- ```ts
779
- const sessionId = cc.start('Do something long')
780
- // ... later
781
- cc.abort(sessionId)
782
- ```
783
-
784
-
785
-
786
- **getSession**
787
-
788
- ```ts
789
- const session = cc.getSession(sessionId)
790
- if (session?.status === 'completed') {
791
- console.log(session.result)
792
- }
793
- ```
794
-
795
-
796
-
797
- **waitForSession**
798
-
799
- ```ts
800
- const id = cc.start('Build something cool')
801
- const session = await cc.waitForSession(id)
802
- console.log(session.result)
803
- ```
804
-
805
-
806
-
807
- **usage**
808
-
809
- ```ts
810
- const stats = cc.usage()
811
- console.log(`Total cost: $${stats.totalCostUsd.toFixed(4)}`)
812
- console.log(`Tokens: ${stats.totalInputTokens} in / ${stats.totalOutputTokens} out`)
813
-
814
- // Single session
815
- const sessionStats = cc.usage(sessionId)
816
- ```
817
-
818
-
819
-
820
- **sessionHistoryToMarkdown**
821
-
822
- ```ts
823
- // From a JSONL file (works without any prior state)
824
- const md = await cc.sessionHistoryToMarkdown('/path/to/session.jsonl')
825
-
826
- // From the most recent in-memory session
827
- const md = await cc.sessionHistoryToMarkdown()
828
-
829
- // From a specific local session ID
830
- const md = await cc.sessionHistoryToMarkdown(localSessionId)
831
- ```
832
-
833
-
834
-
835
- **listProcessSessions**
836
-
837
- ```ts
838
- const sessions = await cc.listProcessSessions()
839
- for (const s of sessions) {
840
- console.log(`[${s.alive ? 'LIVE' : 'dead'}] PID ${s.pid} in ${s.cwd}`)
841
- }
842
- ```
843
-
844
-
845
-
846
- **getProcessSession**
847
-
848
- ```ts
849
- const session = await cc.getProcessSession(12345)
850
- console.log(session?.cwd)
851
- ```
852
-
853
-
854
-
855
- **getConversationHistory**
856
-
857
- ```ts
858
- const sessions = await cc.listProcessSessions()
859
- const s = sessions[0]
860
- const history = await cc.getConversationHistory(s.sessionId, s.cwd)
861
- console.log(history.length, 'turns')
862
- ```
863
-
864
-
865
-
866
- **listSessionsForCwd**
867
-
868
- ```ts
869
- const sessions = await cc.listSessionsForCwd('/Users/me/my-project')
870
- for (const s of sessions) {
871
- console.log(s.sessionId, s.messageCount, 'messages')
872
- }
873
- ```
874
-
875
-
876
-
877
- **sessionId**
878
-
879
- ```ts
880
- const cc = container.feature('claudeCode')
881
- await cc.run('Do something')
882
- console.log(cc.sessionId) // the Claude CLI session ID
883
- ```
884
-