agent-trellis 0.8.0 → 0.9.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 (251) hide show
  1. package/README.md +45 -206
  2. package/dist/adapters/zcode.d.ts +21 -0
  3. package/dist/adapters/zcode.js +234 -0
  4. package/dist/cli.js +119 -10
  5. package/dist/commands/doctor.js +2 -0
  6. package/dist/commands/init.d.ts +1 -1
  7. package/dist/commands/init.js +4 -1
  8. package/dist/commands/mcp.d.ts +56 -14
  9. package/dist/commands/mcp.js +105 -28
  10. package/dist/commands/mcpGateway.js +2 -1
  11. package/dist/commands/mcpImport.d.ts +21 -2
  12. package/dist/commands/mcpImport.js +30 -7
  13. package/dist/commands/memory.d.ts +13 -1
  14. package/dist/commands/memory.js +15 -0
  15. package/dist/commands/migrate.js +4 -1
  16. package/dist/commands/onboard.js +15 -4
  17. package/dist/commands/remoteSkill.d.ts +90 -0
  18. package/dist/commands/remoteSkill.js +392 -0
  19. package/dist/commands/rollback.js +55 -1
  20. package/dist/commands/secretsAudit.js +4 -1
  21. package/dist/commands/skill.d.ts +37 -6
  22. package/dist/commands/skill.js +73 -15
  23. package/dist/commands/sync.js +3 -1
  24. package/dist/core/adapter.d.ts +11 -1
  25. package/dist/core/canonical.d.ts +17 -1
  26. package/dist/core/canonical.js +54 -0
  27. package/dist/core/types.d.ts +1 -1
  28. package/dist/core/types.js +1 -0
  29. package/dist/lib/agentBridge.d.ts +169 -0
  30. package/dist/lib/agentBridge.js +367 -0
  31. package/dist/lib/agentBridgeProvider.d.ts +14 -0
  32. package/dist/lib/agentBridgeProvider.js +95 -0
  33. package/dist/lib/backup.d.ts +42 -0
  34. package/dist/lib/backup.js +36 -3
  35. package/dist/lib/chatAgents.d.ts +42 -0
  36. package/dist/lib/chatAgents.js +59 -0
  37. package/dist/lib/dirDigest.d.ts +11 -0
  38. package/dist/lib/dirDigest.js +52 -0
  39. package/dist/lib/envVarNames.d.ts +3 -0
  40. package/dist/lib/envVarNames.js +19 -0
  41. package/dist/lib/installAgent.d.ts +1 -1
  42. package/dist/lib/installAgent.js +1 -1
  43. package/dist/lib/mcpMigrateRead.d.ts +1 -0
  44. package/dist/lib/mcpMigrateRead.js +19 -1
  45. package/dist/lib/realHomeSnapshot.js +5 -0
  46. package/dist/lib/remoteSkillLock.d.ts +26 -0
  47. package/dist/lib/remoteSkillLock.js +88 -0
  48. package/dist/lib/remoteSkillSource.d.ts +45 -0
  49. package/dist/lib/remoteSkillSource.js +206 -0
  50. package/dist/lib/runtimeControlProvider.js +2 -0
  51. package/dist/lib/taskStore.js +1 -1
  52. package/dist/lib/terminalPicker.js +33 -6
  53. package/dist/lib/zcodeOwnership.d.ts +17 -0
  54. package/dist/lib/zcodeOwnership.js +37 -0
  55. package/dist/pi-bridge/bundle.js +2 -1
  56. package/dist/probes/codex.d.ts +7 -0
  57. package/dist/probes/codex.js +37 -5
  58. package/dist/probes/zcode.d.ts +32 -0
  59. package/dist/probes/zcode.js +140 -0
  60. package/docs/architecture.md +9 -5
  61. package/docs/assets/brand-v3/trellis-mark-v3-a.png +0 -0
  62. package/docs/assets/brand-v3/trellis-mark-v3-a.svg +10 -0
  63. package/docs/assets/poster-series-v3/README.md +60 -0
  64. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-en.png +0 -0
  65. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-en.svg +51 -0
  66. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-zh.png +0 -0
  67. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-zh.svg +51 -0
  68. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-en.png +0 -0
  69. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-en.svg +48 -0
  70. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-zh.png +0 -0
  71. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-zh.svg +48 -0
  72. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-en.png +0 -0
  73. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-en.svg +56 -0
  74. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-zh.png +0 -0
  75. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-zh.svg +56 -0
  76. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-en.png +0 -0
  77. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-en.svg +47 -0
  78. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-zh.png +0 -0
  79. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-zh.svg +47 -0
  80. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-en.png +0 -0
  81. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-en.svg +51 -0
  82. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-zh.png +0 -0
  83. package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-zh.svg +51 -0
  84. package/docs/getting-started.md +244 -14
  85. package/docs/overview.md +6 -3
  86. package/docs/overview.zh-CN.md +5 -3
  87. package/docs/roadmap.md +2 -1
  88. package/docs/video/README.md +76 -0
  89. package/docs/video/build/audio/01-opening.aiff +0 -0
  90. package/docs/video/build/audio/01-opening.mp3 +0 -0
  91. package/docs/video/build/audio/02-pain.aiff +0 -0
  92. package/docs/video/build/audio/02-pain.mp3 +0 -0
  93. package/docs/video/build/audio/03-solution.aiff +0 -0
  94. package/docs/video/build/audio/03-solution.mp3 +0 -0
  95. package/docs/video/build/audio/04-install.aiff +0 -0
  96. package/docs/video/build/audio/04-install.mp3 +0 -0
  97. package/docs/video/build/audio/04-setup.mp3 +0 -0
  98. package/docs/video/build/audio/05-dryrun.mp3 +0 -0
  99. package/docs/video/build/audio/05-init.aiff +0 -0
  100. package/docs/video/build/audio/05-init.mp3 +0 -0
  101. package/docs/video/build/audio/05-interactive.mp3 +0 -0
  102. package/docs/video/build/audio/06-dryrun.aiff +0 -0
  103. package/docs/video/build/audio/06-dryrun.mp3 +0 -0
  104. package/docs/video/build/audio/06-onboard.mp3 +0 -0
  105. package/docs/video/build/audio/06-run.mp3 +0 -0
  106. package/docs/video/build/audio/07-onboard.aiff +0 -0
  107. package/docs/video/build/audio/07-onboard.mp3 +0 -0
  108. package/docs/video/build/audio/07-verify.mp3 +0 -0
  109. package/docs/video/build/audio/08-closing.mp3 +0 -0
  110. package/docs/video/build/audio/08-doctor.aiff +0 -0
  111. package/docs/video/build/audio/08-doctor.mp3 +0 -0
  112. package/docs/video/build/audio/09-rollback.aiff +0 -0
  113. package/docs/video/build/audio/09-rollback.mp3 +0 -0
  114. package/docs/video/build/audio/10-principles.aiff +0 -0
  115. package/docs/video/build/audio/10-principles.mp3 +0 -0
  116. package/docs/video/build/audio/11-closing.aiff +0 -0
  117. package/docs/video/build/audio/11-closing.mp3 +0 -0
  118. package/docs/video/build/frames/01-opening-0.png +0 -0
  119. package/docs/video/build/frames/02-pain-1.png +0 -0
  120. package/docs/video/build/frames/02-pain-2.png +0 -0
  121. package/docs/video/build/frames/03-solution-3.png +0 -0
  122. package/docs/video/build/frames/04-install-4.png +0 -0
  123. package/docs/video/build/frames/04-setup-4.png +0 -0
  124. package/docs/video/build/frames/04-setup-5.png +0 -0
  125. package/docs/video/build/frames/05-dryrun-6.png +0 -0
  126. package/docs/video/build/frames/05-init-5.png +0 -0
  127. package/docs/video/build/frames/05-interactive-5.png +0 -0
  128. package/docs/video/build/frames/05-interactive-6.png +0 -0
  129. package/docs/video/build/frames/06-dryrun-6.png +0 -0
  130. package/docs/video/build/frames/06-dryrun-7.png +0 -0
  131. package/docs/video/build/frames/06-onboard-7.png +0 -0
  132. package/docs/video/build/frames/06-onboard-8.png +0 -0
  133. package/docs/video/build/frames/06-run-7.png +0 -0
  134. package/docs/video/build/frames/06-run-8.png +0 -0
  135. package/docs/video/build/frames/07-onboard-10.png +0 -0
  136. package/docs/video/build/frames/07-onboard-7.png +0 -0
  137. package/docs/video/build/frames/07-onboard-8.png +0 -0
  138. package/docs/video/build/frames/07-onboard-9.png +0 -0
  139. package/docs/video/build/frames/07-verify-10.png +0 -0
  140. package/docs/video/build/frames/07-verify-8.png +0 -0
  141. package/docs/video/build/frames/07-verify-9.png +0 -0
  142. package/docs/video/build/frames/08-closing-10.png +0 -0
  143. package/docs/video/build/frames/08-closing-11.png +0 -0
  144. package/docs/video/build/frames/08-doctor-11.png +0 -0
  145. package/docs/video/build/frames/08-doctor-9.png +0 -0
  146. package/docs/video/build/frames/09-rollback-10.png +0 -0
  147. package/docs/video/build/frames/09-rollback-12.png +0 -0
  148. package/docs/video/build/frames/10-principles-11.png +0 -0
  149. package/docs/video/build/frames/10-principles-13.png +0 -0
  150. package/docs/video/build/frames/11-closing-12.png +0 -0
  151. package/docs/video/build/frames/11-closing-14.png +0 -0
  152. package/docs/video/build/segments/01-opening.mp4 +0 -0
  153. package/docs/video/build/segments/01-opening.txt +3 -0
  154. package/docs/video/build/segments/02-pain.mp4 +0 -0
  155. package/docs/video/build/segments/02-pain.txt +5 -0
  156. package/docs/video/build/segments/03-solution.mp4 +0 -0
  157. package/docs/video/build/segments/03-solution.txt +3 -0
  158. package/docs/video/build/segments/04-install.mp4 +0 -0
  159. package/docs/video/build/segments/04-install.txt +3 -0
  160. package/docs/video/build/segments/04-setup.mp4 +0 -0
  161. package/docs/video/build/segments/04-setup.txt +3 -0
  162. package/docs/video/build/segments/05-dryrun.mp4 +0 -0
  163. package/docs/video/build/segments/05-dryrun.txt +3 -0
  164. package/docs/video/build/segments/05-init.mp4 +0 -0
  165. package/docs/video/build/segments/05-init.txt +3 -0
  166. package/docs/video/build/segments/05-interactive.mp4 +0 -0
  167. package/docs/video/build/segments/05-interactive.txt +5 -0
  168. package/docs/video/build/segments/06-dryrun.mp4 +0 -0
  169. package/docs/video/build/segments/06-dryrun.txt +3 -0
  170. package/docs/video/build/segments/06-onboard.mp4 +0 -0
  171. package/docs/video/build/segments/06-onboard.txt +5 -0
  172. package/docs/video/build/segments/06-run.mp4 +0 -0
  173. package/docs/video/build/segments/06-run.txt +3 -0
  174. package/docs/video/build/segments/07-onboard.mp4 +0 -0
  175. package/docs/video/build/segments/07-onboard.txt +5 -0
  176. package/docs/video/build/segments/07-verify.mp4 +0 -0
  177. package/docs/video/build/segments/07-verify.txt +5 -0
  178. package/docs/video/build/segments/08-closing.mp4 +0 -0
  179. package/docs/video/build/segments/08-closing.txt +3 -0
  180. package/docs/video/build/segments/08-doctor.mp4 +0 -0
  181. package/docs/video/build/segments/08-doctor.txt +3 -0
  182. package/docs/video/build/segments/09-rollback.mp4 +0 -0
  183. package/docs/video/build/segments/09-rollback.txt +3 -0
  184. package/docs/video/build/segments/10-principles.mp4 +0 -0
  185. package/docs/video/build/segments/10-principles.txt +3 -0
  186. package/docs/video/build/segments/11-closing.mp4 +0 -0
  187. package/docs/video/build/segments/11-closing.txt +3 -0
  188. package/docs/video/build/segments/final.txt +8 -0
  189. package/docs/video/build-ai/audio/01-hook.mp3 +0 -0
  190. package/docs/video/build-ai/audio/02-pain.mp3 +0 -0
  191. package/docs/video/build-ai/audio/03-solution.mp3 +0 -0
  192. package/docs/video/build-ai/audio/04-how.mp3 +0 -0
  193. package/docs/video/build-ai/audio/05-safe.mp3 +0 -0
  194. package/docs/video/build-ai/audio/06-closing.mp3 +0 -0
  195. package/docs/video/build-ai/clips/01-hook.mp4 +0 -0
  196. package/docs/video/build-ai/clips/02-pain.mp4 +0 -0
  197. package/docs/video/build-ai/clips/03-solution.mp4 +0 -0
  198. package/docs/video/build-ai/clips/04-how.mp4 +0 -0
  199. package/docs/video/build-ai/clips/05-safe.mp4 +0 -0
  200. package/docs/video/build-ai/clips/06-closing.mp4 +0 -0
  201. package/docs/video/build-ai/first-frame-02-pain.png +0 -0
  202. package/docs/video/build-ai/first-frame-03-solution.png +0 -0
  203. package/docs/video/build-ai/first-frame-04-how.png +0 -0
  204. package/docs/video/build-ai/first-frame-05-safe.png +0 -0
  205. package/docs/video/build-ai/segments/01-hook.caption.txt +2 -0
  206. package/docs/video/build-ai/segments/01-hook.mp4 +0 -0
  207. package/docs/video/build-ai/segments/02-pain.mp4 +0 -0
  208. package/docs/video/build-ai/segments/03-solution.mp4 +0 -0
  209. package/docs/video/build-ai/segments/04-how.mp4 +0 -0
  210. package/docs/video/build-ai/segments/05-safe.mp4 +0 -0
  211. package/docs/video/build-ai/segments/06-closing.mp4 +0 -0
  212. package/docs/video/build-ai/segments/cap-01-hook.png +0 -0
  213. package/docs/video/build-ai/segments/cap-02-pain.png +0 -0
  214. package/docs/video/build-ai/segments/cap-03-solution.png +0 -0
  215. package/docs/video/build-ai/segments/cap-04-how.png +0 -0
  216. package/docs/video/build-ai/segments/cap-05-safe.png +0 -0
  217. package/docs/video/build-ai/segments/cap-06-closing.png +0 -0
  218. package/docs/video/build-ai/segments/final.txt +6 -0
  219. package/docs/video/build-posters/audio/01-hook.mp3 +0 -0
  220. package/docs/video/build-posters/audio/02-pain.mp3 +0 -0
  221. package/docs/video/build-posters/audio/03-solution.mp3 +0 -0
  222. package/docs/video/build-posters/audio/04-how.mp3 +0 -0
  223. package/docs/video/build-posters/audio/05-safe.mp3 +0 -0
  224. package/docs/video/build-posters/audio/06-closing.mp3 +0 -0
  225. package/docs/video/build-posters/cap-01-hook.png +0 -0
  226. package/docs/video/build-posters/cap-02-pain.png +0 -0
  227. package/docs/video/build-posters/cap-03-solution.png +0 -0
  228. package/docs/video/build-posters/cap-04-how.png +0 -0
  229. package/docs/video/build-posters/cap-05-safe.png +0 -0
  230. package/docs/video/build-posters/cap-06-closing.png +0 -0
  231. package/docs/video/build-posters/card-01-hook.png +0 -0
  232. package/docs/video/build-posters/card-06-closing.png +0 -0
  233. package/docs/video/build-posters/segments/01-hook.mp4 +0 -0
  234. package/docs/video/build-posters/segments/02-pain.mp4 +0 -0
  235. package/docs/video/build-posters/segments/03-solution.mp4 +0 -0
  236. package/docs/video/build-posters/segments/04-how.mp4 +0 -0
  237. package/docs/video/build-posters/segments/05-safe.mp4 +0 -0
  238. package/docs/video/build-posters/segments/06-closing.mp4 +0 -0
  239. package/docs/video/build-posters/segments/final.txt +6 -0
  240. package/docs/video/generate-video-ai.mjs +334 -0
  241. package/docs/video/generate-video-posters.mjs +204 -0
  242. package/docs/video/generate-video.mjs +426 -0
  243. package/docs/video/outline.zh-CN.md +102 -0
  244. package/docs/video/trellis-demo-video-ai.mp4 +0 -0
  245. package/docs/video/trellis-demo-video.mp4 +0 -0
  246. package/docs/video/voiceover.zh-CN.md +49 -0
  247. package/package.json +5 -2
  248. package/schema/servers.example.yaml +1 -1
  249. package/docs/assets/agent-trellis-architecture-horizontal.svg +0 -80
  250. package/docs/assets/agent-trellis-architecture-vertical.svg +0 -82
  251. package/docs/assets/trellis-mark.svg +0 -12
