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.
- package/README.md +48 -153
- package/dist/adapters/claude-code.js +3 -2
- package/dist/adapters/codex.js +3 -2
- package/dist/adapters/jsonMcp.d.ts +3 -1
- package/dist/adapters/jsonMcp.js +18 -4
- package/dist/adapters/kimi-code.d.ts +21 -0
- package/dist/adapters/kimi-code.js +107 -0
- package/dist/adapters/kiro.js +3 -2
- package/dist/adapters/mcpPlan.d.ts +6 -1
- package/dist/adapters/mcpPlan.js +106 -8
- package/dist/adapters/pi.js +22 -3
- package/dist/adapters/symlinkPlan.d.ts +7 -0
- package/dist/adapters/symlinkPlan.js +16 -7
- package/dist/adapters/zcode.d.ts +21 -0
- package/dist/adapters/zcode.js +234 -0
- package/dist/cli.js +145 -29
- package/dist/commands/doctor.d.ts +7 -2
- package/dist/commands/doctor.js +40 -2
- package/dist/commands/init.d.ts +4 -2
- package/dist/commands/init.js +29 -13
- package/dist/commands/kimi.d.ts +16 -0
- package/dist/commands/kimi.js +64 -0
- package/dist/commands/manage.d.ts +39 -0
- package/dist/commands/manage.js +126 -0
- package/dist/commands/mcp.d.ts +77 -14
- package/dist/commands/mcp.js +169 -29
- package/dist/commands/mcpGateway.d.ts +6 -0
- package/dist/commands/mcpGateway.js +35 -14
- package/dist/commands/mcpImport.d.ts +46 -0
- package/dist/commands/mcpImport.js +359 -0
- package/dist/commands/memory.d.ts +17 -3
- package/dist/commands/memory.js +27 -8
- package/dist/commands/migrate.d.ts +16 -5
- package/dist/commands/migrate.js +93 -17
- package/dist/commands/onboard.d.ts +74 -2
- package/dist/commands/onboard.js +469 -71
- package/dist/commands/rollback.js +28 -2
- package/dist/commands/secretsAudit.js +4 -1
- package/dist/commands/skill.d.ts +52 -6
- package/dist/commands/skill.js +114 -15
- package/dist/commands/sync.js +5 -1
- package/dist/core/adapter.d.ts +11 -1
- package/dist/core/canonical.d.ts +15 -7
- package/dist/core/canonical.js +101 -13
- package/dist/core/capabilitySelection.d.ts +45 -0
- package/dist/core/capabilitySelection.js +124 -0
- package/dist/core/types.d.ts +25 -2
- package/dist/core/types.js +8 -0
- package/dist/lib/agentBridge.d.ts +169 -0
- package/dist/lib/agentBridge.js +367 -0
- package/dist/lib/agentBridgeProvider.d.ts +14 -0
- package/dist/lib/agentBridgeProvider.js +95 -0
- package/dist/lib/backup.d.ts +32 -0
- package/dist/lib/backup.js +20 -1
- package/dist/lib/builtinSkills.d.ts +2 -0
- package/dist/lib/builtinSkills.js +4 -0
- package/dist/lib/chatAgents.d.ts +42 -0
- package/dist/lib/chatAgents.js +59 -0
- package/dist/lib/cliMetadata.d.ts +1 -0
- package/dist/lib/cliMetadata.js +14 -0
- package/dist/lib/envVarNames.d.ts +3 -0
- package/dist/lib/envVarNames.js +19 -0
- package/dist/lib/gatewayBackend.d.ts +28 -0
- package/dist/lib/gatewayBackend.js +72 -1
- package/dist/lib/installAgent.d.ts +7 -5
- package/dist/lib/installAgent.js +4 -3
- package/dist/lib/mcpConnect.js +5 -1
- package/dist/lib/mcpMigrateRead.d.ts +2 -0
- package/dist/lib/mcpMigrateRead.js +22 -1
- package/dist/lib/mcpRuntime.d.ts +46 -0
- package/dist/lib/mcpRuntime.js +185 -0
- package/dist/lib/mcpStatusProvider.d.ts +10 -0
- package/dist/lib/mcpStatusProvider.js +25 -0
- package/dist/lib/mcpToolRegistry.d.ts +18 -0
- package/dist/lib/mcpToolRegistry.js +107 -14
- package/dist/lib/memoryGraph.d.ts +1 -1
- package/dist/lib/memoryGraph.js +9 -3
- package/dist/lib/memoryProvider.d.ts +58 -0
- package/dist/lib/memoryProvider.js +175 -0
- package/dist/lib/memoryStatus.d.ts +17 -0
- package/dist/lib/memoryStatus.js +88 -0
- package/dist/lib/nativeMemory.d.ts +19 -0
- package/dist/lib/nativeMemory.js +129 -0
- package/dist/lib/realHomeSnapshot.js +5 -0
- package/dist/lib/runtimeControlProvider.d.ts +16 -0
- package/dist/lib/runtimeControlProvider.js +170 -0
- package/dist/lib/secretEnv.d.ts +2 -1
- package/dist/lib/secretEnv.js +6 -2
- package/dist/lib/skillProvider.d.ts +13 -0
- package/dist/lib/skillProvider.js +210 -0
- package/dist/lib/taskProvider.d.ts +7 -0
- package/dist/lib/taskProvider.js +43 -0
- package/dist/lib/taskStore.d.ts +46 -0
- package/dist/lib/taskStore.js +156 -0
- package/dist/lib/terminalPicker.d.ts +23 -49
- package/dist/lib/terminalPicker.js +80 -218
- package/dist/lib/zcodeOwnership.d.ts +17 -0
- package/dist/lib/zcodeOwnership.js +37 -0
- package/dist/pi-bridge/bundle.js +476 -37
- package/dist/pi-bridge/index.js +42 -21
- package/dist/pi-bridge/schemaTranslate.d.ts +4 -8
- package/dist/pi-bridge/schemaTranslate.js +4 -8
- package/dist/probes/codex.d.ts +7 -0
- package/dist/probes/codex.js +37 -5
- package/dist/probes/kimi-code.d.ts +12 -0
- package/dist/probes/kimi-code.js +55 -0
- package/dist/probes/zcode.d.ts +32 -0
- package/dist/probes/zcode.js +140 -0
- package/dist/sdk.d.ts +1 -1
- package/docs/architecture.md +230 -28
- package/docs/assets/brand-v3/trellis-mark-v3-a.png +0 -0
- package/docs/assets/brand-v3/trellis-mark-v3-a.svg +10 -0
- package/docs/assets/poster-series-v3/README.md +60 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-en.png +0 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-en.svg +51 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-zh.png +0 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-horizontal-zh.svg +51 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-en.png +0 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-en.svg +48 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-zh.png +0 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-memory-zh.svg +48 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-en.png +0 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-en.svg +56 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-zh.png +0 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-migrate-zh.svg +56 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-en.png +0 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-en.svg +47 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-zh.png +0 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-switch-zh.svg +47 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-en.png +0 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-en.svg +51 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-zh.png +0 -0
- package/docs/assets/poster-series-v3/agent-trellis-poster-v3-unified-zh.svg +51 -0
- package/docs/getting-started.md +496 -42
- package/docs/overview.md +134 -0
- package/docs/overview.zh-CN.md +102 -0
- package/docs/research.md +59 -0
- package/docs/roadmap.md +11 -6
- package/docs/video/README.md +76 -0
- package/docs/video/build/audio/01-opening.aiff +0 -0
- package/docs/video/build/audio/01-opening.mp3 +0 -0
- package/docs/video/build/audio/02-pain.aiff +0 -0
- package/docs/video/build/audio/02-pain.mp3 +0 -0
- package/docs/video/build/audio/03-solution.aiff +0 -0
- package/docs/video/build/audio/03-solution.mp3 +0 -0
- package/docs/video/build/audio/04-install.aiff +0 -0
- package/docs/video/build/audio/04-install.mp3 +0 -0
- package/docs/video/build/audio/04-setup.mp3 +0 -0
- package/docs/video/build/audio/05-dryrun.mp3 +0 -0
- package/docs/video/build/audio/05-init.aiff +0 -0
- package/docs/video/build/audio/05-init.mp3 +0 -0
- package/docs/video/build/audio/05-interactive.mp3 +0 -0
- package/docs/video/build/audio/06-dryrun.aiff +0 -0
- package/docs/video/build/audio/06-dryrun.mp3 +0 -0
- package/docs/video/build/audio/06-onboard.mp3 +0 -0
- package/docs/video/build/audio/06-run.mp3 +0 -0
- package/docs/video/build/audio/07-onboard.aiff +0 -0
- package/docs/video/build/audio/07-onboard.mp3 +0 -0
- package/docs/video/build/audio/07-verify.mp3 +0 -0
- package/docs/video/build/audio/08-closing.mp3 +0 -0
- package/docs/video/build/audio/08-doctor.aiff +0 -0
- package/docs/video/build/audio/08-doctor.mp3 +0 -0
- package/docs/video/build/audio/09-rollback.aiff +0 -0
- package/docs/video/build/audio/09-rollback.mp3 +0 -0
- package/docs/video/build/audio/10-principles.aiff +0 -0
- package/docs/video/build/audio/10-principles.mp3 +0 -0
- package/docs/video/build/audio/11-closing.aiff +0 -0
- package/docs/video/build/audio/11-closing.mp3 +0 -0
- package/docs/video/build/frames/01-opening-0.png +0 -0
- package/docs/video/build/frames/02-pain-1.png +0 -0
- package/docs/video/build/frames/02-pain-2.png +0 -0
- package/docs/video/build/frames/03-solution-3.png +0 -0
- package/docs/video/build/frames/04-install-4.png +0 -0
- package/docs/video/build/frames/04-setup-4.png +0 -0
- package/docs/video/build/frames/04-setup-5.png +0 -0
- package/docs/video/build/frames/05-dryrun-6.png +0 -0
- package/docs/video/build/frames/05-init-5.png +0 -0
- package/docs/video/build/frames/05-interactive-5.png +0 -0
- package/docs/video/build/frames/05-interactive-6.png +0 -0
- package/docs/video/build/frames/06-dryrun-6.png +0 -0
- package/docs/video/build/frames/06-dryrun-7.png +0 -0
- package/docs/video/build/frames/06-onboard-7.png +0 -0
- package/docs/video/build/frames/06-onboard-8.png +0 -0
- package/docs/video/build/frames/06-run-7.png +0 -0
- package/docs/video/build/frames/06-run-8.png +0 -0
- package/docs/video/build/frames/07-onboard-10.png +0 -0
- package/docs/video/build/frames/07-onboard-7.png +0 -0
- package/docs/video/build/frames/07-onboard-8.png +0 -0
- package/docs/video/build/frames/07-onboard-9.png +0 -0
- package/docs/video/build/frames/07-verify-10.png +0 -0
- package/docs/video/build/frames/07-verify-8.png +0 -0
- package/docs/video/build/frames/07-verify-9.png +0 -0
- package/docs/video/build/frames/08-closing-10.png +0 -0
- package/docs/video/build/frames/08-closing-11.png +0 -0
- package/docs/video/build/frames/08-doctor-11.png +0 -0
- package/docs/video/build/frames/08-doctor-9.png +0 -0
- package/docs/video/build/frames/09-rollback-10.png +0 -0
- package/docs/video/build/frames/09-rollback-12.png +0 -0
- package/docs/video/build/frames/10-principles-11.png +0 -0
- package/docs/video/build/frames/10-principles-13.png +0 -0
- package/docs/video/build/frames/11-closing-12.png +0 -0
- package/docs/video/build/frames/11-closing-14.png +0 -0
- package/docs/video/build/segments/01-opening.mp4 +0 -0
- package/docs/video/build/segments/01-opening.txt +3 -0
- package/docs/video/build/segments/02-pain.mp4 +0 -0
- package/docs/video/build/segments/02-pain.txt +5 -0
- package/docs/video/build/segments/03-solution.mp4 +0 -0
- package/docs/video/build/segments/03-solution.txt +3 -0
- package/docs/video/build/segments/04-install.mp4 +0 -0
- package/docs/video/build/segments/04-install.txt +3 -0
- package/docs/video/build/segments/04-setup.mp4 +0 -0
- package/docs/video/build/segments/04-setup.txt +3 -0
- package/docs/video/build/segments/05-dryrun.mp4 +0 -0
- package/docs/video/build/segments/05-dryrun.txt +3 -0
- package/docs/video/build/segments/05-init.mp4 +0 -0
- package/docs/video/build/segments/05-init.txt +3 -0
- package/docs/video/build/segments/05-interactive.mp4 +0 -0
- package/docs/video/build/segments/05-interactive.txt +5 -0
- package/docs/video/build/segments/06-dryrun.mp4 +0 -0
- package/docs/video/build/segments/06-dryrun.txt +3 -0
- package/docs/video/build/segments/06-onboard.mp4 +0 -0
- package/docs/video/build/segments/06-onboard.txt +5 -0
- package/docs/video/build/segments/06-run.mp4 +0 -0
- package/docs/video/build/segments/06-run.txt +3 -0
- package/docs/video/build/segments/07-onboard.mp4 +0 -0
- package/docs/video/build/segments/07-onboard.txt +5 -0
- package/docs/video/build/segments/07-verify.mp4 +0 -0
- package/docs/video/build/segments/07-verify.txt +5 -0
- package/docs/video/build/segments/08-closing.mp4 +0 -0
- package/docs/video/build/segments/08-closing.txt +3 -0
- package/docs/video/build/segments/08-doctor.mp4 +0 -0
- package/docs/video/build/segments/08-doctor.txt +3 -0
- package/docs/video/build/segments/09-rollback.mp4 +0 -0
- package/docs/video/build/segments/09-rollback.txt +3 -0
- package/docs/video/build/segments/10-principles.mp4 +0 -0
- package/docs/video/build/segments/10-principles.txt +3 -0
- package/docs/video/build/segments/11-closing.mp4 +0 -0
- package/docs/video/build/segments/11-closing.txt +3 -0
- package/docs/video/build/segments/final.txt +8 -0
- package/docs/video/build-ai/audio/01-hook.mp3 +0 -0
- package/docs/video/build-ai/audio/02-pain.mp3 +0 -0
- package/docs/video/build-ai/audio/03-solution.mp3 +0 -0
- package/docs/video/build-ai/audio/04-how.mp3 +0 -0
- package/docs/video/build-ai/audio/05-safe.mp3 +0 -0
- package/docs/video/build-ai/audio/06-closing.mp3 +0 -0
- package/docs/video/build-ai/clips/01-hook.mp4 +0 -0
- package/docs/video/build-ai/clips/02-pain.mp4 +0 -0
- package/docs/video/build-ai/clips/03-solution.mp4 +0 -0
- package/docs/video/build-ai/clips/04-how.mp4 +0 -0
- package/docs/video/build-ai/clips/05-safe.mp4 +0 -0
- package/docs/video/build-ai/clips/06-closing.mp4 +0 -0
- package/docs/video/build-ai/first-frame-02-pain.png +0 -0
- package/docs/video/build-ai/first-frame-03-solution.png +0 -0
- package/docs/video/build-ai/first-frame-04-how.png +0 -0
- package/docs/video/build-ai/first-frame-05-safe.png +0 -0
- package/docs/video/build-ai/segments/01-hook.caption.txt +2 -0
- package/docs/video/build-ai/segments/01-hook.mp4 +0 -0
- package/docs/video/build-ai/segments/02-pain.mp4 +0 -0
- package/docs/video/build-ai/segments/03-solution.mp4 +0 -0
- package/docs/video/build-ai/segments/04-how.mp4 +0 -0
- package/docs/video/build-ai/segments/05-safe.mp4 +0 -0
- package/docs/video/build-ai/segments/06-closing.mp4 +0 -0
- package/docs/video/build-ai/segments/cap-01-hook.png +0 -0
- package/docs/video/build-ai/segments/cap-02-pain.png +0 -0
- package/docs/video/build-ai/segments/cap-03-solution.png +0 -0
- package/docs/video/build-ai/segments/cap-04-how.png +0 -0
- package/docs/video/build-ai/segments/cap-05-safe.png +0 -0
- package/docs/video/build-ai/segments/cap-06-closing.png +0 -0
- package/docs/video/build-ai/segments/final.txt +6 -0
- package/docs/video/build-posters/audio/01-hook.mp3 +0 -0
- package/docs/video/build-posters/audio/02-pain.mp3 +0 -0
- package/docs/video/build-posters/audio/03-solution.mp3 +0 -0
- package/docs/video/build-posters/audio/04-how.mp3 +0 -0
- package/docs/video/build-posters/audio/05-safe.mp3 +0 -0
- package/docs/video/build-posters/audio/06-closing.mp3 +0 -0
- package/docs/video/build-posters/cap-01-hook.png +0 -0
- package/docs/video/build-posters/cap-02-pain.png +0 -0
- package/docs/video/build-posters/cap-03-solution.png +0 -0
- package/docs/video/build-posters/cap-04-how.png +0 -0
- package/docs/video/build-posters/cap-05-safe.png +0 -0
- package/docs/video/build-posters/cap-06-closing.png +0 -0
- package/docs/video/build-posters/card-01-hook.png +0 -0
- package/docs/video/build-posters/card-06-closing.png +0 -0
- package/docs/video/build-posters/segments/01-hook.mp4 +0 -0
- package/docs/video/build-posters/segments/02-pain.mp4 +0 -0
- package/docs/video/build-posters/segments/03-solution.mp4 +0 -0
- package/docs/video/build-posters/segments/04-how.mp4 +0 -0
- package/docs/video/build-posters/segments/05-safe.mp4 +0 -0
- package/docs/video/build-posters/segments/06-closing.mp4 +0 -0
- package/docs/video/build-posters/segments/final.txt +6 -0
- package/docs/video/generate-video-ai.mjs +334 -0
- package/docs/video/generate-video-posters.mjs +204 -0
- package/docs/video/generate-video.mjs +426 -0
- package/docs/video/outline.zh-CN.md +102 -0
- package/docs/video/trellis-demo-video-ai.mp4 +0 -0
- package/docs/video/trellis-demo-video.mp4 +0 -0
- package/docs/video/voiceover.zh-CN.md +49 -0
- package/package.json +6 -2
- package/schema/builtin-skills/trellis-runtime/SKILL.md +117 -0
- package/schema/capability-selection.example.yaml +23 -0
- package/schema/scope.example.yaml +1 -1
- package/schema/servers.example.yaml +15 -1
package/docs/overview.md
ADDED
|
@@ -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
|
+

|
|
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
|
+

|
|
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
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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:
|
|
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 秒
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|