ultra-builder-pro-cli 5.0.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/CHANGELOG.md +113 -3
  2. package/README.md +67 -478
  3. package/README.zh-CN.md +49 -422
  4. package/adapters/_shared/frontmatter.cjs +1 -18
  5. package/adapters/_shared/plugin-core.cjs +17 -83
  6. package/adapters/_shared/runtime-assets.cjs +6 -120
  7. package/adapters/claude.js +8 -24
  8. package/adapters/codex.js +16 -38
  9. package/bin/install.js +35 -57
  10. package/docs/PLUGIN-ISOLATION-CONTRACT.md +13 -101
  11. package/docs/examples/drive/claude-reviewer.sh +53 -0
  12. package/docs/examples/drive/claude-writer.sh +43 -0
  13. package/engine/FORMATS.md +1051 -0
  14. package/engine/checks.cjs +139 -0
  15. package/engine/cli.cjs +148 -0
  16. package/engine/completion.cjs +48 -0
  17. package/engine/context.cjs +94 -0
  18. package/engine/drive.cjs +220 -0
  19. package/engine/expect-worker.cjs +5 -0
  20. package/engine/expect.cjs +33 -0
  21. package/engine/formats.cjs +189 -0
  22. package/engine/git-state.cjs +112 -0
  23. package/engine/ledger.cjs +205 -0
  24. package/engine/loading.cjs +28 -0
  25. package/engine/merge.cjs +273 -0
  26. package/engine/milestone.cjs +89 -0
  27. package/engine/plan.cjs +232 -0
  28. package/engine/project.cjs +5 -0
  29. package/engine/signals.cjs +3 -0
  30. package/engine/states.cjs +175 -0
  31. package/hooks/session-start.cjs +54 -0
  32. package/package.json +17 -52
  33. package/skills/ultra/SKILL.md +395 -0
  34. package/.ultra-template/changes/abandoned/.gitkeep +0 -0
  35. package/.ultra-template/changes/active/.gitkeep +0 -1
  36. package/.ultra-template/changes/archive/.gitkeep +0 -1
  37. package/.ultra-template/contexts/TEMPLATE.md +0 -135
  38. package/.ultra-template/decisions/.gitkeep +0 -1
  39. package/.ultra-template/evidence/.gitkeep +0 -1
  40. package/.ultra-template/north-star.md +0 -52
  41. package/.ultra-template/project-brief.md +0 -28
  42. package/.ultra-template/research/.gitkeep +0 -1
  43. package/.ultra-template/specs/architecture.md +0 -81
  44. package/.ultra-template/specs/discovery.md +0 -74
  45. package/.ultra-template/specs/product.md +0 -80
  46. package/.ultra-template/specs/research-distillate.md +0 -57
  47. package/.ultra-template/tasks.json +0 -4
  48. package/.ultra-template/test-report.json +0 -44
  49. package/adapters/_shared/host-profile.cjs +0 -5
  50. package/adapters/grok.js +0 -242
  51. package/adapters/kimi.js +0 -232
  52. package/adapters/opencode.js +0 -408
  53. package/adapters/zcode.js +0 -375
  54. package/bin/delegate-worker.cjs +0 -5
  55. package/bin/delegate.cjs +0 -5
  56. package/docs/ARCHITECTURE.md +0 -274
  57. package/docs/ARTIFACT-AUTHORITY.md +0 -305
  58. package/docs/DECISIONS.md +0 -229
  59. package/docs/PHILOSOPHY.md +0 -261
  60. package/docs/RUNTIME-COMPAT-MATRIX.md +0 -315
  61. package/docs/SKILL-AUTHORING.md +0 -113
  62. package/docs/WORKFLOW-LIFECYCLE.md +0 -350
  63. package/docs/evals/adversarial-review-2026-08-14.md +0 -84
  64. package/docs/evals/ultra-5-0-journey-results.md +0 -62
  65. package/docs/evals/ultra-5-0-live-acp-conformance.md +0 -93
  66. package/docs/evals/ultra-5-0-route-journeys.md +0 -145
  67. package/docs/evals/zcode-automation-2026-08-14.md +0 -103
  68. package/hooks/README.md +0 -52
  69. package/hooks/_common.py +0 -1779
  70. package/hooks/adapters/codex.py +0 -295
  71. package/hooks/adapters/grok.py +0 -134
  72. package/hooks/adapters/kimi.py +0 -156
  73. package/hooks/adapters/zcode.py +0 -227
  74. package/hooks/block_dangerous_commands.py +0 -201
  75. package/hooks/compact_context.py +0 -224
  76. package/hooks/mid_workflow_recall.py +0 -47
  77. package/hooks/post_edit_guard.py +0 -215
  78. package/hooks/session_context.py +0 -741
  79. package/skills/ultra-change/SKILL.md +0 -165
  80. package/skills/ultra-change/references/change-contract.md +0 -199
  81. package/skills/ultra-change/references/execution-grant.md +0 -109
  82. package/skills/ultra-change/references/primary-transfer.md +0 -273
  83. package/skills/ultra-change/scripts/validate_primary_transfer.cjs +0 -1928
  84. package/skills/ultra-delegate/SKILL.md +0 -195
  85. package/skills/ultra-delegate/patches/zcode-acp-0.1.0-zcode-0.16.5.patch +0 -184
  86. package/skills/ultra-delegate/references/delegation-contract.md +0 -138
  87. package/skills/ultra-delegate/scripts/acp-conformance.cjs +0 -287
  88. package/skills/ultra-delegate/scripts/acp-driver.cjs +0 -762
  89. package/skills/ultra-delegate/scripts/agent-execution-driver.cjs +0 -320
  90. package/skills/ultra-delegate/scripts/cli-driver.cjs +0 -61
  91. package/skills/ultra-delegate/scripts/delegate-profiles/kimi-read-only.md +0 -15
  92. package/skills/ultra-delegate/scripts/delegate-profiles/kimi-write.md +0 -17
  93. package/skills/ultra-delegate/scripts/delegate-worker.cjs +0 -328
  94. package/skills/ultra-delegate/scripts/delegate.cjs +0 -690
  95. package/skills/ultra-delegate/scripts/delegate_wait.py +0 -86
  96. package/skills/ultra-delegate/scripts/host-profile.cjs +0 -267
  97. package/skills/ultra-deliver/SKILL.md +0 -194
  98. package/skills/ultra-deliver/references/baseline-reconciliation.md +0 -41
  99. package/skills/ultra-dev/SKILL.md +0 -265
  100. package/skills/ultra-dev/references/debugging.md +0 -22
  101. package/skills/ultra-domain-modeling/SKILL.md +0 -79
  102. package/skills/ultra-grilling/SKILL.md +0 -121
  103. package/skills/ultra-grilling/references/reframing.md +0 -76
  104. package/skills/ultra-init/SKILL.md +0 -143
  105. package/skills/ultra-init/references/brownfield-adoption.md +0 -32
  106. package/skills/ultra-init/scripts/init_project.cjs +0 -1031
  107. package/skills/ultra-plan/SKILL.md +0 -160
  108. package/skills/ultra-plan/references/task-evidence-v2.md +0 -300
  109. package/skills/ultra-plan/scripts/validate_task_evidence.cjs +0 -859
  110. package/skills/ultra-research/SKILL.md +0 -167
  111. package/skills/ultra-research/references/00-problem-validation.md +0 -36
  112. package/skills/ultra-research/references/01-opportunity-discovery.md +0 -33
  113. package/skills/ultra-research/references/02-market-assessment.md +0 -31
  114. package/skills/ultra-research/references/03-alternatives.md +0 -31
  115. package/skills/ultra-research/references/04-product-strategy.md +0 -41
  116. package/skills/ultra-research/references/05-assumptions-validation.md +0 -31
  117. package/skills/ultra-research/references/10-user-personas.md +0 -30
  118. package/skills/ultra-research/references/11-user-scenarios.md +0 -28
  119. package/skills/ultra-research/references/20-user-stories.md +0 -31
  120. package/skills/ultra-research/references/21-features-scope.md +0 -38
  121. package/skills/ultra-research/references/22-success-metrics.md +0 -33
  122. package/skills/ultra-research/references/30-architecture-context.md +0 -30
  123. package/skills/ultra-research/references/31-solution-strategy.md +0 -28
  124. package/skills/ultra-research/references/32-building-blocks.md +0 -28
  125. package/skills/ultra-research/references/40-deployment.md +0 -29
  126. package/skills/ultra-research/references/41-quality-risks.md +0 -28
  127. package/skills/ultra-research/references/99-synthesis.md +0 -59
  128. package/skills/ultra-research/references/north-star-v2.md +0 -168
  129. package/skills/ultra-research/references/wayfinding.md +0 -50
  130. package/skills/ultra-research/scripts/validate_north_star.cjs +0 -1174
  131. package/skills/ultra-review/SKILL.md +0 -275
  132. package/skills/ultra-review/references/adversarial-evaluation.md +0 -31
  133. package/skills/ultra-review/references/code.md +0 -17
  134. package/skills/ultra-review/references/comments.md +0 -12
  135. package/skills/ultra-review/references/design.md +0 -12
  136. package/skills/ultra-review/references/errors.md +0 -13
  137. package/skills/ultra-review/references/review-modes.md +0 -29
  138. package/skills/ultra-review/references/spec.md +0 -18
  139. package/skills/ultra-review/references/tests.md +0 -12
  140. package/skills/ultra-review/references/unified-schema.md +0 -284
  141. package/skills/ultra-review/references/worker-packet.md +0 -183
  142. package/skills/ultra-review/scripts/review_wait.py +0 -2943
  143. package/skills/ultra-status/SKILL.md +0 -209
  144. package/skills/ultra-status/references/route-contract.md +0 -100
  145. package/skills/ultra-tdd/SKILL.md +0 -91
  146. package/skills/ultra-tdd/references/templates/README.md +0 -20
  147. package/skills/ultra-tdd/references/templates/feature-flag-default-audit.sh +0 -79
  148. package/skills/ultra-tdd/references/templates/persistence-real.ts +0 -78
  149. package/skills/ultra-tdd/references/templates/testcontainer-postgres.py +0 -78
  150. package/skills/ultra-tdd/references/templates/testcontainer-postgres.ts +0 -73
  151. package/skills/ultra-tdd/references/templates/vertical-slice.ts +0 -66
  152. package/skills/ultra-tdd/references/test-execution.md +0 -23
  153. package/skills/ultra-test/SKILL.md +0 -244
  154. package/skills/ultra-test/references/export-syntax.md +0 -18
  155. package/skills/ultra-test/scripts/validate_review_transport.cjs +0 -549
  156. package/skills/ultra-test/scripts/worktree_digest.cjs +0 -576
  157. package/skills/ultra-think/SKILL.md +0 -56
  158. package/skills/ultra-think/references/autonomy-boundary.md +0 -48
  159. package/skills/ultra-think/references/interaction-boundary.md +0 -42
