@mindfoldhq/trellis 0.6.4 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/index.js +2 -0
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/commands/channel/messages.js +1 -1
  5. package/dist/commands/channel/supervisor/stdout.d.ts +7 -5
  6. package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -1
  7. package/dist/commands/channel/supervisor/stdout.js +65 -18
  8. package/dist/commands/channel/supervisor/stdout.js.map +1 -1
  9. package/dist/commands/channel/supervisor.d.ts +13 -0
  10. package/dist/commands/channel/supervisor.d.ts.map +1 -1
  11. package/dist/commands/channel/supervisor.js +54 -2
  12. package/dist/commands/channel/supervisor.js.map +1 -1
  13. package/dist/commands/init.d.ts +2 -0
  14. package/dist/commands/init.d.ts.map +1 -1
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/uninstall.d.ts.map +1 -1
  17. package/dist/commands/uninstall.js +8 -1
  18. package/dist/commands/uninstall.js.map +1 -1
  19. package/dist/commands/update.d.ts.map +1 -1
  20. package/dist/commands/update.js +83 -42
  21. package/dist/commands/update.js.map +1 -1
  22. package/dist/configurators/copilot.d.ts +1 -0
  23. package/dist/configurators/copilot.d.ts.map +1 -1
  24. package/dist/configurators/copilot.js +4 -1
  25. package/dist/configurators/copilot.js.map +1 -1
  26. package/dist/configurators/index.d.ts.map +1 -1
  27. package/dist/configurators/index.js +27 -1
  28. package/dist/configurators/index.js.map +1 -1
  29. package/dist/configurators/omp.d.ts +11 -0
  30. package/dist/configurators/omp.d.ts.map +1 -0
  31. package/dist/configurators/omp.js +51 -0
  32. package/dist/configurators/omp.js.map +1 -0
  33. package/dist/configurators/pi.d.ts.map +1 -1
  34. package/dist/configurators/pi.js +14 -4
  35. package/dist/configurators/pi.js.map +1 -1
  36. package/dist/configurators/shared.d.ts +7 -0
  37. package/dist/configurators/shared.d.ts.map +1 -1
  38. package/dist/configurators/shared.js +27 -0
  39. package/dist/configurators/shared.js.map +1 -1
  40. package/dist/configurators/trae.d.ts +17 -0
  41. package/dist/configurators/trae.d.ts.map +1 -0
  42. package/dist/configurators/trae.js +42 -0
  43. package/dist/configurators/trae.js.map +1 -0
  44. package/dist/configurators/zcode.d.ts +3 -3
  45. package/dist/configurators/zcode.js +12 -12
  46. package/dist/configurators/zcode.js.map +1 -1
  47. package/dist/migrations/manifests/0.6.5.json +9 -0
  48. package/dist/migrations/manifests/0.6.6.json +17 -0
  49. package/dist/templates/codex/hooks/session-start.py +6 -6
  50. package/dist/templates/codex/skills/brainstorm/SKILL.md +19 -1
  51. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +1 -1
  52. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +1 -1
  53. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +1 -1
  54. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/bundled-skills.md +2 -1
  55. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +3 -3
  56. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +1 -1
  57. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +1 -0
  58. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +5 -5
  59. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +21 -2
  60. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +1 -1
  61. package/dist/templates/common/skills/brainstorm.md +19 -1
  62. package/dist/templates/copilot/copilot-instructions.md +11 -0
  63. package/dist/templates/copilot/hooks/session-start.py +6 -6
  64. package/dist/templates/copilot/index.d.ts +6 -1
  65. package/dist/templates/copilot/index.d.ts.map +1 -1
  66. package/dist/templates/copilot/index.js +8 -1
  67. package/dist/templates/copilot/index.js.map +1 -1
  68. package/dist/templates/copilot/prompts/brainstorm.prompt.md +19 -1
  69. package/dist/templates/omp/agents/trellis-check.md +41 -0
  70. package/dist/templates/omp/agents/trellis-implement.md +45 -0
  71. package/dist/templates/omp/agents/trellis-research.md +30 -0
  72. package/dist/templates/omp/extensions/trellis/index.ts.txt +462 -0
  73. package/dist/templates/omp/index.d.ts +4 -0
  74. package/dist/templates/omp/index.d.ts.map +1 -0
  75. package/dist/templates/omp/index.js +9 -0
  76. package/dist/templates/omp/index.js.map +1 -0
  77. package/dist/templates/pi/agents/trellis-check.md +1 -1
  78. package/dist/templates/pi/agents/trellis-implement.md +1 -1
  79. package/dist/templates/pi/agents/trellis-research.md +1 -1
  80. package/dist/templates/pi/extensions/trellis/index.ts.txt +111 -9
  81. package/dist/templates/shared-hooks/index.d.ts +1 -1
  82. package/dist/templates/shared-hooks/index.d.ts.map +1 -1
  83. package/dist/templates/shared-hooks/index.js +1 -0
  84. package/dist/templates/shared-hooks/index.js.map +1 -1
  85. package/dist/templates/shared-hooks/inject-workflow-state.py +41 -6
  86. package/dist/templates/shared-hooks/session-start.py +12 -7
  87. package/dist/templates/trae/agents/trellis-check.md +108 -0
  88. package/dist/templates/trae/agents/trellis-implement.md +103 -0
  89. package/dist/templates/trae/agents/trellis-research.md +137 -0
  90. package/dist/templates/trae/hooks.json +27 -0
  91. package/dist/templates/trae/index.d.ts +15 -0
  92. package/dist/templates/trae/index.d.ts.map +1 -0
  93. package/dist/templates/trae/index.js +15 -0
  94. package/dist/templates/trae/index.js.map +1 -0
  95. package/dist/templates/trellis/scripts/add_session.py +65 -17
  96. package/dist/templates/trellis/scripts/common/active_task.py +2 -0
  97. package/dist/templates/trellis/scripts/common/cli_adapter.py +72 -11
  98. package/dist/templates/trellis/scripts/common/config.py +29 -0
  99. package/dist/templates/trellis/scripts/common/session_context.py +1 -1
  100. package/dist/templates/trellis/scripts/common/task_store.py +79 -19
  101. package/dist/templates/trellis/scripts/task.py +8 -2
  102. package/dist/templates/trellis/workflow.md +22 -20
  103. package/dist/templates/zcode/agents/trellis-research.md +133 -0
  104. package/dist/templates/zcode/index.d.ts +6 -5
  105. package/dist/templates/zcode/index.d.ts.map +1 -1
  106. package/dist/templates/zcode/index.js +6 -5
  107. package/dist/templates/zcode/index.js.map +1 -1
  108. package/dist/types/ai-tools.d.ts +4 -4
  109. package/dist/types/ai-tools.d.ts.map +1 -1
  110. package/dist/types/ai-tools.js +45 -2
  111. package/dist/types/ai-tools.js.map +1 -1
  112. package/dist/utils/uninstall-scrubbers.d.ts +1 -0
  113. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
  114. package/dist/utils/uninstall-scrubbers.js +19 -0
  115. package/dist/utils/uninstall-scrubbers.js.map +1 -1
  116. package/package.json +2 -2