@@ -0,0 +1,51 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1440" height="1440" viewBox="0 0 1440 1440">
2
+ <rect width="1440" height="1440" fill="#fafaf8"/>
3
+ <g transform="translate(180 0)">
4
+ <g transform="translate(64 48) scale(0.56)" fill="none" stroke="#161c24" stroke-linecap="round">
5
+ <defs><clipPath id="v3-beam-64-48"><rect x="21" y="23" width="54" height="9" rx="4.5"/></clipPath></defs>
6
+ <rect x="16" y="18" width="64" height="18" rx="9" stroke-width="5.5"/>
7
+ <g stroke-width="2.6" clip-path="url(#v3-beam-64-48)"><path d="M-64.5 32 L-55.5 23"/><path d="M-64.5 23 L-55.5 32"/><path d="M-46.5 32 L-37.5 23"/><path d="M-46.5 23 L-37.5 32"/><path d="M-28.5 32 L-19.5 23"/><path d="M-28.5 23 L-19.5 32"/><path d="M-10.5 32 L-1.5 23"/><path d="M-10.5 23 L-1.5 32"/><path d="M7.5 32 L16.5 23"/><path d="M7.5 23 L16.5 32"/><path d="M25.5 32 L34.5 23"/><path d="M25.5 23 L34.5 32"/><path d="M43.5 32 L52.5 23"/><path d="M43.5 23 L52.5 32"/><path d="M61.5 32 L70.5 23"/><path d="M61.5 23 L70.5 32"/><path d="M79.5 32 L88.5 23"/><path d="M79.5 23 L88.5 32"/><path d="M97.5 32 L106.5 23"/><path d="M97.5 23 L106.5 32"/><path d="M115.5 32 L124.5 23"/><path d="M115.5 23 L124.5 32"/></g>
8
+ <path d="M48 36 V78" stroke-width="8"/>
9
+ </g>
10
+ <text x="132" y="87" text-anchor="start" font-family="Helvetica Neue, PingFang SC, Arial, sans-serif" font-size="30" font-weight="700" letter-spacing="2.2" fill="#161c24">AGENT TRELLIS</text>
11
+ <text x="1016" y="87" text-anchor="end" font-family="Menlo, SFMono-Regular, monospace" font-size="19" font-weight="400" letter-spacing="1.7" fill="#69727d">RUNTIME / 01</text>
12
+ <path d="M64 142 H1016" stroke="#dfe4ea" stroke-width="1.5"/>
13
+ <rect x="64" y="138.5" width="52" height="3.5" fill="#3457d5"/>
14
+
15
+ <text x="96" y="232" text-anchor="start" font-family="Menlo, SFMono-Regular, monospace" font-size="22" font-weight="400" letter-spacing="2.2" fill="#3457d5">UNIFIED CODE AGENT RUNTIME</text>
16
+ <rect x="64" y="298" width="7" height="178" fill="#3457d5"/>
17
+ <text x="96" y="360" text-anchor="start" font-family="Helvetica Neue, PingFang SC, Arial, sans-serif" font-size="80" font-weight="800" letter-spacing="-1" fill="#161c24">一个 Runtime,</text><text x="96" y="458" text-anchor="start" font-family="Helvetica Neue, PingFang SC, Arial, sans-serif" font-size="80" font-weight="800" letter-spacing="-1" fill="#161c24">统一所有 Code Agent。</text>
18
+ <text x="96" y="524" text-anchor="start" font-family="Helvetica Neue, PingFang SC, Arial, sans-serif" font-size="35" font-weight="450" letter-spacing="0" fill="#69727d">从一个 canonical source 统一管理</text><text x="96" y="570" text-anchor="start" font-family="Helvetica Neue, PingFang SC, Arial, sans-serif" font-size="35" font-weight="450" letter-spacing="0" fill="#69727d">Skill、MCP、Memory 与共享指令。</text>
19
+
20
+ <g>
21
+ <rect x="64" y="650" width="952" height="480" fill="none" stroke="#dfe4ea" stroke-width="1.5"/>
22
+ <path d="M55 650 H73 M64 641 V659" fill="none" stroke="#dfe4ea" stroke-width="2"/><path d="M1007 650 H1025 M1016 641 V659" fill="none" stroke="#dfe4ea" stroke-width="2"/><path d="M55 1130 H73 M64 1121 V1139" fill="none" stroke="#dfe4ea" stroke-width="2"/><path d="M1007 1130 H1025 M1016 1121 V1139" fill="none" stroke="#dfe4ea" stroke-width="2"/>
23
+ <rect x="82" y="628" width="294" height="44" fill="#fafaf8"/>
24
+ <text x="99" y="658" text-anchor="start" font-family="Menlo, SFMono-Regular, monospace" font-size="20" font-weight="400" letter-spacing="1.8" fill="#3457d5">FIG.01 — AGENT PATHS</text>
25
+ </g>
26
+ <g transform="translate(0 50)"><g>
27
+ <rect x="148" y="689" width="22" height="22" rx="6" fill="none" stroke="#161c24" stroke-width="3.5"/><rect x="148" y="799" width="22" height="22" rx="6" fill="none" stroke="#161c24" stroke-width="3.5"/><rect x="148" y="909" width="22" height="22" rx="6" fill="none" stroke="#161c24" stroke-width="3.5"/>
28
+ <text x="159" y="742" text-anchor="middle" font-family="Menlo, SFMono-Regular, monospace" font-size="17" font-weight="400" letter-spacing="1" fill="#69727d">CLAUDE</text><text x="159" y="852" text-anchor="middle" font-family="Menlo, SFMono-Regular, monospace" font-size="17" font-weight="400" letter-spacing="1" fill="#69727d">CODEX</text><text x="159" y="962" text-anchor="middle" font-family="Menlo, SFMono-Regular, monospace" font-size="17" font-weight="400" letter-spacing="1" fill="#69727d">KIMI</text>
29
+ <g fill="none">
30
+ <defs><clipPath id="d-unified"><rect x="447" y="707" width="186" height="206" rx="14"/></clipPath></defs>
31
+ <rect x="440" y="700" width="200" height="220" rx="20" stroke="#161c24" stroke-width="4"/>
32
+ <g clip-path="url(#d-unified)" stroke="#69727d" stroke-width="2" opacity="0.85"><path d="M27 913 L233 707"/><path d="M27 707 L233 913"/><path d="M48 913 L254 707"/><path d="M48 707 L254 913"/><path d="M69 913 L275 707"/><path d="M69 707 L275 913"/><path d="M90 913 L296 707"/><path d="M90 707 L296 913"/><path d="M111 913 L317 707"/><path d="M111 707 L317 913"/><path d="M132 913 L338 707"/><path d="M132 707 L338 913"/><path d="M153 913 L359 707"/><path d="M153 707 L359 913"/><path d="M174 913 L380 707"/><path d="M174 707 L380 913"/><path d="M195 913 L401 707"/><path d="M195 707 L401 913"/><path d="M216 913 L422 707"/><path d="M216 707 L422 913"/><path d="M237 913 L443 707"/><path d="M237 707 L443 913"/><path d="M258 913 L464 707"/><path d="M258 707 L464 913"/><path d="M279 913 L485 707"/><path d="M279 707 L485 913"/><path d="M300 913 L506 707"/><path d="M300 707 L506 913"/><path d="M321 913 L527 707"/><path d="M321 707 L527 913"/><path d="M342 913 L548 707"/><path d="M342 707 L548 913"/><path d="M363 913 L569 707"/><path d="M363 707 L569 913"/><path d="M384 913 L590 707"/><path d="M384 707 L590 913"/><path d="M405 913 L611 707"/><path d="M405 707 L611 913"/><path d="M426 913 L632 707"/><path d="M426 707 L632 913"/><path d="M447 913 L653 707"/><path d="M447 707 L653 913"/><path d="M468 913 L674 707"/><path d="M468 707 L674 913"/><path d="M489 913 L695 707"/><path d="M489 707 L695 913"/><path d="M510 913 L716 707"/><path d="M510 707 L716 913"/><path d="M531 913 L737 707"/><path d="M531 707 L737 913"/><path d="M552 913 L758 707"/><path d="M552 707 L758 913"/><path d="M573 913 L779 707"/><path d="M573 707 L779 913"/><path d="M594 913 L800 707"/><path d="M594 707 L800 913"/><path d="M615 913 L821 707"/><path d="M615 707 L821 913"/><path d="M636 913 L842 707"/><path d="M636 707 L842 913"/><path d="M657 913 L863 707"/><path d="M657 707 L863 913"/><path d="M678 913 L884 707"/><path d="M678 707 L884 913"/><path d="M699 913 L905 707"/><path d="M699 707 L905 913"/><path d="M720 913 L926 707"/><path d="M720 707 L926 913"/><path d="M741 913 L947 707"/><path d="M741 707 L947 913"/><path d="M762 913 L968 707"/><path d="M762 707 L968 913"/><path d="M783 913 L989 707"/><path d="M783 707 L989 913"/><path d="M804 913 L1010 707"/><path d="M804 707 L1010 913"/><path d="M825 913 L1031 707"/><path d="M825 707 L1031 913"/><path d="M846 913 L1052 707"/><path d="M846 707 L1052 913"/><path d="M867 913 L1073 707"/><path d="M867 707 L1073 913"/></g>
33
+ </g>
34
+ <g fill="none" stroke="#161c24" stroke-width="3.5">
35
+ <path d="M171 700 C 290 700 320 762 440 762"/>
36
+ <path d="M171 810 H440"/>
37
+ <path d="M171 920 C 290 920 320 858 440 858"/>
38
+ <path d="M640 762 H920 M640 810 H920 M640 858 H920"/>
39
+ </g>
40
+ <g fill="#3457d5"><circle cx="926" cy="762" r="8"/><circle cx="926" cy="810" r="8"/><circle cx="926" cy="858" r="8"/></g>
41
+ </g></g>
42
+ <text x="540" y="1088" text-anchor="middle" font-family="Menlo, SFMono-Regular, monospace" font-size="22" font-weight="400" letter-spacing="2" fill="#3457d5">ONE RUNTIME · MANY AGENTS</text>
43
+
44
+ <text x="64" y="1198" text-anchor="start" font-family="Menlo, SFMono-Regular, monospace" font-size="19" font-weight="400" letter-spacing="1.6" fill="#69727d">SKILLS · MCP · MEMORY · INSTRUCTIONS</text>
45
+ <text x="1016" y="1198" text-anchor="end" font-family="Menlo, SFMono-Regular, monospace" font-size="19" font-weight="400" letter-spacing="1.6" fill="#69727d">agent-trellis.dev</text>
46
+ <path d="M64 1232 H1016" stroke="#161c24" stroke-width="3.5"/>
47
+ <circle cx="77" cy="1294" r="7" fill="#3457d5"/>
48
+ <text x="108" y="1304" text-anchor="start" font-family="Menlo, SFMono-Regular, monospace" font-size="32" font-weight="500" letter-spacing="0.2" fill="#161c24">$ npm i -g agent-trellis</text>
49
+ <text x="1016" y="1304" text-anchor="end" font-family="Menlo, SFMono-Regular, monospace" font-size="18" font-weight="400" letter-spacing="1.5" fill="#69727d">OPEN SOURCE / LOCAL FIRST</text>
50
+ </g>
51
+ </svg>
@@ -15,7 +15,7 @@ npm install -g agent-trellis
15
15
  $ trellis onboard