@@ -1,107 +1,19 @@
1
1
  # Plugin isolation contract
2
2
 
3
- Ultra Builder Pro owns a narrow install surface. Installation and discovery create no
4
- project authority. A public workflow becomes active only through an explicit owner
5
- entry or one mode covered by a currently valid Execution Grant; Hooks separately use
6
- the presence of `.ultra/` as their idle guard.
3
+ UBP v6 installs one `ultra` Skill, its engine copy and a SessionStart observer for
4
+ Claude Code or Codex. Installation does not authorize project work or external effects.
7
5
 
8
- ## Owned surfaces
6
+ The plugin never creates or rewrites the user's global `AGENTS.md` or `CLAUDE.md`.
7
+ Repository guidance belongs to the repository. The host owns permissions and hook trust.
9
8
 
10
- Per host, Ultra may install:
9
+ Installers replace and remove only managed plugin trees. They preserve unrelated host
10
+ configuration and restore the previous managed installation if publication fails.
11
+ `--config-dir` confines both plugin files and host registration sidecars to that directory;
12
+ with `--all`, each host gets a separate child directory. Doctor is read-only.
11
13
 
12
- - exactly fourteen managed Skills;
13
- - the launcher, worker, Host profile, and launch-only profile assets below the managed
14
- `ultra-delegate/scripts/` Skill directory;
15
- - exactly five hook scripts plus `_common.py` and any required wire adapter;
16
- - one native plugin manifest or entrypoint;
17
- - provenance and managed-ownership markers;
18
- - the host's native registry entry where required.
14
+ SessionStart reads its input and project status, prints a reminder when `.ultra/spec.md`
15
+ exists and `UBP_DRIVE` is not set, and always exits successfully. It writes no files and grants no authority.
19
16
 
