oh-my-customcode 2.0.7 → 2.0.8
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/README.md +3 -2
- package/dist/cli/index.js +28 -7
- package/dist/index.js +28 -7
- package/package.json +1 -1
- package/templates/.claude/hooks/hooks.json +28 -12
- package/templates/.claude/hooks/scripts/auto-continue-guard.sh +5 -5
- package/templates/.claude/hooks/scripts/auto-dev-token-tracker.sh +12 -1
- package/templates/.claude/hooks/scripts/bash-cd-advisor.sh +172 -0
- package/templates/.claude/hooks/scripts/fail-axis-cause-advisor.sh +2 -2
- package/templates/.claude/hooks/scripts/failure-ledger.sh +18 -0
- package/templates/.claude/hooks/scripts/file-change-validator.sh +6 -3
- package/templates/.claude/hooks/scripts/omcustom-auto-update.sh +19 -5
- package/templates/.claude/hooks/scripts/rule-deletion-guard.sh +118 -1
- package/templates/.claude/hooks/scripts/session-env-check.sh +20 -5
- package/templates/.claude/hooks/scripts/stall-detection-advisor.sh +9 -5
- package/templates/.claude/hooks/scripts/stuck-detector.sh +21 -4
- package/templates/.claude/hooks/scripts/subagent-failure-advisor.sh +48 -29
- package/templates/.claude/hooks/scripts/task-outcome-recorder.sh +15 -8
- package/templates/.claude/ontology/agents.yaml +71 -7
- package/templates/.claude/ontology/graphs/agent-skill.json +64 -5
- package/templates/.claude/ontology/graphs/full-graph.json +236 -3
- package/templates/.claude/ontology/skills.yaml +65 -1
- package/templates/.claude/rules/MUST-enforcement-policy.md +3 -3
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +1 -1
- package/templates/.claude/rules/SHOULD-memory-integration.md +1 -1
- package/templates/.claude/settings.json +28 -12
- package/templates/.claude/skills/fsd/SKILL.md +10 -9
- package/templates/.claude/skills/goal/SKILL.md +5 -5
- package/templates/.claude/skills/omcustom-loop/SKILL.md +4 -4
- package/templates/.claude/skills/pipeline/workflows/auto-dev.yaml +13 -0
- package/templates/guides/claude-code/04-agent-skills.md +1 -1
- package/templates/guides/claude-code/15-version-compatibility.md +46 -46
- package/templates/manifest.json +1 -1
- package/templates/workflows/auto-dev.yaml +13 -0
|
@@ -16,7 +16,7 @@ Autonomous release loop. Can be expressed as running:
|
|
|
16
16
|
/goal "모든 이슈가 처리될 때까지" /loop "/pipeline auto-dev -> /homework"
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
> The main conversation may also drive the same loop inline without invoking
|
|
19
|
+
> The main conversation may also drive the same loop inline without invoking `/goal`/`/loop` — see 「인라인 실행 허용 — 계약과 실측의 정합 (#1683 #4)」 below.
|
|
20
20
|
|
|
21
21
|
This is a **thin alias / orchestrator skill**. It does not implement loop, issue-polling, release, or verification logic — it delegates entirely to existing skills.
|
|
22
22
|
|
|
@@ -33,9 +33,10 @@ No arguments are required. The default behavior runs until the auto-dev-eligible
|
|
|
33
33
|
|
|
34
34
|
FSD expands into:
|
|
35
35
|
|
|
36
|
-
1. **`/goal`
|
|
37
|
-
-
|
|
38
|
-
-
|
|
36
|
+
1. **`/goal` completion condition** — Claude Code's built-in command (CHANGELOG 2.1.139: "Added `/goal` command: set a completion condition and Claude keeps working across turns until it's met."), here with the objective "모든 이슈가 처리될 때까지"
|
|
37
|
+
- The `omcustom:goal` skill (`/omcustom:goal`) is a separate planning workflow, renamed in v0.130.0 (commit 6e57404b) so that bare `/goal` reaches the built-in; the expression above does not invoke it
|
|
38
|
+
- Completion verification is owned by R020 and this skill's own loop contract (see 「인라인 실행 허용」 below)
|
|
39
|
+
- [가설 — 2026-05-12 이름 변경 이후 세션이라 내장 `/goal`로 추정, 세션 기록 미확인] Session 114's bare `/goal` (see 「Session 114 Precedent」)
|
|
39
40
|
2. **`/loop` recurrence** — self-paced loop (model decides cadence), each iteration runs:
|
|
40
41
|
1. `/pipeline auto-dev` — full release pipeline for the next eligible issue
|
|
41
42
|
2. `/homework` — retrospective 찐빠 audit gate
|
|
@@ -159,7 +160,7 @@ printf '%s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" > "/tmp/.claude-fsd-$PPID"
|
|
|
159
160
|
|
|
160
161
|
### 인라인 실행 허용 — 계약과 실측의 정합 (#1683 #4)
|
|
161
162
|
|
|
162
|
-
FSD의 루프 드라이버는 **메인 대화(오케스트레이터) 자신**입니다. `/goal`·`/loop`(ScheduleWakeup)
|
|
163
|
+
FSD의 루프 드라이버는 **메인 대화(오케스트레이터) 자신**입니다. `/goal`·`/loop`(ScheduleWakeup) 호출은 루프를 표현하는 한 방법일 뿐 필수 호출이 아니며, 오케스트레이터가 아래 최소 계약을 지키면 명령/스킬 호출 없이 인라인으로 반복을 진행하는 것도 이 스킬의 정상 실행입니다. v1.1.64 반복이 인라인으로 실행된 것을 계약 이탈로 회고한 것(#1683 찐빠 #4)이 이 절의 기원이며, 같은 세션의 v1.1.65·v1.1.66 반복도 인라인으로 실행되었습니다(세션 실측, 이슈 범위 밖).
|
|
163
164
|
|
|
164
165
|
| 반복마다 지켜야 할 최소 계약 | 근거 |
|
|
165
166
|
|------------------------------|------|
|
|
@@ -169,7 +170,7 @@ FSD의 루프 드라이버는 **메인 대화(오케스트레이터) 자신**입
|
|
|
169
170
|
| 종료 경로와 무관하게 마커 제거(`command rm -f`) | 「무인 모드 마커」 |
|
|
170
171
|
| 반복의 릴리즈는 PR 생성 전에 auto-dev 릴리즈 단계의 마일스톤 배정 게이트가 PASS여야 합니다(마일스톤 vX.Y.Z가 open이고 스코프 이슈 전부가 배정됨) | auto-dev.yaml release 단계 "Milestone assignment gate", #1789 찐빠 #2(인라인 루프가 scope-selection의 마일스톤 생성·배정 부수효과를 건너뛰어 릴리즈가 마일스톤 없이 나감) |
|
|
171
172
|
|
|
172
|
-
`/goal`·`/loop`를 호출하는 경로는 여전히 유효하며, 세션이 무인(`claude -p`, 예약 실행)이라 자기 페이싱이 필요할 때 권장됩니다. 대화형 세션에서는 인라인 실행이
|
|
173
|
+
`/goal`·`/loop`를 호출하는 경로는 여전히 유효하며, 세션이 무인(`claude -p`, 예약 실행)이라 자기 페이싱이 필요할 때 권장됩니다. 대화형 세션에서는 인라인 실행이 명령/스킬 호출 오버헤드 없이 같은 계약을 만족합니다.
|
|
173
174
|
|
|
174
175
|
## Safety and Discipline
|
|
175
176
|
|
|
@@ -240,7 +241,7 @@ That session ran 2 iterations (v0.177.0 and v0.178.0) before converging with 0 e
|
|
|
240
241
|
|
|
241
242
|
| Skill / Rule | Role |
|
|
242
243
|
|--------------|------|
|
|
243
|
-
| `goal` |
|
|
244
|
+
| `omcustom:goal` | Separate planning workflow skill (`/omcustom:goal`); not invoked by the `/goal` in the expression above (built-in command) |
|
|
244
245
|
| `omcustom-loop` | SubagentStop command hooks (outcome recording and advisories only) — no orchestrator-workflow continuation; these hooks do not wake an idle model (no `asyncRewake` configured in `.claude/hooks/hooks.json` or `.claude/settings.json`) and `auto-continue-guard.sh` has no `exit 2` statement (its only explicit exit is `exit 0`), echoes the payload, and the CC 2.1.310 SubagentStop payload has no top-level `decision`/`continue` key (CC 2.1.310 binary SubagentStop payload builder, inspected during the v2.0.6/v2.0.7 reviews), so it does not block |
|
|
245
246
|
| `pipeline` | `/pipeline auto-dev` — the core release pipeline per iteration |
|
|
246
247
|
| `homework` | Retrospective 찐빠 audit gate per iteration |
|
|
@@ -260,8 +261,8 @@ This skill is intentionally a **thin alias**. It does NOT duplicate:
|
|
|
260
261
|
- Release pipeline steps (owned by `pipeline auto-dev`)
|
|
261
262
|
- Retrospective analysis (owned by `homework`)
|
|
262
263
|
- PR merge execution (owned by `mgr-gitnerd`)
|
|
263
|
-
- Completion verification (owned by R020 +
|
|
264
|
-
- Loop driving itself — the main conversation may run the iteration inline (see 「인라인 실행 허용」);
|
|
264
|
+
- Completion verification (owned by R020 + this skill's loop contract)
|
|
265
|
+
- Loop driving itself — the main conversation may run the iteration inline (see 「인라인 실행 허용」); `/goal`/`/loop` are optional expressions of the same contract; `omcustom-loop` hooks are advisory only
|
|
265
266
|
|
|
266
267
|
If any of those underlying skills evolve, FSD automatically benefits — its only responsibility is declaring the intent and forwarding to the right components.
|
|
267
268
|
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: omcustom:goal
|
|
3
|
-
description: Disciplined goal-to-execution workflow for any user task. Parses objective, asks only for materially missing requirements via ambiguity-gate, inspects repo via idea, plans via sdd-dev or deep-plan, executes safely under project conventions, verifies completion per R020, and reports changed files with evidence. Use when user invokes /goal <task>.
|
|
3
|
+
description: Disciplined goal-to-execution workflow for any user task. Parses objective, asks only for materially missing requirements via ambiguity-gate, inspects repo via idea, plans via sdd-dev or deep-plan, executes safely under project conventions, verifies completion per R020, and reports changed files with evidence. Use when user invokes /omcustom:goal <task>.
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
scope: core
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# /goal — Disciplined Goal-to-Execution Workflow
|
|
8
|
+
# /omcustom:goal — Disciplined Goal-to-Execution Workflow
|
|
9
9
|
|
|
10
10
|
Apply project discipline (planning, verification, cleanup, review) to any user-provided task. Acts as a thin orchestrator that routes to existing oh-my-customcode skills rather than duplicating logic.
|
|
11
11
|
|
|
12
12
|
## Usage
|
|
13
13
|
|
|
14
14
|
```
|
|
15
|
-
/goal <task description>
|
|
15
|
+
/omcustom:goal <task description>
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
Example: `/goal Add a /weekly-summary command that aggregates last 7 days of git activity`
|
|
18
|
+
Example: `/omcustom:goal Add a /weekly-summary command that aggregates last 7 days of git activity`
|
|
19
19
|
|
|
20
20
|
## Workflow
|
|
21
21
|
|
|
@@ -73,7 +73,7 @@ This skill is intentionally a **thin wrapper / orchestrator**. It does NOT dupli
|
|
|
73
73
|
- Stable entry point that routes to whichever underlying skills are best at the moment
|
|
74
74
|
- Documented contract that callers can rely on regardless of internal skill evolution
|
|
75
75
|
|
|
76
|
-
If a future skill replaces `idea` or `sdd-dev`, only the integration table updates — `/goal` remains stable.
|
|
76
|
+
If a future skill replaces `idea` or `sdd-dev`, only the integration table updates — `/omcustom:goal` remains stable.
|
|
77
77
|
|
|
78
78
|
## Cross-References
|
|
79
79
|
|
|
@@ -15,19 +15,19 @@ When background subagents complete, `SubagentStop` command hooks record outcomes
|
|
|
15
15
|
## How It Works
|
|
16
16
|
|
|
17
17
|
1. When a background subagent completes, Claude Code fires the `SubagentStop` event
|
|
18
|
-
2. The command hooks run: `task-outcome-recorder.sh` (records an outcome entry, but SubagentStop exposes no failure signal, so entries are always outcome=success; see the "Outcome caveat" comment in the script), `stall-detection-advisor.sh` (stderr advisory on stalled parallel agents; stderr on exit 0 is
|
|
19
|
-
3. None of them continues the orchestrator's workflow; the orchestrator decides the next workflow step itself from the returned results. Exception: when `r007-r008-drift-advisor.sh` emits an advisory on SubagentStop, CC delivers the `additionalContext` to the stopping subagent, which continues its turn to respond (CHANGELOG 2.1.163).
|
|
18
|
+
2. The command hooks run: `task-outcome-recorder.sh` (records an outcome entry, but SubagentStop exposes no failure signal, so entries are always outcome=success (hooks doc lists SubagentStop input fields as `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path`, `last_assistant_message`, `background_tasks`, `session_crons` plus common fields; measured payload keys: https://github.com/baekenough/oh-my-customcode/issues/1775#issuecomment-6404861043); see the "Outcome caveat" comment in the script), `stall-detection-advisor.sh` (stderr advisory on stalled parallel agents; stderr on exit 0 is not fed to the model (the doc says only: "To read it yourself … enable debug logging"); official hooks doc https://code.claude.com/docs/en/hooks.md: "Claude never sees stderr from a hook that exits 0."), `auto-continue-guard.sh` (counts consecutive completions), `r007-r008-drift-advisor.sh` (R007/R008 drift advisory); failure advisories for Agent/Task calls come from `PostToolUseFailure` (`subagent-failure-advisor.sh`) instead, not from SubagentStop
|
|
19
|
+
3. None of them continues the orchestrator's workflow; the orchestrator decides the next workflow step itself from the returned results. Exception: when `r007-r008-drift-advisor.sh` emits an advisory on SubagentStop, CC delivers the `additionalContext` to the stopping subagent, which continues its turn to respond (CHANGELOG 2.1.163); hooks doc: SubagentStop hooks support `hookSpecificOutput.additionalContext` "for non-error feedback that keeps the subagent running", and "To inject context into the parent session after a subagent returns, use a [`PostToolUse`](#posttooluse) hook on the `Agent` tool instead."
|
|
20
20
|
4. If no steps remain, it reports results and waits for user input
|
|
21
21
|
|
|
22
22
|
## Consecutive-Completion Advisory
|
|
23
23
|
|
|
24
|
-
- **Consecutive-completion counter**: `auto-continue-guard.sh` counts SubagentStop events (counter resets after
|
|
24
|
+
- **Consecutive-completion counter**: `auto-continue-guard.sh` counts SubagentStop events (counter resets after more than 60 s idle since the last completion, so the window chains); from the 4th completion onward within the window (count >= 4) it prints a stderr line "[ConsecutiveCompletions] ADVISORY: 4+ consecutive subagent completions, each within 60s of the previous (advisory only; nothing is paused)." (human-visible only, not a model-visible signal; among these four SubagentStop hooks only `r007-r008-drift-advisor.sh` uses `additionalContext`) and its script contains no `exit 2` statement (its only explicit exit is `exit 0`); it echoes the input payload to stdout, and the CC 2.1.310 SubagentStop payload has no top-level `decision`/`continue` key (CC 2.1.310 binary SubagentStop payload builder, inspected during the v2.0.6/v2.0.7 reviews), so it does not block
|
|
25
25
|
- **stuck-detector integration**: If the same action repeats 3+ times, the independent PostToolUse stuck-detector hook intervenes
|
|
26
26
|
- **cost-cap-advisor**: Cost monitoring is independent of these hooks
|
|
27
27
|
|
|
28
28
|
## Configuration
|
|
29
29
|
|
|
30
|
-
The hooks are configured in `.claude/hooks/hooks.json` under `SubagentStop`. All
|
|
30
|
+
The hooks are configured in `.claude/hooks/hooks.json` under `SubagentStop`. All four hooks are `type: command` and advisory (none contains an `exit 2` statement or emits a `decision`/`continue` field outside comments, so none blocks; the grep pattern covered `exit 2`, `"decision"`, `decision:`, `"continue"` and `continue:` and hit only comments in `r007-r008-drift-advisor.sh`; the `continue:` form added no hits. Three of the four hooks (`task-outcome-recorder.sh`, `stall-detection-advisor.sh`, `auto-continue-guard.sh`; measured by `git grep -n` of `printf '%s\n' "$input"` at task-outcome-recorder.sh:218, stall-detection-advisor.sh:31/:44/:124, auto-continue-guard.sh:32; `r007-r008-drift-advisor.sh` instead prints the `additionalContext` JSON on stdout, :456-:457; its advisory text also goes to stderr at :451, which the model does not see) echo the CC payload to stdout, which carries no top-level `decision`/`continue` key in CC 2.1.310. The drift advisor's `additionalContext` makes the stopping subagent continue its own turn; that continuation is not a block).
|
|
31
31
|
|
|
32
32
|
## Limitations
|
|
33
33
|
|
|
@@ -928,6 +928,19 @@ steps:
|
|
|
928
928
|
각 변수에 최소 한 값 변경 대조 조건을 두게 하십시오. 측정 writer는 조건·결과 표를 제출하고
|
|
929
929
|
일반화 문장에 측정 조건을 함께 적으십시오. dispatcher는 대조가 없는 함의를 가설로
|
|
930
930
|
제한하며 표 없는 runtime 일반화를 완료로 받지 마십시오(#1833 P5).
|
|
931
|
+
- Line-anchor drift sweep: a delegation that adds or removes lines in any file MUST, as a
|
|
932
|
+
completion condition, run `git grep -n -E '<escaped basename>:[0-9]'` across the
|
|
933
|
+
repository (the BASENAME, not the path — basename-only anchors such as
|
|
934
|
+
`task-outcome-recorder.sh:218` carry no directory) and also check every sentence that
|
|
935
|
+
mentions the file for bare continuation anchors (`:[0-9]+` after a path mention, e.g.
|
|
936
|
+
`stall-detection-advisor.sh:44/:124` or `:451-:453`), then either re-derive each anchor
|
|
937
|
+
whose target text moved or replace it with a content anchor (function name / unique
|
|
938
|
+
string). Anchors into generated files (e.g. `.claude/settings.json`, regenerated from
|
|
939
|
+
hooks.json) MUST be content anchors, not line numbers. The completion report lists each
|
|
940
|
+
anchor (file:line, old target, new line).
|
|
941
|
+
(줄 수를 바꾸는 위임의 완료 조건에 그 파일을 가리키는 `file:line` 앵커 — basename 전용·
|
|
942
|
+
연속 `:N` 형태 포함 — 의 전수 grep과 재도출 또는 내용 앵커 전환을 넣어야 하며, 생성 파일
|
|
943
|
+
앵커는 줄 번호가 아닌 내용 앵커여야 합니다) (#1884 item 8).
|
|
931
944
|
- No state-changing command (`gh issue create/edit/close`, `gh pr create/edit/close/merge`,
|
|
932
945
|
`git push`, label changes) — including the orchestrator's own direct commands, not only
|
|
933
946
|
delegated ones — MAY use a `||` fallback that prints success-looking output; the observed
|
|
@@ -55,7 +55,7 @@ description: Brief description of what this Skill does and when to use it
|
|
|
55
55
|
|
|
56
56
|
### 위치 인자 `$N` 치환 (#1879)
|
|
57
57
|
|
|
58
|
-
Claude Code 2.1.310에서 스킬을 인자 3개(`alpha beta gamma`)와 함께 호출해 관측한 결과, `SKILL.md` 안의 인자 범위 안의 인덱스(이번 관측 `$0`~`$2`)는 bash 펜스 코드 블록, 큰따옴표, 함수 본문, 산문에서 인자 값으로 치환되었습니다(`"$1"` → `"beta"`). `${1}` 표기는 치환되지 않았고, 두 번째 관측(스킬 도구로 omcustom-feedback을 인자 `alpha beta gamma`와 함께 로드, CC 2.1.310)에서도 `"${1}"`, `[ -f "${1}" ]`, `kind="${2}"`가 리터럴로 남았으므로, 스킬의 셸 코드에서는 위치 매개변수를 `${1}`로 쓰십시오.
|
|
58
|
+
Claude Code 2.1.310에서 스킬을 인자 3개(`alpha beta gamma`)와 함께 호출해 관측한 결과, `SKILL.md` 안의 인자 범위 안의 인덱스(이번 관측 `$0`~`$2`)는 bash 펜스 코드 블록, 큰따옴표, 함수 본문, 산문에서 인자 값으로 치환되었습니다(`"$1"` → `"beta"`). `${1}` 표기는 치환되지 않았고, 두 번째 관측(스킬 도구로 omcustom-feedback을 인자 `alpha beta gamma`와 함께 로드, CC 2.1.310)에서도 `"${1}"`, `[ -f "${1}" ]`, `kind="${2}"`가 리터럴로 남았으므로, 스킬의 셸 코드에서는 위치 매개변수를 `${1}`로 쓰십시오. 범위 밖이 확실한 인덱스는 산문의 `$5`만 관측했고 리터럴로 남았으며, 인자 없는 호출도 치환되지 않았고, `$10`도 3개 인자 호출에서는 리터럴로 남았습니다(한 자리 숫자만 인식하는지는 확정하지 못했습니다 [가설]). 인자가 있는 호출에서는, 인자 6개 이상이면 산문의 `$5` 같은 금액 표기도 같은 규칙으로 치환될 수 있으므로, 금액은 `USD 5`처럼 쓰는 것을 권장합니다.
|
|
59
59
|
|
|
60
60
|
## 사용 가능한 Skills
|
|
61
61
|
|