16
16
  ```
17
17
 
18
- Runs `init`, detects which of Claude Code/Codex/Kiro/pi/Kimi Code are on this machine,
18
+ Runs `init`, detects which of Claude Code/Codex/Kiro/pi/Kimi Code/ZCode are on this machine,
19
19
  then resolves two styled interactive choices and two flag-only ones before running
20
20
  `migrate`, `sync`, `mcp sync`, `memory sync`, `secrets audit`, and a final
21
21
  health scan — the whole onboarding path, no follow-up commands to type by
@@ -266,6 +266,31 @@ enabled. Runtime correctness does not depend on that optimization. Native
266
266
  Kimi delivery remains available with `native` or `both`; those modes do not
267
267
  use the empty Skill-root launcher.
268
268
 
269
+ ## ZCode Runtime-first
270
+
271
+ ZCode is supported as `zcode`. Trellis selects one native profile before it
272
+ writes anything: the official CLI/Desktop profile uses
273
+ `~/.zcode/cli/config.json`; the locally installed `zcode-app-cli` profile
274
+ uses `~/.zcode/cli/setting.json`. Both store servers under `mcp.servers`.
275
+
276
+ Selecting ZCode during `trellis onboard` defaults it to Runtime delivery.
277
+ `trellis sync` links shared instructions at `~/.zcode/AGENTS.md` and disables
278
+ native ZCode Skill discovery while Runtime-only delivery is active. This keeps
279
+ ZCode's automatic `~/.agents/skills` scan from bypassing canonical Skill
280
+ scope. `trellis mcp sync` writes the single owned `trellis` stdio entry;
281
+ Skill, Memory, and eligible upstream MCP servers are then served through
282
+ `trellis mcp-runtime --agent zcode`.
283
+
284
+ Native or `both` delivery remains available through a capability-selection
285
+ file. When leaving Runtime-only mode, Trellis restores ZCode's previous native
286
+ Skill settings only when they still equal the values it wrote. User edits and
287
+ unrelated ZCode MCP entries remain untouched.
288
+
289
+ For chat or Agent delegation, Trellis uses only a public `zcode` executable
290
+ that advertises `--prompt`, `--resume`, and `--output-format`. A desktop-only
291
+ profile can still receive managed configuration; Trellis never launches the
292
+ desktop application's private helper or bundled runtime path.
293
+
269
294
  ## Trellis Runtime Skill
270
295
 
271
296
  `trellis-runtime` is the built-in operating guide that Trellis installs into
@@ -325,7 +350,7 @@ content back into canonical Markdown remains an explicit
325
350
 
326
351
  ## Two starting points
327
352
 
328
- **You already use one or more of Claude Code, Codex, Kiro, pi, or Kimi Code** and have
353
+ **You already use one or more of Claude Code, Codex, Kiro, pi, Kimi Code, or ZCode** and have
329
354
  real skills/instructions in them today. Go to
330
355
  [Migrating from an existing agent](#migrating-from-an-existing-agent).
331
356
 
@@ -353,7 +378,7 @@ Creates `~/.trellis/` with:
353
378
  `~/.trellis/` that already exists just fills in whatever's still missing —
354
379
  safe to run again any time, including after you've hand-edited things.
355
380
 
356
- It then prints which of the five supported agents it found on this machine.
381
+ It then prints which of the six supported agents it found on this machine.
357
382
  For each one **not** found, it prints that agent's real install command or
358
383
  download link — `trellis init` never runs an installer itself; a global
359
384
  package install or an IDE download is your call to make, not a silent side
@@ -374,7 +399,7 @@ migrate --from claude-code
374
399
  [conflict] instructions — canonical agents.md already has different real content — resolve by hand
375
400
  ```
