oh-my-customcode 0.175.0 → 0.177.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.
- package/dist/cli/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/templates/.claude/rules/MAY-optimization.md +2 -0
- package/templates/.claude/rules/MUST-completion-verification.md +18 -0
- package/templates/.claude/rules/MUST-intent-transparency.md +15 -0
- package/templates/.claude/rules/MUST-safety.md +19 -0
- package/templates/.claude/rules/MUST-tool-identification.md +13 -1
- package/templates/manifest.json +1 -1
package/dist/cli/index.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
> **Tool-availability assumption (#1307 찐빠 #3)**: On first exploration, do NOT assume a tool (e.g., `Glob`) is available without confirming. Prefer `Bash` (`find`/`grep`) for initial search when the available-tool set is unconfirmed, to avoid "No such tool available" round-trips.
|
|
14
14
|
|
|
15
|
+
> **Platform tool variants (#1327 찐빠 #5)**: tool names differ by platform — e.g., macOS lacks GNU `timeout` (use `gtimeout` from coreutils). Confirm platform-specific tool availability before use.
|
|
16
|
+
|
|
15
17
|
### Capability-Aware Tool Scheduling
|
|
16
18
|
|
|
17
19
|
When dispatching parallel tool calls, consider per-tool capabilities to optimize scheduling:
|
|
@@ -96,6 +96,10 @@ Never accept "pre-existing" without direct base-branch evidence. A false "pre-ex
|
|
|
96
96
|
| "UI changes done" / "CSS updated" | type-check passes but browser render not verified; visual output unknown | Start dev server, open browser, confirm visual output; capture screenshot or describe what was seen |
|
|
97
97
|
-->
|
|
98
98
|
|
|
99
|
+
### Tool-Call Payload Completeness
|
|
100
|
+
|
|
101
|
+
도구 호출의 required 파라미터는 invoke 전에 확인한다(완료 선언 후가 아니라 호출 시점의 전제조건). announce(prefix)만 출력하고 payload 의 required 필드를 누락하는 패턴은 R008 "Required-Parameter Completeness Check"가 canonical owner다. Reference: #1324.
|
|
102
|
+
|
|
99
103
|
## Completion Contract Format — [Contract] + [Done] with criterion/evidence pairs. See template via Read tool.
|
|
100
104
|
|
|
101
105
|
<!-- DETAIL: Completion Contract Format
|
|
@@ -209,6 +213,20 @@ Session 108에서 `auto-dev.yaml` 4곳을 canonical 통일할 때, repo-root `./
|
|
|
209
213
|
|
|
210
214
|
Origin: #1290 (session 109 retrospective).
|
|
211
215
|
|
|
216
|
+
### Config-Schema-Before-Edit
|
|
217
|
+
|
|
218
|
+
> Origin: #1327 찐빠 #2 — a provider switch (to DeepSeek) planned a 3-command edit (auth + provider + default) but omitted `base_url`, which stayed pointed at the previous provider (openrouter.ai) — traffic would have mis-routed. The config's base_url override-precedence was never read before planning the edits.
|
|
219
|
+
|
|
220
|
+
Before planning edits to a configuration (provider switch, endpoint/base_url override, credential injection, multi-key precedence), READ the full config schema and its override-precedence chain first. Do NOT plan partial edits before understanding which fields override which.
|
|
221
|
+
|
|
222
|
+
This applies when a change touches a field that participates in an override/precedence/inheritance chain (e.g. provider + base_url, multi-key fallback, layered defaults). A single independent field edit (flip a flag, bump a timeout) does NOT require a full-schema read.
|
|
223
|
+
|
|
224
|
+
| Anti-pattern | Required |
|
|
225
|
+
|--------------|----------|
|
|
226
|
+
| Plan a provider/endpoint switch as N commands without reading the config's override chain | Read the full config schema (which field wins, defaults, inheritance) → enumerate EVERY field the switch touches (incl. base_url) → then plan |
|
|
227
|
+
|
|
228
|
+
Sibling discipline to Read-Before-Characterize (that rule governs diagnosis — don't label before reading; this one governs edit-planning completeness — enumerate every interdependent field before editing). Cross-ref: R023 (verification ladder — config completeness is a Tier-1 deterministic pre-check).
|
|
229
|
+
|
|
212
230
|
### Degraded-Output Re-Verification Gate (529 / buffering)
|
|
213
231
|
|
|
214
232
|
When tool outputs show degradation signs — 529 errors, duplicated or truncated output, or a Read returning empty on a file that is known non-empty — you MUST re-verify any fact via a deterministic second source BEFORE any destructive or permanent action (recovery-agent dispatch, issue edit, commit, file restore). Do NOT characterize state ("corruption", "오염", "loop") from a single degraded read.
|
|
@@ -122,6 +122,21 @@ The Git Push Continuation pattern (first-time strict / follow-up relaxed, scoped
|
|
|
122
122
|
|
|
123
123
|
Cross-references: R001 (safety — destructive operation pre-checks still apply), R002 (permission tiers). Reference issues: #1230, #1226 (item 2).
|
|
124
124
|
|
|
125
|
+
## User-Provided Input Precedence
|
|
126
|
+
|
|
127
|
+
> Origin: #1327 찐빠 #1 — the user created a NEW GitHub OAuth App and provided fresh credentials, but a script's "reuse existing github IdP if present" logic kept the OLD IdP/client_id, so login flowed through the stale credential. The freshly-provided input was silently ignored.
|
|
128
|
+
|
|
129
|
+
When the user EXPLICITLY provides new input (credentials, config values, IdP, API keys, endpoints), applying that new input takes precedence over idempotent "reuse existing" logic. After applying, VERIFY the change took effect — but compare ONLY non-secret identifiers (client_id, endpoint URL, key fingerprint/last-4), NEVER echo secret values into the transcript (R001). For secret material, verify via a side-effect probe (e.g., a test auth call succeeds) rather than value comparison.
|
|
130
|
+
|
|
131
|
+
| Anti-pattern | Required |
|
|
132
|
+
|--------------|----------|
|
|
133
|
+
| "An existing X is present → reuse it" when the user just supplied a new X | Apply the user-supplied X; treat reuse-logic as a fallback only when the user supplied nothing |
|
|
134
|
+
| User-supplied X EQUALS the existing X | Reuse is correct (idempotent no-op) — do NOT re-provision |
|
|
135
|
+
| User supplies only a SUBSET of fields | Apply the supplied fields; reuse existing values only for the unsupplied fields |
|
|
136
|
+
| Apply new credential, assume it took effect | Verify post-apply via non-secret identifier match or a side-effect probe — never echo secret values (R001) |
|
|
137
|
+
|
|
138
|
+
Cross-reference: R001 (credential guardrails — never echo secret values), R020 (verify actual outcome).
|
|
139
|
+
|
|
125
140
|
## Agent Triggers
|
|
126
141
|
|
|
127
142
|
Defined in `.claude/skills/intent-detection/patterns/agent-triggers.yaml`. Each agent has keywords, file patterns, actions, and base confidence.
|
|
@@ -40,6 +40,23 @@ Before delegating ANY destructive git command (the table above), the orchestrato
|
|
|
40
40
|
|
|
41
41
|
Enumerate ALL affected work — intended uncommitted edits (rule changes, new skills/guides) count too, not just the symptom the user named. Prefer a non-destructive alternative (`git stash`) when the user's goal (e.g., "reach remote state") can be met without permanent loss.
|
|
42
42
|
|
|
43
|
+
### Infra/Resource Deletion Blast-Radius (generalized)
|
|
44
|
+
|
|
45
|
+
> Origin: #1327 찐빠 #3 — a Cloudflare tunnel was deleted after confirming only the user-named hostname (hermes.baekenough.com) + active-connection=0; the full set of DNS records / endpoints the tunnel served was never enumerated.
|
|
46
|
+
|
|
47
|
+
The git blast-radius enumeration above generalizes to ALL infra/resource deletion (tunnels, DNS records, k8s resources, load balancers, security groups). Before deleting a shared infra resource, enumerate EVERY endpoint/hostname/route the resource serves — not just the one the user named.
|
|
48
|
+
|
|
49
|
+
| Resource | Enumerate before delete |
|
|
50
|
+
|----------|-------------------------|
|
|
51
|
+
| Tunnel (cloudflared, etc.) | All hostnames/DNS records routed through the tunnel (`cloudflared tunnel info` + full DNS record scan), not just the named hostname |
|
|
52
|
+
| DNS record / zone | All services resolving via the record |
|
|
53
|
+
| k8s resource (Service, Ingress, etc.) | All selectors/endpoints/routes it backs |
|
|
54
|
+
| Load balancer / Security group | All targets/rules attached |
|
|
55
|
+
|
|
56
|
+
Present the full served-endpoint list for explicit approval before deletion. Active-connection=0 on one hostname does NOT prove the resource is unused by others.
|
|
57
|
+
|
|
58
|
+
Prefer a reversible action (disable/detach/stop) over delete when the goal can be met without permanent teardown — infra deletions (tunnel/DNS/k8s) are frequently NOT recoverable. Note whether the deletion is recoverable before proceeding.
|
|
59
|
+
|
|
43
60
|
## Credential & Privileged-Scope Guardrails
|
|
44
61
|
|
|
45
62
|
> Origin: #1266 ① (Critical) — a subagent dumped `.env` and Gmail OAuth credentials into the transcript (Credential Exploration) and ran an unauthorized credential-rotation flow that caused a dashboard data outage.
|
|
@@ -51,6 +68,8 @@ Enumerate ALL affected work — intended uncommitted edits (rule changes, new sk
|
|
|
51
68
|
| Chaining an approved privileged action into adjacent unrequested ones | Each privileged op requires its own authorization trace |
|
|
52
69
|
| Irreversible shared-infra action (prod pod exec, shared-ns secret delete, tunnel create) without scope re-confirmation | Re-confirm scope with the user before irreversible / shared-infra actions |
|
|
53
70
|
|
|
71
|
+
> **Ask-before-scan (#1327 찐빠 #4)**: When a credential/token is needed, request it from the user BEFORE running BLIND/DISCOVERY credential scans (`env | grep`, repo-wide token greps), which trip the Credential Exploration classifier. Reading a SPECIFIC file the user named to obtain a value is not a discovery scan and is fine. If a scan trips the classifier, do not retry it (R010 Subagent Scope-Creep STOP Protocol).
|
|
72
|
+
|
|
54
73
|
Cross-reference: R010 Subagent Scope-Creep STOP Protocol, R002 (permission tiers).
|
|
55
74
|
|
|
56
75
|
## Required Before Destructive Operations
|
|
@@ -31,6 +31,17 @@ Incorrect parallel: tool_call(url1), tool_call(url2), tool_call(cmd) — no iden
|
|
|
31
31
|
Correct parallel: list ALL [agent][model] → Tool/Fetching/Running lines FIRST, then all tool_calls
|
|
32
32
|
-->
|
|
33
33
|
|
|
34
|
+
### Required-Parameter Completeness Check
|
|
35
|
+
|
|
36
|
+
R008 prefix(announce)와 실제 도구 호출은 분리된 단계다. prefix 를 출력한 뒤 호출 payload 에서 도구 스키마상 required 파라미터를 누락하면 호출이 실패하거나 빈 동작이 된다. 호출 직전, prefix 존재뿐 아니라 required 파라미터가 모두 채워졌는지 확인한다.
|
|
37
|
+
|
|
38
|
+
| Anti-pattern | Required |
|
|
39
|
+
|--------------|----------|
|
|
40
|
+
| `[agent][model] → Tool: AskUserQuestion` prefix 만 출력하고 `questions` 파라미터 없이/빈 배열로 호출 | prefix + `questions` 배열(최소 1개) 모두 채워 호출 |
|
|
41
|
+
| announce 후 payload 의 required 필드 누락 (announce-payload separation gap) | announce 와 동일 메시지에서 required 필드 완비 호출 |
|
|
42
|
+
|
|
43
|
+
Cross-reference: R020 (action-completeness precondition — invoke 전에 required 파라미터 확인). Reference issue: #1324 (찐빠: AskUserQuestion `questions`-missing recurrence).
|
|
44
|
+
|
|
34
45
|
## Models
|
|
35
46
|
|
|
36
47
|
| Model | Use |
|
|
@@ -117,8 +128,9 @@ Agent(description: "[2] Python code review", subagent_type: "lang-python-expert"
|
|
|
117
128
|
|
|
118
129
|
1. 이 호출 위에 `[agent-name][model] → Tool: <tool-name>` 라인이 있는가?
|
|
119
130
|
2. agent-name 과 model 이 현재 컨텍스트와 일치하는가?
|
|
131
|
+
3. 이 호출에 도구 스키마상 required 파라미터가 모두 채워져 있는가? (예: AskUserQuestion 는 `questions` 배열이 비어 있지 않아야 함) prefix(announce)만 출력하고 실제 호출 payload 의 required 필드를 누락하면 안 된다.
|
|
120
132
|
|
|
121
|
-
체크 실패 시 즉시 prefix
|
|
133
|
+
체크 실패 시 즉시 prefix/필수 파라미터를 보완한 후 호출.
|
|
122
134
|
|
|
123
135
|
### Common Multi-Turn Violation
|
|
124
136
|
|
package/templates/manifest.json
CHANGED