@@ -23,6 +23,7 @@ from datetime import datetime
23
23
  from pathlib import Path
24
24
 
25
25
  from .config import (
26
+ get_codex_dispatch_mode,
26
27
  get_packages,
27
28
  get_session_auto_commit,
28
29
  is_monorepo,
@@ -113,13 +114,13 @@ def _repo_relative_path(path: Path, repo_root: Path) -> str:
113
114
 
114
115
  # Config directories of platforms that consume implement.jsonl / check.jsonl.
115
116
  # Keep in sync with src/types/ai-tools.ts AI_TOOLS entries — these are the
116
- # platforms listed in workflow.md's "agent-capable" Skill Routing block
117
- # (Class-1 hook-inject + Class-2 pull-based preludes). Kilo / Antigravity /
118
- # Devin are NOT in this list: they do not consume JSONL.
117
+ # platforms listed in workflow.md's "agent-capable" Skill Routing block.
118
+ # Codex is checked separately because default inline mode does not consume
119
+ # JSONL. Kilo / Antigravity / Devin are NOT in this list either: they load
120
+ # specs through skills instead of JSONL.
119
121
  _SUBAGENT_CONFIG_DIRS: tuple[str, ...] = (
120
122
  ".claude",
121
123
  ".cursor",
122
- ".codex",
123
124
  ".kiro",
124
125
  ".gemini",
125
126
  ".opencode",
@@ -128,7 +129,11 @@ _SUBAGENT_CONFIG_DIRS: tuple[str, ...] = (
128
129
  ".factory", # Factory Droid
129
130
  ".github/copilot",
130
131
  ".pi", # Pi Agent
132
+ ".trae", # Trae IDE
133
+ ".omp", # Oh My Pi
134
+ ".zcode", # ZCode
131
135
  )
136
+ _CODEX_CONFIG_DIR = ".codex"
132
137
 
133
138
  _SEED_EXAMPLE = (
134
139
  "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. "
@@ -141,13 +146,15 @@ _SEED_EXAMPLE = (
141
146
  def _has_subagent_platform(repo_root: Path) -> bool:
142
147
  """Return True if any sub-agent-capable platform is configured.
143
148
 
144
- Detected by probing well-known config directories at the repo root. Used
145
- only to decide whether ``task.py create`` should seed empty
146
- ``implement.jsonl`` / ``check.jsonl`` files.
149
+ Detected by probing well-known config directories at the repo root. Codex
150
+ only counts when ``codex.dispatch_mode`` explicitly opts into
151
+ ``sub-agent``; inline mode loads context through skills, not JSONL.
147
152
  """
148
153
  for config_dir in _SUBAGENT_CONFIG_DIRS:
149
154
  if (repo_root / config_dir).is_dir():
150
155
  return True
156
+ if (repo_root / _CODEX_CONFIG_DIR).is_dir():
157
+ return get_codex_dispatch_mode(repo_root) == "sub-agent"
151
158
  return False
152
159
 
153
160
 
@@ -239,6 +246,34 @@ def cmd_create(args: argparse.Namespace) -> int:
239
246
  # Create task directory with MM-DD-slug format
240
247
  tasks_dir = get_tasks_dir(repo_root)
241
248
  date_prefix = generate_task_date_prefix()
249
+
250
+ # Guard against date-prefixed --slug (e.g. a full task dir name pasted in),
251
+ # which would otherwise produce MM-DD-MM-DD-slug (issue #377). Only an
252
+ # explicit --slug is guarded; title-derived slugs are left untouched.
253
+ if args.slug:
254
+ m = re.match(r"^(\d{2})-(\d{2})-(.+)$", slug)
255
+ if m and 1 <= int(m.group(1)) <= 12 and 1 <= int(m.group(2)) <= 31:
256
+ slug_prefix = f"{m.group(1)}-{m.group(2)}"
257
+ if slug_prefix == date_prefix:
258
+ slug = m.group(3)
259
+ print(
260
+ colored(
261
+ f'warning: --slug should not include the MM-DD prefix; normalized to "{slug}"',
262
+ Colors.YELLOW,
263
+ ),
264
+ file=sys.stderr,
265
+ )
266
+ else:
267
+ print(
268
+ colored(
269
+ f"Error: --slug starts with a date prefix ({slug_prefix}-), but task.py create always uses today's date ({date_prefix}).",
270
+ Colors.RED,
271
+ ),
272
+ file=sys.stderr,
273
+ )
274
+ print(f"Pass only the slug body, e.g. --slug {m.group(3)}", file=sys.stderr)
275
+ return 1
276
+
242
277
  dir_name = f"{date_prefix}-{slug}"
243
278
  task_dir = tasks_dir / dir_name
244
279
  task_json_path = task_dir / FILE_TASK_JSON
@@ -261,11 +296,21 @@ def cmd_create(args: argparse.Namespace) -> int:
261
296
  _, branch_out, _ = run_git(["branch", "--show-current"], cwd=repo_root)
262
297
  current_branch = branch_out.strip() or "main"
263
298
 
299
+ description = (args.description or "").strip()
300
+ if not description.strip():
301
+ print(
302
+ colored(
303
+ "warning: task description is empty; pass --description to improve search and later audits.",
304
+ Colors.YELLOW,
305
+ ),
306
+ file=sys.stderr,
307
+ )
308
+
264
309
  task_data = {
265
310
  "id": slug,
266
311
  "name": slug,
267
312
  "title": args.title,
268
- "description": args.description or "",
313
+ "description": description,
269
314
  "status": "planning",
270
315
  "dev_type": None,
271
316
  "scope": None,
@@ -293,7 +338,7 @@ def cmd_create(args: argparse.Namespace) -> int:
293
338
  prd_path = task_dir / "prd.md"
294
339
  if not prd_path.exists():
295
340
  prd_path.write_text(
296
- _default_prd_content(args.title, args.description),
341
+ _default_prd_content(args.title, description),
297
342
  encoding="utf-8",
298
343
  )
299
344
 
@@ -336,16 +381,31 @@ def cmd_create(args: argparse.Namespace) -> int:
336
381
  # outside an AI session) — the task is still created, the user can run
337
382
  # task.py start later. Pointer is session-scoped so this never affects
338
383
  # other AI sessions.
339
- try:
340
- from .active_task import resolve_context_key, set_active_task
341
- if resolve_context_key():
342
- try:
343
- rel_dir = task_dir.relative_to(repo_root).as_posix()
344
- except ValueError:
345
- rel_dir = str(task_dir)
346
- set_active_task(rel_dir, repo_root)
347
- except Exception:
348
- pass
384
+ if getattr(args, "no_start", False):
385
+ print(
386
+ colored(
387
+ "Skipped session activation (--no-start); run task.py start when ready.",
388
+ Colors.YELLOW,
389
+ ),
390
+ file=sys.stderr,
391
+ )
392
+ else:
393
+ try:
394
+ from .active_task import resolve_context_key, set_active_task
395
+ if resolve_context_key():
396
+ try:
397
+ rel_dir = task_dir.relative_to(repo_root).as_posix()
398
+ except ValueError:
399
+ rel_dir = str(task_dir)
400
+ active = set_active_task(rel_dir, repo_root)
401
+ if active:
402
+ print(
403
+ colored(f"Activated task for this session: {active.task_path}", Colors.GREEN),
404
+ file=sys.stderr,
405
+ )
406
+ print(f"Source: {active.source}", file=sys.stderr)
407
+ except Exception:
408
+ pass
349
409
 
350
410
  print(colored(f"Created task: {dir_name}", Colors.GREEN), file=sys.stderr)
351
411
  print("", file=sys.stderr)
@@ -4,7 +4,7 @@
4
4
  Task Management Script.
5
5
 
6
6
  Usage:
7
- python3 task.py create "<title>" [--slug <name>] [--assignee <dev>] [--priority P0|P1|P2|P3] [--parent <dir>] [--package <pkg>]
7
+ python3 task.py create "<title>" [--slug <name>] [--assignee <dev>] [--priority P0|P1|P2|P3] [--parent <dir>] [--package <pkg>] [--no-start]
8
8
  python3 task.py add-context <dir> <file> <path> [reason] # Add jsonl entry
9
9
  python3 task.py validate <dir> # Validate jsonl files
10
10
  python3 task.py list-context <dir> # List jsonl entries
@@ -307,6 +307,7 @@ Usage:
307
307
  python3 task.py create <title> Create new task directory
308
308
  python3 task.py create <title> --package <pkg> Create task for a specific package
309
309
  python3 task.py create <title> --parent <dir> Create task as child of parent
310
+ python3 task.py create <title> --no-start Create without making it active in this session
310
311
  python3 task.py add-context <dir> <jsonl> <path> [reason] Add entry to jsonl
311
312
  python3 task.py validate <dir> Validate jsonl files
312
313
  python3 task.py list-context <dir> List jsonl entries
@@ -392,12 +393,17 @@ def main() -> int:
392
393
  # create
393
394
  p_create = subparsers.add_parser("create", help="Create new task")
394
395
  p_create.add_argument("title", help="Task title")
395
- p_create.add_argument("--slug", "-s", help="Task slug")
396
+ p_create.add_argument("--slug", "-s", help="Task slug without the MM-DD date prefix")
396
397
  p_create.add_argument("--assignee", "-a", help="Assignee developer")
397
398
  p_create.add_argument("--priority", "-p", default="P2", help="Priority (P0-P3)")
398
399
  p_create.add_argument("--description", "-d", help="Task description")
399
400
  p_create.add_argument("--parent", help="Parent task directory (establishes subtask link)")
400
401
  p_create.add_argument("--package", help="Package name for monorepo projects")
402
+ p_create.add_argument(
403
+ "--no-start",
404
+ action="store_true",
405
+ help="Create the task without making it active in this session",
406
+ )
401
407
 
402
408
  # add-context
403
409
  p_add = subparsers.add_parser("add-context", help="Add context entry")
@@ -183,7 +183,7 @@ Complex task: ask the user if you can create a Trellis task and enter the planni
183
183
  - 1.0 Create task `[required · once]` (only after task-creation consent)
184
184
  - 1.1 Requirement exploration `[required · repeatable]` (`prd.md`; complex tasks also need `design.md` + `implement.md`)
185
185
  - 1.2 Research `[optional · repeatable]`
186
- - 1.3 Configure context `[required · once]` — Claude Code, Cursor, OpenCode, Codex, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix (sub-agent-dispatch platforms only; inline platforms skip)
186
+ - 1.3 Configure context `[required · once]` — Claude Code, Cursor, OpenCode, Codex, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix (sub-agent-dispatch platforms only; inline platforms skip)
187
187
  - 1.4 Activate task `[required · once]` (review gate, then `task.py start`; status → in_progress)
188
188
  - 1.5 Completion criteria
189
189
 
@@ -220,7 +220,7 @@ Inline mode: skip jsonl curation; Phase 2 reads artifacts/specs via `trellis-bef
220
220
  therefore must cover every required step from implementation through
221
221
  commit, including Phase 3.3 spec update and Phase 3.4 commit. -->
222
222
 
223
- Sub-agent dispatch protocol applies to all platforms and all sub-agents, including class-2 Codex/Copilot/Gemini/Qoder and `trellis-research`: every dispatch prompt starts with `Active task: <task path from task.py current>` before role-specific instructions.
223
+ Sub-agent dispatch protocol applies to all platforms and all sub-agents, including class-2 Codex/Gemini/Qoder/Copilot/ZCode/Reasonix/Trae and `trellis-research`: every dispatch prompt starts with `Active task: <task path from task.py current>` before role-specific instructions.
224
224
 
225
225
  [workflow-state:in_progress]
226
226
  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.
@@ -272,13 +272,13 @@ Code committed. Run `/trellis:finish-work`; if dirty, return to Phase 3.4 first.
272
272
 
273
273
  When a user request matches one of these intents inside an active task, route first, then load the detailed phase step if needed.
274
274
 
275
- [Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
275
+ [Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
276
276
 
277
277
  - Planning or unclear requirements -> `trellis-brainstorm`.
278
278
  - `in_progress` implementation/check -> dispatch `trellis-implement` / `trellis-check`.
279
279
  - Repeated debugging -> `trellis-break-loop`; spec updates -> `trellis-update-spec`.
280
280
 
281
- [/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
281
+ [/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
282
282
 
283
283
  [codex-inline, Kilo, Antigravity, Devin]
284
284
 
@@ -353,7 +353,7 @@ Return to this step whenever requirements change and revise the relevant artifac
353
353
 
354
354
  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.
355
355
 
356
- [Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
356
+ [Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
357
357
 
358
358
  Spawn the research sub-agent:
359
359
 
@@ -361,7 +361,7 @@ Spawn the research sub-agent:
361
361
  - **Task description**: Research <specific question>
362
362
  - **Key requirement**: Research output MUST be persisted to `{TASK_DIR}/research/`
363
363
 
364
- [/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
364
+ [/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
365
365
 
366
366
  [codex-inline, Kilo, Antigravity, Devin]
367
367
 
@@ -380,7 +380,7 @@ Brainstorm and research can interleave freely — pause to research a technical
380
380
 
381
381
  #### 1.3 Configure context `[required · once]`
382
382
 
383
- [Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
383
+ [Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
384
384
 
385
385
  Curate `implement.jsonl` and `check.jsonl` so the Phase 2 sub-agents get the right spec/research context. These files were seeded on `task create` with a single self-describing `_example` line; your job here is to fill in real entries.
386
386
 
@@ -421,9 +421,11 @@ python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" check "<path>" "<reas
421
421
 
422
422
  Delete the seed `_example` line once real entries exist (optional — it's skipped automatically by consumers).
423
423
 
424
- Skip when: `implement.jsonl` and `check.jsonl` have agent-curated entries (the seed row alone doesn't count).
424
+ Ready gate: both `implement.jsonl` and `check.jsonl` must contain at least one real `{"file": "...", "reason": "..."}` entry before `task.py start`. The seed `_example` row alone is not ready.
425
425
 
426
- [/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
426
+ Skip this step only when both files already have real curated entries.
427
+
428
+ [/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
427
429
 
428
430
  [codex-inline, Kilo, Antigravity, Devin]
429
431
 
@@ -439,7 +441,7 @@ After artifact review, flip the task status to `in_progress`:
439
441
  python3 ./.trellis/scripts/task.py start <task-dir>
440
442
  ```
441
443
 
442
- For lightweight tasks, `prd.md` can be enough. For complex tasks, `prd.md`, `design.md`, and `implement.md` must exist and be reviewed before start. On sub-agent-capable platforms, curate jsonl manifests when extra spec or research context is needed; seed-only manifests are tolerated by consumers.
444
+ For lightweight tasks, `prd.md` can be enough. For complex tasks, `prd.md`, `design.md`, and `implement.md` must exist and be reviewed before start. On sub-agent-dispatch platforms, `implement.jsonl` and `check.jsonl` must both have real curated entries before start. Runtime consumers tolerate missing or seed-only manifests for compatibility, but that tolerance is not a planning-ready state.
443
445
 
444
446
  After this command succeeds, the breadcrumb auto-switches to `[workflow-state:in_progress]`, and the rest of Phase 2 / 3 follows.
445
447
 
@@ -456,11 +458,11 @@ If `task.py start` errors with a session-identity message (no context key from h
456
458
  | `design.md` exists (complex tasks) | ✅ |
457
459
  | `implement.md` exists (complex tasks) | ✅ |
458
460
 
459
- [Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
461
+ [Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
460
462
 
461
- | `implement.jsonl` / `check.jsonl` curated when extra spec or research context is needed | recommended |
463
+ | `implement.jsonl` and `check.jsonl` each contain at least one real curated entry (seed row does not count) | |
462
464
 
463
- [/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
465
+ [/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
464
466
 
465
467
  ---
466
468
 
@@ -470,7 +472,7 @@ Goal: turn reviewed planning artifacts into code that passes quality checks.
470
472
 
471
473
  #### 2.1 Implement `[required · repeatable]`
472
474
 
473
- [Claude Code, Cursor, OpenCode, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
475
+ [Claude Code, Cursor, OpenCode, CodeBuddy, Droid, Pi, Oh My Pi]
474
476
 
475
477
  Spawn the implement sub-agent:
476
478
 
@@ -482,9 +484,9 @@ The platform hook/plugin auto-handles:
482
484
  - Reads `implement.jsonl` and injects referenced spec/research files into the agent prompt
483
485
  - Injects `prd.md`, `design.md` if present, and `implement.md` if present
484
486
 
485
- [/Claude Code, Cursor, OpenCode, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi]
487
+ [/Claude Code, Cursor, OpenCode, CodeBuddy, Droid, Pi, Oh My Pi]
486
488
 
487
- [codex-sub-agent, ZCode, Reasonix]
489
+ [codex-sub-agent, Gemini, Qoder, Copilot, ZCode, Reasonix, Trae]
488
490
 
489
491
  Spawn the implement sub-agent:
490
492
 
@@ -492,11 +494,11 @@ Spawn the implement sub-agent:
492
494
  - **Task description**: Implement the reviewed task artifacts, consulting materials under `{TASK_DIR}/research/`; finish by running project lint and type-check
493
495
  - **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`.
494
496
 
495
- The Codex sub-agent definition auto-handles the context load requirement:
497
+ The pull-based sub-agent definition auto-handles the context load requirement:
496
498
  - Resolves the active task with `task.py current --source`, then reads `prd.md`, `design.md` if present, and `implement.md` if present
497
499
  - Reads `implement.jsonl` and requires the agent to load each referenced spec/research file before coding
498
500
 
499
- [/codex-sub-agent, ZCode, Reasonix]
501
+ [/codex-sub-agent, Gemini, Qoder, Copilot, ZCode, Reasonix, Trae]
500
502
 
501
503
  [Kiro]
502
504
 
@@ -524,7 +526,7 @@ The platform prelude auto-handles the context load requirement:
524
526
 
525
527
  #### 2.2 Quality check `[required · repeatable]`
526
528
 
527
- [Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
529
+ [Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
528
530
 
529
531
  Spawn the check sub-agent:
530
532
 
@@ -538,7 +540,7 @@ The check agent's job:
538
540
  - Auto-fix issues it finds
539
541
  - Run lint and typecheck to verify
540
542
 
541
- [/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
543
+ [/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
542
544
 
543
545
  [codex-inline, Kilo, Antigravity, Devin]
544
546
 
@@ -0,0 +1,133 @@
1
+ ---
2
+ name: trellis-research
3
+ description: |
4
+ Code and tech search expert. Finds files, patterns, and tech solutions, and PERSISTS every finding to the current task's research/ directory. No code modifications outside that directory.
5
+ color: "#4f46e5"
6
+ ---
7
+ # Research Agent
8
+
9
+ You are the Research Agent in the Trellis workflow.
10
+
11
+ ## Core Principle
12
+
13
+ **You do one thing: find, explain, and PERSIST information.**
14
+
15
+ Conversations get compacted; files don't. Every research output MUST end up as a file under `{TASK_DIR}/research/`. Returning findings only through the chat reply is a failure - the caller cannot read them next session.
16
+
17
+ ---
18
+
19
+ ## Core Responsibilities
20
+
21
+ 1. **Internal Search** - locate files/components, understand code logic, discover patterns
22
+ 2. **External Search** - library docs, API references, best practices
23
+ 3. **Persist** - write each research topic to `{TASK_DIR}/research/<topic>.md`
24
+ 4. **Report** - return file paths + one-line summaries to the main agent, not full content
25
+
26
+ ---
27
+
28
+ ## Workflow
29
+
30
+ ### Step 1: Resolve Current Task
31
+
32
+ Run `python3 ./.trellis/scripts/task.py current --source` to get the active task path. If no active task is set, ask the user where to write output; do NOT guess.
33
+
34
+ Ensure `{TASK_DIR}/research/` exists before writing findings.
35
+
36
+ ### Step 2: Understand Search Request
37
+
38
+ Classify the request as internal, external, or mixed. Determine scope and expected output shape.
39
+
40
+ ### Step 3: Execute Search
41
+
42
+ Run independent searches in parallel where possible. Read relevant source files, specs, and documentation before forming conclusions.
43
+
44
+ ### Step 4: Persist Each Topic
45
+
46
+ For each distinct research topic, write a markdown file at `{TASK_DIR}/research/<topic-slug>.md` using the File Format below.
47
+
48
+ ### Step 5: Report to Main Agent
49
+
50
+ Reply with ONLY:
51
+
52
+ - List of files written, paths relative to repo root
53
+ - One-line summary per file
54
+ - Any critical caveats that the main agent needs to know right now
55
+
56
+ Do NOT paste full research content into the reply. The files are the contract.
57
+
58
+ ---
59
+
60
+ ## Scope Limits
61
+
62
+ ### Write Allowed
63
+
64
+ - `{TASK_DIR}/research/*.md` - your own output
65
+ - Creating `{TASK_DIR}/research/` if it doesn't exist
66
+
67
+ ### Write Forbidden
68
+
69
+ - Code files (`src/`, `lib/`, etc.)
70
+ - Spec files (`.trellis/spec/`) - main agent should use the update-spec skill instead
71
+ - `.trellis/scripts/`, `.trellis/workflow.md`, platform config (`.zcode/`, `.claude/`, `.cursor/`, etc.)
72
+ - Other task directories
73
+ - Any git operation
74
+
75
+ If the user asks you to edit code, decline and suggest spawning `trellis-implement` instead.
76
+
77
+ ---
78
+
79
+ ## File Format
80
+
81
+ Each `{TASK_DIR}/research/<topic>.md` should follow:
82
+
83
+ ```markdown
84
+ # Research: <topic>
85
+
86
+ - Query: <original query>
87
+ - Scope: internal / external / mixed
88
+ - Date: YYYY-MM-DD
89
+
90
+ ## Findings
91
+
92
+ ### Files Found
93
+
94
+ | File Path | Description |
95
+ |---|---|
96
+ | `src/services/xxx.ts` | Main implementation |
97
+ | `src/types/xxx.ts` | Type definitions |
98
+
99
+ ### Code Patterns
100
+
101
+ <describe patterns, cite file:line>
102
+
103
+ ### External References
104
+
105
+ - [Library X docs](url) - <why relevant, version constraints>
106
+
107
+ ### Related Specs
108
+
109
+ - `.trellis/spec/xxx.md` - <description>
110
+
111
+ ## Caveats / Not Found
112
+
113
+ <anything incomplete or uncertain>
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Guidelines
119
+
120
+ ### Do
121
+
122
+ - Provide specific file paths and line numbers
123
+ - Quote actual code snippets only when they are relevant
124
+ - Persist every topic to its own file
125
+ - Return file paths in your reply, not the full content
126
+ - Mark "not found" explicitly when searches come up empty
127
+
128
+ ### Don't
129
+
130
+ - Don't write code or modify files outside `{TASK_DIR}/research/`
131
+ - Don't guess uncertain info
132
+ - Don't paste full research text into the reply
133
+ - Don't propose implementation changes unless the main agent explicitly asked for research options
@@ -2,14 +2,15 @@
2
2
  * ZCode template module.
3
3
  *
4
4
  * ZCode (智谱) is an agentic AI coding tool that supports multi-agent
5
- * collaboration. It stores agents as `.zcode/cli/agents/<name>.md`
5
+ * collaboration. It stores agents as `.zcode/agents/<name>.md`
6
6
  * (Markdown with YAML frontmatter: name, description, color).
7
7
  *
8
- * Sub-agent definitions (trellis-implement, trellis-check) use pull-based
9
- * context injection no hooks are available, so agents read their own
10
- * context files at startup.
8
+ * trellis-implement and trellis-check use pull-based context injection.
9
+ * trellis-research is intentionally standalone: it does not receive the
10
+ * implement/check prelude, and persists findings under the active task's
11
+ * research directory instead.
11
12
  */
12
13
  import { type AgentTemplate } from "../template-utils.js";
13
- /** Sub-agent definitions (trellis-implement, trellis-check). */
14
+ /** Sub-agent definitions (trellis-implement, trellis-check, trellis-research). */
14
15
  export declare function getAllAgents(): AgentTemplate[];
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/zcode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIhF,gEAAgE;AAChE,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/zcode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIhF,kFAAkF;AAClF,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C"}
@@ -2,16 +2,17 @@
2
2
  * ZCode template module.
3
3
  *
4
4
  * ZCode (智谱) is an agentic AI coding tool that supports multi-agent
5
- * collaboration. It stores agents as `.zcode/cli/agents/<name>.md`
5
+ * collaboration. It stores agents as `.zcode/agents/<name>.md`
6
6
  * (Markdown with YAML frontmatter: name, description, color).
7
7
  *
8
- * Sub-agent definitions (trellis-implement, trellis-check) use pull-based
9
- * context injection no hooks are available, so agents read their own
10
- * context files at startup.
8
+ * trellis-implement and trellis-check use pull-based context injection.
9
+ * trellis-research is intentionally standalone: it does not receive the
10
+ * implement/check prelude, and persists findings under the active task's
11
+ * research directory instead.
11
12
  */
12
13
  import { createTemplateReader } from "../template-utils.js";
13
14
  const { listMdAgents } = createTemplateReader(import.meta.url);
14
- /** Sub-agent definitions (trellis-implement, trellis-check). */
15
+ /** Sub-agent definitions (trellis-implement, trellis-check, trellis-research). */
15
16
  export function getAllAgents() {
16
17
  return listMdAgents();
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/zcode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,oBAAoB,EAAsB,MAAM,sBAAsB,CAAC;AAEhF,MAAM,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/D,gEAAgE;AAChE,MAAM,UAAU,YAAY;IAC1B,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/zcode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAsB,MAAM,sBAAsB,CAAC;AAEhF,MAAM,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/D,kFAAkF;AAClF,MAAM,UAAU,YAAY;IAC1B,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC"}
@@ -6,16 +6,16 @@
6
6
  /**
7
7
  * Supported AI coding tools
8
8
  */
9
- export type AITool = "claude-code" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode";
9
+ export type AITool = "claude-code" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp";
10
10
  /**
11
11
  * Template directory categories
12
12
  */
13
- export type TemplateDir = "common" | "claude" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode";
13
+ export type TemplateDir = "common" | "claude" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp";
14
14
  /**
15
15
  * CLI flag names for platform selection (e.g., --claude, --cursor, --kilo, --kiro, --gemini, --antigravity)
16
16
  * Must match keys in InitOptions (src/commands/init.ts)
17
17
  */
18
- export type CliFlag = "claude" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode";
18
+ export type CliFlag = "claude" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp";
19
19
  /**
20
20
  * Template context for placeholder resolution.
21
21
  * Controls how common templates are rendered per platform.
@@ -26,7 +26,7 @@ export interface TemplateContext {
26
26
  /** Description of AI executor actions shown in role tables */
27
27
  executorAI: "Bash scripts or Task calls" | "Bash scripts or tool calls" | "Bash scripts or Agent calls" | "Bash scripts or file reads";
28
28
  /** Label for user-invocable actions */
29
- userActionLabel: "Slash commands" | "Skills" | "Workflows" | "Prompts";
29
+ userActionLabel: "Slash commands" | "Skills" | "Workflows" | "Prompts" | "Commands";
30
30
  /** Platform supports spawning sub-agents with isolated context */
31
31
  agentCapable: boolean;
32
32
  /** Platform has hook system (SessionStart, PreToolUse) */
@@ -1 +1 @@
1
- {"version":3,"file":"ai-tools.d.ts","sourceRoot":"","sources":["../../src/types/ai-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,MAAM,GACd,aAAa,GACb,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,YAAY,EAAE,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,iBAAiB,CAAC;IACxE,8DAA8D;IAC9D,UAAU,EACN,4BAA4B,GAC5B,4BAA4B,GAC5B,6BAA6B,GAC7B,4BAA4B,CAAC;IACjC,uCAAuC;IACvC,eAAe,EAAE,gBAAgB,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IACvE,kEAAkE;IAClE,YAAY,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,cAAc,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,cAAc,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,eAAe,EAAE,eAAe,CAAC;CAClC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA8QjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAExD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAE3D"}
1
+ {"version":3,"file":"ai-tools.d.ts","sourceRoot":"","sources":["../../src/types/ai-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,MAAM,GACd,aAAa,GACb,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,GACP,MAAM,GACN,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,GACP,MAAM,GACN,KAAK,CAAC;AAEV;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,GACP,MAAM,GACN,KAAK,CAAC;AAEV;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,YAAY,EAAE,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,iBAAiB,CAAC;IACxE,8DAA8D;IAC9D,UAAU,EACN,4BAA4B,GAC5B,4BAA4B,GAC5B,6BAA6B,GAC7B,4BAA4B,CAAC;IACjC,uCAAuC;IACvC,eAAe,EACX,gBAAgB,GAChB,QAAQ,GACR,WAAW,GACX,SAAS,GACT,UAAU,CAAC;IACf,kEAAkE;IAClE,YAAY,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,cAAc,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,cAAc,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,eAAe,EAAE,eAAe,CAAC;CAClC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAyTjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAExD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAE3D"}
@@ -202,6 +202,7 @@ export const AI_TOOLS = {
202
202
  configDir: ".github/copilot",
203
203
  extraManagedPaths: [
204
204
  ".github/agents",
205
+ ".github/copilot-instructions.md",
205
206
  ".github/hooks",
206
207
  ".github/prompts",
207
208
  ".github/skills",
@@ -270,8 +271,18 @@ export const AI_TOOLS = {
270
271
  name: "ZCode",
271
272
  templateDirs: ["common", "zcode"],
272
273
  configDir: ".zcode",
273
- supportsAgentSkills: true,
274
- extraManagedPaths: [".zcode/cli/agents", ".zcode/commands"],
274
+ // `.zcode/cli/agents` is the pre-ZCode-update discovery path. Kept managed
275
+ // during the transition so `trellis update --migrate` (rename-dir →
276
+ // `.zcode/agents/`) and `trellis uninstall` can clean up the now-empty
277
+ // `.zcode/cli/` parent. Drop this entry once the migration has shipped and
278
+ // no project still holds the legacy dir. Only empty dirs are ever removed,
279
+ // so user files are never touched (see cleanupEmptyDirs in update.ts).
280
+ extraManagedPaths: [
281
+ ".zcode/cli/agents",
282
+ ".zcode/agents",
283
+ ".zcode/commands",
284
+ ".zcode/skills",
285
+ ],
275
286
  cliFlag: "zcode",
276
287
  defaultChecked: false,
277
288
  hasPythonHooks: false,
@@ -284,6 +295,38 @@ export const AI_TOOLS = {
284
295
  cliFlag: "zcode",
285
296
  },
286
297
  },
298
+ trae: {
299
+ name: "Trae",
300
+ templateDirs: ["common", "trae"],
301
+ configDir: ".trae",
302
+ cliFlag: "trae",
303
+ defaultChecked: false,
304
+ hasPythonHooks: true,
305
+ templateContext: {
306
+ cmdRefPrefix: "/trellis-",
307
+ executorAI: "Bash scripts or tool calls",
308
+ userActionLabel: "Commands",
309
+ agentCapable: true,
310
+ hasHooks: true,
311
+ cliFlag: "trae",
312
+ },
313
+ },
314
+ omp: {
315
+ name: "Oh My Pi",
316
+ templateDirs: ["common", "omp"],
317
+ configDir: ".omp",
318
+ cliFlag: "omp",
319
+ defaultChecked: false,
320
+ hasPythonHooks: false,
321
+ templateContext: {
322
+ cmdRefPrefix: "/trellis:",
323
+ executorAI: "Bash scripts or Task calls",
324
+ userActionLabel: "Slash commands",
325
+ agentCapable: true,
326
+ hasHooks: true,
327
+ cliFlag: "omp",
328
+ },
329
+ },
287
330
  };
288
331
  /**
289
332
  * Get the configuration for a specific AI tool