agent-trellis 0.7.0 → 0.8.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 (302) hide show
  1. package/README.md +48 -153
  2. package/dist/adapters/claude-code.js +3 -2
  3. package/dist/adapters/codex.js +3 -2
  4. package/dist/adapters/jsonMcp.d.ts +3 -1
  5. package/dist/adapters/jsonMcp.js +18 -4
  6. package/dist/adapters/kimi-code.d.ts +21 -0
  7. package/dist/adapters/kimi-code.js +107 -0
  8. package/dist/adapters/kiro.js +3 -2
  9. package/dist/adapters/mcpPlan.d.ts +6 -1
  10. package/dist/adapters/mcpPlan.js +106 -8
  11. package/dist/adapters/pi.js +22 -3
  12. package/dist/adapters/symlinkPlan.d.ts +7 -0
  13. package/dist/adapters/symlinkPlan.js +16 -7
  14. package/dist/adapters/zcode.d.ts +21 -0
  15. package/dist/adapters/zcode.js +234 -0
  16. package/dist/cli.js +145 -29
  17. package/dist/commands/doctor.d.ts +7 -2
  18. package/dist/commands/doctor.js +40 -2
  19. package/dist/commands/init.d.ts +4 -2
  20. package/dist/commands/init.js +29 -13
  21. package/dist/commands/kimi.d.ts +16 -0
  22. package/dist/commands/kimi.js +64 -0
  23. package/dist/commands/manage.d.ts +39 -0
  24. package/dist/commands/manage.js +126 -0
  25. package/dist/commands/mcp.d.ts +77 -14
  26. package/dist/commands/mcp.js +169 -29
  27. package/dist/commands/mcpGateway.d.ts +6 -0
  28. package/dist/commands/mcpGateway.js +35 -14
  29. package/dist/commands/mcpImport.d.ts +46 -0
  30. package/dist/commands/mcpImport.js +359 -0
  31. package/dist/commands/memory.d.ts +17 -3
  32. package/dist/commands/memory.js +27 -8
  33. package/dist/commands/migrate.d.ts +16 -5
  34. package/dist/commands/migrate.js +93 -17
  35. package/dist/commands/onboard.d.ts +74 -2
  36. package/dist/commands/onboard.js +469 -71
  37. package/dist/commands/rollback.js +28 -2
  38. package/dist/commands/secretsAudit.js +4 -1
  39. package/dist/commands/skill.d.ts +52 -6
  40. package/dist/commands/skill.js +114 -15
  41. package/dist/commands/sync.js +5 -1
  42. package/dist/core/adapter.d.ts +11 -1
  43. package/dist/core/canonical.d.ts +15 -7
  44. package/dist/core/canonical.js +101 -13
  45. package/dist/core/capabilitySelection.d.ts +45 -0
  46. package/dist/core/capabilitySelection.js +124 -0
  47. package/dist/core/types.d.ts +25 -2
  48. package/dist/core/types.js +8 -0
  49. package/dist/lib/agentBridge.d.ts +169 -0
  50. package/dist/lib/agentBridge.js +367 -0
  51. package/dist/lib/agentBridgeProvider.d.ts +14 -0
  52. package/dist/lib/agentBridgeProvider.js +95 -0
  53. package/dist/lib/backup.d.ts +32 -0
  54. package/dist/lib/backup.js +20 -1
  55. package/dist/lib/builtinSkills.d.ts +2 -0
  56. package/dist/lib/builtinSkills.js +4 -0
  57. package/dist/lib/chatAgents.d.ts +42 -0
  58. package/dist/lib/chatAgents.js +59 -0
  59. package/dist/lib/cliMetadata.d.ts +1 -0
  60. package/dist/lib/cliMetadata.js +14 -0
  61. package/dist/lib/envVarNames.d.ts +3 -0
  62. package/dist/lib/envVarNames.js +19 -0
  63. package/dist/lib/gatewayBackend.d.ts +28 -0
  64. package/dist/lib/gatewayBackend.js +72 -1
  65. package/dist/lib/installAgent.d.ts +7 -5
  66. package/dist/lib/installAgent.js +4 -3
  67. package/dist/lib/mcpConnect.js +5 -1
  68. package/dist/lib/mcpMigrateRead.d.ts +2 -0
  69. package/dist/lib/mcpMigrateRead.js +22 -1
  70. package/dist/lib/mcpRuntime.d.ts +46 -0
  71. package/dist/lib/mcpRuntime.js +185 -0
  72. package/dist/lib/mcpStatusProvider.d.ts +10 -0
  73. package/dist/lib/mcpStatusProvider.js +25 -0
  74. package/dist/lib/mcpToolRegistry.d.ts +18 -0
  75. package/dist/lib/mcpToolRegistry.js +107 -14
  76. package/dist/lib/memoryGraph.d.ts +1 -1
  77. package/dist/lib/memoryGraph.js +9 -3
  78. package/dist/lib/memoryProvider.d.ts +58 -0
  79. package/dist/lib/memoryProvider.js +175 -0
  80. package/dist/lib/memoryStatus.d.ts +17 -0
  81. package/dist/lib/memoryStatus.js +88 -0
  82. package/dist/lib/nativeMemory.d.ts +19 -0
  83. package/dist/lib/nativeMemory.js +129 -0
  84. package/dist/lib/realHomeSnapshot.js +5 -0
  85. package/dist/lib/runtimeControlProvider.d.ts +16 -0
  86. package/dist/lib/runtimeControlProvider.js +170 -0
  87. package/dist/lib/secretEnv.d.ts +2 -1
  88. package/dist/lib/secretEnv.js +6 -2
  89. package/dist/lib/skillProvider.d.ts +13 -0
  90. package/dist/lib/skillProvider.js +210 -0
  91. package/dist/lib/taskProvider.d.ts +7 -0
  92. package/dist/lib/taskProvider.js +43 -0
  93. package/dist/lib/taskStore.d.ts +46 -0
  94. package/dist/lib/taskStore.js +156 -0
  95. package/dist/lib/terminalPicker.d.ts +23 -49
  96. package/dist/lib/terminalPicker.js +80 -218
  97. package/dist/lib/zcodeOwnership.d.ts +17 -0
  98. package/dist/lib/zcodeOwnership.js +37 -0
  99. package/dist/pi-bridge/bundle.js +476 -37
  100. package/dist/pi-bridge/index.js +42 -21
  101. package/dist/pi-bridge/schemaTranslate.d.ts +4 -8
  102. package/dist/pi-bridge/schemaTranslate.js +4 -8
  103. package/dist/probes/codex.d.ts +7 -0
  104. package/dist/probes/codex.js +37 -5
  105. package/dist/probes/kimi-code.d.ts +12 -0
  106. package/dist/probes/kimi-code.js +55 -0
  107. package/dist/probes/zcode.d.ts +32 -0
  108. package/dist/probes/zcode.js +140 -0
  109. package/dist/sdk.d.ts +1 -1
  110. package/docs/architecture.md +230 -28
  111. package/docs/assets/brand-v3/trellis-mark-v3-a.png +0 -0
  112. package/docs/assets/brand-v3/trellis-mark-v3-a.svg +10 -0
  113. package/docs/assets/poster-series-v3/README.md +60 -0
  114. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-en.png +0 -0
  115. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-en.svg +51 -0
  116. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-zh.png +0 -0
  117. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-zh.svg +51 -0
  118. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-en.png +0 -0
  119. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-en.svg +48 -0
  120. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-zh.png +0 -0
  121. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-zh.svg +48 -0
  122. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-en.png +0 -0
  123. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-en.svg +56 -0
  124. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-zh.png +0 -0
  125. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-zh.svg +56 -0
  126. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-en.png +0 -0
  127. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-en.svg +47 -0
  128. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-zh.png +0 -0
  129. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-zh.svg +47 -0
  130. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-en.png +0 -0
  131. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-en.svg +51 -0
  132. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-zh.png +0 -0
  133. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-zh.svg +51 -0
  134. package/docs/getting-started.md +496 -42
  135. package/docs/overview.md +134 -0
  136. package/docs/overview.zh-CN.md +102 -0
  137. package/docs/research.md +59 -0
  138. package/docs/roadmap.md +11 -6
  139. package/docs/video/README.md +76 -0
  140. package/docs/video/build/audio/01-opening.aiff +0 -0
  141. package/docs/video/build/audio/01-opening.mp3 +0 -0
  142. package/docs/video/build/audio/02-pain.aiff +0 -0
  143. package/docs/video/build/audio/02-pain.mp3 +0 -0
  144. package/docs/video/build/audio/03-solution.aiff +0 -0
  145. package/docs/video/build/audio/03-solution.mp3 +0 -0
  146. package/docs/video/build/audio/04-install.aiff +0 -0
  147. package/docs/video/build/audio/04-install.mp3 +0 -0
  148. package/docs/video/build/audio/04-setup.mp3 +0 -0
  149. package/docs/video/build/audio/05-dryrun.mp3 +0 -0
  150. package/docs/video/build/audio/05-init.aiff +0 -0
  151. package/docs/video/build/audio/05-init.mp3 +0 -0
  152. package/docs/video/build/audio/05-interactive.mp3 +0 -0
  153. package/docs/video/build/audio/06-dryrun.aiff +0 -0
  154. package/docs/video/build/audio/06-dryrun.mp3 +0 -0
  155. package/docs/video/build/audio/06-onboard.mp3 +0 -0
  156. package/docs/video/build/audio/06-run.mp3 +0 -0
  157. package/docs/video/build/audio/07-onboard.aiff +0 -0
  158. package/docs/video/build/audio/07-onboard.mp3 +0 -0
  159. package/docs/video/build/audio/07-verify.mp3 +0 -0
  160. package/docs/video/build/audio/08-closing.mp3 +0 -0
  161. package/docs/video/build/audio/08-doctor.aiff +0 -0
  162. package/docs/video/build/audio/08-doctor.mp3 +0 -0
  163. package/docs/video/build/audio/09-rollback.aiff +0 -0
  164. package/docs/video/build/audio/09-rollback.mp3 +0 -0
  165. package/docs/video/build/audio/10-principles.aiff +0 -0
  166. package/docs/video/build/audio/10-principles.mp3 +0 -0
  167. package/docs/video/build/audio/11-closing.aiff +0 -0
  168. package/docs/video/build/audio/11-closing.mp3 +0 -0
  169. package/docs/video/build/frames/01-opening-0.png +0 -0
  170. package/docs/video/build/frames/02-pain-1.png +0 -0
  171. package/docs/video/build/frames/02-pain-2.png +0 -0
  172. package/docs/video/build/frames/03-solution-3.png +0 -0
  173. package/docs/video/build/frames/04-install-4.png +0 -0
  174. package/docs/video/build/frames/04-setup-4.png +0 -0
  175. package/docs/video/build/frames/04-setup-5.png +0 -0
  176. package/docs/video/build/frames/05-dryrun-6.png +0 -0
  177. package/docs/video/build/frames/05-init-5.png +0 -0
  178. package/docs/video/build/frames/05-interactive-5.png +0 -0
  179. package/docs/video/build/frames/05-interactive-6.png +0 -0
  180. package/docs/video/build/frames/06-dryrun-6.png +0 -0
  181. package/docs/video/build/frames/06-dryrun-7.png +0 -0
  182. package/docs/video/build/frames/06-onboard-7.png +0 -0
  183. package/docs/video/build/frames/06-onboard-8.png +0 -0
  184. package/docs/video/build/frames/06-run-7.png +0 -0
  185. package/docs/video/build/frames/06-run-8.png +0 -0
  186. package/docs/video/build/frames/07-onboard-10.png +0 -0
  187. package/docs/video/build/frames/07-onboard-7.png +0 -0
  188. package/docs/video/build/frames/07-onboard-8.png +0 -0
  189. package/docs/video/build/frames/07-onboard-9.png +0 -0
  190. package/docs/video/build/frames/07-verify-10.png +0 -0
  191. package/docs/video/build/frames/07-verify-8.png +0 -0
  192. package/docs/video/build/frames/07-verify-9.png +0 -0
  193. package/docs/video/build/frames/08-closing-10.png +0 -0
  194. package/docs/video/build/frames/08-closing-11.png +0 -0
  195. package/docs/video/build/frames/08-doctor-11.png +0 -0
  196. package/docs/video/build/frames/08-doctor-9.png +0 -0
  197. package/docs/video/build/frames/09-rollback-10.png +0 -0
  198. package/docs/video/build/frames/09-rollback-12.png +0 -0
  199. package/docs/video/build/frames/10-principles-11.png +0 -0
  200. package/docs/video/build/frames/10-principles-13.png +0 -0
  201. package/docs/video/build/frames/11-closing-12.png +0 -0
  202. package/docs/video/build/frames/11-closing-14.png +0 -0
  203. package/docs/video/build/segments/01-opening.mp4 +0 -0
  204. package/docs/video/build/segments/01-opening.txt +3 -0
  205. package/docs/video/build/segments/02-pain.mp4 +0 -0
  206. package/docs/video/build/segments/02-pain.txt +5 -0
  207. package/docs/video/build/segments/03-solution.mp4 +0 -0
  208. package/docs/video/build/segments/03-solution.txt +3 -0
  209. package/docs/video/build/segments/04-install.mp4 +0 -0
  210. package/docs/video/build/segments/04-install.txt +3 -0
  211. package/docs/video/build/segments/04-setup.mp4 +0 -0
  212. package/docs/video/build/segments/04-setup.txt +3 -0
  213. package/docs/video/build/segments/05-dryrun.mp4 +0 -0
  214. package/docs/video/build/segments/05-dryrun.txt +3 -0
  215. package/docs/video/build/segments/05-init.mp4 +0 -0
  216. package/docs/video/build/segments/05-init.txt +3 -0
  217. package/docs/video/build/segments/05-interactive.mp4 +0 -0
  218. package/docs/video/build/segments/05-interactive.txt +5 -0
  219. package/docs/video/build/segments/06-dryrun.mp4 +0 -0
  220. package/docs/video/build/segments/06-dryrun.txt +3 -0
  221. package/docs/video/build/segments/06-onboard.mp4 +0 -0
  222. package/docs/video/build/segments/06-onboard.txt +5 -0
  223. package/docs/video/build/segments/06-run.mp4 +0 -0
  224. package/docs/video/build/segments/06-run.txt +3 -0
  225. package/docs/video/build/segments/07-onboard.mp4 +0 -0
  226. package/docs/video/build/segments/07-onboard.txt +5 -0
  227. package/docs/video/build/segments/07-verify.mp4 +0 -0
  228. package/docs/video/build/segments/07-verify.txt +5 -0
  229. package/docs/video/build/segments/08-closing.mp4 +0 -0
  230. package/docs/video/build/segments/08-closing.txt +3 -0
  231. package/docs/video/build/segments/08-doctor.mp4 +0 -0
  232. package/docs/video/build/segments/08-doctor.txt +3 -0
  233. package/docs/video/build/segments/09-rollback.mp4 +0 -0
  234. package/docs/video/build/segments/09-rollback.txt +3 -0
  235. package/docs/video/build/segments/10-principles.mp4 +0 -0
  236. package/docs/video/build/segments/10-principles.txt +3 -0
  237. package/docs/video/build/segments/11-closing.mp4 +0 -0
  238. package/docs/video/build/segments/11-closing.txt +3 -0
  239. package/docs/video/build/segments/final.txt +8 -0
  240. package/docs/video/build-ai/audio/01-hook.mp3 +0 -0
  241. package/docs/video/build-ai/audio/02-pain.mp3 +0 -0
  242. package/docs/video/build-ai/audio/03-solution.mp3 +0 -0
  243. package/docs/video/build-ai/audio/04-how.mp3 +0 -0
  244. package/docs/video/build-ai/audio/05-safe.mp3 +0 -0
  245. package/docs/video/build-ai/audio/06-closing.mp3 +0 -0
  246. package/docs/video/build-ai/clips/01-hook.mp4 +0 -0
  247. package/docs/video/build-ai/clips/02-pain.mp4 +0 -0
  248. package/docs/video/build-ai/clips/03-solution.mp4 +0 -0
  249. package/docs/video/build-ai/clips/04-how.mp4 +0 -0
  250. package/docs/video/build-ai/clips/05-safe.mp4 +0 -0
  251. package/docs/video/build-ai/clips/06-closing.mp4 +0 -0
  252. package/docs/video/build-ai/first-frame-02-pain.png +0 -0
  253. package/docs/video/build-ai/first-frame-03-solution.png +0 -0
  254. package/docs/video/build-ai/first-frame-04-how.png +0 -0
  255. package/docs/video/build-ai/first-frame-05-safe.png +0 -0
  256. package/docs/video/build-ai/segments/01-hook.caption.txt +2 -0
  257. package/docs/video/build-ai/segments/01-hook.mp4 +0 -0
  258. package/docs/video/build-ai/segments/02-pain.mp4 +0 -0
  259. package/docs/video/build-ai/segments/03-solution.mp4 +0 -0
  260. package/docs/video/build-ai/segments/04-how.mp4 +0 -0
  261. package/docs/video/build-ai/segments/05-safe.mp4 +0 -0
  262. package/docs/video/build-ai/segments/06-closing.mp4 +0 -0
  263. package/docs/video/build-ai/segments/cap-01-hook.png +0 -0
  264. package/docs/video/build-ai/segments/cap-02-pain.png +0 -0
  265. package/docs/video/build-ai/segments/cap-03-solution.png +0 -0
  266. package/docs/video/build-ai/segments/cap-04-how.png +0 -0
  267. package/docs/video/build-ai/segments/cap-05-safe.png +0 -0
  268. package/docs/video/build-ai/segments/cap-06-closing.png +0 -0
  269. package/docs/video/build-ai/segments/final.txt +6 -0
  270. package/docs/video/build-posters/audio/01-hook.mp3 +0 -0
  271. package/docs/video/build-posters/audio/02-pain.mp3 +0 -0
  272. package/docs/video/build-posters/audio/03-solution.mp3 +0 -0
  273. package/docs/video/build-posters/audio/04-how.mp3 +0 -0
  274. package/docs/video/build-posters/audio/05-safe.mp3 +0 -0
  275. package/docs/video/build-posters/audio/06-closing.mp3 +0 -0
  276. package/docs/video/build-posters/cap-01-hook.png +0 -0
  277. package/docs/video/build-posters/cap-02-pain.png +0 -0
  278. package/docs/video/build-posters/cap-03-solution.png +0 -0
  279. package/docs/video/build-posters/cap-04-how.png +0 -0
  280. package/docs/video/build-posters/cap-05-safe.png +0 -0
  281. package/docs/video/build-posters/cap-06-closing.png +0 -0
  282. package/docs/video/build-posters/card-01-hook.png +0 -0
  283. package/docs/video/build-posters/card-06-closing.png +0 -0
  284. package/docs/video/build-posters/segments/01-hook.mp4 +0 -0
  285. package/docs/video/build-posters/segments/02-pain.mp4 +0 -0
  286. package/docs/video/build-posters/segments/03-solution.mp4 +0 -0
  287. package/docs/video/build-posters/segments/04-how.mp4 +0 -0
  288. package/docs/video/build-posters/segments/05-safe.mp4 +0 -0
  289. package/docs/video/build-posters/segments/06-closing.mp4 +0 -0
  290. package/docs/video/build-posters/segments/final.txt +6 -0
  291. package/docs/video/generate-video-ai.mjs +334 -0
  292. package/docs/video/generate-video-posters.mjs +204 -0
  293. package/docs/video/generate-video.mjs +426 -0
  294. package/docs/video/outline.zh-CN.md +102 -0
  295. package/docs/video/trellis-demo-video-ai.mp4 +0 -0
  296. package/docs/video/trellis-demo-video.mp4 +0 -0
  297. package/docs/video/voiceover.zh-CN.md +49 -0
  298. package/package.json +6 -2
  299. package/schema/builtin-skills/trellis-runtime/SKILL.md +117 -0
  300. package/schema/capability-selection.example.yaml +23 -0
  301. package/schema/scope.example.yaml +1 -1
  302. package/schema/servers.example.yaml +15 -1