376
401
 
377
- `--from` accepts `claude-code`, `codex`, `kiro`, `pi`, or `kimi-code`. Run it once per
402
+ `--from` accepts `claude-code`, `codex`, `kiro`, `pi`, `kimi-code`, or `zcode`. Run it once per
378
403
  agent you actually use — it's independent per agent, order doesn't matter.
379
404
 
380
405
  Add `--dry-run` to see the plan without writing anything:
@@ -547,15 +572,18 @@ to set up before moving on to `sync`.
547
572
  The same applies to MCP servers — `~/.trellis/mcp/servers.yaml` can be
548
573
  hand-authored the same way (see
549
574
  [`schema/servers.example.yaml`](../schema/servers.example.yaml) for the
550
- full shape), or use `trellis mcp add` (below). Either way, move on to
551
- [`trellis mcp sync`](#trellis-mcp-sync) once you've added what you want.
575
+ full shape), or use `trellis mcp add` (below) — the CLI command syncs
576
+ for you; hand-authored edits still need a following
577
+ [`trellis mcp sync`](#trellis-mcp-sync) of their own.
552
578
 
553
579
  ## `trellis skill` / `trellis mcp` — canonical CRUD via the CLI
554
580
 
555
581
  An alternative to hand-editing canonical files directly — useful for
556
582
  scripting, or when you'd rather not open a text editor for a one-line
557
- change. Both commands are canonical-side only: they never touch any
558
- agent's native config (that stays `sync`/`mcp sync`'s job).
583
+ change. `add`/`remove`/`import` mutate the canonical source and then run the
584
+ same sync `sync`/`mcp sync` performs, so one command both edits the list and
585
+ maps it onto the managed agents; `--dry-run` previews the whole thing,
586
+ including the sync plan, with zero writes. `list` is read-only.
559
587
 
