oh-my-customcode 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +3 -3
- package/dist/index.js +3 -3
- package/package.json +3 -3
- package/templates/.claude/rules/MUST-agent-design.md +2 -0
- package/templates/.claude/rules/MUST-agent-teams.md +2 -0
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +2 -0
- package/templates/.claude/rules/MUST-permissions.md +2 -0
- package/templates/.claude/rules/MUST-safety.md +2 -0
- package/templates/.claude/skills/fsd/SKILL.md +39 -10
- package/templates/manifest.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -241,7 +241,7 @@ var init_package = __esm(() => {
|
|
|
241
241
|
workspaces: [
|
|
242
242
|
"packages/*"
|
|
243
243
|
],
|
|
244
|
-
version: "1.0.
|
|
244
|
+
version: "1.0.11",
|
|
245
245
|
description: "Batteries-included agent harness for Claude Code",
|
|
246
246
|
type: "module",
|
|
247
247
|
bin: {
|
|
@@ -289,13 +289,13 @@ var init_package = __esm(() => {
|
|
|
289
289
|
yaml: "^2.8.2"
|
|
290
290
|
},
|
|
291
291
|
devDependencies: {
|
|
292
|
-
"@anthropic-ai/sdk": "^0.
|
|
292
|
+
"@anthropic-ai/sdk": "^0.105.0",
|
|
293
293
|
"@biomejs/biome": "^2.3.12",
|
|
294
294
|
"@types/bun": "^1.3.6",
|
|
295
295
|
"@types/js-yaml": "^4.0.9",
|
|
296
296
|
"@types/nodemailer": "^8.0.0",
|
|
297
297
|
"js-yaml": "^4.1.0",
|
|
298
|
-
nodemailer: "^
|
|
298
|
+
nodemailer: "^9.0.1",
|
|
299
299
|
typescript: "^6.0.2",
|
|
300
300
|
vitepress: "^1.6.4"
|
|
301
301
|
},
|
package/dist/index.js
CHANGED
|
@@ -2031,7 +2031,7 @@ var package_default = {
|
|
|
2031
2031
|
workspaces: [
|
|
2032
2032
|
"packages/*"
|
|
2033
2033
|
],
|
|
2034
|
-
version: "1.0.
|
|
2034
|
+
version: "1.0.11",
|
|
2035
2035
|
description: "Batteries-included agent harness for Claude Code",
|
|
2036
2036
|
type: "module",
|
|
2037
2037
|
bin: {
|
|
@@ -2079,13 +2079,13 @@ var package_default = {
|
|
|
2079
2079
|
yaml: "^2.8.2"
|
|
2080
2080
|
},
|
|
2081
2081
|
devDependencies: {
|
|
2082
|
-
"@anthropic-ai/sdk": "^0.
|
|
2082
|
+
"@anthropic-ai/sdk": "^0.105.0",
|
|
2083
2083
|
"@biomejs/biome": "^2.3.12",
|
|
2084
2084
|
"@types/bun": "^1.3.6",
|
|
2085
2085
|
"@types/js-yaml": "^4.0.9",
|
|
2086
2086
|
"@types/nodemailer": "^8.0.0",
|
|
2087
2087
|
"js-yaml": "^4.1.0",
|
|
2088
|
-
nodemailer: "^
|
|
2088
|
+
nodemailer: "^9.0.1",
|
|
2089
2089
|
typescript: "^6.0.2",
|
|
2090
2090
|
vitepress: "^1.6.4"
|
|
2091
2091
|
},
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"workspaces": [
|
|
4
4
|
"packages/*"
|
|
5
5
|
],
|
|
6
|
-
"version": "1.0.
|
|
6
|
+
"version": "1.0.11",
|
|
7
7
|
"description": "Batteries-included agent harness for Claude Code",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"bin": {
|
|
@@ -51,13 +51,13 @@
|
|
|
51
51
|
"yaml": "^2.8.2"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@anthropic-ai/sdk": "^0.
|
|
54
|
+
"@anthropic-ai/sdk": "^0.105.0",
|
|
55
55
|
"@biomejs/biome": "^2.3.12",
|
|
56
56
|
"@types/bun": "^1.3.6",
|
|
57
57
|
"@types/js-yaml": "^4.0.9",
|
|
58
58
|
"@types/nodemailer": "^8.0.0",
|
|
59
59
|
"js-yaml": "^4.1.0",
|
|
60
|
-
"nodemailer": "^
|
|
60
|
+
"nodemailer": "^9.0.1",
|
|
61
61
|
"typescript": "^6.0.2",
|
|
62
62
|
"vitepress": "^1.6.4"
|
|
63
63
|
},
|
|
@@ -44,6 +44,8 @@ This is a settings-level resilience mechanism, distinct from the per-agent `mode
|
|
|
44
44
|
|
|
45
45
|
> **v2.1.166+**: `MAX_THINKING_TOKENS=0`, `--thinking disabled`, and the per-model thinking toggle disable thinking on models that think by default via the Claude API (3rd-party providers unchanged). Relevant when an agent's `effort` is low and thinking overhead is undesirable.
|
|
46
46
|
|
|
47
|
+
> **v2.1.183+**: CC now warns (stderr, in `-p` print mode) when the requested model is deprecated or auto-updated to a newer model — and this warning now ALSO covers models set in agent frontmatter (`model:`). Relevant to the Model Aliases table above: a stale/deprecated `model:` value in agent frontmatter now surfaces a deprecation warning instead of silently resolving. Separately, v2.1.183 fixes `thinking.disabled.display: Extra inputs are not permitted` 400 errors on subagent spawns and session-title generation — extends the v2.1.166 toggle above; subagent spawns with thinking disabled no longer 400.
|
|
48
|
+
|
|
47
49
|
### Safe Mode & Bundled Skill Control (CC v2.1.169+)
|
|
48
50
|
|
|
49
51
|
> **v2.1.169+**: `--safe-mode` (and `CLAUDE_CODE_SAFE_MODE`) starts Claude Code with ALL customizations disabled (CLAUDE.md, plugins, skills, hooks, MCP servers) — use it to isolate whether a project customization (agent/skill/hook) causes a regression. The `disableBundledSkills` setting (and `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` env) hides bundled skills, workflows, and built-in slash commands from the model — useful when bundled skills conflict with or duplicate project skills (R006 skill-surface management). Note: `disableBundledSkills` hides skills from the model but is a CC platform setting, distinct from the advisory `skills:` frontmatter field (which is documentation metadata, not a runtime allowlist).
|
|
@@ -48,6 +48,8 @@ These are distinct mechanisms. Agent Teams `SendMessage` requires `TeamCreate` a
|
|
|
48
48
|
|
|
49
49
|
This hardens cross-session coordination (claude-peers-mcp `send_message`, see Scope table above) against privilege escalation — a relayed message from session A cannot grant session B permissions the user did not authorize on B. Aligns with R001 (credential/privileged-scope guardrails) and R010 (out-of-scope privileged chaining). Intra-session Agent Teams `SendMessage` between peers in the same session is unaffected.
|
|
50
50
|
|
|
51
|
+
> **v2.1.183+**: Fixed tmux teammate panes failing to launch when the shell has slow rc-file initialization — a slow `.zshrc`/`.bashrc` no longer prevents Agent Teams teammate panes from launching in tmux. Also fixed WebSearch returning empty results in subagents: a subagent (including a Teams member) using WebSearch now returns results instead of silently empty.
|
|
52
|
+
|
|
51
53
|
## Self-Check (Before Agent Tool)
|
|
52
54
|
|
|
53
55
|
Before using Agent tool for 2+ agent tasks, complete this check:
|
|
@@ -323,6 +323,8 @@ Before spawning any agent:
|
|
|
323
323
|
|
|
324
324
|
> **v2.1.178+**: Fixed `claude agents` workers failing with `401 Invalid bearer token` when the daemon was started from a shell with a custom API gateway (`ANTHROPIC_BASE_URL` + `ANTHROPIC_AUTH_TOKEN`). Further hardens background-agent provider isolation (cf. v2.1.174 ANTHROPIC_* env isolation). Also fixed `/bg`-created background sessions showing "Working" forever after a turn finished. `mode: "bypassPermissions"` on every Agent tool call remains required regardless.
|
|
325
325
|
|
|
326
|
+
> **v2.1.181+**: Fixed prompt caching not reading on a custom `ANTHROPIC_BASE_URL` (and on Foundry) due to a per-request attestation token changing every turn. Further strengthens background-agent provider isolation (cf. v2.1.174 ANTHROPIC_* env isolation, v2.1.178 401 bearer-token fix): a `/bg`-dispatched or custom-gateway session now benefits from prompt caching instead of paying a cache miss every turn. Separately, v2.1.179 fixed remote-session background tasks appearing stuck as "still running" between turns. `mode: "bypassPermissions"` on every Agent tool call remains required regardless.
|
|
327
|
+
|
|
326
328
|
## Agent Capability Pre-Check
|
|
327
329
|
|
|
328
330
|
Before delegating a task to a subagent, MUST verify the target agent's tool capabilities against the task requirements. Failure to pre-check causes round-trip waste (delegation → failure → re-delegation).
|
|
@@ -47,6 +47,8 @@ Use a `"*"` deny rule in `settings.json` to enforce a deny-by-default posture, t
|
|
|
47
47
|
|
|
48
48
|
> **v2.1.178+**: Permission rules now support `Tool(param:value)` syntax to match a tool's input parameters, with `*` wildcard — e.g. `Agent(model:opus)` denies Opus subagents, or a parameter glob to constrain a tool's arguments. This extends the v2.1.166 tool-name glob support down to per-parameter granularity. Relevant to the Agent Tool Permission Mode below: a deny rule can now block specific subagent models/parameters at the platform level, complementing `availableModels` (R006) and the universal `mode: "bypassPermissions"` requirement (R010). A `Agent(model:...)` parameter deny is evaluated by the CC platform independent of the advisory tier table.
|
|
49
49
|
|
|
50
|
+
> **v2.1.183+**: Fixed MCP servers requiring authentication exposing auth-stub tools to the model in headless/SDK mode — unauthenticated MCP auth-stub tools are no longer surfaced to the model in `-p` / SDK runs (they would fail on call). Relevant to the Tier-6 MCP tier: a headless run no longer offers auth-stub MCP tools. Separately, v2.1.181 added the `sandbox.allowAppleEvents` opt-in setting, letting sandboxed commands send Apple Events on macOS (default off) — a deliberate sandbox-scope widening, complementing the Tier-based policy above.
|
|
51
|
+
|
|
50
52
|
## Agent Tool Permission Mode
|
|
51
53
|
|
|
52
54
|
When spawning subagents via the Agent tool, always pass `mode: "bypassPermissions"` explicitly. The Agent tool's default mode is `acceptEdits`, which **overrides** the agent frontmatter `permissionMode` field.
|
|
@@ -25,6 +25,8 @@ The following git commands have caused working tree loss in past sessions (#1146
|
|
|
25
25
|
|
|
26
26
|
**Recovery hint**: If working tree loss occurs, check `git reflog` immediately — most operations are recoverable within 30 days.
|
|
27
27
|
|
|
28
|
+
> **v2.1.183+**: Auto mode now BLOCKS destructive git commands at the platform level — `git reset --hard`, `git checkout -- .`, `git clean -fd`, and `git stash drop` are blocked when you did not ask to discard local work; `git commit --amend` is blocked when the commit was not made by the agent this session; and `terraform destroy` / `pulumi destroy` / `cdk destroy` are blocked unless you asked for the specific stack. This is the PLATFORM-level complement to this section's (advisory) per-invocation approval requirement and the Pre-Delegation Blast-Radius Enumeration below: the model still enumerates discard targets and requests approval (model-level), and CC now also hard-blocks the destructive command itself in auto mode (platform-level) — defense-in-depth. The advisory approval requirement remains because the platform block gates the COMMAND, not the blast-radius enumeration the user needs for an informed decision.
|
|
29
|
+
|
|
28
30
|
### Pre-Delegation Blast-Radius Enumeration
|
|
29
31
|
|
|
30
32
|
> Origin: #1307 찐빠 #1 (High) — user chose "discard local changes and pull", and `git reset --hard origin/develop` was delegated immediately → user rejected (interrupt). The blast radius — that "discard local changes" included 18 files of *intended* uncommitted work (rule edits, new skills, new guides), not just a version downgrade — was never enumerated for the user.
|
|
@@ -37,25 +37,50 @@ FSD expands into:
|
|
|
37
37
|
2. **`/loop` recurrence** — self-paced loop (model decides cadence), each iteration runs:
|
|
38
38
|
1. `/pipeline auto-dev` — full release pipeline for the next eligible issue
|
|
39
39
|
2. `/homework` — retrospective 찐빠 audit gate
|
|
40
|
+
3. **Open PR processing** — merge or defer all open PRs before checking convergence
|
|
40
41
|
|
|
41
42
|
### Loop Convergence
|
|
42
43
|
|
|
43
|
-
The loop converges naturally when
|
|
44
|
+
The loop converges naturally when **both** conditions are met:
|
|
45
|
+
|
|
46
|
+
1. The auto-dev-eligible issue set reaches 0
|
|
47
|
+
2. All open PRs have been either merged or explicitly deferred
|
|
48
|
+
|
|
49
|
+
FSD processes **open PRs as part of each iteration**, not only issues. This includes dependabot PRs and any automatically created PRs. Issue eligibility follows `/pipeline auto-dev` label selection exactly:
|
|
44
50
|
|
|
45
51
|
- **Included**: `verify-ready` (preferred), unlabeled auto-dev candidates
|
|
46
52
|
- **Excluded**: `verify-done`, `needs-review`, `decision-needed` labels
|
|
47
53
|
|
|
48
54
|
Do NOT invent new label logic here — defer to the `pipeline` skill's auto-dev issue selection.
|
|
49
55
|
|
|
56
|
+
### PR Processing Rules
|
|
57
|
+
|
|
58
|
+
When open PRs are found during an iteration:
|
|
59
|
+
|
|
60
|
+
| PR state | Action |
|
|
61
|
+
|----------|--------|
|
|
62
|
+
| CI passing, auto-mergeable | Merge via mgr-gitnerd (R010) |
|
|
63
|
+
| CI failing with known pattern (e.g., dependabot frozen-lockfile cascade → `bun install` lockfile regeneration) | Fix CI, then merge |
|
|
64
|
+
| CI failing with unknown cause | Diagnose; if fixable within iteration, fix and merge; otherwise defer |
|
|
65
|
+
| Breaking change / design judgment required | Defer and surface to user |
|
|
66
|
+
| Explicitly excluded by user this session | Skip (honor directive persistence, R015) |
|
|
67
|
+
|
|
68
|
+
All PR merge operations are delegated to **mgr-gitnerd** (R010). After merging, verify ground-truth via `gh pr view` or `git log` before declaring done (R020).
|
|
69
|
+
|
|
70
|
+
Do NOT merge PRs that require user approval for architectural decisions. Surface them with a short summary and wait.
|
|
71
|
+
|
|
50
72
|
### Iteration Flow (per iteration)
|
|
51
73
|
|
|
52
74
|
```
|
|
53
75
|
[FSD Iteration N]
|
|
54
76
|
├── /pipeline auto-dev → one release (PR create → merge → npm publish → milestone close)
|
|
55
77
|
├── /homework → extract 찐빠, confirm gate (or --dry-run if requested)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
78
|
+
├── Open PR processing → for each open PR: merge (if CI-green + auto-mergeable)
|
|
79
|
+
│ fix-then-merge (known CI failure pattern)
|
|
80
|
+
│ defer+surface (design decision needed)
|
|
81
|
+
└── Check convergence: eligible issues = 0 AND open PRs = 0 (merged or deferred)?
|
|
82
|
+
├── YES → [FSD Done] converged naturally
|
|
83
|
+
└── NO → next iteration
|
|
59
84
|
```
|
|
60
85
|
|
|
61
86
|
## Safety and Discipline
|
|
@@ -64,11 +89,12 @@ Each iteration operates under full project rules — no relaxation because FSD i
|
|
|
64
89
|
|
|
65
90
|
| Rule | Applies |
|
|
66
91
|
|------|---------|
|
|
67
|
-
| R001 (safety) | Destructive ops still require explicit approval. Credential guardrails always active. |
|
|
92
|
+
| R001 (safety) | Destructive ops still require explicit approval. Credential guardrails always active. PR merges that risk data loss require explicit approval. |
|
|
68
93
|
| R009 (parallel) | Independent subtasks within each pipeline iteration run in parallel. |
|
|
69
|
-
| R010 (orchestration) | All file modifications delegated to specialist subagents. mgr-gitnerd for git ops. |
|
|
94
|
+
| R010 (orchestration) | All file modifications delegated to specialist subagents. mgr-gitnerd for git ops including PR merges. |
|
|
95
|
+
| R015 (intent persistence) | If user explicitly defers a specific PR this session, honor that deferral — do not retry it. |
|
|
70
96
|
| R017 (sync verification) | mgr-sauron passes required before any commit. |
|
|
71
|
-
| R020 (completion verification) | Each release verified via `npm view`, `gh release view`, closed issues before `[Done]`. |
|
|
97
|
+
| R020 (completion verification) | Each release verified via `npm view`, `gh release view`, closed issues before `[Done]`. PR merges verified via `gh pr view` ground-truth before declaring iteration complete. |
|
|
72
98
|
|
|
73
99
|
`/homework` runs as a **retrospective gate** between iterations — findings go through `omcustom-feedback`'s Phase 4A confirmation gate. The loop does NOT skip homework on the grounds that it is "automated". If homework requires user confirmation (e.g., to file a feedback issue), the loop pauses and waits.
|
|
74
100
|
|
|
@@ -119,11 +145,13 @@ That session ran 2 iterations (v0.177.0 and v0.178.0) before converging with 0 e
|
|
|
119
145
|
| `omcustom-loop` | Session auto-continuation via SubagentStop hook — keeps the loop alive during background agent work |
|
|
120
146
|
| `pipeline` | `/pipeline auto-dev` — the core release pipeline per iteration |
|
|
121
147
|
| `homework` | Retrospective 찐빠 audit gate per iteration |
|
|
122
|
-
|
|
|
148
|
+
| `mgr-gitnerd` | PR merge operations — all open PR merges delegated here (R010) |
|
|
149
|
+
| R001 (safety) | Destructive ops require approval; credential guardrails; risky PR merges require explicit approval |
|
|
123
150
|
| R009 (parallel execution) | Parallel subtasks within each pipeline iteration |
|
|
124
|
-
| R010 (orchestrator coordination) | All file writes delegated; mgr-gitnerd for git |
|
|
151
|
+
| R010 (orchestrator coordination) | All file writes delegated; mgr-gitnerd for git including PR merges |
|
|
152
|
+
| R015 (intent persistence) | User PR deferral decisions honored for the session |
|
|
125
153
|
| R017 (sync verification) | mgr-sauron required before commit/push |
|
|
126
|
-
| R020 (completion verification) | Actual outcome verified before declaring each release done |
|
|
154
|
+
| R020 (completion verification) | Actual outcome verified before declaring each release or PR merge done |
|
|
127
155
|
|
|
128
156
|
## Design Notes
|
|
129
157
|
|
|
@@ -132,6 +160,7 @@ This skill is intentionally a **thin alias**. It does NOT duplicate:
|
|
|
132
160
|
- Loop cadence / auto-continuation (owned by `omcustom-loop` + SubagentStop hook)
|
|
133
161
|
- Release pipeline steps (owned by `pipeline auto-dev`)
|
|
134
162
|
- Retrospective analysis (owned by `homework`)
|
|
163
|
+
- PR merge execution (owned by `mgr-gitnerd`)
|
|
135
164
|
- Completion verification (owned by R020 + `goal`)
|
|
136
165
|
|
|
137
166
|
If any of those underlying skills evolve, FSD automatically benefits — its only responsibility is declaring the intent and forwarding to the right components.
|
package/templates/manifest.json
CHANGED