@@ -0,0 +1,134 @@
1
+ # Trellis
2
+
3
+ [English](overview.md) · [简体中文](overview.zh-CN.md)
4
+
5
+ ## One-line description
6
+
7
+ > Trellis is a unified Code Agent Runtime for managing Skills, MCP, Memory, and shared instructions across Claude Code, Codex, Kiro, pi, Kimi Code, and ZCode.
8
+
9
+ 中文定位:
10
+
11
+ > Trellis 是统一的 Code Agent Runtime,为 Claude Code、Codex、Kiro、pi、Kimi Code 和 ZCode 统一管理 Skill、MCP、Memory 与共享指令。
12
+
13
+ ## Quick start
14
+
15
+ ### Install
16
+
17
+ ```bash
18
+ npm install -g agent-trellis
19
+ ```
20
+
21
+ ### Onboard an existing machine
22
+
23
+ Preview first:
24
+
25
+ ```bash
26
+ trellis onboard --dry-run
27
+ ```
28
+
29
+ Apply after reviewing the source Agent, managed Agents, MCP mode, and Memory choice:
30
+
31
+ ```bash
32
+ trellis onboard
33
+ ```
34
+
35
+ ### Inspect and verify
36
+
37
+ ```bash
38
+ trellis doctor
39
+ trellis secrets audit
40
+ trellis sync --dry-run
41
+ trellis mcp sync --dry-run
42
+ ```
43
+
44
+ ### Import an MCP Router export
45
+
46
+ ```bash
47
+ trellis mcp import ~/Desktop/mcp-servers.json --dry-run
48
+ trellis mcp import ~/Desktop/mcp-servers.json
49
+ ```
50
+
51
+ The importer de-duplicates existing servers, extracts environment credentials into the ignored local secret file, converts supported `mcp-remote` Basic Auth entries to native HTTP MCP, and skips unavailable legacy paths.
52
+
53
+ ## Architecture
54
+
55
+ ![Agent Trellis — One Runtime. Every Code Agent.](assets/poster-series-v3/agent-trellis-poster-v3-horizontal-en.png)
56
+
57
+ The overview shows the product boundary: Trellis is the control plane in the center; Skills, MCP, Memory, and Instructions are managed capability sources; Agents consume the resulting native or Runtime views.
58
+
59
+ Brand and social assets, including the poster series, live in [`docs/assets/poster-series-v3/`](assets/poster-series-v3/README.md).
60
+
61
+ ```mermaid
62
+ flowchart LR
63
+ Sources["Trellis Canonical Source\n~/.trellis"]
64
+ Sources --> Skills["Skills\nSKILL.md"]
65
+ Sources --> MCP["MCP\nservers.yaml"]
66
+ Sources --> Memory["Memory\nMarkdown / optional graph"]
67
+ Sources --> Instructions["Instructions\nagents.md"]
68
+
69
+ Skills --> Runtime["Trellis Runtime\nprovider registry + policy"]
70
+ MCP --> Runtime
71
+ Memory --> Runtime
72
+ Instructions --> Runtime
73
+
74
+ Runtime --> Native["Native adapters\nsymlink / JSON / TOML / bridge"]
75
+ Runtime --> Edge["MCP Runtime / Gateway\none Agent-facing edge"]
76
+
77
+ Native --> Claude["Claude Code"]
78
+ Native --> Codex["Codex"]
79
+ Native --> Kiro["Kiro"]
80
+ Native --> Pi["pi"]
81
+ Edge --> Kimi["Kimi Code"]
82
+ Edge --> ZCode["ZCode"]
83
+ Edge --> Claude
84
+ Edge --> Pi
85
+ ```
86
+
87
+ ### Ownership boundary
88
+
89
+ - `~/.trellis/` is the canonical source and policy boundary.
90
+ - Native Agent directories are projections, not independent sources of truth.
91
+ - Gateway/Runtime owns connection routing and provider exposure, not Agent private sessions.
92
+ - Secrets remain outside canonical YAML and are resolved at runtime.
93
+ - Runtime providers treat Memory, MCP output, and task records as untrusted context.
94
+
95
+ ## Delivery modes
96
+
97
+ | Mode | Meaning | Typical use |
98
+ |---|---|---|
99
+ | `native` | Project capabilities into the Agent's native configuration | Maximum native compatibility |
100
+ | `mcp` | Consume Trellis capabilities through the Runtime MCP edge | Runtime-first Agents such as Kimi Code |
101
+ | `both` | Keep native and Runtime delivery during a transition | Compatibility migration |
102
+
103
+ ## Similar products
104
+
105
+ Trellis is intentionally a composition layer, not a replacement for every adjacent product.
106
+
107
+ | Product/category | Primary focus | What Trellis adds or differs |
108
+ |---|---|---|
109
+ | Rules/Skills sync tools | Share instruction files or Skills across Agents | Adds MCP, Memory, secrets policy, Agent lifecycle, Runtime providers, and verification |
110
+ | [MCP Router](https://github.com/mcp-router/mcp-router) | Desktop MCP server management, workspaces, provider toggles, and logs | Trellis makes canonical MCP state the source of truth and adapts it to multiple Agents; MCP Router can remain an import source or upstream |
111
+ | [MetaMCP](https://github.com/metatool-ai/metamcp) / [mcp-hub](https://github.com/ravitemer/mcp-hub) | Aggregate many MCP servers behind one endpoint | Trellis combines aggregation with native Agent adapters, ownership-safe sync, OAuth routing, and built-in providers |
112
+ | [OpenViking](https://github.com/volcengine/OpenViking) / context databases | Store and retrieve Memory, resources, and Skills through a navigable context space | Trellis defines the Agent-facing control plane and can later mount OpenViking behind the Memory/Context provider contract |
113
+ | Agent orchestration platforms | Launch workers, schedule tasks, and coordinate execution | Trellis currently provides durable task handoff records and leases without implicit remote Agent execution; execution is a deliberate future layer |
114
+
115
+ ## Language and terminology
116
+
117
+ Documentation uses stable English identifiers for commands, files, types, and protocol names. Explanations can be translated without changing these identifiers:
118
+
119
+ - Code Agent Runtime / Agent Runtime
120
+ - canonical source
121
+ - native adapter
122
+ - Runtime delivery
123
+ - Skill / MCP / Memory / Instructions
124
+ - gateway / hub / direct
125
+ - managed Agent / unmanaged Agent
126
+
127
+ Use the language switch in the documentation entrypoints when translations are added. Keep command examples and configuration keys unchanged across languages.
128
+
129
+ ## Learn more
130
+
131
+ - [Getting started](getting-started.md) — complete onboarding and migration guide
132
+ - [Architecture](architecture.md) — implementation layers and adapter contracts
133
+ - [Research](research.md) — ecosystem comparison and design rationale
134
+ - [Roadmap](roadmap.md) — verified milestones and remaining work
@@ -0,0 +1,102 @@
1
+ # Trellis
2
+
3
+ [English](overview.md) · [简体中文](overview.zh-CN.md)
4
+
5
+ ## 一句话介绍
6
+
7
+ > Trellis 是统一的 Code Agent Runtime,为 Claude Code、Codex、Kiro、pi、Kimi Code 和 ZCode 统一管理 Skill、MCP、Memory 与共享指令。
8
+
9
+ ## 快速开始
10
+
11
+ ### 安装
12
+
13
+ ```bash
14
+ npm install -g agent-trellis
15
+ ```
16
+
17
+ ### 接管已有环境
18
+
19
+ 先预览:
20
+
21
+ ```bash
22
+ trellis onboard --dry-run
23
+ ```
24
+
25
+ 确认迁移源、托管 Agent、MCP 模式和 Memory 选项后执行:
26
+
27
+ ```bash
28
+ trellis onboard
29
+ ```
30
+
31
+ ### 检查状态
32
+
33
+ ```bash
34
+ trellis doctor
35
+ trellis secrets audit
36
+ trellis sync --dry-run
37
+ trellis mcp sync --dry-run
38
+ ```
39
+
40
+ ### 导入 MCP Router 配置
41
+
42
+ ```bash
43
+ trellis mcp import ~/Desktop/mcp-servers.json --dry-run
44
+ trellis mcp import ~/Desktop/mcp-servers.json
45
+ ```
46
+
47
+ 导入器会自动去重、提取凭证、转换支持的 `mcp-remote` Basic Auth,并跳过本机不存在的历史路径。
48
+
49
+ ## 架构
50
+
51
+ ![Agent Trellis — 一个 Runtime,统一所有 Code Agent。](assets/poster-series-v3/agent-trellis-poster-v3-horizontal-zh.png)
52
+
53
+ Trellis 以 `~/.trellis/` 为 canonical source,在中心统一管理四类能力:
54
+
55
+ - Skill:可复用的 Agent 工作方法;
56
+ - MCP:工具、数据源和外部服务;
57
+ - Memory:canonical Markdown 以及可选的共享图数据库;
58
+ - Instructions:跨 Agent 生效的全局指令。
59
+
60
+ 这些能力通过 native adapter 或 Runtime/Gateway 投递给不同的 Code Agent。
61
+
62
+ 品牌与社媒海报资源见 [`docs/assets/poster-series-v3/`](assets/poster-series-v3/README.md),包含竖版(手机端)与横版(桌面端)海报的中英文版本。
63
+
64
+ ```text
65
+ ~/.trellis/ canonical source
66
+ │
67
+ ▼
68
+ Trellis Runtime / Gateway
69
+ │
70
+ ├── Native adapters ── Claude Code / Codex / Kiro / pi
71
+ └── MCP Runtime ────── Kimi Code / ZCode / 其他 Runtime-first Agent
72
+ ```
73
+
74
+ ## 与相似产品的关系
75
+
76
+ | 产品/类别 | 主要解决的问题 | Trellis 的区别 |
77
+ |---|---|---|
78
+ | Rules / Skills 同步工具 | 共享规则和 Skill 文件 | 进一步统一 MCP、Memory、凭证策略、托管边界和验证 |
79
+ | [MCP Router](https://github.com/mcp-router/mcp-router) | 桌面 MCP 管理、Workspace、Provider 和日志 | 可作为 Trellis 的导入源或上游;Trellis 自己维护 canonical MCP 状态 |
80
+ | [MetaMCP](https://github.com/metatool-ai/metamcp) / [mcp-hub](https://github.com/ravitemer/mcp-hub) | MCP 聚合和统一入口 | Trellis 额外负责不同 Agent 的 native 适配、生命周期和安全同步 |
81
+ | [OpenViking](https://github.com/volcengine/OpenViking) | Memory、资源和 Skill 的上下文数据库 | Trellis 可将其接入 Memory/Context Provider,作为底层上下文服务 |
82
+
83
+ ## 术语约定
84
+
85
+ 命令、配置键、文件名和协议名称统一保留英文,解释文字可以翻译:
86
+
87
+ - Code Agent Runtime / Agent Runtime
88
+ - canonical source
89
+ - native adapter
90
+ - Runtime delivery
91
+ - Skill / MCP / Memory / Instructions
92
+ - gateway / hub / direct
93
+ - managed Agent / unmanaged Agent
94
+
95
+ 这样不同语言的文档可以共享同一组命令和配置示例,避免翻译造成操作差异。
96
+
97
+ ## 深入阅读
98
+
99
+ - [完整上手指南](getting-started.md)
100
+ - [架构说明](architecture.md)
101
+ - [技术调研](research.md)
102
+ - [路线图](roadmap.md)
package/docs/research.md CHANGED
@@ -66,6 +66,65 @@ becomes a second place "what servers exist" is defined, outside `.trellis/`
66
66
  entirely, and this project hit real drift from exactly that shape of setup
67
67
  before hub mode existed as a documented option.
68
68
 
69
+ ### MCP Runtime / built-in capability direction — confirmed architecture
70
+
71
+ The next abstraction is broader than a skill-only MCP server. MCP defines
72
+ tools, resources, and prompts with different control models, so a Trellis
73
+ runtime should host a registry of providers rather than make every new
74
+ capability its own stdio process:
75
+
76
+ ```text
77
+ TrellisMcpRuntime
78
+ ├─ BuiltinRegistry: skills, memory, status, future capabilities
79
+ └─ UpstreamProvider: existing GatewayBackend / RemoteBackend
80
+ ```
81
+
82
+ The first provider candidate is a read-only canonical skill provider. A future
83
+ memory provider can expose local graph or OpenViking-backed memory through the
84
+ same runtime edge. The existing gateway's connection/OAuth/timeout code stays
85
+ behind the upstream provider seam. This preserves one agent-facing MCP entry
86
+ while allowing more Trellis-native capabilities without duplicating transport,
87
+ scope, or lifecycle logic.
88
+
89
+ The security boundary is explicit: every provider receives the requesting
90
+ agent identity and re-checks scope; skill providers read bounded content only;
91
+ model-visible tools never mutate canonical configuration or execute skill
92
+ scripts by default.
93
+
94
+ ### Local Claude Code / pi dogfood — 2026-09-18
95
+
96
+ After an external, credential-minimized host snapshot, the managed set was
97
+ narrowed from all four agents to Claude Code and pi through `trellis manage
98
+ set`. Hashes of Codex and Kiro's relevant native state were identical before
99
+ and after detaching them. All 36 pre-existing Claude skill directories were
100
+ byte-identical to canonical, moved intact into the snapshot directory, and
101
+ replaced by Trellis-managed symlinks; pi received the same 36 skills,
102
+ `AGENTS.md`, and the packaged MCP bridge. Subsequent `sync` and `mcp sync`
103
+ dry-runs were empty, `doctor` had zero findings, and `secrets audit` was clean.
104
+
105
+ Real startup exposed runtime issues that structural tests correctly cannot
106
+ predict:
107
+
108
+ - Claude connected `chrome-devtools`, `mcp-router`, `tanka`, and
109
+ `harness-solo`; Figma and Sentry require their native OAuth flows.
110
+ - A real Claude model session waited for `chrome-devtools` and emitted an
111
+ actual `list_pages` tool call, proving model-to-MCP registration. The direct
112
+ six-server catalog—dominated by Tanka's large tool surface—drove roughly
113
+ 167k input tokens and hit the verification budget before the tool result was
114
+ returned. Fine-grained MCP routes are therefore operationally necessary,
115
+ not merely a UI convenience.
116
+ - pi loaded the Trellis bridge and attempted every canonical upstream. It
117
+ reported `tanka-mcp` missing from pi's process PATH, plus missing Figma and
118
+ Sentry authorization. Its `openai-codex` OAuth check was ready, but a real
119
+ model turn failed before streaming began with WebSocket/SSE `fetch failed`;
120
+ no tool call occurred. That is a pi-provider transport issue, separate from
121
+ bridge discovery and tool registration.
122
+
123
+ The next local pilot should route only a small healthy MCP subset to Claude
124
+ and pi before enabling Runtime delivery. Repeating real model calls against
125
+ the full catalog would spend quota without testing the abstraction we care
126
+ about.
127
+
69
128
  ## Shared memory (reuse)
70
129
 
71
130
  Checked directly against this real machine before writing this section,
package/docs/roadmap.md CHANGED
@@ -44,11 +44,10 @@ tests of the pieces — see docs/architecture.md's testing philosophy.
44
44
 
45
45
  **P2 is done and archived** (`openspec/changes/archive/2026-09-12-trellis-mcp-sync-p2/`;
46
46
  living spec at `openspec/specs/mcp-server-sync/`). `trellis mcp sync`
47
- covers create/repair only — automatic removal is deliberately deferred: a
48
- symlink's realpath proves Trellis ownership for skills, but a bare TOML/
49
- JSON key has no equivalent marker, so "gone from canonical" and "the user
50
- configured this directly" are indistinguishable without a `trellis.lock.json`
51
- ownership-tracking mechanism that doesn't exist yet. Two write mechanisms
47
+ covers create/repair and, after the ownership-ledger parity follow-up,
48
+ ownership-safe removal: a bare TOML/JSON key is removable only when the
49
+ ledger proves Trellis still owns the exact rendered entry. A hand-edited entry
50
+ is preserved. Two write mechanisms
52
51
  were chosen only after empirically ruling out the obvious ones first: both
53
52
  `@iarna/toml` and `smol-toml` silently drop comments and reformat arrays on
54
53
  a bare parse→stringify round-trip (so Codex's `config.toml` is patched by a
@@ -940,7 +939,7 @@ tests passing.
940
939
  | P7 | ✅ Secrets/env management: shared `resolveSecretEnv` + `secrets.policy.yaml`'s `env_file`, pi bridge stops reading raw ambient env, `secrets audit` gains a `missing-env-value` check | P3, P4 |
941
940
  | P8 | ✅ Kiro `${VAR}` fix: adapter also manages `kiroAgent.mcpApprovedEnvVars`, without which Kiro silently never substitutes any env reference Trellis writes | P2 |
942
941
  | P9 | ✅ MCP transport/auth expansion: `headers` field for static bearer/API-key remote auth (Claude Code/Codex/Kiro/pi bridge, each via its own real schema), `sse` transport; real OAuth flows explicitly delegated to each agent's own native support, not reimplemented | P2, P4, P8 |
943
- | P10 | GUI: evaluate embedding into mcp-router's or skills-hub's existing interface before building anything new | P3–P9 |
942
+ | P10 | ✅ GUI: decided against embedding into an existing dashboard — `@trellis/gui` (Tauri v2 + React, `openspec/changes/trellis-gui/`) is an independent read-write desktop app whose Node sidecar imports `agent-trellis`'s internal command modules directly (workspace-relative, not the read-only `@trellis/sdk` barrel) and reuses the exact same plan/confirm/backup mechanics the CLI already has. Sidecar core, all read/write endpoints (including the `mcp add`/`mcp remove`/`skill add`/`skill remove` backup-tracking gap this work found and fixed — see P5's own SDK note below, a `agent-trellis`-wide fix, not GUI-only), live file-watch + WebSocket updates, macOS binary packaging, Tauri `externalBin` spawning, the React read/write views, MCP import, the real brand mark, and a real ad-hoc-signed `.dmg` (`npx tauri build`, release) are all built and verified (real HTTP/WS integration tests throughout, plus real headless-DOM tests of the write-confirmation and import flows). Also added: a "Chat" tab for real multi-turn streaming conversation with any configured CLI Agent (typewriter effect, tool-call/tool-result bubbles for Claude Code's `stream-json` shape, one-time-per-session confirmation, in-memory-only history — never persisted, since it may carry secrets), built on `trellis-agent-bridge`'s delegated-call primitive upgraded to stream (`runDelegatedCallStreaming`). Domestic-CLI coverage researched and documented per-CLI rather than assumed uniform, then upgraded from doc-only to `--help`-confirmed once Qoder and MiniMax Code were actually installed (`npm install -g @qoder-ai/qodercli @minimax-ai/code`, both verified as the real official packages first): Qoder, Kimi Code, and MiniMax Code all ship verified starter configs with `stream-json` output and session-resume flags — Qoder's `stream-json` shape was confirmed byte-identical to Claude Code's by actually running it (zero cost: it failed cleanly on an unauthenticated status check before reaching a model), while MiniMax Code's flags are confirmed real but its exact `stream-json` line shapes are not (same zero-cost auth-failure situation, but the call never got as far as producing one). ZCode (Z.ai/智谱) and Trae are both explicitly **not** shipped — real products, but no documented non-interactive CLI mode was found for either's official binary after checking their own docs/`--help` (don't confuse ZCode with the similarly-named but unofficial and different `zcode-cli` forks, which do document prompt flags but aren't the product being asked about). Also added: a real demo sandbox (`/tmp/trellis-gui-sandbox`) populated with real MCP servers/Skills/Memory files, and English/Chinese UI support (hand-rolled `I18nProvider`/`useI18n()`, no new runtime dependency — every view's UI chrome is translated, real backend data like agent ids/paths/commands never is, language persisted to `localStorage`). Ships as an ad-hoc-signed `.dmg`, accepted as the final distribution state — full Apple Developer ID signature + notarization was assessed and explicitly deprioritized (not a code gap, and not worth the credential/process overhead for this release) | P3–P9 |
944
943
  | P11 | ✅ Migrate category selection: `--only skills\|instructions` on `migrate`, same interactive picker `onboard` already uses | P1 |
945
944
  | P12 | ✅ Canonical CRUD via CLI: `trellis skill add/remove/list`, `trellis mcp add/remove/list` | P1, P2 |
946
945
  | P13 | ✅ Sandbox verification against this machine's real, structurally-relevant state (not just fixtures); every agent verified as both migrate source and sync/mcp-sync target | P0–P2 |
@@ -956,6 +955,12 @@ tests passing.
956
955
  | P23 | ✅ Onboard MCP mode + memory toggle: closes the last hand-editing gap — turning on gateway or hub mode, or the shared memory server, meant directly editing `~/.trellis/mcp/servers.yaml`'s top-level `hub`/`gateway` keys or its commented-out `memory:` example, since no command wrote them (`trellis mcp add`'s flags are all per-server). New `writeMcpModeYaml` in `src/core/canonical.ts` (`Document`-based, mirrors `upsertServerYaml`'s comment-preserving edit) plus `trellis onboard --mcp-mode direct\|hub\|gateway` (`--hub-url`, `--gateway-agents`) and `--memory on\|off` close it. Both follow onboard's existing managed-set idempotency shape rather than a new one: read current state first, omitting the flag always preserves it untouched with zero prompting — identical on a first run (nothing configured) and a later one (something already is), which is the actual point: one command for both, not a setup path and a separate reconfigure path. Deliberately flag-only, never an interactive picker (a mode change reroutes every managed agent's MCP transport at once — too wide a blast radius for Enter-mashing through a prompt sequence to trigger by accident); a one-line, non-prompting status line on a real terminal keeps the flags discoverable anyway. `--memory on` refuses outright if `"memory"` is already in `known_host_injected`, rather than writing a definition the very next `mcp sync` would refuse to propagate to any agent. Because mode/memory resolution runs before onboard's existing `mcp sync`/`memory sync` stages in the same chain, `trellis onboard --memory on` enables the server, syncs it to every managed agent, and populates it from canonical `memories/*.md` — all in one run | P17, P21, P22 |
957
956
  | P24 | ✅ Migrate static-env secret extraction: found via real-machine dogfooding — kiro's own real `mcp-router` server had its token hardcoded as a literal (not a `${VAR}` reference), which the existing literal-secret guard correctly refused to import, but the only path forward was three manual hand-edits across two files. A `staticEnv` match specifically (its own dict key is already a natural variable name) is now extracted automatically instead of refused: the real value moves to `~/.trellis/mcp/servers.local.env` (a sibling of `servers.yaml`, or an already-configured `secrets.policy.yaml` `env_file` if one exists — respecting a prior explicit choice rather than repointing it), canonical gets a `${NAME}` reference, `secrets.policy.yaml` gains the name in `allowed_vars`, and `~/.trellis/.gitignore` is ensured to protect the new file, all ensured lazily at the moment of the first real write, never as unconditional `init` bootstrap. `migrate` still never writes to the source agent's own file — kiro's real config keeps its literal forever, and `secrets audit` correctly keeps flagging it; extraction normalizes to a `warning` in onboard's verdict, not `blocked`, with a remediation naming that the source was left untouched. A literal found anywhere other than `staticEnv` (`command`/`url`/`args`/`headers` — no natural name to extract to) still refuses exactly as before. `findLiteralSecret` (`src/adapters/mcpPlan.ts`) now reports which field and dict key a match came from, closing a previously-undocumented spec gap for the unaffected refusal path in the same change. Also found via the same dogfooding, one commit later: extraction alone doesn't make the `${VAR}` reference `mcp sync` writes into an agent's native config actually resolve — that only happens once the name is in the environment that agent's own runtime reads from, which `servers.local.env` alone never reaches. `ensureShellEnvSource` (mirrors `ensureGitignoreEntry`'s idempotent marker-block shape) now appends one generic `set -a; source ...; set +a` pointer block to the user's shell rc (`~/.zshrc`/`~/.bash_profile`/`~/.profile` by `$SHELL`) — never a literal secret line — every real `migrate` run whenever `env_file` is set, retroactively wiring a machine that extracted before this existed. Separately, fixed a real incident this surfaced: no subcommand branch in `src/cli.ts` recognized `--help`/`-h`, so a stray `--help` silently ran the real command instead of printing usage — now short-circuits to usage text before any parsing, for every command. One more round: real-machine research (`mcpConnect.ts`, `jsonMcp.ts`, `tomlSection.ts`) found no `${VAR}` resolution mechanism proven across every consumer for `command`/`url`/`args`, and `headers` unverified for claude-code/kiro specifically — so `command`/`url`/`args`/`headers` literals are now *accepted* into canonical as ordinary config (both at `migrate`'s import boundary and `resolveMcpPlan`'s sync-out boundary), never refused and never faked into an unresolvable reference; `secrets audit` now also scans canonical's own `servers.yaml` for this (`agent: "canonical"`) so it's never silent. `staticEnv` extractions are now named `TRELLIS_<SERVER>_<KEY>` rather than the bare source key, to rule out cross-server or ambient-environment collisions — an already-extracted server (this project's own real `mcp-router`) is recognized as already-migrated by the *value* an existing reference resolves to, not by re-deriving today's naming scheme, so it keeps working under its original bare name without being renamed or re-extracted | P16, P18 |
958
957
 
958
+ | P25 | ✅ Onboard prompt TUI: replaces Trellis's hand-written raw-mode picker and ANSI redraw logic with `@clack/prompts`, preserving non-TTY fallbacks, `--json`, stream-injected tests, stderr-only interactive chrome, and compact agent summaries that show counts instead of enumerating skills. Full-screen TUI runtimes remain out of scope; onboarding stays visible in terminal scrollback | P22 |
959
+ | P26 | ✅ Fine-grained capability selection: item-level skill/MCP/memory selection from a serializable selection file or searchable TUI, per-agent MCP route overrides with direct/gateway/hub precedence, selected-memory sync without implicit native-memory import, and explicit unsupported-reader diagnostics | P17, P21, P22, P25 |
960
+ | P27 | 🚧 Trellis MCP Runtime phase 1 ✅: one provider registry and agent-facing MCP edge; SkillProvider and the read-only CanonicalMemoryProvider expose scoped progressive-disclosure tools/resources, runtime delivery supports native/mcp/both per agent, selected upstream tools mount through the existing GatewayBackend, and doctor checks runtime drift. Remaining: upstream resource/prompt backend, real pi/Kiro model smoke, and real Claude model smoke (Claude remains intentionally deferred) | P21, P25, P26 |
961
+ | P28 | 🚧 Kimi Code Runtime-first adapter: Kimi is recognized as a managed Agent, receives one deferred `trellis` Runtime entry in `~/.kimi-code/mcp.json`, and `trellis kimi` isolates native Skill discovery for Runtime-only delivery. The Runtime Skill is available through SkillProvider; remaining: real Kimi model-session smoke and upstream resource/prompt consumption | P27 |
962
+ | P29 | ✅ ZCode Runtime-first adapter: `zcode` is a managed Agent with profile-aware static configuration (`~/.zcode/cli/config.json` for official profiles and `setting.json` for the local community CLI), a single owned Runtime MCP entry, scoped-Skill isolation, safe instruction/MCP migration, doctor/onboarding coverage, and public-CLI chat/delegation parsing for ZCode's `response`/`sessionId` stream envelope. Desktop-private runtime paths are never process-host entry points. | P27, P28 |
963
+
959
964
  **Cross-machine / cloud sharing — confirmed future direction, not yet
960
965
  scoped as a phase.** Surveyed 2026-09-15 (`docs/research.md`'s "Cross-
961
966
  machine / cloud sharing" section): keeping `~/.trellis` consistent across
@@ -0,0 +1,76 @@
1
+ # Trellis 分享视频 · 素材与录制清单
2
+
3
+ > 本目录(`docs/video/`)在 `.gitignore` 中,所有内容只存在于本地,
4
+ > 不会进入开源仓库。
5
+
6
+ ## 自动生成视频
7
+
8
+ ```bash
9
+ node docs/video/generate-video.mjs # 输出 docs/video/trellis-demo-video.mp4
10
+ ```
11
+
12
+ 一条命令完成:重置沙盒 → 真实跑一遍 CLI 并捕获输出 → 渲染终端帧与卡片
13
+ (qlmanage)→ 系统 TTS 生成中文口播(Ting-Ting Enhanced)→ ffmpeg 合成
14
+ 1920×1080 mp4。改口播文案直接编辑脚本里的 `blocks[].narration`;终端帧
15
+ 内容来自真实命令输出,无需手改。依赖:ffmpeg(`brew install ffmpeg`)、
16
+ macOS 自带的 qlmanage/sips/say/afinfo。
17
+
18
+ ## 演示沙盒(不碰真实配置)
19
+
20
+ ```bash
21
+ bash scripts/video-demo-setup.sh # 生成/重置演示环境到 /tmp/trellis-demo-home
22
+ export HOME=/tmp/trellis-demo-home # 之后所有 trellis 命令都在沙盒里运行
23
+ ```
24
+
25
+ 沙盒内容:Claude Code(1 份指令 + 2 个 Skill + 2 个 MCP 服务器)、
26
+ Codex(config.toml + 1 个 MCP 服务器)。每次重录前重跑 setup 脚本即可
27
+ 回到初始状态。已验证全流程可跑通:`init → onboard --dry-run → onboard →
28
+ doctor → rollback`。
29
+
30
+ 录制用命令(已跳过交互选择,流程不打断):
31
+
32
+ ```bash
33
+ trellis init
34
+ trellis onboard --dry-run --agent claude-code --manage codex
35
+ trellis onboard --agent claude-code --manage codex
36
+ trellis doctor
37
+ trellis rollback
38
+ ```
39
+
40
+ ## 终端与录屏设置
41
+
42
+ | 项 | 建议 |
43
+ |---|---|
44
+ | 终端主题 | 浅色(手机端观看对比度更好) |
45
+ | 字号 | 20–24pt,观众多用手机看 |
46
+ | 提示符 | `export PS1='$ '`,干净无干扰 |
47
+ | 窗口 | 1280×720 或 1440×810 逻辑分辨率 |
48
+ | 录屏 | Kap / QuickTime;每条 take 前 `clear` |
49
+ | 导出 | 横屏 1920×1080(B 站/YouTube);竖屏 1080×1920(视频号/小红书)则后期裁切,注意命令别超出安全区 |
50
+
51
+ ## 分镜与素材对照
52
+
53
+ | 场景 | 画面 | 素材 |
54
+ |---|---|---|
55
+ | 1 开场 | 终端/编辑器随意状态 | 现场录 |
56
+ | 2 痛点 | `ls ~/.claude` `ls ~/.codex`(真实目录,只读) | 现场录 |
57
+ | 3 方案 | 海报全屏 | [`../assets/poster-series-v3/agent-trellis-poster-v3-unified-zh.png`](../assets/poster-series-v3/agent-trellis-poster-v3-unified-zh.png) |
58
+ | 4 演示 | 终端实录 | 沙盒命令(见上) |
59
+ | 5 设计点 | README Design principles 滚动 | github.com/paul-leo/Trellis |
60
+ | 6 收尾 | GitHub 仓库首页 + Star 按钮停留 2 秒 | 同上 |
61
+
62
+ ## 其他可用素材
63
+
64
+ - 封面图/片尾卡:[`../assets/poster-series-v3/agent-trellis-poster-v3-horizontal-zh.png`](../assets/poster-series-v3/agent-trellis-poster-v3-horizontal-zh.png)
65
+ - Logo 叠层(角标):[`../assets/brand-v3/trellis-mark-v3-a.svg`](../assets/brand-v3/trellis-mark-v3-a.svg)
66
+ - 口播逐字稿:[voiceover.zh-CN.md](voiceover.zh-CN.md)
67
+ - 场景大纲:[outline.zh-CN.md](outline.zh-CN.md)
68
+ - 60 秒极简版:见 [outline.zh-CN.md](outline.zh-CN.md) 末尾
69
+
70
+ ## 录制前 Checklist
71
+
72
+ - [ ] 重跑 `bash scripts/video-demo-setup.sh` 重置沙盒
73
+ - [ ] `export HOME=/tmp/trellis-demo-home && export PS1='$ ' && clear`
74
+ - [ ] 终端字号调大,关闭通知(勿扰模式)
75
+ - [ ] 预演一遍场景 4,确认输出与口播一致
76
+ - [ ] 麦克风电平测试 5 秒
@@ -0,0 +1,3 @@
1
+ file '/Users/pengzai/www/Trellis/docs/video/build/frames/01-opening-0.png'
2
+ duration 11.053
3
+ file '/Users/pengzai/www/Trellis/docs/video/build/frames/01-opening-0.png'
@@ -0,0 +1,5 @@
1
+ file '/Users/pengzai/www/Trellis/docs/video/build/frames/02-pain-1.png'
2
+ duration 2.172
3
+ file '/Users/pengzai/www/Trellis/docs/video/build/frames/02-pain-2.png'
4
+ duration 5.068
5
+ file '/Users/pengzai/www/Trellis/docs/video/build/frames/02-pain-2.png'
@@ -0,0 +1,3 @@
1
+ file '/Users/pengzai/www/Trellis/docs/video/build/frames/03-solution-3.png'
2
+ duration 6.482
3
+ file '/Users/pengzai/www/Trellis/docs/video/build/frames/03-solution-3.png'
@@ -0,0 +1,3 @@
1
+ file '/Users/pengzai/www/Trellis/docs/video/build/frames/04-install-4.png'
2
+ duration 2.407
3
+ file '/Users/pengzai/www/Trellis/docs/video/build/frames/04-install-4.png'