560
588
  ```
561
589
  $ trellis skill list
@@ -586,6 +614,74 @@ trellis skill update-builtin
586
614
  The update is backed up and updates the canonical file in place; native Agent
587
615
  symlinks and Runtime providers then consume the same refreshed content.
588
616
 
617
+ ### Importing a GitHub Skill with Trellis ownership
618
+
619
+ If you would normally run `npx skills add`, use Trellis's top-level `add`
620
+ command instead. It is a remote-source importer, while `trellis skill add`
621
+ remains the command for a local directory:
622
+
623
+ ```sh
624
+ # Review exact-case SKILL.md candidates before selecting one.
625
+ npx trellis add mattpocock/skills --list
626
+
627
+ # Fetch and inspect the exact plan without writing canonical or Agent files.
628
+ npx trellis add mattpocock/skills --skill loop-me --dry-run
629
+
630
+ # Import to the user-level canonical store, then sync to every managed Agent.
631
+ npx trellis add mattpocock/skills --skill loop-me --yes
632
+ ```
633
+
634
+ The source may be `owner/repository` or a credential-free HTTPS
635
+ `github.com` repository URL. Trellis fetches the selected ref into a system
636
+ temporary directory, discovers a directory containing an exact-case
637
+ `SKILL.md`, and copies that directory into
638
+ `~/.trellis/skills/<name>/`. It does not run repository scripts, install
639
+ dependencies, or write into `.agents/skills`, `~/.agents/skills`, or any
640
+ Agent-specific Skill directory during import. Review the imported
641
+ `SKILL.md` before relying on it in an Agent session.
642
+
643
+ By default the imported Skill is unscoped, which means every Agent currently
644
+ listed in `~/.trellis/managed.yaml` receives it on sync. Restrict delivery to
645
+ managed Agents with `--agent`; comma-separated values and repeated flags are
646
+ accepted. `--agent '*'` writes the current managed set as an explicit scope.
647
+ An Agent that is installed but unmanaged is refused before any canonical or
648
+ native write. Add it to Trellis's managed boundary first:
649
+
650
+ ```sh
651
+ trellis manage add zcode
652
+ npx trellis add mattpocock/skills --skill loop-me --agent zcode --yes
653
+ ```
654
+
655
+ `--branch <ref>` selects a Git branch, tag, or ref. Without it, Trellis asks
656
+ Git for the repository's default branch. `--global` is accepted for
657
+ `skills`-CLI compatibility and still means Trellis's existing user-level
658
+ canonical store; `--copy` and project-local modes are refused because they
659
+ would create another Skill source outside Trellis.
660
+
661
+ Each successful remote import writes
662
+ `~/.trellis/skills.lock.json` in the same backup session as its canonical
663
+ Skill directory. The lock records the normalized GitHub URL, requested ref,
664
+ resolved immutable commit, source subdirectory, and deterministic content
665
+ digest. It never records credentials or a temporary path. `trellis skill
666
+ list` marks remote Skills with their source and short locked commit; JSON
667
+ output includes the complete credential-free provenance record.
668
+
669
+ Refresh tracked Skills with:
670
+
671
+ ```sh
672
+ trellis update loop-me --dry-run
673
+ trellis update loop-me
674
+ trellis update # check every tracked remote Skill
675
+ ```
676
+
677
+ Before replacement, `trellis update` compares the current canonical directory
678
+ to its locked digest. A local canonical edit is a conflict and is never
679
+ overwritten. A successful update preserves the Skill's scope, replaces its
680
+ directory and provenance record in one backup session, and then runs Skill
681
+ sync. Use `trellis rollback --list` to find a `remote-skill-add` or
682
+ `remote-skill-update` run; rolling it back restores the previous directory
683
+ and matching lock record when neither has changed since the run.
684
+
589
685
  ```
