@ibotor/smart-trellis 0.5.19
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/LICENSE +235 -0
- package/README.md +263 -0
- package/bin/smart-trellis.js +3 -0
- package/bin/trellis.js +3 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +132 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/smart.d.ts +2 -0
- package/dist/cli/smart.d.ts.map +1 -0
- package/dist/cli/smart.js +41 -0
- package/dist/cli/smart.js.map +1 -0
- package/dist/commands/init.d.ts +56 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +1466 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/smart-init.d.ts +22 -0
- package/dist/commands/smart-init.d.ts.map +1 -0
- package/dist/commands/smart-init.js +122 -0
- package/dist/commands/smart-init.js.map +1 -0
- package/dist/commands/uninstall.d.ts +27 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +339 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +72 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +1926 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/configurators/antigravity.d.ts +7 -0
- package/dist/configurators/antigravity.d.ts.map +1 -0
- package/dist/configurators/antigravity.js +19 -0
- package/dist/configurators/antigravity.js.map +1 -0
- package/dist/configurators/claude.d.ts +9 -0
- package/dist/configurators/claude.d.ts.map +1 -0
- package/dist/configurators/claude.js +72 -0
- package/dist/configurators/claude.js.map +1 -0
- package/dist/configurators/codebuddy.d.ts +10 -0
- package/dist/configurators/codebuddy.d.ts.map +1 -0
- package/dist/configurators/codebuddy.js +30 -0
- package/dist/configurators/codebuddy.js.map +1 -0
- package/dist/configurators/codex.d.ts +8 -0
- package/dist/configurators/codex.d.ts.map +1 -0
- package/dist/configurators/codex.js +85 -0
- package/dist/configurators/codex.js.map +1 -0
- package/dist/configurators/copilot.d.ts +10 -0
- package/dist/configurators/copilot.d.ts.map +1 -0
- package/dist/configurators/copilot.js +51 -0
- package/dist/configurators/copilot.js.map +1 -0
- package/dist/configurators/cursor.d.ts +10 -0
- package/dist/configurators/cursor.d.ts.map +1 -0
- package/dist/configurators/cursor.js +29 -0
- package/dist/configurators/cursor.js.map +1 -0
- package/dist/configurators/droid.d.ts +10 -0
- package/dist/configurators/droid.d.ts.map +1 -0
- package/dist/configurators/droid.js +30 -0
- package/dist/configurators/droid.js.map +1 -0
- package/dist/configurators/gemini.d.ts +16 -0
- package/dist/configurators/gemini.d.ts.map +1 -0
- package/dist/configurators/gemini.js +38 -0
- package/dist/configurators/gemini.js.map +1 -0
- package/dist/configurators/index.d.ts +65 -0
- package/dist/configurators/index.d.ts.map +1 -0
- package/dist/configurators/index.js +367 -0
- package/dist/configurators/index.js.map +1 -0
- package/dist/configurators/kilo.d.ts +7 -0
- package/dist/configurators/kilo.d.ts.map +1 -0
- package/dist/configurators/kilo.js +19 -0
- package/dist/configurators/kilo.js.map +1 -0
- package/dist/configurators/kiro.d.ts +8 -0
- package/dist/configurators/kiro.d.ts.map +1 -0
- package/dist/configurators/kiro.js +24 -0
- package/dist/configurators/kiro.js.map +1 -0
- package/dist/configurators/opencode.d.ts +14 -0
- package/dist/configurators/opencode.d.ts.map +1 -0
- package/dist/configurators/opencode.js +96 -0
- package/dist/configurators/opencode.js.map +1 -0
- package/dist/configurators/pi.d.ts +3 -0
- package/dist/configurators/pi.d.ts.map +1 -0
- package/dist/configurators/pi.js +45 -0
- package/dist/configurators/pi.js.map +1 -0
- package/dist/configurators/qoder.d.ts +11 -0
- package/dist/configurators/qoder.d.ts.map +1 -0
- package/dist/configurators/qoder.js +31 -0
- package/dist/configurators/qoder.js.map +1 -0
- package/dist/configurators/shared.d.ts +178 -0
- package/dist/configurators/shared.d.ts.map +1 -0
- package/dist/configurators/shared.js +538 -0
- package/dist/configurators/shared.js.map +1 -0
- package/dist/configurators/windsurf.d.ts +7 -0
- package/dist/configurators/windsurf.d.ts.map +1 -0
- package/dist/configurators/windsurf.js +19 -0
- package/dist/configurators/windsurf.js.map +1 -0
- package/dist/configurators/workflow.d.ts +29 -0
- package/dist/configurators/workflow.d.ts.map +1 -0
- package/dist/configurators/workflow.js +163 -0
- package/dist/configurators/workflow.js.map +1 -0
- package/dist/constants/paths.d.ts +70 -0
- package/dist/constants/paths.d.ts.map +1 -0
- package/dist/constants/paths.js +79 -0
- package/dist/constants/paths.js.map +1 -0
- package/dist/constants/version.d.ts +9 -0
- package/dist/constants/version.d.ts.map +1 -0
- package/dist/constants/version.js +15 -0
- package/dist/constants/version.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/index.d.ts +62 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +187 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/manifests/0.1.9.json +30 -0
- package/dist/migrations/manifests/0.2.0.json +49 -0
- package/dist/migrations/manifests/0.2.12.json +9 -0
- package/dist/migrations/manifests/0.2.13.json +9 -0
- package/dist/migrations/manifests/0.2.14.json +175 -0
- package/dist/migrations/manifests/0.2.15.json +33 -0
- package/dist/migrations/manifests/0.3.0-beta.0.json +297 -0
- package/dist/migrations/manifests/0.3.0-beta.1.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.10.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.11.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.12.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.13.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.14.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.15.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.16.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.5.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.6.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.7.json +11 -0
- package/dist/migrations/manifests/0.3.0-beta.8.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.9.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.0.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.1.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.2.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.3.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.4.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.5.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.6.json +9 -0
- package/dist/migrations/manifests/0.3.0.json +11 -0
- package/dist/migrations/manifests/0.3.1.json +9 -0
- package/dist/migrations/manifests/0.3.10.json +9 -0
- package/dist/migrations/manifests/0.3.2.json +9 -0
- package/dist/migrations/manifests/0.3.3.json +9 -0
- package/dist/migrations/manifests/0.3.4.json +21 -0
- package/dist/migrations/manifests/0.3.5.json +9 -0
- package/dist/migrations/manifests/0.3.6.json +9 -0
- package/dist/migrations/manifests/0.3.7.json +9 -0
- package/dist/migrations/manifests/0.3.8.json +9 -0
- package/dist/migrations/manifests/0.3.9.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.1.json +228 -0
- package/dist/migrations/manifests/0.4.0-beta.10.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.5.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.6.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.7.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.8.json +34 -0
- package/dist/migrations/manifests/0.4.0-beta.9.json +9 -0
- package/dist/migrations/manifests/0.4.0-rc.0.json +9 -0
- package/dist/migrations/manifests/0.4.0-rc.1.json +9 -0
- package/dist/migrations/manifests/0.4.0.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.0.json +1646 -0
- package/dist/migrations/manifests/0.5.0-beta.1.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.10.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.11.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.12.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.13.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.14.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.15.json +116 -0
- package/dist/migrations/manifests/0.5.0-beta.16.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.17.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.18.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.19.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.5.json +222 -0
- package/dist/migrations/manifests/0.5.0-beta.6.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.7.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.8.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.9.json +48 -0
- package/dist/migrations/manifests/0.5.0-rc.0.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.1.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.2.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.3.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.4.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.5.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.6.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.7.json +9 -0
- package/dist/migrations/manifests/0.5.0.json +9 -0
- package/dist/migrations/manifests/0.5.1.json +9 -0
- package/dist/migrations/manifests/0.5.10.json +9 -0
- package/dist/migrations/manifests/0.5.11.json +16 -0
- package/dist/migrations/manifests/0.5.12.json +9 -0
- package/dist/migrations/manifests/0.5.13.json +9 -0
- package/dist/migrations/manifests/0.5.14.json +9 -0
- package/dist/migrations/manifests/0.5.15.json +9 -0
- package/dist/migrations/manifests/0.5.16.json +9 -0
- package/dist/migrations/manifests/0.5.17.json +9 -0
- package/dist/migrations/manifests/0.5.18.json +9 -0
- package/dist/migrations/manifests/0.5.19.json +9 -0
- package/dist/migrations/manifests/0.5.2.json +9 -0
- package/dist/migrations/manifests/0.5.3.json +9 -0
- package/dist/migrations/manifests/0.5.4.json +9 -0
- package/dist/migrations/manifests/0.5.5.json +9 -0
- package/dist/migrations/manifests/0.5.6.json +9 -0
- package/dist/migrations/manifests/0.5.7.json +16 -0
- package/dist/migrations/manifests/0.5.8.json +9 -0
- package/dist/migrations/manifests/0.5.9.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.0.json +16 -0
- package/dist/migrations/manifests/0.6.0-beta.1.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.10.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.11.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.12.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.14.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.15.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.16.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.17.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.18.json +16 -0
- package/dist/migrations/manifests/0.6.0-beta.19.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.20.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.21.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.5.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.6.json +16 -0
- package/dist/migrations/manifests/0.6.0-beta.7.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.8.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.9.json +9 -0
- package/dist/templates/claude/agents/trellis-check.md +109 -0
- package/dist/templates/claude/agents/trellis-implement.md +109 -0
- package/dist/templates/claude/agents/trellis-research.md +137 -0
- package/dist/templates/claude/index.d.ts +22 -0
- package/dist/templates/claude/index.d.ts.map +1 -0
- package/dist/templates/claude/index.js +46 -0
- package/dist/templates/claude/index.js.map +1 -0
- package/dist/templates/claude/settings.json +73 -0
- package/dist/templates/codebuddy/agents/trellis-check.md +109 -0
- package/dist/templates/codebuddy/agents/trellis-implement.md +109 -0
- package/dist/templates/codebuddy/agents/trellis-research.md +137 -0
- package/dist/templates/codebuddy/index.d.ts +15 -0
- package/dist/templates/codebuddy/index.d.ts.map +1 -0
- package/dist/templates/codebuddy/index.js +15 -0
- package/dist/templates/codebuddy/index.js.map +1 -0
- package/dist/templates/codebuddy/settings.json +59 -0
- package/dist/templates/codex/agents/trellis-check.toml +84 -0
- package/dist/templates/codex/agents/trellis-implement.toml +65 -0
- package/dist/templates/codex/agents/trellis-research.toml +73 -0
- package/dist/templates/codex/config.toml +28 -0
- package/dist/templates/codex/hooks/session-start.py +481 -0
- package/dist/templates/codex/hooks.json +15 -0
- package/dist/templates/codex/index.d.ts +39 -0
- package/dist/templates/codex/index.d.ts.map +1 -0
- package/dist/templates/codex/index.js +85 -0
- package/dist/templates/codex/index.js.map +1 -0
- package/dist/templates/codex/skills/before-dev/SKILL.md +34 -0
- package/dist/templates/codex/skills/brainstorm/SKILL.md +500 -0
- package/dist/templates/codex/skills/break-loop/SKILL.md +130 -0
- package/dist/templates/codex/skills/check/SKILL.md +30 -0
- package/dist/templates/codex/skills/check-cross-layer/SKILL.md +158 -0
- package/dist/templates/codex/skills/create-command/SKILL.md +101 -0
- package/dist/templates/codex/skills/finish-work/SKILL.md +90 -0
- package/dist/templates/codex/skills/improve-ut/SKILL.md +69 -0
- package/dist/templates/codex/skills/integrate-skill/SKILL.md +221 -0
- package/dist/templates/codex/skills/onboard/SKILL.md +363 -0
- package/dist/templates/codex/skills/record-session/SKILL.md +67 -0
- package/dist/templates/codex/skills/start/SKILL.md +354 -0
- package/dist/templates/codex/skills/update-spec/SKILL.md +335 -0
- package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +73 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/add-project-local-conventions.md +83 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +54 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-context-loading.md +81 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +57 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +78 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +83 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-task-lifecycle.md +90 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +64 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +55 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/context-injection.md +68 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +80 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md +51 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +102 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +101 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +75 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workspace-memory.md +71 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +79 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +69 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +59 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +74 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +83 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/SKILL.md +41 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/mcp-setup.md +90 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/repository-analysis.md +59 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/spec-task-planning.md +61 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/spec-writing.md +70 -0
- package/dist/templates/common/commands/continue.md +55 -0
- package/dist/templates/common/commands/finish-work.md +66 -0
- package/dist/templates/common/commands/start.md +58 -0
- package/dist/templates/common/index.d.ts +48 -0
- package/dist/templates/common/index.d.ts.map +1 -0
- package/dist/templates/common/index.js +104 -0
- package/dist/templates/common/index.js.map +1 -0
- package/dist/templates/common/skills/before-dev.md +29 -0
- package/dist/templates/common/skills/brainstorm.md +543 -0
- package/dist/templates/common/skills/break-loop.md +125 -0
- package/dist/templates/common/skills/check.md +87 -0
- package/dist/templates/common/skills/update-spec.md +351 -0
- package/dist/templates/copilot/hooks/session-start.py +454 -0
- package/dist/templates/copilot/hooks.json +19 -0
- package/dist/templates/copilot/index.d.ts +23 -0
- package/dist/templates/copilot/index.d.ts.map +1 -0
- package/dist/templates/copilot/index.js +54 -0
- package/dist/templates/copilot/index.js.map +1 -0
- package/dist/templates/copilot/prompts/before-dev.prompt.md +33 -0
- package/dist/templates/copilot/prompts/brainstorm.prompt.md +499 -0
- package/dist/templates/copilot/prompts/break-loop.prompt.md +129 -0
- package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +157 -0
- package/dist/templates/copilot/prompts/check.prompt.md +29 -0
- package/dist/templates/copilot/prompts/create-command.prompt.md +116 -0
- package/dist/templates/copilot/prompts/finish-work.prompt.md +99 -0
- package/dist/templates/copilot/prompts/integrate-skill.prompt.md +223 -0
- package/dist/templates/copilot/prompts/onboard.prompt.md +362 -0
- package/dist/templates/copilot/prompts/parallel.prompt.md +196 -0
- package/dist/templates/copilot/prompts/record-session.prompt.md +66 -0
- package/dist/templates/copilot/prompts/start.prompt.md +397 -0
- package/dist/templates/copilot/prompts/update-spec.prompt.md +358 -0
- package/dist/templates/cursor/agents/trellis-check.md +108 -0
- package/dist/templates/cursor/agents/trellis-implement.md +108 -0
- package/dist/templates/cursor/agents/trellis-research.md +136 -0
- package/dist/templates/cursor/hooks.json +24 -0
- package/dist/templates/cursor/index.d.ts +13 -0
- package/dist/templates/cursor/index.d.ts.map +1 -0
- package/dist/templates/cursor/index.js +13 -0
- package/dist/templates/cursor/index.js.map +1 -0
- package/dist/templates/droid/droids/trellis-check.md +101 -0
- package/dist/templates/droid/droids/trellis-implement.md +101 -0
- package/dist/templates/droid/droids/trellis-research.md +137 -0
- package/dist/templates/droid/index.d.ts +15 -0
- package/dist/templates/droid/index.d.ts.map +1 -0
- package/dist/templates/droid/index.js +15 -0
- package/dist/templates/droid/index.js.map +1 -0
- package/dist/templates/droid/settings.json +59 -0
- package/dist/templates/extract.d.ts +40 -0
- package/dist/templates/extract.d.ts.map +1 -0
- package/dist/templates/extract.js +106 -0
- package/dist/templates/extract.js.map +1 -0
- package/dist/templates/gemini/agents/trellis-check.md +101 -0
- package/dist/templates/gemini/agents/trellis-implement.md +101 -0
- package/dist/templates/gemini/agents/trellis-research.md +136 -0
- package/dist/templates/gemini/index.d.ts +13 -0
- package/dist/templates/gemini/index.d.ts.map +1 -0
- package/dist/templates/gemini/index.js +13 -0
- package/dist/templates/gemini/index.js.map +1 -0
- package/dist/templates/gemini/settings.json +28 -0
- package/dist/templates/kiro/agents/trellis-check.json +26 -0
- package/dist/templates/kiro/agents/trellis-implement.json +26 -0
- package/dist/templates/kiro/agents/trellis-research.json +30 -0
- package/dist/templates/kiro/index.d.ts +18 -0
- package/dist/templates/kiro/index.d.ts.map +1 -0
- package/dist/templates/kiro/index.js +18 -0
- package/dist/templates/kiro/index.js.map +1 -0
- package/dist/templates/markdown/agents.md +21 -0
- package/dist/templates/markdown/gitignore.txt +15 -0
- package/dist/templates/markdown/index.d.ts +27 -0
- package/dist/templates/markdown/index.d.ts.map +1 -0
- package/dist/templates/markdown/index.js +52 -0
- package/dist/templates/markdown/index.js.map +1 -0
- package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
- package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
- package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
- package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
- package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
- package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
- package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
- package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
- package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +105 -0
- package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +162 -0
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +595 -0
- package/dist/templates/markdown/spec/guides/index.md.txt +79 -0
- package/dist/templates/markdown/workspace-index.md +125 -0
- package/dist/templates/markdown/worktree.yaml.txt +58 -0
- package/dist/templates/opencode/agents/trellis-check.md +116 -0
- package/dist/templates/opencode/agents/trellis-implement.md +117 -0
- package/dist/templates/opencode/agents/trellis-research.md +145 -0
- package/dist/templates/opencode/lib/session-utils.js +432 -0
- package/dist/templates/opencode/lib/trellis-context.js +381 -0
- package/dist/templates/opencode/package.json +5 -0
- package/dist/templates/opencode/plugins/inject-subagent-context.js +497 -0
- package/dist/templates/opencode/plugins/inject-workflow-state.js +162 -0
- package/dist/templates/opencode/plugins/session-start.js +101 -0
- package/dist/templates/pi/agents/trellis-check.md +36 -0
- package/dist/templates/pi/agents/trellis-implement.md +41 -0
- package/dist/templates/pi/agents/trellis-research.md +25 -0
- package/dist/templates/pi/extensions/trellis/index.ts.txt +1172 -0
- package/dist/templates/pi/index.d.ts +5 -0
- package/dist/templates/pi/index.d.ts.map +1 -0
- package/dist/templates/pi/index.js +12 -0
- package/dist/templates/pi/index.js.map +1 -0
- package/dist/templates/pi/settings.json +21 -0
- package/dist/templates/qoder/agents/trellis-check.md +102 -0
- package/dist/templates/qoder/agents/trellis-implement.md +102 -0
- package/dist/templates/qoder/agents/trellis-research.md +137 -0
- package/dist/templates/qoder/index.d.ts +15 -0
- package/dist/templates/qoder/index.d.ts.map +1 -0
- package/dist/templates/qoder/index.js +15 -0
- package/dist/templates/qoder/index.js.map +1 -0
- package/dist/templates/qoder/settings.json +47 -0
- package/dist/templates/shared-hooks/index.d.ts +50 -0
- package/dist/templates/shared-hooks/index.d.ts.map +1 -0
- package/dist/templates/shared-hooks/index.js +88 -0
- package/dist/templates/shared-hooks/index.js.map +1 -0
- package/dist/templates/shared-hooks/inject-shell-session-context.py +183 -0
- package/dist/templates/shared-hooks/inject-subagent-context.py +749 -0
- package/dist/templates/shared-hooks/inject-workflow-state.py +387 -0
- package/dist/templates/shared-hooks/session-start.py +797 -0
- package/dist/templates/template-utils.d.ts +26 -0
- package/dist/templates/template-utils.d.ts.map +1 -0
- package/dist/templates/template-utils.js +60 -0
- package/dist/templates/template-utils.js.map +1 -0
- package/dist/templates/trellis/config.yaml +90 -0
- package/dist/templates/trellis/gitignore.txt +32 -0
- package/dist/templates/trellis/index.d.ts +52 -0
- package/dist/templates/trellis/index.d.ts.map +1 -0
- package/dist/templates/trellis/index.js +97 -0
- package/dist/templates/trellis/index.js.map +1 -0
- package/dist/templates/trellis/scripts/__init__.py +5 -0
- package/dist/templates/trellis/scripts/add_session.py +547 -0
- package/dist/templates/trellis/scripts/common/__init__.py +92 -0
- package/dist/templates/trellis/scripts/common/active_task.py +626 -0
- package/dist/templates/trellis/scripts/common/cli_adapter.py +811 -0
- package/dist/templates/trellis/scripts/common/config.py +445 -0
- package/dist/templates/trellis/scripts/common/developer.py +190 -0
- package/dist/templates/trellis/scripts/common/git.py +31 -0
- package/dist/templates/trellis/scripts/common/git_context.py +106 -0
- package/dist/templates/trellis/scripts/common/io.py +37 -0
- package/dist/templates/trellis/scripts/common/log.py +45 -0
- package/dist/templates/trellis/scripts/common/packages_context.py +238 -0
- package/dist/templates/trellis/scripts/common/paths.py +447 -0
- package/dist/templates/trellis/scripts/common/safe_commit.py +285 -0
- package/dist/templates/trellis/scripts/common/session_context.py +821 -0
- package/dist/templates/trellis/scripts/common/task_context.py +223 -0
- package/dist/templates/trellis/scripts/common/task_queue.py +188 -0
- package/dist/templates/trellis/scripts/common/task_store.py +697 -0
- package/dist/templates/trellis/scripts/common/task_utils.py +274 -0
- package/dist/templates/trellis/scripts/common/tasks.py +112 -0
- package/dist/templates/trellis/scripts/common/trellis_config.py +131 -0
- package/dist/templates/trellis/scripts/common/types.py +110 -0
- package/dist/templates/trellis/scripts/common/workflow_phase.py +215 -0
- package/dist/templates/trellis/scripts/get_context.py +16 -0
- package/dist/templates/trellis/scripts/get_developer.py +26 -0
- package/dist/templates/trellis/scripts/hooks/linear_sync.py +243 -0
- package/dist/templates/trellis/scripts/init_developer.py +51 -0
- package/dist/templates/trellis/scripts/task.py +500 -0
- package/dist/templates/trellis/tasks/.gitkeep +0 -0
- package/dist/templates/trellis/workflow.md +690 -0
- package/dist/types/ai-tools.d.ts +95 -0
- package/dist/types/ai-tools.d.ts.map +1 -0
- package/dist/types/ai-tools.js +280 -0
- package/dist/types/ai-tools.js.map +1 -0
- package/dist/types/migration.d.ts +125 -0
- package/dist/types/migration.d.ts.map +1 -0
- package/dist/types/migration.js +8 -0
- package/dist/types/migration.js.map +1 -0
- package/dist/utils/compare-versions.d.ts +12 -0
- package/dist/utils/compare-versions.d.ts.map +1 -0
- package/dist/utils/compare-versions.js +86 -0
- package/dist/utils/compare-versions.js.map +1 -0
- package/dist/utils/cwd-guard.d.ts +38 -0
- package/dist/utils/cwd-guard.d.ts.map +1 -0
- package/dist/utils/cwd-guard.js +62 -0
- package/dist/utils/cwd-guard.js.map +1 -0
- package/dist/utils/file-writer.d.ts +36 -0
- package/dist/utils/file-writer.d.ts.map +1 -0
- package/dist/utils/file-writer.js +203 -0
- package/dist/utils/file-writer.js.map +1 -0
- package/dist/utils/manifest-prune.d.ts +61 -0
- package/dist/utils/manifest-prune.d.ts.map +1 -0
- package/dist/utils/manifest-prune.js +136 -0
- package/dist/utils/manifest-prune.js.map +1 -0
- package/dist/utils/posix.d.ts +13 -0
- package/dist/utils/posix.d.ts.map +1 -0
- package/dist/utils/posix.js +15 -0
- package/dist/utils/posix.js.map +1 -0
- package/dist/utils/project-detector.d.ts +46 -0
- package/dist/utils/project-detector.d.ts.map +1 -0
- package/dist/utils/project-detector.js +666 -0
- package/dist/utils/project-detector.js.map +1 -0
- package/dist/utils/proxy.d.ts +25 -0
- package/dist/utils/proxy.d.ts.map +1 -0
- package/dist/utils/proxy.js +60 -0
- package/dist/utils/proxy.js.map +1 -0
- package/dist/utils/task-json.d.ts +46 -0
- package/dist/utils/task-json.d.ts.map +1 -0
- package/dist/utils/task-json.js +49 -0
- package/dist/utils/task-json.js.map +1 -0
- package/dist/utils/template-fetcher.d.ts +150 -0
- package/dist/utils/template-fetcher.d.ts.map +1 -0
- package/dist/utils/template-fetcher.js +907 -0
- package/dist/utils/template-fetcher.js.map +1 -0
- package/dist/utils/template-hash.d.ts +123 -0
- package/dist/utils/template-hash.d.ts.map +1 -0
- package/dist/utils/template-hash.js +334 -0
- package/dist/utils/template-hash.js.map +1 -0
- package/dist/utils/uninstall-scrubbers.d.ts +66 -0
- package/dist/utils/uninstall-scrubbers.d.ts.map +1 -0
- package/dist/utils/uninstall-scrubbers.js +342 -0
- package/dist/utils/uninstall-scrubbers.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,690 @@
|
|
|
1
|
+
# Development Workflow
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Core Principles
|
|
6
|
+
|
|
7
|
+
1. **Plan before code** — figure out what to do before you start
|
|
8
|
+
2. **Specs injected, not remembered** — guidelines are injected via hook/skill, not recalled from memory
|
|
9
|
+
3. **Persist everything** — research, decisions, and lessons all go to files; conversations get compacted, files don't
|
|
10
|
+
4. **Incremental development** — one task at a time
|
|
11
|
+
5. **Capture learnings** — after each task, review and write new knowledge back to spec
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Trellis System
|
|
16
|
+
|
|
17
|
+
### Developer Identity
|
|
18
|
+
|
|
19
|
+
On first use, initialize your identity:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
python3 ./.trellis/scripts/init_developer.py <your-name>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Creates `.trellis/.developer` (gitignored) + `.trellis/workspace/<your-name>/`.
|
|
26
|
+
|
|
27
|
+
### Spec System
|
|
28
|
+
|
|
29
|
+
`.trellis/spec/` holds coding guidelines organized by package and layer.
|
|
30
|
+
|
|
31
|
+
- `.trellis/spec/<package>/<layer>/index.md` — entry point with **Pre-Development Checklist** + **Quality Check**. Actual guidelines live in the `.md` files it points to.
|
|
32
|
+
- `.trellis/spec/guides/index.md` — cross-package thinking guides.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
python3 ./.trellis/scripts/get_context.py --mode packages # list packages / layers
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**When to update spec**: new pattern/convention found · bug-fix prevention to codify · new technical decision.
|
|
39
|
+
|
|
40
|
+
### Task System
|
|
41
|
+
|
|
42
|
+
Every task has its own directory under `.trellis/tasks/{MM-DD-name}/` holding `prd.md`, `implement.jsonl`, `check.jsonl`, `task.json`, optional `research/`, `info.md`.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Task lifecycle
|
|
46
|
+
python3 ./.trellis/scripts/task.py create "<title>" [--slug <name>] [--parent <dir>]
|
|
47
|
+
python3 ./.trellis/scripts/task.py start <name> # set active task (session-scoped when available)
|
|
48
|
+
python3 ./.trellis/scripts/task.py current --source # show active task and source
|
|
49
|
+
python3 ./.trellis/scripts/task.py finish # clear active task (triggers after_finish hooks)
|
|
50
|
+
python3 ./.trellis/scripts/task.py archive <name> # move to archive/{year-month}/
|
|
51
|
+
python3 ./.trellis/scripts/task.py list [--mine] [--status <s>]
|
|
52
|
+
python3 ./.trellis/scripts/task.py list-archive
|
|
53
|
+
|
|
54
|
+
# Code-spec context (injected into implement/check agents via JSONL).
|
|
55
|
+
# `implement.jsonl` / `check.jsonl` are seeded on `task create` for sub-agent-capable
|
|
56
|
+
# platforms; the AI curates real spec + research entries during Phase 1.3.
|
|
57
|
+
python3 ./.trellis/scripts/task.py add-context <name> <action> <file> <reason>
|
|
58
|
+
python3 ./.trellis/scripts/task.py list-context <name> [action]
|
|
59
|
+
python3 ./.trellis/scripts/task.py validate <name>
|
|
60
|
+
|
|
61
|
+
# Task metadata
|
|
62
|
+
python3 ./.trellis/scripts/task.py set-branch <name> <branch>
|
|
63
|
+
python3 ./.trellis/scripts/task.py set-base-branch <name> <branch> # PR target
|
|
64
|
+
python3 ./.trellis/scripts/task.py set-scope <name> <scope>
|
|
65
|
+
|
|
66
|
+
# Hierarchy (parent/child)
|
|
67
|
+
python3 ./.trellis/scripts/task.py add-subtask <parent> <child>
|
|
68
|
+
python3 ./.trellis/scripts/task.py remove-subtask <parent> <child>
|
|
69
|
+
|
|
70
|
+
# PR creation
|
|
71
|
+
python3 ./.trellis/scripts/task.py create-pr [name] [--dry-run]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
> Run `python3 ./.trellis/scripts/task.py --help` to see the authoritative, up-to-date list.
|
|
75
|
+
|
|
76
|
+
**Current-task mechanism**: `task.py create` creates the task directory and (when session identity is available) auto-sets the per-session active-task pointer so the planning breadcrumb fires immediately. `task.py start` writes the same pointer (idempotent if already set) and flips `task.json.status` from `planning` to `in_progress`. State is stored under `.trellis/.runtime/sessions/`. If no context key is available from hook input, `TRELLIS_CONTEXT_ID`, or a platform-native session environment variable, there is no active task and `task.py start` fails with a session identity hint. `task.py finish` deletes the current session file (status unchanged). `task.py archive <task>` writes `status=completed`, moves the directory to `archive/`, and deletes any runtime session files that still point at the archived task.
|
|
77
|
+
|
|
78
|
+
### Workspace System
|
|
79
|
+
|
|
80
|
+
Records every AI session for cross-session tracking under `.trellis/workspace/<developer>/`.
|
|
81
|
+
|
|
82
|
+
- `journal-N.md` — session log. **Max 2000 lines per file**; a new `journal-(N+1).md` is auto-created when exceeded.
|
|
83
|
+
- `index.md` — personal index (total sessions, last active).
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
python3 ./.trellis/scripts/add_session.py --title "Title" --commit "hash" --summary "Summary"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Context Script
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
python3 ./.trellis/scripts/get_context.py # full session runtime
|
|
93
|
+
python3 ./.trellis/scripts/get_context.py --mode packages # available packages + spec layers
|
|
94
|
+
python3 ./.trellis/scripts/get_context.py --mode phase --step <X.Y> # detailed guide for a workflow step
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
<!--
|
|
100
|
+
WORKFLOW-STATE BREADCRUMB CONTRACT (read this before editing the tag blocks below)
|
|
101
|
+
|
|
102
|
+
The 4 [workflow-state:STATUS] blocks embedded in the ## Phase Index section
|
|
103
|
+
below are the SINGLE source of truth for the per-turn `<workflow-state>`
|
|
104
|
+
breadcrumb that every supported AI platform's UserPromptSubmit hook
|
|
105
|
+
reads. inject-workflow-state.py (Python platforms) and
|
|
106
|
+
inject-workflow-state.js (OpenCode plugin) only parse them — there is no
|
|
107
|
+
fallback dict baked into the scripts after v0.5.0-rc.0.
|
|
108
|
+
|
|
109
|
+
STATUS charset: [A-Za-z0-9_-]+. When the hook can't find a tag, it
|
|
110
|
+
degrades to a generic "Refer to workflow.md for current step." line —
|
|
111
|
+
intentionally visible so users notice and fix a broken workflow.md.
|
|
112
|
+
|
|
113
|
+
INVARIANT (test/regression.test.ts):
|
|
114
|
+
Every workflow-walkthrough step marked `[required · once]` must have a
|
|
115
|
+
matching enforcement line in its phase's [workflow-state:*] block. The
|
|
116
|
+
breadcrumb is the only per-turn channel; if a mandatory step isn't
|
|
117
|
+
mentioned there, the AI silently skips it (Phase 1.3 jsonl curation
|
|
118
|
+
skip and Phase 3.4 commit skip both manifested via this gap).
|
|
119
|
+
|
|
120
|
+
TAG ↔ PHASE scoping:
|
|
121
|
+
[workflow-state:no_task] → no active task; before Phase 1
|
|
122
|
+
[workflow-state:planning] → all of Phase 1 (status='planning')
|
|
123
|
+
[workflow-state:in_progress] → Phase 2 + Phase 3.1-3.4
|
|
124
|
+
(status stays 'in_progress' from
|
|
125
|
+
task.py start until task.py archive)
|
|
126
|
+
[workflow-state:completed] → currently DEAD: cmd_archive flips
|
|
127
|
+
status and moves the dir in the same
|
|
128
|
+
call, so the resolver loses the
|
|
129
|
+
pointer (block kept for a future
|
|
130
|
+
explicit in_progress→completed
|
|
131
|
+
transition)
|
|
132
|
+
|
|
133
|
+
Editing checklist:
|
|
134
|
+
- When you change a [workflow-state:STATUS] block, also check the
|
|
135
|
+
matching phase's `[required · once]` walkthrough steps for sync
|
|
136
|
+
- Run `trellis update` after editing to push the new bodies to
|
|
137
|
+
downstream user projects (block-level managed replacement)
|
|
138
|
+
- Full runtime contract:
|
|
139
|
+
.trellis/spec/cli/backend/workflow-state-contract.md
|
|
140
|
+
-->
|
|
141
|
+
|
|
142
|
+
## Phase Index
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
Phase 1: Plan → figure out what to do (brainstorm + research → prd.md)
|
|
146
|
+
Phase 2: Execute → write code and pass quality checks
|
|
147
|
+
Phase 3: Finish → distill lessons + wrap-up
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
<!-- Per-turn breadcrumb: shown when there is no active task (before Phase 1) -->
|
|
151
|
+
|
|
152
|
+
[workflow-state:no_task]
|
|
153
|
+
No active task. **A Direct answer** — pure Q&A / explanation / lookup / chat; no file writes + one-line answer + repo reads ≤ 2 files → AI judges, no override needed.
|
|
154
|
+
**B Create a task** — any implementation / code change / build / refactor work. Entry sequence: (1) `python3 ./.trellis/scripts/task.py create "<title>"` to create the task (status=planning, breadcrumb switches to [workflow-state:planning] for brainstorm + jsonl phase guidance) → (2) load `trellis-brainstorm` skill to discuss requirements with the user and iterate on prd.md → (3) once prd is done and jsonl is curated, run `task.py start <task-dir>` to enter [workflow-state:in_progress] for the implementation skeleton. **"It looks small" is NOT grounds for downgrading B to A or C**.
|
|
155
|
+
**C Inline change** (per-turn only, escape hatch for B) — the user's CURRENT message MUST contain one of: "skip trellis" / "no task" / "just do it" / "don't create a task" / "跳过 trellis" / "别走流程" / "小修一下" / "直接改" / "先别建任务" → briefly acknowledge ("ok, skipping trellis flow this turn"), then inline. **Without seeing one of these phrases you must NOT inline on your own**; do not invent an override the user never said.
|
|
156
|
+
[/workflow-state:no_task]
|
|
157
|
+
|
|
158
|
+
### Phase 1: Plan
|
|
159
|
+
- 1.0 Create task `[required · once]` (just `task.py create`; status enters planning)
|
|
160
|
+
- 1.1 Requirement exploration `[required · repeatable]`
|
|
161
|
+
- 1.2 Research `[optional · repeatable]`
|
|
162
|
+
- 1.3 Configure context `[required · once]` — Claude Code, Cursor, OpenCode, Codex, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi
|
|
163
|
+
- 1.4 Activate task `[required · once]` (run `task.py start`; status → in_progress)
|
|
164
|
+
- 1.5 Completion criteria
|
|
165
|
+
|
|
166
|
+
<!-- Per-turn breadcrumb: shown throughout Phase 1 (status='planning') -->
|
|
167
|
+
|
|
168
|
+
[workflow-state:planning]
|
|
169
|
+
Load the `trellis-brainstorm` skill and iterate on prd.md with the user.
|
|
170
|
+
Phase 1.3 (required, once): before `task.py start`, you MUST curate `implement.jsonl` and `check.jsonl` — list the spec / research files sub-agents need so they get the right context injected. You may skip only if the jsonl already has agent-curated entries (the seed `_example` row alone doesn't count).
|
|
171
|
+
Then run `task.py start <task-dir>` to flip status to in_progress.
|
|
172
|
+
[/workflow-state:planning]
|
|
173
|
+
|
|
174
|
+
<!-- Per-turn breadcrumb: shown throughout Phase 1 when codex.dispatch_mode=inline.
|
|
175
|
+
Codex-only opt-in alternate to [workflow-state:planning]. The main agent
|
|
176
|
+
edits code directly in Phase 2, so Phase 1.3 jsonl curation is skipped —
|
|
177
|
+
the inline workflow loads `trellis-before-dev` instead of injecting JSONL
|
|
178
|
+
into a sub-agent. -->
|
|
179
|
+
|
|
180
|
+
[workflow-state:planning-inline]
|
|
181
|
+
Load the `trellis-brainstorm` skill and iterate on prd.md with the user.
|
|
182
|
+
Phase 1.3 jsonl curation is **skipped** in inline dispatch mode — the main session loads `trellis-before-dev` directly in Phase 2 and reads spec context itself, so there is no sub-agent to inject jsonl into.
|
|
183
|
+
Then run `task.py start <task-dir>` to flip status to in_progress.
|
|
184
|
+
[/workflow-state:planning-inline]
|
|
185
|
+
|
|
186
|
+
### Phase 2: Execute
|
|
187
|
+
- 2.1 Implement `[required · repeatable]`
|
|
188
|
+
- 2.2 Quality check `[required · repeatable]`
|
|
189
|
+
- 2.3 Rollback `[on demand]`
|
|
190
|
+
|
|
191
|
+
<!-- Per-turn breadcrumb: shown while status='in_progress'.
|
|
192
|
+
Scope: all of Phase 2 + Phase 3.1-3.4 (status stays 'in_progress' from
|
|
193
|
+
task.py start until task.py archive; only archive flips it). The body
|
|
194
|
+
therefore must cover every required step from implementation through
|
|
195
|
+
commit, including Phase 3.3 spec update and Phase 3.4 commit. -->
|
|
196
|
+
|
|
197
|
+
[workflow-state:in_progress]
|
|
198
|
+
**Tools**: `trellis-implement` / `trellis-research` are sub-agent types only (Task/Agent tool, NOT Skill — there is no skill by these names). `trellis-update-spec` is a skill. `trellis-check` exists as both; prefer the Agent form when verifying after code changes.
|
|
199
|
+
**Flow**: trellis-implement → trellis-check → trellis-update-spec → commit (Phase 3.4) → `/trellis:finish-work`.
|
|
200
|
+
**Main-session default (no override)**: dispatch the `trellis-implement` / `trellis-check` sub-agents — the main agent does NOT edit code by default. Phase 3.4 commit (required, once): after trellis-update-spec, or whenever implementation is verifiably complete, the main agent **drives the commit** — state the commit plan in user-facing text, then run `git commit` — BEFORE suggesting `/trellis:finish-work`. `/finish-work` refuses to run on a dirty working tree (paths outside `.trellis/workspace/` and `.trellis/tasks/`).
|
|
201
|
+
**Sub-agent self-exemption**: if you are already running as `trellis-implement`, implement directly from the loaded task context and do NOT spawn another `trellis-implement`; if you are already running as `trellis-check`, review/fix directly and do NOT spawn another `trellis-check`. The default dispatch rule applies to the main session only.
|
|
202
|
+
**Sub-agent dispatch protocol (all platforms, all sub-agents)**: When you spawn `trellis-implement` / `trellis-check` / `trellis-research`, your dispatch prompt **MUST** start with one line: `Active task: <task path from \`task.py current\`>`. No exceptions. On class-2 platforms (codex / copilot / gemini / qoder) the sub-agent depends on this line because there is no hook to inject task context. On class-1 platforms (claude / cursor / opencode / kiro / codebuddy / droid) the line is normally redundant — the hook injects context directly — but it serves as a critical fallback when the hook fails (Windows + Claude Code PreToolUse silent skip, `--continue` resume, fork distribution, hooks disabled, etc.). For `trellis-research`, the line tells the sub-agent which `{task_dir}/research/` to write into.
|
|
203
|
+
**Inline override** (per-turn only, escape hatch for sub-agent dispatch): the user's CURRENT message MUST explicitly contain one of: "do it inline" / "no sub-agent" / "你直接改" / "别派 sub-agent" / "main session 写就行" / "不用 sub-agent". **Without seeing one of these phrases you must NOT inline on your own**; do not invent an override the user never said.
|
|
204
|
+
[/workflow-state:in_progress]
|
|
205
|
+
|
|
206
|
+
<!-- Per-turn breadcrumb: shown while status='in_progress' when
|
|
207
|
+
codex.dispatch_mode=inline. Codex-only opt-in alternate to
|
|
208
|
+
[workflow-state:in_progress]. The main session edits code directly
|
|
209
|
+
instead of dispatching sub-agents. -->
|
|
210
|
+
|
|
211
|
+
[workflow-state:in_progress-inline]
|
|
212
|
+
**Flow** (inline mode): main session loads `trellis-before-dev` → main session edits code → main session loads `trellis-check` → run lint / type-check / tests → fix → `trellis-update-spec` → commit (Phase 3.4) → `/trellis:finish-work`.
|
|
213
|
+
**Main-session default (inline dispatch_mode)**: the main agent edits code directly. Do NOT dispatch `trellis-implement` / `trellis-check` sub-agents. Load the `trellis-before-dev` skill before writing code; load the `trellis-check` skill before reporting completion.
|
|
214
|
+
Phase 3.4 commit (required, once): after `trellis-update-spec`, or whenever implementation is verifiably complete, the main agent **drives the commit** — state the commit plan in user-facing text, then run `git commit` — BEFORE suggesting `/trellis:finish-work`. `/finish-work` refuses to run on a dirty working tree (paths outside `.trellis/workspace/` and `.trellis/tasks/`).
|
|
215
|
+
[/workflow-state:in_progress-inline]
|
|
216
|
+
|
|
217
|
+
### Phase 3: Finish
|
|
218
|
+
- 3.1 Quality verification `[required · repeatable]`
|
|
219
|
+
- 3.2 Debug retrospective `[on demand]`
|
|
220
|
+
- 3.3 Spec update `[required · once]`
|
|
221
|
+
- 3.4 Commit changes `[required · once]`
|
|
222
|
+
- 3.5 Wrap-up reminder
|
|
223
|
+
|
|
224
|
+
<!-- Per-turn breadcrumb: shown while status='completed'.
|
|
225
|
+
Currently DEAD in normal flow: cmd_archive writes status='completed' in
|
|
226
|
+
the same call that moves the task dir to archive/, so the active-task
|
|
227
|
+
resolver loses the pointer and the hook never fires on archived tasks.
|
|
228
|
+
Block preserved for a future status-transition redesign (e.g. an
|
|
229
|
+
explicit in_progress→completed command). Edit through the same spec
|
|
230
|
+
channel as the live blocks. -->
|
|
231
|
+
|
|
232
|
+
[workflow-state:completed]
|
|
233
|
+
Code committed via Phase 3.4; run `/trellis:finish-work` to wrap up (archive the task + record session).
|
|
234
|
+
If you reach this state with uncommitted code, return to Phase 3.4 first — `/finish-work` refuses to run on a dirty working tree.
|
|
235
|
+
`task.py archive` deletes any runtime session files that still point at the archived task.
|
|
236
|
+
[/workflow-state:completed]
|
|
237
|
+
|
|
238
|
+
### Rules
|
|
239
|
+
|
|
240
|
+
1. Identify which Phase you're in, then continue from the next step there
|
|
241
|
+
2. Run steps in order inside each Phase; `[required]` steps can't be skipped
|
|
242
|
+
3. Phases can roll back (e.g., Execute reveals a prd defect → return to Plan to fix, then re-enter Execute)
|
|
243
|
+
4. Steps tagged `[once]` are skipped if the output already exists; don't re-run
|
|
244
|
+
|
|
245
|
+
### Skill Routing
|
|
246
|
+
|
|
247
|
+
When a user request matches one of these intents, load the corresponding skill (or dispatch the corresponding sub-agent) first — do not skip skills.
|
|
248
|
+
|
|
249
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
250
|
+
|
|
251
|
+
| User intent | Route |
|
|
252
|
+
|---|---|
|
|
253
|
+
| Wants a new feature / requirement unclear | `trellis-brainstorm` |
|
|
254
|
+
| About to write code / start implementing | Dispatch the `trellis-implement` sub-agent per Phase 2.1 |
|
|
255
|
+
| Finished writing / want to verify | Dispatch the `trellis-check` sub-agent per Phase 2.2 |
|
|
256
|
+
| Stuck / fixed same bug several times | `trellis-break-loop` |
|
|
257
|
+
| Spec needs update | `trellis-update-spec` |
|
|
258
|
+
|
|
259
|
+
**Why `trellis-before-dev` is NOT in this table:** you are not the one writing code — the `trellis-implement` sub-agent is. Sub-agent platforms get spec context via `implement.jsonl` injection / prelude, not via the main thread loading `trellis-before-dev`.
|
|
260
|
+
|
|
261
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
262
|
+
|
|
263
|
+
[codex-inline, Kilo, Antigravity, Windsurf]
|
|
264
|
+
|
|
265
|
+
| User intent | Skill |
|
|
266
|
+
|---|---|
|
|
267
|
+
| Wants a new feature / requirement unclear | `trellis-brainstorm` |
|
|
268
|
+
| About to write code / start implementing | `trellis-before-dev` (then implement directly in the main session) |
|
|
269
|
+
| Finished writing / want to verify | `trellis-check` |
|
|
270
|
+
| Stuck / fixed same bug several times | `trellis-break-loop` |
|
|
271
|
+
| Spec needs update | `trellis-update-spec` |
|
|
272
|
+
|
|
273
|
+
[/codex-inline, Kilo, Antigravity, Windsurf]
|
|
274
|
+
|
|
275
|
+
### DO NOT skip skills
|
|
276
|
+
|
|
277
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
278
|
+
|
|
279
|
+
| What you're thinking | Why it's wrong |
|
|
280
|
+
|---|---|
|
|
281
|
+
| "This is simple, I'll just code it in the main thread" | Dispatching `trellis-implement` is the cheap path; skipping it tempts you to write code in the main thread and lose spec context — sub-agents get `implement.jsonl` injected, you don't |
|
|
282
|
+
| "I already thought it through in plan mode" | Plan-mode output lives in memory — sub-agents can't see it; must be persisted to prd.md |
|
|
283
|
+
| "I already know the spec" | The spec may have been updated since you last read it; the sub-agent gets the fresh copy, you may not |
|
|
284
|
+
| "Code first, check later" | `trellis-check` surfaces issues you won't notice yourself; earlier is cheaper |
|
|
285
|
+
|
|
286
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
287
|
+
|
|
288
|
+
[codex-inline, Kilo, Antigravity, Windsurf]
|
|
289
|
+
|
|
290
|
+
| What you're thinking | Why it's wrong |
|
|
291
|
+
|---|---|
|
|
292
|
+
| "This is simple, just code it" | Simple tasks often grow complex; `trellis-before-dev` takes under a minute and loads the spec context you'll need |
|
|
293
|
+
| "I already thought it through in plan mode" | Plan-mode output lives in memory — must be persisted to prd.md before code |
|
|
294
|
+
| "I already know the spec" | The spec may have been updated since you last read it; read again |
|
|
295
|
+
| "Code first, check later" | `trellis-check` surfaces issues you won't notice yourself; earlier is cheaper |
|
|
296
|
+
|
|
297
|
+
[/codex-inline, Kilo, Antigravity, Windsurf]
|
|
298
|
+
|
|
299
|
+
### Loading Step Detail
|
|
300
|
+
|
|
301
|
+
At each step, run this to fetch detailed guidance:
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
python3 ./.trellis/scripts/get_context.py --mode phase --step <step>
|
|
305
|
+
# e.g. python3 ./.trellis/scripts/get_context.py --mode phase --step 1.1
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Phase 1: Plan
|
|
311
|
+
|
|
312
|
+
Goal: figure out what to build, produce a clear requirements doc and the context needed to implement it.
|
|
313
|
+
|
|
314
|
+
#### 1.0 Create task `[required · once]`
|
|
315
|
+
|
|
316
|
+
Create the task directory (status enters `planning`, the session active-task pointer auto-targets the new task when session identity is available):
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
python3 ./.trellis/scripts/task.py create "<task title>" --slug <name>
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
`--slug` is the human-readable name only. Do **not** include the `MM-DD-` date prefix; `task.py create` adds that prefix automatically.
|
|
323
|
+
|
|
324
|
+
After this command succeeds, the per-turn breadcrumb auto-switches to `[workflow-state:planning]`, telling the AI to enter the brainstorm + jsonl curation phase.
|
|
325
|
+
|
|
326
|
+
⚠️ **Run only `create` here — do not also run `start`**. `start` flips status to `in_progress`, which switches the breadcrumb to the implementation phase before brainstorm + jsonl are done — the AI will silently skip them. Save `start` for step 1.4, after jsonl curation is complete.
|
|
327
|
+
|
|
328
|
+
Skip when `python3 ./.trellis/scripts/task.py current --source` already points to a task.
|
|
329
|
+
|
|
330
|
+
#### 1.1 Requirement exploration `[required · repeatable]`
|
|
331
|
+
|
|
332
|
+
Load the `trellis-brainstorm` skill and explore requirements interactively with the user per the skill's guidance.
|
|
333
|
+
|
|
334
|
+
The brainstorm skill will guide you to:
|
|
335
|
+
- Ask one question at a time
|
|
336
|
+
- Prefer researching over asking the user
|
|
337
|
+
- Prefer offering options over open-ended questions
|
|
338
|
+
- Update `prd.md` immediately after each user answer
|
|
339
|
+
|
|
340
|
+
Return to this step whenever requirements change and revise `prd.md`.
|
|
341
|
+
|
|
342
|
+
#### 1.2 Research `[optional · repeatable]`
|
|
343
|
+
|
|
344
|
+
Research can happen at any time during requirement exploration. It isn't limited to local code — you can use any available tool (MCP servers, skills, web search, etc.) to look up external information, including third-party library docs, industry practices, API references, etc.
|
|
345
|
+
|
|
346
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
347
|
+
|
|
348
|
+
Spawn the research sub-agent:
|
|
349
|
+
|
|
350
|
+
- **Agent type**: `trellis-research`
|
|
351
|
+
- **Task description**: Research <specific question>
|
|
352
|
+
- **Key requirement**: Research output MUST be persisted to `{TASK_DIR}/research/`
|
|
353
|
+
|
|
354
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
355
|
+
|
|
356
|
+
[codex-inline, Kilo, Antigravity, Windsurf]
|
|
357
|
+
|
|
358
|
+
Do the research in the main session directly and write findings into `{TASK_DIR}/research/`. (For `codex-inline` this avoids the `fork_turns="none"` isolation that prevents `trellis-research` sub-agents from resolving the active task path.)
|
|
359
|
+
|
|
360
|
+
[/codex-inline, Kilo, Antigravity, Windsurf]
|
|
361
|
+
|
|
362
|
+
**Research artifact conventions**:
|
|
363
|
+
- One file per research topic (e.g. `research/auth-library-comparison.md`)
|
|
364
|
+
- Record third-party library usage examples, API references, version constraints in files
|
|
365
|
+
- Note relevant spec file paths you discovered for later reference
|
|
366
|
+
|
|
367
|
+
Brainstorm and research can interleave freely — pause to research a technical question, then return to talk with the user.
|
|
368
|
+
|
|
369
|
+
**Key principle**: Research output must be written to files, not left only in the chat. Conversations get compacted; files don't.
|
|
370
|
+
|
|
371
|
+
#### 1.3 Configure context `[required · once]`
|
|
372
|
+
|
|
373
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
374
|
+
|
|
375
|
+
Curate `implement.jsonl` and `check.jsonl` so the Phase 2 sub-agents get the right spec context. These files were seeded on `task create` with a single self-describing `_example` line; your job here is to fill in real entries.
|
|
376
|
+
|
|
377
|
+
**Location**: `{TASK_DIR}/implement.jsonl` and `{TASK_DIR}/check.jsonl` (already exist).
|
|
378
|
+
|
|
379
|
+
**Format**: one JSON object per line — `{"file": "<path>", "reason": "<why>"}`. Paths are repo-root relative.
|
|
380
|
+
|
|
381
|
+
**What to put in**:
|
|
382
|
+
- **Spec files** — `.trellis/spec/<package>/<layer>/index.md` and any specific guideline files (`error-handling.md`, `conventions.md`, etc.) relevant to this task
|
|
383
|
+
- **Research files** — `{TASK_DIR}/research/*.md` that the sub-agent will need to consult
|
|
384
|
+
|
|
385
|
+
**What NOT to put in**:
|
|
386
|
+
- Code files (`src/**`, `packages/**/*.ts`, etc.) — those are read by the sub-agent during implementation, not pre-registered here
|
|
387
|
+
- Files you're about to modify — same reason
|
|
388
|
+
|
|
389
|
+
**Split between the two files**:
|
|
390
|
+
- `implement.jsonl` → specs + research the implement sub-agent needs to write code correctly
|
|
391
|
+
- `check.jsonl` → specs for the check sub-agent (quality guidelines, check conventions, same research if needed)
|
|
392
|
+
|
|
393
|
+
**How to discover relevant specs**:
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
python3 ./.trellis/scripts/get_context.py --mode packages
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
Lists every package + its spec layers with paths. Pick the entries that match this task's domain.
|
|
400
|
+
|
|
401
|
+
**How to append entries**:
|
|
402
|
+
|
|
403
|
+
Either edit the jsonl file directly in your editor, or use:
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" implement "<path>" "<reason>"
|
|
407
|
+
python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" check "<path>" "<reason>"
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
Delete the seed `_example` line once real entries exist (optional — it's skipped automatically by consumers).
|
|
411
|
+
|
|
412
|
+
Skip when: `implement.jsonl` has agent-curated entries (the seed row alone doesn't count).
|
|
413
|
+
|
|
414
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
415
|
+
|
|
416
|
+
[codex-inline, Kilo, Antigravity, Windsurf]
|
|
417
|
+
|
|
418
|
+
Skip this step. Context is loaded directly by the `trellis-before-dev` skill in Phase 2.
|
|
419
|
+
|
|
420
|
+
[/codex-inline, Kilo, Antigravity, Windsurf]
|
|
421
|
+
|
|
422
|
+
#### 1.4 Activate task `[required · once]`
|
|
423
|
+
|
|
424
|
+
Once prd.md is complete and 1.3 jsonl curation is done, flip the task status to `in_progress`:
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
python3 ./.trellis/scripts/task.py start <task-dir>
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
After this command succeeds, the breadcrumb auto-switches to `[workflow-state:in_progress]`, and the rest of Phase 2 / 3 follows.
|
|
431
|
+
|
|
432
|
+
If `task.py start` errors with a session-identity message (no context key from hook input, `TRELLIS_CONTEXT_ID`, or platform-native session env), follow the hint in the error to set up session identity, then retry.
|
|
433
|
+
|
|
434
|
+
#### 1.5 Completion criteria
|
|
435
|
+
|
|
436
|
+
| Condition | Required |
|
|
437
|
+
|------|:---:|
|
|
438
|
+
| `prd.md` exists | ✅ |
|
|
439
|
+
| User confirms requirements | ✅ |
|
|
440
|
+
| `task.py start` has been run (status = in_progress) | ✅ |
|
|
441
|
+
| `research/` has artifacts (complex tasks) | recommended |
|
|
442
|
+
| `info.md` technical design (complex tasks) | optional |
|
|
443
|
+
|
|
444
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
445
|
+
|
|
446
|
+
| `implement.jsonl` has agent-curated entries (not just the seed row) | ✅ |
|
|
447
|
+
|
|
448
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## Phase 2: Execute
|
|
453
|
+
|
|
454
|
+
Goal: turn the prd into code that passes quality checks.
|
|
455
|
+
|
|
456
|
+
#### 2.1 Implement `[required · repeatable]`
|
|
457
|
+
|
|
458
|
+
[Claude Code, Cursor, OpenCode, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
459
|
+
|
|
460
|
+
Spawn the implement sub-agent:
|
|
461
|
+
|
|
462
|
+
- **Agent type**: `trellis-implement`
|
|
463
|
+
- **Task description**: Implement the requirements per prd.md, consulting materials under `{TASK_DIR}/research/`; finish by running project lint and type-check
|
|
464
|
+
- **Dispatch prompt guard**: Tell the spawned agent it is already the `trellis-implement` sub-agent and must implement directly, not spawn another `trellis-implement` / `trellis-check`.
|
|
465
|
+
|
|
466
|
+
The platform hook/plugin auto-handles:
|
|
467
|
+
- Reads `implement.jsonl` and injects the referenced spec files into the agent prompt
|
|
468
|
+
- Injects prd.md content
|
|
469
|
+
|
|
470
|
+
[/Claude Code, Cursor, OpenCode, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
471
|
+
|
|
472
|
+
[codex-sub-agent]
|
|
473
|
+
|
|
474
|
+
Spawn the implement sub-agent:
|
|
475
|
+
|
|
476
|
+
- **Agent type**: `trellis-implement`
|
|
477
|
+
- **Task description**: Implement the requirements per prd.md, consulting materials under `{TASK_DIR}/research/`; finish by running project lint and type-check
|
|
478
|
+
- **Dispatch prompt guard**: The prompt MUST start with `Active task: <task path>`, then explicitly say the spawned agent is already `trellis-implement` and must implement directly without spawning another `trellis-implement` / `trellis-check`.
|
|
479
|
+
|
|
480
|
+
The Codex sub-agent definition auto-handles the context load requirement:
|
|
481
|
+
- Resolves the active task with `task.py current --source`, then reads `prd.md` and `info.md` if present
|
|
482
|
+
- Reads `implement.jsonl` and requires the agent to load each referenced spec file before coding
|
|
483
|
+
|
|
484
|
+
[/codex-sub-agent]
|
|
485
|
+
|
|
486
|
+
[Kiro]
|
|
487
|
+
|
|
488
|
+
Spawn the implement sub-agent:
|
|
489
|
+
|
|
490
|
+
- **Agent type**: `trellis-implement`
|
|
491
|
+
- **Task description**: Implement the requirements per prd.md, consulting materials under `{TASK_DIR}/research/`; finish by running project lint and type-check
|
|
492
|
+
- **Dispatch prompt guard**: Tell the spawned agent it is already the `trellis-implement` sub-agent and must implement directly, not spawn another `trellis-implement` / `trellis-check`.
|
|
493
|
+
|
|
494
|
+
The platform prelude auto-handles the context load requirement:
|
|
495
|
+
- Reads `implement.jsonl` and injects the referenced spec files into the agent prompt
|
|
496
|
+
- Injects prd.md content
|
|
497
|
+
|
|
498
|
+
[/Kiro]
|
|
499
|
+
|
|
500
|
+
[codex-inline, Kilo, Antigravity, Windsurf]
|
|
501
|
+
|
|
502
|
+
1. Load the `trellis-before-dev` skill to read project guidelines
|
|
503
|
+
2. Read `{TASK_DIR}/prd.md` for requirements
|
|
504
|
+
3. Consult materials under `{TASK_DIR}/research/`
|
|
505
|
+
4. Implement the code per requirements
|
|
506
|
+
5. Run project lint and type-check
|
|
507
|
+
|
|
508
|
+
[/codex-inline, Kilo, Antigravity, Windsurf]
|
|
509
|
+
|
|
510
|
+
#### 2.2 Quality check `[required · repeatable]`
|
|
511
|
+
|
|
512
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
513
|
+
|
|
514
|
+
Spawn the check sub-agent:
|
|
515
|
+
|
|
516
|
+
- **Agent type**: `trellis-check`
|
|
517
|
+
- **Task description**: Review all code changes against spec and prd; fix any findings directly; ensure lint and type-check pass
|
|
518
|
+
- **Dispatch prompt guard**: Tell the spawned agent it is already the `trellis-check` sub-agent and must review/fix directly, not spawn another `trellis-check` / `trellis-implement`.
|
|
519
|
+
|
|
520
|
+
The check agent's job:
|
|
521
|
+
- Review code changes against specs
|
|
522
|
+
- Auto-fix issues it finds
|
|
523
|
+
- Run lint and typecheck to verify
|
|
524
|
+
|
|
525
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
|
|
526
|
+
|
|
527
|
+
[codex-inline, Kilo, Antigravity, Windsurf]
|
|
528
|
+
|
|
529
|
+
Load the `trellis-check` skill and verify the code per its guidance:
|
|
530
|
+
- Spec compliance
|
|
531
|
+
- lint / type-check / tests
|
|
532
|
+
- Cross-layer consistency (when changes span layers)
|
|
533
|
+
|
|
534
|
+
If issues are found → fix → re-check, until green.
|
|
535
|
+
|
|
536
|
+
[/codex-inline, Kilo, Antigravity, Windsurf]
|
|
537
|
+
|
|
538
|
+
#### 2.3 Rollback `[on demand]`
|
|
539
|
+
|
|
540
|
+
- `check` reveals a prd defect → return to Phase 1, fix `prd.md`, then redo 2.1
|
|
541
|
+
- Implementation went wrong → revert code, redo 2.1
|
|
542
|
+
- Need more research → research (same as Phase 1.2), write findings into `research/`
|
|
543
|
+
|
|
544
|
+
---
|
|
545
|
+
|
|
546
|
+
## Phase 3: Finish
|
|
547
|
+
|
|
548
|
+
Goal: ensure code quality, capture lessons, record the work.
|
|
549
|
+
|
|
550
|
+
#### 3.1 Quality verification `[required · repeatable]`
|
|
551
|
+
|
|
552
|
+
Load the `trellis-check` skill and do a final verification:
|
|
553
|
+
- Spec compliance
|
|
554
|
+
- lint / type-check / tests
|
|
555
|
+
- Cross-layer consistency (when changes span layers)
|
|
556
|
+
|
|
557
|
+
If issues are found → fix → re-check, until green.
|
|
558
|
+
|
|
559
|
+
#### 3.2 Debug retrospective `[on demand]`
|
|
560
|
+
|
|
561
|
+
If this task involved repeated debugging (the same issue was fixed multiple times), load the `trellis-break-loop` skill to:
|
|
562
|
+
- Classify the root cause
|
|
563
|
+
- Explain why earlier fixes failed
|
|
564
|
+
- Propose prevention
|
|
565
|
+
|
|
566
|
+
The goal is to capture debugging lessons so the same class of issue doesn't recur.
|
|
567
|
+
|
|
568
|
+
#### 3.3 Spec update `[required · once]`
|
|
569
|
+
|
|
570
|
+
Load the `trellis-update-spec` skill and review whether this task produced new knowledge worth recording:
|
|
571
|
+
- Newly discovered patterns or conventions
|
|
572
|
+
- Pitfalls you hit
|
|
573
|
+
- New technical decisions
|
|
574
|
+
|
|
575
|
+
Update the docs under `.trellis/spec/` accordingly. Even if the conclusion is "nothing to update", walk through the judgment.
|
|
576
|
+
|
|
577
|
+
#### 3.4 Commit changes `[required · once]`
|
|
578
|
+
|
|
579
|
+
The AI drives a batched commit of this task's code changes so `/finish-work` can run cleanly afterwards. Goal: produce work commits FIRST, then bookkeeping (archive + journal) commits land after — never interleaved.
|
|
580
|
+
|
|
581
|
+
**Step-by-step**:
|
|
582
|
+
|
|
583
|
+
1. **Inspect dirty state**:
|
|
584
|
+
```bash
|
|
585
|
+
git status --porcelain
|
|
586
|
+
```
|
|
587
|
+
Snapshot every dirty path. If the working tree is clean, skip to 3.5.
|
|
588
|
+
|
|
589
|
+
2. **Learn commit style** from recent history (so drafted messages blend in):
|
|
590
|
+
```bash
|
|
591
|
+
git log --oneline -5
|
|
592
|
+
```
|
|
593
|
+
Note the prefix convention (`feat:` / `fix:` / `chore:` / `docs:` ...), language (中文/English), and length style.
|
|
594
|
+
|
|
595
|
+
3. **Classify dirty files into two groups**:
|
|
596
|
+
- **AI-edited this session** — files you wrote/edited via Edit/Write/Bash tool calls in this session. You know what changed and why.
|
|
597
|
+
- **Unrecognized** — dirty files you did NOT touch this session (could be the user's manual edits, leftover WIP from a previous session, or unrelated work). Do NOT silently include these.
|
|
598
|
+
|
|
599
|
+
4. **Draft a commit plan**. Group AI-edited files into logical commits (1 commit per coherent change unit, not 1 commit per file). Each entry: `<commit message>` + file list. List unrecognized files separately at the bottom.
|
|
600
|
+
|
|
601
|
+
5. **Present the plan once, ask for one-shot confirmation**. Format:
|
|
602
|
+
```
|
|
603
|
+
Proposed commits (in order):
|
|
604
|
+
1. <message>
|
|
605
|
+
- <file>
|
|
606
|
+
- <file>
|
|
607
|
+
2. <message>
|
|
608
|
+
- <file>
|
|
609
|
+
|
|
610
|
+
Unrecognized dirty files (NOT in any commit — confirm include/exclude):
|
|
611
|
+
- <file>
|
|
612
|
+
- <file>
|
|
613
|
+
|
|
614
|
+
Reply 'ok' / '行' to execute. Reply with edits, or '我自己来' / 'manual' to abort.
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
6. **On confirmation**: run `git add <files>` + `git commit -m "<msg>"` for each batch in order. Do not amend. Do not push.
|
|
618
|
+
|
|
619
|
+
7. **On rejection** (user replies "不行" / "我自己来" / "manual" / any pushback on the plan): stop. Do not attempt a second plan. The user will commit by hand; you skip ahead to 3.5 once they confirm.
|
|
620
|
+
|
|
621
|
+
**Rules**:
|
|
622
|
+
- No `git commit --amend` anywhere — three-stage three-commit flow (work commits → archive commit → journal commit).
|
|
623
|
+
- Never push to remote in this step.
|
|
624
|
+
- If the user wants different message wording but accepts the file grouping, edit the message and re-confirm once — but if they reject the grouping, exit to manual mode.
|
|
625
|
+
- The batched plan is one prompt; do not prompt per commit.
|
|
626
|
+
|
|
627
|
+
#### 3.5 Wrap-up reminder
|
|
628
|
+
|
|
629
|
+
After the above, remind the user they can run `/finish-work` to wrap up (archive the task, record the session).
|
|
630
|
+
|
|
631
|
+
---
|
|
632
|
+
|
|
633
|
+
## Customizing Trellis (for forks)
|
|
634
|
+
|
|
635
|
+
This section is for developers who want to modify the Trellis workflow itself. All customization is done by editing this file; the scripts are parsers only.
|
|
636
|
+
|
|
637
|
+
### Changing what a step means
|
|
638
|
+
|
|
639
|
+
Edit the corresponding step's walkthrough body in the Phase 1 / 2 / 3 sections above. **Critical constraint**: if you change a step's `[required · once]` marker or add a new `[required · once]` step, you MUST also add a matching enforcement line to that phase's `[workflow-state:STATUS]` tag block — otherwise the per-turn breadcrumb omits the reinforcement, and the AI silently skips the step. The regression tests assert this.
|
|
640
|
+
|
|
641
|
+
All 4 tag blocks live in the `## Phase Index` section above, immediately after each phase summary:
|
|
642
|
+
|
|
643
|
+
| Scope | Corresponding tag |
|
|
644
|
+
|---|---|
|
|
645
|
+
| No active task (before Phase 1) | `[workflow-state:no_task]` (after the Phase Index ASCII art) |
|
|
646
|
+
| All of Phase 1 (task created → ready for implementation) | `[workflow-state:planning]` (after Phase 1 summary) |
|
|
647
|
+
| Phase 2 + Phase 3.1–3.4 (implementation + check + wrap-up) | `[workflow-state:in_progress]` (after Phase 2 summary) |
|
|
648
|
+
| After Phase 3.5 (archived) | `[workflow-state:completed]` (after Phase 3 summary; **currently DEAD**) |
|
|
649
|
+
|
|
650
|
+
### Changing the per-turn prompt text
|
|
651
|
+
|
|
652
|
+
Directly edit the body of the corresponding `[workflow-state:STATUS]` block. After editing, run `trellis update` (if you're a template maintainer) or restart your AI session (if you're customizing your own project) — no script changes required.
|
|
653
|
+
|
|
654
|
+
### Adding a custom status
|
|
655
|
+
|
|
656
|
+
Add a new block:
|
|
657
|
+
|
|
658
|
+
```
|
|
659
|
+
[workflow-state:my-status]
|
|
660
|
+
your per-turn prompt text
|
|
661
|
+
[/workflow-state:my-status]
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
Constraints:
|
|
665
|
+
- STATUS charset: `[A-Za-z0-9_-]+` (underscores and hyphens allowed, e.g. `in-review`, `blocked-by-team`)
|
|
666
|
+
- A lifecycle hook must write `task.json.status` to your custom value, otherwise the tag is never read
|
|
667
|
+
- Lifecycle hooks live in `task.json.hooks.after_*` and bind to one of `after_create / after_start / after_finish / after_archive`
|
|
668
|
+
|
|
669
|
+
### Adding a lifecycle hook
|
|
670
|
+
|
|
671
|
+
Add a `hooks` field to your `task.json`:
|
|
672
|
+
|
|
673
|
+
```json
|
|
674
|
+
{
|
|
675
|
+
"hooks": {
|
|
676
|
+
"after_finish": [
|
|
677
|
+
"your-script-or-command-here"
|
|
678
|
+
]
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
Supported events: `after_create / after_start / after_finish / after_archive`. Note that `after_finish` ≠ a status change (it only clears the active-task pointer); use `after_archive` for "task is done" notifications.
|
|
684
|
+
|
|
685
|
+
### Full contract
|
|
686
|
+
|
|
687
|
+
For the workflow state machine's runtime contract, the locations of all status writers, pseudo-statuses (`no_task` / `stale_<source_type>`), the hook reachability matrix, and other deep details, see:
|
|
688
|
+
|
|
689
|
+
- `.trellis/spec/cli/backend/workflow-state-contract.md` — runtime contract + writer table + test invariants
|
|
690
|
+
- `.trellis/scripts/inject-workflow-state.py` — actual parser (reads workflow.md only, no embedded text)
|