20
- For one release cycle the package also owns thin `ubp delegate` launcher/worker
21
- compatibility imports. They execute the Skill-local implementation and contain no
22
- forked behavior.
23
-
24
- ## Surfaces Ultra does not own
25
-
26
- Ultra must not create or rewrite:
27
-
28
- - global user instruction files such as `~/.codex/AGENTS.md` or
29
- `~/.claude/CLAUDE.md`;
30
- - general memory, code-graph, browser, deployment, framework, or productivity assets;
31
- - user-defined commands, agents, plugins, hooks, or registry entries;
32
- - repository files outside `.ultra/` and `CONTEXT.md` unless the selected engineering
33
- task itself authorizes them;
34
- - an Ultra database, server registration, semantic runtime, or daemon.
35
-
36
- ## Installation lifecycle
37
-
38
- Install builds a complete staging tree, including the Skill-local delegation runtime,
39
- marks it managed, writes provenance, then atomically publishes it. An existing unmanaged
40
- target is never overwritten. Reinstall replaces only the managed tree. Doctor is
41
- read-only and reports runner reachability separately. Uninstall removes only assets
42
- whose ownership can be proven.
43
-
44
- Host-owned sidecars must resolve from the same isolation root as `--config-dir`. For
45
- Codex this includes both `plugins/ultra-builder-pro` and
46
- `.agents/plugins/marketplace.json`; sandbox installation must not touch the real home
47
- directory. Codex native registration runs with both `HOME` and `CODEX_HOME` set to that
48
- root. If registration fails, install restores the previous managed tree and marketplace,
49
- or removes every fresh partial artifact.
50
-
51
- When one invocation selects multiple hosts, the supplied path is a parent isolation
52
- root and each adapter receives `<path>/<runtime>`. Sharing one concrete config directory
53
- would collide host-native `skills/` and `plugins/` layouts.
54
-
55
- OpenCode installation may remove a specifically recognizable Ultra registration from
56
- an older release. It must preserve unrelated configuration and files.
57
-
58
- Before first install, each adapter records only the exact config files and directory
59
- shells that do not yet exist. Uninstall may prune those recorded paths only when they
60
- are still empty (or a zero-byte host-created file); it preserves every pre-existing,
61
- non-empty, modified, symlinked, or unowned path. Codex marketplace and Kimi registry
62
- files additionally remember whether Ultra created the registry itself, so an empty
63
- registry that existed before installation is retained.
64
-
65
- ZCode publishes one managed local marketplace whose nested plugin is activated through
66
- the host's documented `plugins.dirs` configuration. Install preserves unrelated ZCode
67
- configuration, and uninstall removes only Ultra's exact directory entry and restores
68
- the pre-install `plugins.enabled` value when that value has not since been changed by
69
- the owner.
70
-
71
- ## Activation
72
-
73
- Public Skill modes are `explicit-entry`, `grant-continuable`, or read-only `router`.
74
- Explicit-entry modes activate only through the Host's owner-facing Skill surface.
75
- Grant-continuable modes may be model-selected only after the loaded Skill verifies the
76
- same active Change, valid grant, allowed effects, and material checkpoints. A router may
77
- diagnose read-only state only on explicit owner invocation and creates no continuation
78
- authority. Model-discipline Skills
79
- may be selected only as methods inside the current covered workflow.
80
-
81
- Host invocation metadata is a coarse discovery aid. It cannot express every per-mode
82
- boundary, so the in-Skill check remains mandatory and Hosts without an equivalent bit
83
- rely on discriminating descriptions plus that same check. A public Skill may transition
84
- to another only when a valid grant covers the exact next mode and effects, after showing
85
- the Route Card; otherwise it stops and recommends the explicit route. Installation does
86
- not create a grant, launch a workflow, or start background work. Hooks activate only
87
- through Host lifecycle registrations and retain their independent idle guard.
88
-
89
- ## Idle behavior
90
-
91
- Every hook resolves the current project and checks for `.ultra/` before reading,
92
- writing, injecting context, or denying an effect. Without `.ultra/`, it emits no stdout,
93
- exits zero, and leaves the project untouched.
94
-
95
- The only hook denial is a named destructive shell effect in an active Ultra project.
96
- The denial identifies the protected effect and supplies an exact-command SHA-256
97
- authorization path. Additive protected-branch publication is an advisory observation
98
- because a portable hook cannot consume every host's trusted owner-approval receipt;
99
- history rewrites and branch deletion remain guarded. All other hook failures are
100
- fail-open diagnostics.
101
-
102
- ## Project data boundary
103
-
104
- Canonical project data is owner-readable and Git-compatible. Derived hook, review, and
105
- delegation artifacts live only under ignored `.ultra/.runtime/`, `.ultra/progress/`, or
106
- `.ultra/reviews/`. Disabling or uninstalling Ultra leaves canonical project data intact
107
- and resumable by ordinary file reading.
17
+ Project truth is `.ultra/spec.md`, `checks.json`, `plan.json`, `rulings.md`, the ledgers,
18
+ records and Git. The engine computes progress; a hook's printed observation is not a new
19
+ source of truth. `.ultra/.runtime/` is disposable execution data.
@@ -0,0 +1,53 @@
1
+ #!/bin/sh
2
+ # Headless Claude Code reviewer for `ubp drive --reviewer`, run once at the milestone gate.
3
+ # The engine sets UBP_ROOT, UBP, UBP_DRIVE, UBP_MILESTONE and UBP_REVIEW (the review file to
4
+ # write), and puts its own `ubp` first on PATH.
5
+ # It runs with edits accepted and Bash allowed, without a sandbox: use it only on a
6
+ # repository you are willing to let an agent change. Copy it and adjust before use.
7
+ # Outward commands that cannot be undone are denied by Claude Code permission rules
8
+ # (--disallowedTools below). Ceiling: they match command prefixes, so they stop `git push`
9
+ # and compound forms (checked with claude -p on 2026-11-04) but not `git -C <dir> push`,
10
+ # `git -c k=v push` or a push made inside a script; a mid-command rule like `git * push *`
11
+ # would also deny every commit whose message says "push". The stronger guard is a work tree
12
+ # with no push remote; add the deploy and release CLIs your project uses to the list.
13
+ set -eu
14
+ cd "$UBP_ROOT"
15
+ PROMPT="# Mission: whole-branch review of milestone $UBP_MILESTONE
16
+
17
+ Workspace: $UBP_ROOT (a Git repository). You wrote none of this milestone's code. If you
18
+ need this project's engine, call it as \`eval \"\$UBP <args>\"\` (a plain \`ubp\` may be another
19
+ install); \`ubp check\` and \`ubp gate\` write the ledger, so prefer running tests on a copy.
20
+
21
+ Read: the milestone's requirements in .ultra/spec.md (the Direction and Interface sections
22
+ too), the milestone's diff (from the commit that last changed .ultra/ledger/milestones.jsonl
23
+ to HEAD), .ultra/ledger/plan-log.jsonl and .ultra/rulings.md since that commit, and the
24
+ handoffs under .ultra/records/handoffs/. Then drive the product by hand through its real
25
+ interface, and run the milestone's checks against deliberately broken copies of the code: make
26
+ each copy in a temporary directory outside the repository, never in it. A check that passes on
27
+ a broken copy is an acceptance gap. Run the checks once on an unmodified copy of HEAD too
28
+ (\`git archive HEAD\`): a fix that lives only in a file Git ignores passes in the work tree.
29
+
30
+ The Owner's rule is that a check that could be stronger never blocks. So a finding blocks only
31
+ when the product, as HEAD builds it, breaks a requirement's \`Done when\` line or the
32
+ Direction, or does something wrong that you can reproduce through its real interface. Wrong
33
+ means it contradicts the text of the spec (a requirement, the Interface or the Direction),
34
+ loses or corrupts data, crashes, or opens a security hole. An acceptance gap does not block
35
+ once you have driven HEAD through its real interface on the input the broken copy got wrong
36
+ and seen it behave correctly: quote what HEAD did, name the check that would close the gap
37
+ under \"What must be said to the Owner\", and keep the verdict accept. If the latest earlier
38
+ review of this milestone in .ultra/records/milestones/ (\`$UBP_MILESTONE-review-<n>.md\`) ends
39
+ with \`Verdict: revise\`, also check each of its blocking findings and look for regressions.
40
+ Quote an earlier verdict only inside a code fence.
41
+
42
+ Write $UBP_REVIEW and nothing else in the repository (no commits, no other edits): a first
43
+ line \`Reviewer: claude -p (${UBP_REVIEWER_MODEL:-opus}), fresh session\`, then the findings
44
+ that block (each with its evidence, the \`Done when\` line, Direction or reproduction it rests
45
+ on, and the layer it belongs to: L4 implementation, L2 design, L1 acceptance or requirements,
46
+ L0 direction), then a section \"What must be said to the Owner\" with everything else, then
47
+ exactly one line \`Verdict: accept\` (no finding blocks) or \`Verdict: revise\`. Stop every
48
+ server you start by its PID."
49
+ exec claude -p "$PROMPT" --model "${UBP_REVIEWER_MODEL:-opus}" --output-format json \
50
+ --setting-sources project --strict-mcp-config --disable-slash-commands \
51
+ --no-session-persistence --permission-mode acceptEdits \
52
+ --allowedTools "Bash,Read,Edit,Write,Glob,Grep" \
53
+ --disallowedTools "Bash(git push *)" "Bash(npm publish *)" "Bash(gh *)"
@@ -0,0 +1,43 @@
1
+ #!/bin/sh
2
+ # Headless Claude Code writer for `ubp drive --writer`. The engine sets UBP_ROOT, UBP_NODE,
3
+ # UBP_BRIEF, UBP_ATTEMPT, UBP_DRIVE and UBP, and puts its own `ubp` first on PATH.
4
+ # The writer sees the brief and the repository only, never the controller's conversation.
5
+ # It runs with edits accepted and Bash allowed, without a sandbox: use it only on a
6
+ # repository you are willing to let an agent change. Copy it and adjust before use.
7
+ # Outward commands that cannot be undone are denied by Claude Code permission rules
8
+ # (--disallowedTools below). Ceiling: they match command prefixes, so they stop `git push`
9
+ # and compound forms (checked with claude -p on 2026-11-04) but not `git -C <dir> push`,
10
+ # `git -c k=v push` or a push made inside a script; a mid-command rule like `git * push *`
11
+ # would also deny every commit whose message says "push". The stronger guard is a work tree
12
+ # with no push remote; add the deploy and release CLIs your project uses to the list.
13
+ set -eu
14
+ cd "$UBP_ROOT"
15
+ PROMPT="# Mission: node $UBP_NODE (attempt $UBP_ATTEMPT)
16
+
17
+ Workspace: $UBP_ROOT (a Git repository). You are the writer of one node. The brief below is
18
+ everything you are given; the current code is in the repository.
19
+
20
+ Call this project's engine as \`eval \"\$UBP <args>\"\` from the workspace (the current
21
+ directory is the project root), for example \`eval \"\$UBP check C-1\"\`; a plain \`ubp\` may be
22
+ another install. Below, \`ubp <args>\` means exactly that. Work test-first inside the node's
23
+ scope. Run the \`ubp check\` line of the brief's rules for this node's checks until they are
24
+ green; before \`ubp node done $UBP_NODE\`, also run \`ubp check\` (every stale check):
25
+ invariants and checks that were green before must stay green. Red checks of other nodes or of later milestones are expected; leave them alone.
26
+
27
+ Never edit .ultra/spec.md, .ultra/checks.json, .ultra/plan.json, .ultra/ledger/milestones.jsonl,
28
+ .ultra/ledger/approvals.jsonl, .ultra/ledger/plan-log.jsonl or any check's test file, and never
29
+ run \`ubp gate\`, \`ubp approve\` or \`ubp milestone close\`: if one of them looks wrong, stop and
30
+ say so in .ultra/records/handoffs/$UBP_NODE.md. Write that handoff and commit it with the
31
+ code; besides what the brief asks, say in it what you noticed and left unchanged and what
32
+ behavior no check pins. Commit inside this repository only (local commits); leave the work tree clean; install
33
+ nothing. Stop every server you start by its PID, never with a pattern-based kill, and keep
34
+ data files in a temp directory outside the repository. Finish with \`ubp node done $UBP_NODE\`.
35
+
36
+ ---
37
+
38
+ $(cat "$UBP_BRIEF")"
39
+ exec claude -p "$PROMPT" --model "${UBP_WRITER_MODEL:-sonnet}" --output-format json \
40
+ --setting-sources project --strict-mcp-config --disable-slash-commands \
41
+ --no-session-persistence --permission-mode acceptEdits \
42
+ --allowedTools "Bash,Read,Edit,Write,Glob,Grep" \
43
+ --disallowedTools "Bash(git push *)" "Bash(npm publish *)" "Bash(gh *)"