590
686
  $ trellis mcp list
591
687
  tanka (http) — codex, pi
@@ -939,7 +1035,7 @@ periodically regardless.
939
1035
  $ trellis doctor
940
1036
  ```
941
1037
 
942
- Read-only. Scans all five agents' current state and reports drift —
1038
+ Read-only. Scans all six agents' current state and reports drift —
943
1039
  mismatched skill content across agents, wrong-case skill files, and (with
944
1040
  `--probe-mcp`) whether each configured MCP server actually handshakes.
945
1041
  Safe to run any time; nothing here writes anything.
@@ -984,9 +1080,10 @@ scripts/agent-sandbox.sh --status kiro
984
1080
  Git,也不会自动读取或删除宿主机凭据。清理时请明确执行
985
1081
  `docker volume rm <volume-name>`。
986
1082
 
987
- ## `trellis rollback` — undoing a `sync`/`mcp sync`/`onboard` run
1083
+ ## `trellis rollback` — undoing a managed write run
988
1084
 
989
- Every real write those three commands perform is recorded, before it
1085
+ Every real `sync`, `mcp sync`, `onboard`, remote Skill import, and remote Skill
1086
+ update write is recorded, before it
990
1087
  happens, to a structured run directory under `~/.trellis/backups/` — no
991
1088
  flag needed, this is always on for any run that actually writes
992
1089
  something. `--dry-run` never creates one, since nothing was written.
@@ -1028,6 +1125,127 @@ created file under `~/.trellis/skills/`.
1028
1125
  `~/.trellis/backups/` has no automatic pruning — delete old run
1029
1126
  directories by hand once you're done with them.
1030
1127
 
1128
+ ## GUI: chat with a managed/CLI Agent (`@trellis/gui`)
1129
+
1130
+ The desktop app (`packages/gui/`) has a "Chat" tab for a real multi-turn
1131
+ conversation with any CLI Agent you configure, streamed live with a
1132
+ typewriter effect and tool-call/tool-result bubbles when the target
1133
+ supports it. This is separate from `agent-bridge.yaml` (used for one-shot
1134
+ cross-Agent delegation via MCP tools): a chat target is identified by an
1135
+ arbitrary string, not one of the five fully-managed Agents, so you can
1136
+ point it at any non-interactive CLI without onboarding it as a full
1137
+ managed Agent.
1138
+
1139
+ Configure targets in `~/.trellis/mcp/chat-agents.yaml` (absent by
1140
+ default — nothing is spawned until you write one):
1141
+
1142
+ ```yaml
1143
+ targets:
1144
+ claude-code:
1145
+ label: "Claude Code"
1146
+ command: claude
1147
+ args: ["-p", "{prompt}", "--output-format", "stream-json"]
1148
+ outputFormat: stream-json
1149
+ qoder:
1150
+ label: "Qoder"
1151
+ command: qoder
1152
+ args: ["-p", "{prompt}", "--output-format", "stream-json"]
1153
+ resumeArgs: ["-p", "{prompt}", "--output-format", "stream-json", "--session-id", "{sessionId}"]
1154
+ outputFormat: stream-json
1155
+ tags: ["domestic"]
1156
+ kimi-code:
1157
+ label: "Kimi Code"
1158
+ command: kimi
1159
+ args: ["-p", "{prompt}", "--output-format", "stream-json"]
1160
+ resumeArgs: ["-p", "{prompt}", "--output-format", "stream-json", "-S", "{sessionId}"]
1161
+ outputFormat: stream-json
1162
+ tags: ["domestic"]
1163
+ minimax-code:
1164
+ label: "MiniMax Code"
1165
+ command: mcode
1166
+ args: ["exec", "{prompt}", "--output-format", "stream-json"]
1167
+ resumeArgs: ["exec", "{prompt}", "--output-format", "stream-json", "--session", "{sessionId}"]
1168
+ outputFormat: stream-json
1169
+ tags: ["domestic"]
1170
+ zcode:
1171
+ label: "ZCode"
1172
+ command: zcode
1173
+ args: ["--prompt", "{prompt}", "--output-format", "stream-json"]
1174
+ resumeArgs: ["--resume", "{sessionId}", "--prompt", "{prompt}", "--output-format", "stream-json"]
1175
+ outputFormat: stream-json
1176
+ streamProtocol: zcode
1177
+ tags: ["z-ai"]
1178
+ ```
1179
+
1180
+ - `outputFormat: stream-json` gets structured tool-call/tool-result
1181
+ bubbles, but only for Claude Code's documented shape (there's no
1182
+ official schema for it — see upstream issue #24612 — so this is a
1183
+ best-effort parse of the community-documented format; other CLIs using
1184
+ the same flag name show their raw output instead of guessing at a
1185
+ format that hasn't been verified against a real install).
1186
+ - Every message requires confirming a one-time-per-session banner showing
1187
+ the exact command that will run — it spawns a real subprocess, possibly
1188
+ a real billed API call.
1189
+ - Chat history is **never written to disk** — it may contain real code or
1190
+ secrets. Closing the app loses it, on purpose.
1191
+
1192
+ ### Domestic CLI status (what's real, what isn't)
1193
+
1194
+ - **Qoder**: installed for real (`npm install -g @qoder-ai/qodercli`) and
1195
+ checked directly against `qoder --help` — `-p`/`--print`, `-o`/
1196
+ `--output-format text|json|stream-json`, and `--session-id <id>` (resume)
1197
+ all confirmed as real flags. Ran `qoder -p "test" -o stream-json` for
1198
+ real, unauthenticated (`qoder status` → "Not logged in"), which failed
1199
+ cleanly and immediately on the auth check (`total_cost_usd: 0`, zero
1200
+ real spend) — and its `stream-json` output turned out to already match
1201
+ Claude Code's documented shape line-for-line (`{"type":"system",
1202
+ "subtype":"init",...}` → `{"type":"assistant","message":{"content":
1203
+ [{"type":"text",...}]}}` → `{"type":"result","subtype":"success",...}`),
1204
+ so this app's existing `tryParseClaudeStreamJsonLine` parser produces
1205
+ real tool-call/tool-result bubbles for Qoder too, not just raw text —
1206
+ confirmed for the `init`/text/`result` shapes; the `tool_use`/
1207
+ `tool_result` shapes specifically weren't independently observed (the
1208
+ call never got far enough to use a tool before failing on auth). The
1209
+ `--session-id` resume combination itself (an actual resumed call) was
1210
+ not exercised — that needs a real logged-in account.
1211
+ - **Kimi Code**: `-p`/`--prompt`, `--output-format text|stream-json`, and
1212
+ `-S`/`--session [id]` are confirmed directly from a real, installed
1213
+ `kimi --help` on the machine this was built on. The `-p` + `-S`
1214
+ combination for resuming a session non-interactively is documented as
1215
+ separate top-level flags but wasn't exercised against a real resumed
1216
+ call (that would be a real, billed API call, and this install has a
1217
+ live authenticated session — `kimi provider list` shows a real
1218
+ `managed:kimi-code` OAuth provider) — verify once before relying on it
1219
+ for anything important.
1220
+ - **MiniMax Code** (`mcode`): installed for real (`npm install -g
1221
+ @minimax-ai/code`) and checked directly against `mcode exec --help`,
1222
+ which — unlike what first-party prose docs implied — does document
1223
+ both `--output-format text|json|stream-json` and a `--session <id>`
1224
+ resume flag (distinct spelling from Qoder's `--session-id`) as real
1225
+ `exec` options. Ran `mcode exec "test" --output-format stream-json` for
1226
+ real, unauthenticated (no `~/.minimax-code` config exists on this
1227
+ machine), which failed cleanly with a plain-text "Sign in to MiniMax…"
1228
+ message before entering the agent loop — so unlike Qoder, no real
1229
+ `stream-json` line was ever actually observed for MiniMax Code; if its
1230
+ JSON shape turns out to differ from Claude Code's, lines simply
1231
+ degrade to the raw-chunk fallback rather than breaking anything, but
1232
+ treat the *existence* of the flags as confirmed and their *exact wire
1233
+ shape* as still unconfirmed. The `--session` resume combination was
1234
+ not exercised for the same reason as Qoder's.
1235
+ - **ZCode** (Z.ai / 智谱, `zcode`) is supported when its public CLI probe
1236
+ confirms `--prompt`, `--resume`, and `--output-format`. Its stream result
1237
+ uses `response` and `sessionId`, so configure `streamProtocol: zcode` as
1238
+ shown above. The installed `zcode-app-cli` is a community distribution over
1239
+ the ZCode runtime; it uses `~/.zcode/cli/setting.json`. The official
1240
+ open-source CLI/Desktop profile uses `~/.zcode/cli/config.json`. A
1241
+ desktop-only profile is configuration-manageable but is not offered as a
1242
+ chat or delegation executor.
1243
+ - **Trae is not supported yet.** The commercial Trae IDE (trae.ai) has no
1244
+ documented non-interactive CLI mode; the separate open-source
1245
+ `bytedance/trae-agent` project's `trae-cli run` streaming output format
1246
+ has not been verified against a real install. Neither is configured —
1247
+ don't add a `trae` target expecting it to work.
1248
+
1031
1249
  ## Troubleshooting
1032
1250
 
1033
1251
  - **A `conflict` I don't understand**: `migrate` and `sync` both name the
@@ -1038,6 +1256,18 @@ directories by hand once you're done with them.
1038
1256
  the same real config files/directories `init`/`migrate`/`sync` do; if an
1039
1257
  agent's config lives somewhere non-standard on your machine, that's worth
1040
1258
  filing an issue with the exact path.
1041
- - Other known limitations are tracked honestly in
1042
- [README's Status section](../README.md#status) — read that before
1043
- assuming something is a bug rather than a documented gap.
1259
+ - Other known limitations, named honestly rather than discovered the hard way:
1260
+ - `mcp sync`/`sync` never spawn or handshake-test MCP servers — they only
1261
+ guarantee the *config* is written correctly. `trellis doctor --probe-mcp`
1262
+ is the one command that actually connects, and it's opt-in.
1263
+ - The pi bridge extension (`trellis-pi-mcp-bridge`) is verified to load and
1264
+ register tools without erroring, not against a real LLM tool call in
1265
+ production.
1266
+ - Verification runs in isolated Docker containers with real agent installs,
1267
+ not against a developer's daily-use dotfiles — if you hit something a
1268
+ clean-room sandbox wouldn't catch, please open an issue.
1269
+ - `onboard` picks one agent as the migration base when several are present;
1270
+ merging differing content across multiple agents into one result is
1271
+ future work, not built yet.
1272
+ - `~/.trellis/backups/` has no automatic pruning — every write adds a run
1273
+ directory; delete old ones by hand.
package/docs/overview.md CHANGED
@@ -4,11 +4,11 @@
4
4
 
5
5
  ## One-line description
6
6
 
7
- > Trellis is a unified Code Agent Runtime for managing Skills, MCP, Memory, and shared instructions across Claude Code, Codex, Kiro, pi, and Kimi Code.
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
8
 
9
9
  中文定位:
10
10
 
11
- > Trellis 是统一的 Code Agent Runtime,为 Claude Code、Codex、Kiro、pi 和 Kimi Code 统一管理 Skill、MCP、Memory 与共享指令。
11
+ > Trellis 是统一的 Code Agent Runtime,为 Claude Code、Codex、Kiro、pi、Kimi Code 和 ZCode 统一管理 Skill、MCP、Memory 与共享指令。
12
12
 
13
13
  ## Quick start
14
14
 
@@ -52,10 +52,12 @@ The importer de-duplicates existing servers, extracts environment credentials in
52
52
 
53
53
  ## Architecture
54
54
 
55
- ![Agent Trellis architecture](assets/agent-trellis-architecture-horizontal.svg)
55
+ ![Agent Trellis — One Runtime. Every Code Agent.](assets/poster-series-v3/agent-trellis-poster-v3-horizontal-en.png)
56
56
 
57
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
58
 
59
+ Brand and social assets, including the poster series, live in [`docs/assets/poster-series-v3/`](assets/poster-series-v3/README.md).
60
+
59
61
  ```mermaid
