oh-my-customcode 0.45.3 → 0.46.1
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
CHANGED
|
@@ -21,17 +21,17 @@ npm install -g oh-my-customcode && cd your-project && omcustom init
|
|
|
21
21
|
|
|
22
22
|
---
|
|
23
23
|
|
|
24
|
-
## What's New in v0.
|
|
24
|
+
## What's New in v0.46.0
|
|
25
25
|
|
|
26
26
|
| Feature | Description |
|
|
27
27
|
|---------|-------------|
|
|
28
|
-
| **
|
|
29
|
-
| **
|
|
30
|
-
|
|
|
31
|
-
| **
|
|
32
|
-
| **CC v2.1.72~v2.1.
|
|
33
|
-
| **
|
|
34
|
-
| **
|
|
28
|
+
| **Rate Limit Monitoring** | Statusline now displays 5-hour rate limit usage with color-coded warnings (CC v2.1.80+) |
|
|
29
|
+
| **Skill Effort Override** | Skills can set `effort` frontmatter to override model effort level at invocation time |
|
|
30
|
+
| **Multi-project Web UI** | `omcustom serve` supports multi-project management with sidebar project selector |
|
|
31
|
+
| **Batch Update UI** | Web dashboard supports visual project update status and batch updates |
|
|
32
|
+
| **CC v2.1.72~v2.1.80 Compatibility** | Rate limits statusline, skill effort frontmatter, settings-based plugin source |
|
|
33
|
+
| **SDD Workflow** | Spec-Driven Development with `sdd/` folder hierarchy and planning-first gates |
|
|
34
|
+
| **Ambiguity Gate** | Pre-routing clarity scoring and clarification questions |
|
|
35
35
|
|
|
36
36
|
---
|
|
37
37
|
|
|
@@ -170,6 +170,9 @@ All commands are invoked inside the Claude Code conversation.
|
|
|
170
170
|
| `/structured-dev-cycle` | 6-stage development: plan → verify → implement → verify → compound → done |
|
|
171
171
|
| `/deep-plan` | Research-validated planning |
|
|
172
172
|
| `/research` | 10-team parallel analysis with cross-verification |
|
|
173
|
+
| `/sdd-dev` | Spec-Driven Development workflow |
|
|
174
|
+
| `/ambiguity-gate` | Pre-routing ambiguity analysis |
|
|
175
|
+
| `/adversarial-review` | Attacker-mindset security code review |
|
|
173
176
|
|
|
174
177
|
### Agent Management
|
|
175
178
|
|
|
@@ -181,6 +184,13 @@ All commands are invoked inside the Claude Code conversation.
|
|
|
181
184
|
| `/omcustom:audit-agents` | Audit agent dependencies |
|
|
182
185
|
| `/omcustom:update-docs` | Sync project structure and documentation |
|
|
183
186
|
| `/omcustom:sauron-watch` | Full structural verification (5+3 rounds) |
|
|
187
|
+
| `/omcustom:feedback` | Submit feedback as GitHub issue |
|
|
188
|
+
|
|
189
|
+
### Web UI
|
|
190
|
+
|
|
191
|
+
| Command | What it does |
|
|
192
|
+
|---------|-------------|
|
|
193
|
+
| `/omcustom:web` | Control built-in Web UI (start, stop, status, open) |
|
|
184
194
|
|
|
185
195
|
### Package & Release
|
|
186
196
|
|
|
@@ -230,7 +240,7 @@ oh-my-customcode includes security and lifecycle hooks:
|
|
|
230
240
|
| secret-filter | Bash, Read output | Detects AWS keys, API tokens, private keys, bearer tokens |
|
|
231
241
|
| audit-log | Edit, Write, Bash, Agent | Append-only JSONL at `~/.claude/audit.jsonl` |
|
|
232
242
|
| schema-validator | Write, Edit, Bash input | Validates tool inputs, flags dangerous patterns |
|
|
233
|
-
| PostCompact | Context compaction | Reinjects enforced rules (R007–R018) — prevents rule amnesia |
|
|
243
|
+
| PostCompact | Context compaction | Reinjects enforced rules (R007–R018, R021) — prevents rule amnesia |
|
|
234
244
|
|
|
235
245
|
Security hooks are advisory (exit 0). They warn but never block.
|
|
236
246
|
|
|
@@ -246,6 +256,10 @@ omcustom list # List components
|
|
|
246
256
|
omcustom doctor # Verify installation
|
|
247
257
|
omcustom doctor --fix # Auto-fix issues
|
|
248
258
|
omcustom security # Scan for security issues
|
|
259
|
+
omcustom projects # List managed projects with version status
|
|
260
|
+
omcustom update --all # Batch update all outdated projects
|
|
261
|
+
omcustom serve # Start built-in Web UI
|
|
262
|
+
omcustom serve-stop # Stop Web UI
|
|
249
263
|
```
|
|
250
264
|
|
|
251
265
|
---
|
|
@@ -257,7 +271,7 @@ your-project/
|
|
|
257
271
|
├── CLAUDE.md # Entry point
|
|
258
272
|
├── .claude/
|
|
259
273
|
│ ├── agents/ # 45 agent definitions
|
|
260
|
-
│ ├── skills/ #
|
|
274
|
+
│ ├── skills/ # 82 skill modules
|
|
261
275
|
│ ├── rules/ # 21 governance rules (R000-R021)
|
|
262
276
|
│ ├── hooks/ # 15 lifecycle hook scripts
|
|
263
277
|
│ ├── schemas/ # Tool input validation schemas
|
package/dist/cli/index.js
CHANGED
|
@@ -9323,7 +9323,7 @@ var init_package = __esm(() => {
|
|
|
9323
9323
|
package_default = {
|
|
9324
9324
|
name: "oh-my-customcode",
|
|
9325
9325
|
workspaces: ["packages/*"],
|
|
9326
|
-
version: "0.
|
|
9326
|
+
version: "0.46.1",
|
|
9327
9327
|
description: "Batteries-included agent harness for Claude Code",
|
|
9328
9328
|
type: "module",
|
|
9329
9329
|
bin: {
|
|
@@ -9347,7 +9347,7 @@ var init_package = __esm(() => {
|
|
|
9347
9347
|
},
|
|
9348
9348
|
scripts: {
|
|
9349
9349
|
dev: "bun run src/cli/index.ts",
|
|
9350
|
-
build: "bun build src/cli/index.ts --outdir dist/cli --target node && bun build src/index.ts --outdir dist --target node",
|
|
9350
|
+
build: "bun build src/cli/index.ts --outdir dist/cli --target node && bun build src/index.ts --outdir dist --target node && bun run scripts/sync-source-lockfile.ts",
|
|
9351
9351
|
test: "bun test",
|
|
9352
9352
|
"test:unit": "bun test tests/unit",
|
|
9353
9353
|
"test:integration": "bun test tests/integration",
|
|
@@ -27776,7 +27776,7 @@ async function startServeBackground(projectRoot, port = DEFAULT_PORT) {
|
|
|
27776
27776
|
OMCUSTOM_PORT: String(port),
|
|
27777
27777
|
OMCUSTOM_HOST: "localhost",
|
|
27778
27778
|
OMCUSTOM_ORIGIN: `http://localhost:${port}`,
|
|
27779
|
-
|
|
27779
|
+
OMX_PROJECT_ROOT: projectRoot
|
|
27780
27780
|
},
|
|
27781
27781
|
stdio: "ignore",
|
|
27782
27782
|
detached: true
|
|
@@ -29702,7 +29702,7 @@ function runForeground(projectRoot, port) {
|
|
|
29702
29702
|
OMCUSTOM_PORT: String(port),
|
|
29703
29703
|
OMCUSTOM_HOST: "localhost",
|
|
29704
29704
|
OMCUSTOM_ORIGIN: `http://localhost:${port}`,
|
|
29705
|
-
|
|
29705
|
+
OMX_PROJECT_ROOT: projectRoot
|
|
29706
29706
|
},
|
|
29707
29707
|
stdio: "inherit"
|
|
29708
29708
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-customcode",
|
|
3
3
|
"workspaces": ["packages/*"],
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.46.1",
|
|
5
5
|
"description": "Batteries-included agent harness for Claude Code",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
27
|
"dev": "bun run src/cli/index.ts",
|
|
28
|
-
"build": "bun build src/cli/index.ts --outdir dist/cli --target node && bun build src/index.ts --outdir dist --target node",
|
|
28
|
+
"build": "bun build src/cli/index.ts --outdir dist/cli --target node && bun build src/index.ts --outdir dist --target node && bun run scripts/sync-source-lockfile.ts",
|
|
29
29
|
"test": "bun test",
|
|
30
30
|
"test:unit": "bun test tests/unit",
|
|
31
31
|
"test:integration": "bun test tests/integration",
|
|
@@ -167,8 +167,11 @@ context: fork # Forked context for isolated execution
|
|
|
167
167
|
version: 1.0.0 # Semantic version
|
|
168
168
|
user-invocable: false # Whether user can invoke directly
|
|
169
169
|
disable-model-invocation: true # Prevent model from auto-invoking
|
|
170
|
+
effort: medium # low | medium | high — overrides model effort level when invoked
|
|
170
171
|
```
|
|
171
172
|
|
|
173
|
+
When both an agent and its invoked skill specify `effort`, the skill's value takes precedence (more specific invocation-time setting).
|
|
174
|
+
|
|
172
175
|
### Skill Effectiveness Tracking
|
|
173
176
|
|
|
174
177
|
Skills can optionally track effectiveness metrics via auto-populated fields:
|
|
@@ -41,10 +41,10 @@ Implemented in `.claude/hooks/hooks.json` (PreToolUse → Agent/Task matcher).
|
|
|
41
41
|
### Format
|
|
42
42
|
|
|
43
43
|
```
|
|
44
|
-
{Cost} | {project} | {branch} | CTX:{usage}%
|
|
44
|
+
{Cost} | {project} | {branch} | RL:{rate_limit}% | CTX:{usage}%
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
Example: `$0.05 | my-project | develop | CTX:42%`
|
|
47
|
+
Example: `$0.05 | my-project | develop | RL:45% | CTX:42%`
|
|
48
48
|
|
|
49
49
|
### Configuration
|
|
50
50
|
|
|
@@ -58,7 +58,7 @@ Example: `$0.05 | my-project | develop | CTX:42%`
|
|
|
58
58
|
}
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
Set in `.claude/settings.local.json`. The command receives JSON via stdin with model, workspace, context window, and
|
|
61
|
+
Set in `.claude/settings.local.json`. The command receives JSON via stdin with model, workspace, context window, cost, and rate limit data.
|
|
62
62
|
|
|
63
63
|
### Color Coding
|
|
64
64
|
|
|
@@ -67,10 +67,15 @@ Set in `.claude/settings.local.json`. The command receives JSON via stdin with m
|
|
|
67
67
|
| Cost | < $1.00 | Green |
|
|
68
68
|
| Cost | $1.00 - $4.99 | Yellow |
|
|
69
69
|
| Cost | >= $5.00 | Red |
|
|
70
|
+
| Rate Limit | < 50% | Green |
|
|
71
|
+
| Rate Limit | 50-79% | Yellow |
|
|
72
|
+
| Rate Limit | >= 80% | Red |
|
|
70
73
|
| Context | < 60% | Green |
|
|
71
74
|
| Context | 60-79% | Yellow |
|
|
72
75
|
| Context | >= 80% | Red |
|
|
73
76
|
|
|
77
|
+
The `RL:{rate_limit}%` segment only appears when Claude Code v2.1.80+ provides `rate_limits` data. On older versions, this segment is omitted.
|
|
78
|
+
|
|
74
79
|
## Integration
|
|
75
80
|
|
|
76
81
|
Integrates with R007 (Agent ID), R008 (Tool ID), R009 (Parallel).
|
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
# "model": { "display_name": "claude-opus-4-6" },
|
|
12
12
|
# "workspace": { "current_dir": "/path/to/project" },
|
|
13
13
|
# "context_window": { "used_percentage": 42, "context_window_size": 200000 },
|
|
14
|
-
# "cost": { "total_cost_usd": 0.05 }
|
|
14
|
+
# "cost": { "total_cost_usd": 0.05 },
|
|
15
|
+
# "rate_limits": { (v2.1.80+, optional)
|
|
16
|
+
# "five_hour": { "used_percentage": 10, "resets_at": 1773979200 },
|
|
17
|
+
# "seven_day": { "used_percentage": 90, "resets_at": 1773979200 }
|
|
18
|
+
# }
|
|
15
19
|
# }
|
|
16
20
|
|
|
17
21
|
# ---------------------------------------------------------------------------
|
|
@@ -27,13 +31,13 @@ if [[ -n "${NO_COLOR}" || "${TERM}" == "dumb" ]]; then
|
|
|
27
31
|
COLOR_CTX_WARN=""
|
|
28
32
|
COLOR_CTX_CRIT=""
|
|
29
33
|
else
|
|
30
|
-
COLOR_RESET
|
|
31
|
-
COLOR_OPUS
|
|
32
|
-
COLOR_SONNET
|
|
33
|
-
COLOR_HAIKU
|
|
34
|
-
COLOR_CTX_OK
|
|
35
|
-
COLOR_CTX_WARN
|
|
36
|
-
COLOR_CTX_CRIT
|
|
34
|
+
COLOR_RESET=$'\033[0m'
|
|
35
|
+
COLOR_OPUS=$'\033[1;35m' # Magenta bold
|
|
36
|
+
COLOR_SONNET=$'\033[0;36m' # Cyan
|
|
37
|
+
COLOR_HAIKU=$'\033[0;32m' # Green
|
|
38
|
+
COLOR_CTX_OK=$'\033[0;32m' # Green (< 60%)
|
|
39
|
+
COLOR_CTX_WARN=$'\033[0;33m' # Yellow (60-79%)
|
|
40
|
+
COLOR_CTX_CRIT=$'\033[0;31m' # Red (>= 80%)
|
|
37
41
|
fi
|
|
38
42
|
|
|
39
43
|
# ---------------------------------------------------------------------------
|
|
@@ -57,15 +61,16 @@ fi
|
|
|
57
61
|
|
|
58
62
|
# ---------------------------------------------------------------------------
|
|
59
63
|
# 4. Single jq call — extract all fields as TSV
|
|
60
|
-
# Fields: model_name, project_dir, ctx_pct, ctx_size, cost_usd
|
|
64
|
+
# Fields: model_name, project_dir, ctx_pct, ctx_size, cost_usd, rl_5h_pct
|
|
61
65
|
# ---------------------------------------------------------------------------
|
|
62
|
-
IFS=$'\t' read -r model_name project_dir ctx_pct ctx_size cost_usd <<< "$(
|
|
66
|
+
IFS=$'\t' read -r model_name project_dir ctx_pct ctx_size cost_usd rl_5h_pct <<< "$(
|
|
63
67
|
printf '%s' "$json" | jq -r '[
|
|
64
68
|
(.model.display_name // "unknown"),
|
|
65
69
|
(.workspace.current_dir // ""),
|
|
66
70
|
(.context_window.used_percentage // 0),
|
|
67
71
|
(.context_window.context_window_size // 0),
|
|
68
|
-
(.cost.total_cost_usd // 0)
|
|
72
|
+
(.cost.total_cost_usd // 0),
|
|
73
|
+
(.rate_limits.five_hour.used_percentage // -1)
|
|
69
74
|
] | @tsv'
|
|
70
75
|
)"
|
|
71
76
|
|
|
@@ -73,7 +78,7 @@ IFS=$'\t' read -r model_name project_dir ctx_pct ctx_size cost_usd <<< "$(
|
|
|
73
78
|
# 4b. Cost & context data bridge — write to temp file for hooks
|
|
74
79
|
# ---------------------------------------------------------------------------
|
|
75
80
|
COST_BRIDGE_FILE="/tmp/.claude-cost-${PPID}"
|
|
76
|
-
printf '%s\t%s\t%s\n' "$cost_usd" "$ctx_pct" "$(date +%s)" > "$COST_BRIDGE_FILE" 2>/dev/null || true
|
|
81
|
+
printf '%s\t%s\t%s\t%s\n' "$cost_usd" "$ctx_pct" "$(date +%s)" "$rl_5h_pct" > "$COST_BRIDGE_FILE" 2>/dev/null || true
|
|
77
82
|
|
|
78
83
|
# ---------------------------------------------------------------------------
|
|
79
84
|
# 5. Model display name + color (bash 3.2 compatible case pattern matching)
|
|
@@ -236,6 +241,29 @@ fi
|
|
|
236
241
|
|
|
237
242
|
ctx_display="CTX:${ctx_int}%"
|
|
238
243
|
|
|
244
|
+
# ---------------------------------------------------------------------------
|
|
245
|
+
# 9b. Rate limit percentage with color (v2.1.80+, optional)
|
|
246
|
+
# ---------------------------------------------------------------------------
|
|
247
|
+
rl_display=""
|
|
248
|
+
rl_color=""
|
|
249
|
+
# rl_5h_pct is -1 when rate_limits field is absent (pre-v2.1.80 compatibility)
|
|
250
|
+
rl_5h_int="${rl_5h_pct%%.*}"
|
|
251
|
+
# Ensure it's a valid integer (fallback to -1)
|
|
252
|
+
if ! [[ "$rl_5h_int" =~ ^-?[0-9]+$ ]]; then
|
|
253
|
+
rl_5h_int=-1
|
|
254
|
+
fi
|
|
255
|
+
|
|
256
|
+
if [[ "$rl_5h_int" -ge 0 ]]; then
|
|
257
|
+
rl_display="RL:${rl_5h_int}%"
|
|
258
|
+
if [[ "$rl_5h_int" -ge 80 ]]; then
|
|
259
|
+
rl_color="${COLOR_CTX_CRIT}" # Red (>= 80%)
|
|
260
|
+
elif [[ "$rl_5h_int" -ge 50 ]]; then
|
|
261
|
+
rl_color="${COLOR_CTX_WARN}" # Yellow (50-79%)
|
|
262
|
+
else
|
|
263
|
+
rl_color="${COLOR_CTX_OK}" # Green (< 50%)
|
|
264
|
+
fi
|
|
265
|
+
fi
|
|
266
|
+
|
|
239
267
|
# ---------------------------------------------------------------------------
|
|
240
268
|
# 10. Assemble and output the status line
|
|
241
269
|
# ---------------------------------------------------------------------------
|
|
@@ -253,17 +281,25 @@ if [[ -n "$pr_display" ]]; then
|
|
|
253
281
|
pr_segment=" | ${pr_display}"
|
|
254
282
|
fi
|
|
255
283
|
|
|
284
|
+
# Build the RL segment (with separator) if present
|
|
285
|
+
rl_segment=""
|
|
286
|
+
if [[ -n "$rl_display" ]]; then
|
|
287
|
+
rl_segment=" | ${rl_color}${rl_display}${COLOR_RESET}"
|
|
288
|
+
fi
|
|
289
|
+
|
|
256
290
|
if [[ -n "$git_branch" ]]; then
|
|
257
|
-
printf "${cost_color}%s${COLOR_RESET} | %s | %s%s | ${ctx_color}%s${COLOR_RESET}\n" \
|
|
291
|
+
printf "${cost_color}%s${COLOR_RESET} | %s | %s%s%s | ${ctx_color}%s${COLOR_RESET}\n" \
|
|
258
292
|
"$cost_display" \
|
|
259
293
|
"$project_name" \
|
|
260
294
|
"$branch_display" \
|
|
261
295
|
"$pr_segment" \
|
|
296
|
+
"$rl_segment" \
|
|
262
297
|
"$ctx_display"
|
|
263
298
|
else
|
|
264
|
-
printf "${cost_color}%s${COLOR_RESET} | %s%s | ${ctx_color}%s${COLOR_RESET}\n" \
|
|
299
|
+
printf "${cost_color}%s${COLOR_RESET} | %s%s%s | ${ctx_color}%s${COLOR_RESET}\n" \
|
|
265
300
|
"$cost_display" \
|
|
266
301
|
"$project_name" \
|
|
267
302
|
"$pr_segment" \
|
|
303
|
+
"$rl_segment" \
|
|
268
304
|
"$ctx_display"
|
|
269
305
|
fi
|
package/templates/manifest.json
CHANGED