@pennixrv/trellis 0.6.17 → 0.6.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.
Files changed (39) hide show
  1. package/dist/commands/channel/adapters/codex.d.ts +14 -0
  2. package/dist/commands/channel/adapters/codex.d.ts.map +1 -1
  3. package/dist/commands/channel/adapters/codex.js +37 -0
  4. package/dist/commands/channel/adapters/codex.js.map +1 -1
  5. package/dist/commands/channel/adapters/index.d.ts.map +1 -1
  6. package/dist/commands/channel/adapters/index.js +49 -13
  7. package/dist/commands/channel/adapters/index.js.map +1 -1
  8. package/dist/commands/update.d.ts.map +1 -1
  9. package/dist/commands/update.js +7 -2
  10. package/dist/commands/update.js.map +1 -1
  11. package/dist/configurators/claude.d.ts +17 -0
  12. package/dist/configurators/claude.d.ts.map +1 -1
  13. package/dist/configurators/claude.js +61 -2
  14. package/dist/configurators/claude.js.map +1 -1
  15. package/dist/migrations/manifests/0.6.18.json +9 -0
  16. package/dist/templates/common/bundled-skills/trellis-channel/SKILL.md +2 -0
  17. package/dist/templates/common/bundled-skills/trellis-channel/references/subnode-work.md +143 -0
  18. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/bundled-skills.md +1 -1
  19. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +33 -0
  20. package/dist/templates/shared-hooks/inject-workflow-state.py +17 -16
  21. package/dist/templates/trellis/agents/subnode.md +63 -0
  22. package/dist/templates/trellis/config.yaml +9 -9
  23. package/dist/templates/trellis/index.d.ts +3 -0
  24. package/dist/templates/trellis/index.d.ts.map +1 -1
  25. package/dist/templates/trellis/index.js +6 -0
  26. package/dist/templates/trellis/index.js.map +1 -1
  27. package/dist/templates/trellis/scripts/common/config.py +5 -4
  28. package/dist/templates/trellis/scripts/common/task_store.py +3 -3
  29. package/dist/templates/trellis/scripts/common/workflow_phase.py +1 -1
  30. package/dist/templates/trellis/scripts/subnode_artifact.py +463 -0
  31. package/dist/templates/trellis/scripts/workspace_note.py +126 -0
  32. package/dist/templates/trellis/workflow.md +5 -5
  33. package/dist/utils/manifest-prune.d.ts.map +1 -1
  34. package/dist/utils/manifest-prune.js +11 -2
  35. package/dist/utils/manifest-prune.js.map +1 -1
  36. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
  37. package/dist/utils/uninstall-scrubbers.js +3 -3
  38. package/dist/utils/uninstall-scrubbers.js.map +1 -1
  39. package/package.json +2 -2