60
62
  flowchart LR
61
63
  Sources["Trellis Canonical Source\n~/.trellis"]
@@ -77,6 +79,7 @@ flowchart LR
77
79
  Native --> Kiro["Kiro"]
78
80
  Native --> Pi["pi"]
79
81
  Edge --> Kimi["Kimi Code"]
82
+ Edge --> ZCode["ZCode"]
80
83
  Edge --> Claude
81
84
  Edge --> Pi
82
85
  ```
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 一句话介绍
6
6
 
7
- > Trellis 是统一的 Code Agent Runtime,为 Claude Code、Codex、Kiro、pi 和 Kimi Code 统一管理 Skill、MCP、Memory 与共享指令。
7
+ > Trellis 是统一的 Code Agent Runtime,为 Claude Code、Codex、Kiro、pi、Kimi Code 和 ZCode 统一管理 Skill、MCP、Memory 与共享指令。
8
8
 
9
9
  ## 快速开始
10
10
 
@@ -48,7 +48,7 @@ trellis mcp import ~/Desktop/mcp-servers.json
48
48
 
49
49
  ## 架构
50
50
 
51
- ![Agent Trellis 架构](assets/agent-trellis-architecture-vertical.svg)
51
+ ![Agent Trellis — 一个 Runtime,统一所有 Code Agent。](assets/poster-series-v3/agent-trellis-poster-v3-horizontal-zh.png)
52
52
 
53
53
  Trellis 以 `~/.trellis/` 为 canonical source,在中心统一管理四类能力:
54
54
 
@@ -59,6 +59,8 @@ Trellis 以 `~/.trellis/` 为 canonical source,在中心统一管理四类能
59
59
 
60
60
  这些能力通过 native adapter 或 Runtime/Gateway 投递给不同的 Code Agent。
61
61
 
62
+ 品牌与社媒海报资源见 [`docs/assets/poster-series-v3/`](assets/poster-series-v3/README.md),包含竖版(手机端)与横版(桌面端)海报的中英文版本。
63
+
62
64
  ```text
63
65
  ~/.trellis/ canonical source
64
66
  │
@@ -66,7 +68,7 @@ Trellis 以 `~/.trellis/` 为 canonical source,在中心统一管理四类能
66
68
  Trellis Runtime / Gateway
67
69
  │
68
70
  ├── Native adapters ── Claude Code / Codex / Kiro / pi
69
- └── MCP Runtime ────── Kimi Code / 其他 Runtime-first Agent
71
+ └── MCP Runtime ────── Kimi Code / ZCode / 其他 Runtime-first Agent
70
72
  ```
71
73
 
72
74
  ## 与相似产品的关系
package/docs/roadmap.md CHANGED
@@ -939,7 +939,7 @@ tests passing.
939
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 |
940
940
  | P8 | ✅ Kiro `${VAR}` fix: adapter also manages `kiroAgent.mcpApprovedEnvVars`, without which Kiro silently never substitutes any env reference Trellis writes | P2 |
941
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 |
942
- | 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 |
943
943
  | P11 | ✅ Migrate category selection: `--only skills\|instructions` on `migrate`, same interactive picker `onboard` already uses | P1 |
944
944
  | P12 | ✅ Canonical CRUD via CLI: `trellis skill add/remove/list`, `trellis mcp add/remove/list` | P1, P2 |
945
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 |
@@ -959,6 +959,7 @@ tests passing.
959
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
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
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 |
962
963
 
963
964
  **Cross-machine / cloud sharing — confirmed future direction, not yet
964
965
  scoped as a phase.** Surveyed 2026-09-15 (`docs/research.md`'s "Cross-
@@ -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 秒