@@ -0,0 +1,143 @@
1
+ # Bounded Subnode Work
2
+
3
+ Use a `subnode` only when the user explicitly needs independently reviewable
4
+ evidence for a bounded analysis, design, audit, review, counterargument, or
5
+ verification question. It is not the normal path for an ordinary static review,
6
+ implementation, memory retrieval, or routine tool call.
7
+
8
+ The coordinator owns task facts, protected targets, acceptance, Git, worker
9
+ lifecycle, and the final result. A subnode owns one evidence report and its own
10
+ append-only worklog. This is a behavioral contract; do not add `--sandbox` or
11
+ claim that path restrictions enforce it.
12
+
13
+ ## Artifact Setup
14
+
15
+ Before spawning, the coordinator must use an active task (`planning` or
16
+ `in_progress`), define one stable `work_id` and
17
+ `subnode_id`, then prepare a brief-draft JSON with the question, independence
18
+ reason, scope, protected targets, lens, evidence method, source snapshot,
19
+ dependencies, stop conditions, deadline, `channel_ref`, `retry_of: null`, and
20
+ `counter_of` (null unless this is intentional counterwork). The helper supplies
21
+ the immutable task identity and report path.
22
+
23
+ ```bash
24
+ TASK=.trellis/tasks/09-07-example
25
+ WORK_ID=security-audit
26
+ SUBNODE_ID=dependency-evidence
27
+
28
+ python3 .trellis/scripts/subnode_artifact.py init \
29
+ --task "$TASK" \
30
+ --work-id "$WORK_ID" \
31
+ --subnode-id "$SUBNODE_ID" \
32
+ --draft /tmp/subnode-brief.json
33
+ ```
34
+
35
+ This creates exactly:
36
+
37
+ ```text
38
+ $TASK/subnodes/$WORK_ID/$SUBNODE_ID/
39
+ brief.json # coordinator-owned and immutable after dispatch
40
+ worklog.md # subnode appends material progress and corrections
41
+ report.json # subnode-owned final pending-review result
42
+ ```
43
+
44
+ Do not use a terminal Channel message as the report transport. The short final
45
+ message names the already-written `report.json` and its status; the durable
46
+ JSON file carries the reviewable result.
47
+
48
+ The subnode copies identity, scope, and lens from `brief.json`, then uses the
49
+ SHA-256 digest of the exact `brief.json` bytes. The minimal complete report is:
50
+
51
+ ```json
52
+ {
53
+ "schema_version": 1,
54
+ "task_id": "task-id-from-brief",
55
+ "work_id": "work-id-from-brief",
56
+ "subnode_id": "subnode-id-from-brief",
57
+ "role_id": "subnode",
58
+ "brief_digest": "sha256-of-brief-json-bytes",
59
+ "status": "complete",
60
+ "scope": ["exact scope copied from brief"],
61
+ "lens": "exact lens copied from brief",
62
+ "evidence": [
63
+ {
64
+ "id": "stable-evidence-id",
65
+ "locator": "source path, URL, or command receipt",
66
+ "summary": "What this independently reviewable evidence establishes."
67
+ }
68
+ ],
69
+ "findings": ["Bounded conclusion."],
70
+ "uncertainties": [],
71
+ "corrections": []
72
+ }
73
+ ```
74
+
75
+ For `blocked`, `incomplete`, or `error`, include the same base fields plus a
76
+ non-empty `completed_scope` list and a non-empty `blocker` string. Never use
77
+ `accepted`, `rejected`, or `deferred` as a report status.
78
+
79
+ ## Dispatch And Wait
80
+
81
+ Inspect the installed role first, then use one native Channel lifecycle:
82
+
83
+ ```bash
84
+ trellis channel create subnode-example --by main --cwd "$PWD"
85
+ trellis channel spawn subnode-example --agent subnode --provider codex \
86
+ --as "$SUBNODE_ID" --cwd "$PWD" --timeout 30m
87
+
88
+ printf '%s\n' "Read $TASK/subnodes/$WORK_ID/$SUBNODE_ID/brief.json and perform only that bounded work." \
89
+ | trellis channel send subnode-example --as main --to "$SUBNODE_ID" \
90
+ --stdin --delivery-mode requireRunningWorker
91
+
92
+ trellis channel wait subnode-example --as main --from "$SUBNODE_ID" \
93
+ --kind done,error --timeout 30m
94
+ ```
95
+
96
+ Where the host exposes a live wait continuation, establish one waiter and
97
+ continue that same waiter until terminal state. Do not poll messages, create a
98
+ second waiter, or treat an empty transport slice as completion. The normal CLI
99
+ surface uses the documented single `send` followed by native `wait` pattern.
100
+
101
+ ## Coordinator Review
102
+
103
+ After a terminal message, independently validate and then record a task-level
104
+ disposition. `complete` means only that the subnode claims it completed its
105
+ assigned work; it is not acceptance.
106
+
107
+ ```bash
108
+ REPORT="$TASK/subnodes/$WORK_ID/$SUBNODE_ID/report.json"
109
+ python3 .trellis/scripts/subnode_artifact.py validate --report "$REPORT"
110
+ ```
111
+
112
+ The coordinator must re-check enough source evidence and protected-target state
113
+ to decide `accepted`, `rejected`, or `deferred`, preserving the reason and named
114
+ checks such as `report_validation`, `source_recheck`, and
115
+ `protected_target_check` in task research or a decision record. The validator
116
+ does not make that decision and does not modify `task.json`.
117
+
118
+ Use the separate coordinator work-record helper only for a durable cross-task
119
+ observation, decision, open question, or blocker. It does not substitute for a
120
+ task artifact or subnode worklog.
121
+
122
+ ```bash
123
+ python3 .trellis/scripts/workspace_note.py \
124
+ --kind decision \
125
+ --summary "Accepted independent dependency evidence for the release gate." \
126
+ --source "$REPORT"
127
+ ```
128
+
129
+ ## Counterwork
130
+
131
+ Counterwork is a new, independently scoped subnode, not a retry. It must use a
132
+ different `subnode_id`, lens, and evidence identities, and its brief sets
133
+ `counter_of` to the primary subnode ID. After both reports are complete:
134
+
135
+ ```bash
136
+ python3 .trellis/scripts/subnode_artifact.py validate-counter \
137
+ --primary "$TASK/subnodes/$WORK_ID/primary" \
138
+ --counter "$TASK/subnodes/$WORK_ID/counter"
139
+ ```
140
+
141
+ The coordinator compares the two reports and retains the comparison as part of
142
+ its own disposition. No scheduler, polling loop, automatic retry, worktree,
143
+ global ledger, or provider-specific transport is introduced by this workflow.
@@ -16,7 +16,7 @@ A bundled skill is a directory under `packages/cli/src/templates/common/bundled-
16
16
 
17
17
  The Trellis CLI never touches anything that is not produced by one of its own template loaders. Anything a user drops into a platform skill root by hand is left alone.
18
18
 
19
- ## Current Bundled Skills (v0.6.0)
19
+ ## Current Bundled Skills
20
20
 
21
21
  The set is discovered at runtime by listing directories under `templates/common/bundled-skills/`:
22
22
 
@@ -10,6 +10,7 @@ This page only describes files that are visible and editable inside the user pro
10
10
  .trellis/
11
11
  ├── workflow.md
12
12
  ├── config.yaml
13
+ ├── .gitignore
13
14
  ├── .developer
14
15
  ├── .version
15
16
  ├── .template-hashes.json
@@ -24,6 +25,7 @@ This page only describes files that are visible and editable inside the user pro
24
25
  | --- | --- | --- |
25
26
  | `.trellis/workflow.md` | Yes | Local workflow documentation and AI routing rules. |
26
27
  | `.trellis/config.yaml` | Yes | Project configuration, hooks, packages, journal line limits, and related settings. |
28
+ | `.trellis/.gitignore` | No | Generated ignore rules for local Trellis state. Track it, but do not normally edit it. |
27
29
  | `.trellis/spec/` | Yes | Project specs, intended to be updated regularly by users and AI. |
28
30
  | `.trellis/tasks/` | Yes | Task material and research artifacts, maintained by the task workflow. |
29
31
  | `.trellis/workspace/` | Yes | Session records, usually written by `add_session.py`. |
@@ -33,6 +35,37 @@ This page only describes files that are visible and editable inside the user pro
33
35
  | `.trellis/.version` | No | Trellis version record used by update/migration logic. |
34
36
  | `.trellis/.template-hashes.json` | No | Template hash record. Do not hand-write business rules here. |
35
37
 
38
+ ## Git Tracking
39
+
40
+ `trellis init` and `trellis update` are the single project-asset generation
41
+ path. Do not add a second project initializer for Trellis files or platform
42
+ integration files: use those commands to create or refresh the generated
43
+ assets, then review and commit the resulting project changes normally.
44
+
45
+ For a Git-tracked project, commit the durable project contract:
46
+
47
+ - `.trellis/workflow.md`, `config.yaml`, `scripts/`, `spec/`, `tasks/`, and
48
+ `workspace/`;
49
+ - `.trellis/.version` and `.trellis/.template-hashes.json`. They are generated
50
+ metadata, not hand-edited configuration; keeping them lets another clone
51
+ distinguish Trellis-owned templates from local changes safely;
52
+ - the Trellis-managed files in selected platform directories, plus the
53
+ root-level `AGENTS.md` managed block when Trellis created it.
54
+
55
+ Do not commit local or ephemeral state. The generated `.trellis/.gitignore`
56
+ already excludes `.developer`, `.current-task`, `.runtime/`, `.ralph-state.json`,
57
+ agent runtime files, atomic-update files, backups, and Python caches. Platform
58
+ session history, caches, logs, and credentials are platform-owned rather than
59
+ Trellis templates; apply the platform's own ignore rules or the repository's
60
+ security policy to them. If workspace journals contain data that the project
61
+ policy forbids in Git, add a project-specific ignore rule rather than changing
62
+ the shared Trellis template for every project.
63
+
64
+ Generated does not mean disposable: `workflow.md`, specs, tasks, journals, and
65
+ the template-hash receipt are ordinary project artifacts. Conversely, Trellis
66
+ does not infer or broadly ignore all platform directories because doing so
67
+ would hide user-owned files that it must preserve.
68
+
36
69
  ## Platform Directories
37
70
 
38
71
  Different platforms generate different directories. Common categories:
@@ -286,13 +286,14 @@ def prompt_has_skip_keyword(prompt: str, keyword: str) -> bool:
286
286
  def _resolve_codex_dispatch_mode(config: dict) -> str:
287
287
  """Normalize `codex.dispatch_mode` from .trellis/config.yaml to "auto" or "inline".
288
288
 
289
- Defaults to `auto`. The legacy `sub-agent` value is an alias for `auto`.
290
- Any other explicit value (including invalid ones) falls back to `inline`
289
+ Defaults to `inline`. `auto` explicitly enables native dispatch; the
290
+ legacy `sub-agent` value is an alias for `auto`. Any other explicit value
291
+ (including invalid ones) falls back to `inline`
291
292
  without per-turn warnings. Shared by `_codex_mode_banner` (the per-turn
292
293
  banner) and `resolve_breadcrumb_key` (the breadcrumb tag key) so the two
293
294
  stay in lockstep.
294
295
  """
295
- mode = "auto"
296
+ mode = "inline"
296
297
  if isinstance(config, dict):
297
298
  codex_cfg = config.get("codex")
298
299
  if isinstance(codex_cfg, dict):
@@ -310,16 +311,16 @@ def _codex_mode_banner(config: dict) -> str:
310
311
  """Emit a `<codex-mode>` banner for the additionalContext payload.
311
312
 
312
313
  Reads `codex.dispatch_mode` from .trellis/config.yaml; defaults to
313
- `auto`, which dispatches Trellis sub-agents using native Codex context
314
+ `inline`, so the main session implements and checks directly. `auto`
315
+ explicitly dispatches Trellis sub-agents using native Codex context
314
316
  injection with a child-side fallback. This does not rely on inherited
315
317
  parent transcripts: `fork_turns` remains caller-controlled, and
316
318
  fresh-history sub-agents still receive their explicit delegated task and
317
- inherited session configuration. `inline` is an explicit opt-out; the
318
- legacy `sub-agent` value is an alias for `auto`. Invalid explicit values
319
- fall back to `inline` without per-turn warnings. The banner makes the
320
- active mode explicit to Codex AI per turn, complementing the workflow-state
321
- body which is per-status. Mode tells AI which dispatch protocol to follow;
322
- workflow-state tells AI what step it's at.
319
+ inherited session configuration. The legacy `sub-agent` value is an alias
320
+ for `auto`. Invalid explicit values fall back to `inline` without per-turn
321
+ warnings. The banner makes the active mode explicit to Codex AI per turn,
322
+ complementing the workflow-state body which is per-status. Mode tells AI
323
+ which dispatch protocol to follow; workflow-state tells AI what step it's at.
323
324
  """
324
325
  mode = _resolve_codex_dispatch_mode(config)
325
326
  if mode == "auto":
@@ -341,12 +342,12 @@ def resolve_breadcrumb_key(
341
342
  ) -> str:
342
343
  """Pick the breadcrumb tag key based on Codex dispatch_mode.
343
344
 
344
- Codex defaults to ``auto`` and therefore uses the ordinary ``<status>``
345
- breadcrumb for native SubagentStart dispatch with child-side fallback;
346
- it does not depend on an inherited parent transcript. ``inline`` selects
347
- the parallel ``<status>-inline`` tag; ``sub-agent`` remains an alias for
348
- ``auto``. Invalid explicit values fall back to inline without per-turn
349
- warnings.
345
+ Codex defaults to ``inline`` and therefore uses the parallel
346
+ ``<status>-inline`` breadcrumb for main-session execution. Explicit
347
+ ``auto`` uses the ordinary ``<status>`` breadcrumb for native
348
+ SubagentStart dispatch with child-side fallback; ``sub-agent`` remains an
349
+ alias for ``auto``. Invalid explicit values fall back to inline without
350
+ per-turn warnings.
350
351
 
351
352
  Non-codex platforms return the plain status unchanged.
352
353
  """
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: subnode
3
+ description: |
4
+ Bounded independent-evidence worker. It preserves its assigned task artifacts,
5
+ never changes protected target files, and leaves acceptance to the coordinator.
6
+ provider: codex
7
+ labels: [trellis, subnode]
8
+ ---
9
+
10
+ # Subnode (channel runtime)
11
+
12
+ You are a bounded Trellis subnode spawned through `trellis channel`. Your job is
13
+ to produce independently reviewable evidence for one assigned question. You are
14
+ not an implementation worker, task owner, reviewer-of-record, or Git operator.
15
+
16
+ ## Required Context
17
+
18
+ Before starting, read the `brief.json` path named in the coordinator message.
19
+ It fixes your task identity, scope, protected targets, evidence method, source
20
+ snapshot, deadline, stop conditions, channel handle, and final `report_path`.
21
+ Read the necessary current project and external sources needed to answer that
22
+ brief. A source snapshot records evidence; it is not a filesystem allowlist.
23
+
24
+ ## Ownership And Write Boundary
25
+
26
+ You may write only within the artifact directory named by the brief:
27
+
28
+ - `worklog.md` — append substantive observations, corrections, blockers, and
29
+ completion notes as they occur.
30
+ - `report.json` — write your one final pending-review report at the exact path
31
+ in `brief.json`.
32
+
33
+ Do not modify `brief.json`. Do not edit any protected target, business source,
34
+ test, task artifact, project rule, coordinator workspace note, or unrelated
35
+ file. Do not run Git commands that change state (`commit`, `push`, `merge`,
36
+ `rebase`, `reset`, `checkout`, `stash`, or branch/worktree operations). Do not
37
+ spawn or control another worker. These are behavioral requirements, not a
38
+ sandbox claim.
39
+
40
+ ## Work Method
41
+
42
+ 1. Confirm the brief identity and artifact paths before doing substantive work.
43
+ 2. Inspect evidence using the stated lens and method. Keep the assigned scope
44
+ narrow; stop when a stop condition is met or the evidence is sufficient.
45
+ 3. Append a concise worklog entry when you make a material discovery, retract a
46
+ conclusion, encounter a blocker, or finish. Preserve corrections rather
47
+ than silently rewriting the historical trail.
48
+ 4. Write `report.json` only when you are ready to stop. Its status is one of
49
+ `complete`, `blocked`, `incomplete`, or `error`; it is always
50
+ **pending coordinator review**, never accepted/rejected/deferred.
51
+ 5. A complete report includes independently checkable evidence. A non-complete
52
+ report explains completed scope and the blocker or error. Include the exact
53
+ identity, scope, lens, and SHA-256 digest of `brief.json` required by the
54
+ artifact helper.
55
+ 6. Send one short terminal Channel message with the status and report path.
56
+ Do not place the report JSON in Channel text.
57
+
58
+ ## Report Boundary
59
+
60
+ The coordinator independently runs the artifact validator and then records the
61
+ task disposition (`accepted`, `rejected`, or `deferred`) with its own source and
62
+ protected-target checks. Do not claim that a report has been accepted, and do
63
+ not infer a disposition from a successful Channel delivery.
@@ -110,14 +110,14 @@ channel:
110
110
  #-------------------------------------------------------------------------------
111
111
  # Codex (dispatch behavior)
112
112
  #-------------------------------------------------------------------------------
113
- # Codex-only knob; other platforms ignore it. Default ("auto") dispatches
114
- # trellis-implement / trellis-check / trellis-research sub-agents. This does
115
- # not rely on inherited parent transcripts: `fork_turns` remains
116
- # caller-controlled, while Codex's native SubagentStart hook injects task
117
- # context when trusted and child-side loading remains the fallback when it is
118
- # unavailable. Set to "inline" only to keep implementation and checks in the
119
- # main session. "sub-agent" remains a backwards-compatible alias for "auto".
120
- # Invalid explicit values safely use inline mode.
113
+ # Codex-only knob; other platforms ignore it. The default is "inline": the
114
+ # main session performs implementation and checks directly. Set "auto" only
115
+ # to opt in to trellis-implement / trellis-check / trellis-research native
116
+ # sub-agents. Their task context does not rely on inherited parent transcripts:
117
+ # `fork_turns` remains caller-controlled, while Codex's native SubagentStart
118
+ # hook injects context when trusted and child-side loading remains the fallback
119
+ # when it is unavailable. "sub-agent" remains a backwards-compatible alias
120
+ # for "auto". Invalid explicit values safely use inline mode.
121
121
  #
122
122
  # In "auto" mode, dispatched sub-agents inherit the main session's model
123
123
  # unless you pin one. To use a cheaper/faster model for implement/check/
@@ -127,7 +127,7 @@ channel:
127
127
  # `trellis update` preserves your edits across regeneration.
128
128
  #
129
129
  # codex:
130
- # dispatch_mode: auto # or "inline"; legacy alias: "sub-agent"
130
+ # dispatch_mode: auto # opt in to native sub-agents; default: "inline"; legacy alias: "sub-agent"
131
131
 
132
132
  #-------------------------------------------------------------------------------
133
133
  # Sub-agent context injection limits
@@ -45,12 +45,15 @@ export declare const initDeveloperScript: string;
45
45
  export declare const taskScript: string;
46
46
  export declare const getContextScript: string;
47
47
  export declare const addSessionScript: string;
48
+ export declare const subnodeArtifactScript: string;
49
+ export declare const workspaceNoteScript: string;
48
50
  export declare const workflowMdTemplate: string;
49
51
  export declare const configYamlTemplate: string;
50
52
  export declare const gitignoreTemplate: string;
51
53
  export declare const gitattributesTemplate: string;
52
54
  export declare const implementAgentTemplate: string;
53
55
  export declare const checkAgentTemplate: string;
56
+ export declare const subnodeAgentTemplate: string;
54
57
  /**
55
58
  * Get all script templates as a map of relative path to content
56
59
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,QAAQ,QAAuC,CAAC;AAC7D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAG9E,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AAGvE,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAC/D,eAAO,MAAM,qBAAqB,QAAoC,CAAC;AAMvE,eAAO,MAAM,sBAAsB,QAAsC,CAAC;AAC1E,eAAO,MAAM,kBAAkB,QAAkC,CAAC;AAElE;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAqCnD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAKlD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,QAAQ,QAAuC,CAAC;AAC7D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAG9E,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAG7E,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAC/D,eAAO,MAAM,qBAAqB,QAAoC,CAAC;AAMvE,eAAO,MAAM,sBAAsB,QAAsC,CAAC;AAC1E,eAAO,MAAM,kBAAkB,QAAkC,CAAC;AAClE,eAAO,MAAM,oBAAoB,QAAoC,CAAC;AAEtE;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAuCnD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMlD"}
@@ -56,6 +56,8 @@ export const initDeveloperScript = readTemplate("scripts/init_developer.py");
56
56
  export const taskScript = readTemplate("scripts/task.py");
57
57
  export const getContextScript = readTemplate("scripts/get_context.py");
58
58
  export const addSessionScript = readTemplate("scripts/add_session.py");
59
+ export const subnodeArtifactScript = readTemplate("scripts/subnode_artifact.py");
60
+ export const workspaceNoteScript = readTemplate("scripts/workspace_note.py");
59
61
  // Configuration files
60
62
  export const workflowMdTemplate = readTemplate("workflow.md");
61
63
  export const configYamlTemplate = readTemplate("config.yaml");
@@ -67,6 +69,7 @@ export const gitattributesTemplate = readTemplate("gitattributes.txt");
67
69
  // and refreshed by `trellis update`.
68
70
  export const implementAgentTemplate = readTemplate("agents/implement.md");
69
71
  export const checkAgentTemplate = readTemplate("agents/check.md");
72
+ export const subnodeAgentTemplate = readTemplate("agents/subnode.md");
70
73
  /**
71
74
  * Get all script templates as a map of relative path to content
72
75
  */
@@ -102,6 +105,8 @@ export function getAllScripts() {
102
105
  scripts.set("task.py", taskScript);
103
106
  scripts.set("get_context.py", getContextScript);
104
107
  scripts.set("add_session.py", addSessionScript);
108
+ scripts.set("subnode_artifact.py", subnodeArtifactScript);
109
+ scripts.set("workspace_note.py", workspaceNoteScript);
105
110
  return scripts;
106
111
  }
107
112
  /**
@@ -116,6 +121,7 @@ export function getAllAgents() {
116
121
  const agents = new Map();
117
122
  agents.set("implement.md", implementAgentTemplate);
118
123
  agents.set("check.md", checkAgentTemplate);
124
+ agents.set("subnode.md", subnodeAgentTemplate);
119
125
  return agents;
120
126
  }
121
127
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ from .trellis_config import parse_simple_yaml
22
22
  DEFAULT_SESSION_COMMIT_MESSAGE = "chore: record journal"
23
23
  DEFAULT_MAX_JOURNAL_LINES = 2000
24
24
  DEFAULT_SESSION_AUTO_COMMIT = True
25
- DEFAULT_CODEX_DISPATCH_MODE = "auto"
25
+ DEFAULT_CODEX_DISPATCH_MODE = "inline"
26
26
 
27
27
  CONFIG_FILE = "config.yaml"
28
28
 
@@ -140,9 +140,10 @@ def get_session_auto_commit(repo_root: Path | None = None) -> bool:
140
140
  def get_codex_dispatch_mode(repo_root: Path | None = None) -> str:
141
141
  """Return Codex dispatch mode.
142
142
 
143
- Default is ``auto``, which dispatches Trellis sub-agents and uses native
144
- context injection with a child-side fallback. ``inline`` is an explicit
145
- opt-out. ``sub-agent`` remains a backwards-compatible alias for ``auto``.
143
+ Default is ``inline``: the main session carries out implementation and
144
+ verification directly. ``auto`` explicitly enables Trellis sub-agents and
145
+ native context injection with a child-side fallback. ``sub-agent`` remains
146
+ a backwards-compatible alias for ``auto``.
146
147
 
147
148
  Invalid explicit configuration falls back to ``inline`` rather than
148
149
  unexpectedly dispatching a sub-agent. This CLI-facing parser is the only
@@ -230,9 +230,9 @@ def _has_subagent_platform(repo_root: Path) -> bool:
230
230
  """Return True if any sub-agent-capable platform is configured.
231
231
 
232
232
  Detected by probing well-known config directories at the repo root. Codex
233
- counts by default through ``codex.dispatch_mode: auto`` (including the
234
- legacy ``sub-agent`` alias); explicit inline mode loads context through
235
- skills, not JSONL.
233
+ counts only when ``codex.dispatch_mode: auto`` is explicitly selected
234
+ (including the legacy ``sub-agent`` alias); the default inline mode loads
235
+ context through skills, not JSONL.
236
236
  """
237
237
  for config_dir in _SUBAGENT_CONFIG_DIRS:
238
238
  if (repo_root / config_dir).is_dir():
@@ -181,7 +181,7 @@ def resolve_effective_platform(platform: str, config: dict) -> str:
181
181
  if label:
182
182
  return label
183
183
  if platform == "codex":
184
- mode = "auto"
184
+ mode = "inline"
185
185
  codex_cfg = config.get("codex") if isinstance(config, dict) else None
186
186
  if codex_cfg is not None:
187
187
  if not isinstance(codex_cfg, dict):