oh-my-customcode 0.85.0 → 0.86.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 +3 -3
- package/dist/cli/index.js +2 -2
- package/dist/index.js +2 -2
- package/package.json +2 -2
- package/templates/.claude/hooks/hooks.json +10 -0
- package/templates/.claude/hooks/skill-count-reminder.sh +34 -0
- package/templates/.claude/skills/hada-scout/SKILL.md +92 -0
- package/templates/CLAUDE.md +1 -1
- package/templates/manifest.json +2 -2
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
**[한국어 문서 (Korean)](./README_ko.md)**
|
|
15
15
|
|
|
16
|
-
48 agents.
|
|
16
|
+
48 agents. 105 skills. 22 rules. One command.
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
19
|
npm install -g oh-my-customcode && cd your-project && omcustom init
|
|
@@ -132,7 +132,7 @@ Each agent declares its tools, model, memory scope, and limitations in YAML fron
|
|
|
132
132
|
|
|
133
133
|
---
|
|
134
134
|
|
|
135
|
-
### Skills (
|
|
135
|
+
### Skills (105)
|
|
136
136
|
|
|
137
137
|
| Category | Count | Includes |
|
|
138
138
|
|----------|-------|----------|
|
|
@@ -272,7 +272,7 @@ your-project/
|
|
|
272
272
|
├── CLAUDE.md # Entry point
|
|
273
273
|
├── .claude/
|
|
274
274
|
│ ├── agents/ # 48 agent definitions
|
|
275
|
-
│ ├── skills/ #
|
|
275
|
+
│ ├── skills/ # 105 skill modules
|
|
276
276
|
│ ├── rules/ # 22 governance rules (R000-R021)
|
|
277
277
|
│ ├── hooks/ # 15 lifecycle hook scripts
|
|
278
278
|
│ ├── schemas/ # Tool input validation schemas
|
package/dist/cli/index.js
CHANGED
|
@@ -2301,7 +2301,7 @@ var init_package = __esm(() => {
|
|
|
2301
2301
|
workspaces: [
|
|
2302
2302
|
"packages/*"
|
|
2303
2303
|
],
|
|
2304
|
-
version: "0.
|
|
2304
|
+
version: "0.86.1",
|
|
2305
2305
|
description: "Batteries-included agent harness for Claude Code",
|
|
2306
2306
|
type: "module",
|
|
2307
2307
|
bin: {
|
|
@@ -2349,7 +2349,7 @@ var init_package = __esm(() => {
|
|
|
2349
2349
|
yaml: "^2.8.2"
|
|
2350
2350
|
},
|
|
2351
2351
|
devDependencies: {
|
|
2352
|
-
"@anthropic-ai/sdk": "^0.
|
|
2352
|
+
"@anthropic-ai/sdk": "^0.88.0",
|
|
2353
2353
|
"@biomejs/biome": "^2.3.12",
|
|
2354
2354
|
"@types/bun": "^1.3.6",
|
|
2355
2355
|
"@types/js-yaml": "^4.0.9",
|
package/dist/index.js
CHANGED
|
@@ -1974,7 +1974,7 @@ var package_default = {
|
|
|
1974
1974
|
workspaces: [
|
|
1975
1975
|
"packages/*"
|
|
1976
1976
|
],
|
|
1977
|
-
version: "0.
|
|
1977
|
+
version: "0.86.1",
|
|
1978
1978
|
description: "Batteries-included agent harness for Claude Code",
|
|
1979
1979
|
type: "module",
|
|
1980
1980
|
bin: {
|
|
@@ -2022,7 +2022,7 @@ var package_default = {
|
|
|
2022
2022
|
yaml: "^2.8.2"
|
|
2023
2023
|
},
|
|
2024
2024
|
devDependencies: {
|
|
2025
|
-
"@anthropic-ai/sdk": "^0.
|
|
2025
|
+
"@anthropic-ai/sdk": "^0.88.0",
|
|
2026
2026
|
"@biomejs/biome": "^2.3.12",
|
|
2027
2027
|
"@types/bun": "^1.3.6",
|
|
2028
2028
|
"@types/js-yaml": "^4.0.9",
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"workspaces": [
|
|
4
4
|
"packages/*"
|
|
5
5
|
],
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.86.1",
|
|
7
7
|
"description": "Batteries-included agent harness for Claude Code",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"bin": {
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"yaml": "^2.8.2"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@anthropic-ai/sdk": "^0.
|
|
54
|
+
"@anthropic-ai/sdk": "^0.88.0",
|
|
55
55
|
"@biomejs/biome": "^2.3.12",
|
|
56
56
|
"@types/bun": "^1.3.6",
|
|
57
57
|
"@types/js-yaml": "^4.0.9",
|
|
@@ -453,6 +453,16 @@
|
|
|
453
453
|
}
|
|
454
454
|
],
|
|
455
455
|
"description": "Append-only audit log for state-changing tool operations"
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"matcher": "tool == \"Write\" || tool == \"Edit\"",
|
|
459
|
+
"hooks": [
|
|
460
|
+
{
|
|
461
|
+
"type": "command",
|
|
462
|
+
"command": "bash .claude/hooks/skill-count-reminder.sh"
|
|
463
|
+
}
|
|
464
|
+
],
|
|
465
|
+
"description": "Advisory reminder to sync skill counts in 6 locations when a SKILL.md is created/modified (R021)"
|
|
456
466
|
}
|
|
457
467
|
],
|
|
458
468
|
"Stop": [
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# skill-count-reminder.sh — Advisory reminder when skills are created/modified
|
|
3
|
+
# Triggered by PostToolUse on Write/Edit targeting .claude/skills/*/SKILL.md
|
|
4
|
+
# R021: Advisory-only, never blocks (always exit 0)
|
|
5
|
+
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
# Read tool input from stdin
|
|
9
|
+
INPUT=$(cat)
|
|
10
|
+
|
|
11
|
+
# Extract the file path from the tool input
|
|
12
|
+
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // .tool_input.path // ""' 2>/dev/null)
|
|
13
|
+
|
|
14
|
+
# Only trigger for .claude/skills/ paths with SKILL.md
|
|
15
|
+
if [[ "$FILE_PATH" == *".claude/skills/"*"SKILL.md"* ]]; then
|
|
16
|
+
SKILL_NAME=$(echo "$FILE_PATH" | sed 's|.*\.claude/skills/||' | sed 's|/SKILL.md||')
|
|
17
|
+
ACTUAL_COUNT=$(find .claude/skills -name 'SKILL.md' 2>/dev/null | wc -l | tr -d ' ')
|
|
18
|
+
|
|
19
|
+
cat >&2 << EOF
|
|
20
|
+
─── [Skill Sync Reminder] New/modified skill: ${SKILL_NAME} ───
|
|
21
|
+
Current skill count: ${ACTUAL_COUNT}
|
|
22
|
+
|
|
23
|
+
Update these 6 locations before committing:
|
|
24
|
+
1. CLAUDE.md → 스킬 (${ACTUAL_COUNT} 디렉토리)
|
|
25
|
+
2. README.md line ~16 → ${ACTUAL_COUNT} skills
|
|
26
|
+
3. README.md line ~135 → ### Skills (${ACTUAL_COUNT})
|
|
27
|
+
4. README.md line ~275 → # ${ACTUAL_COUNT} skill modules
|
|
28
|
+
5. templates/CLAUDE.md → 스킬 (${ACTUAL_COUNT} 디렉토리)
|
|
29
|
+
6. templates/.claude/skills/${SKILL_NAME}/SKILL.md → copy file
|
|
30
|
+
───────────────────────────────────────────────────────
|
|
31
|
+
EOF
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
exit 0
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hada-scout
|
|
3
|
+
description: hada.io RSS feed monitoring for AI agent/harness articles with automated /scout analysis
|
|
4
|
+
scope: package
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
user-invocable: false
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# hada-scout
|
|
10
|
+
|
|
11
|
+
Automated pipeline that monitors hada.io (via feedburner RSS) for AI agent, harness, benchmark, and eval-related articles, then runs `/scout` analysis on each match.
|
|
12
|
+
|
|
13
|
+
## Purpose
|
|
14
|
+
|
|
15
|
+
Complement geeknews-scout with harness/eval-focused coverage from hada.io. While geeknews-scout casts a broad net over AI agent news, hada-scout narrows to benchmark/evaluation framework content — the domain most relevant to oh-my-customcode's harness and agent-eval subsystems.
|
|
16
|
+
|
|
17
|
+
## Architecture: 2-Layer Hybrid
|
|
18
|
+
|
|
19
|
+
### Layer 1 — check-feed.sh (feed → issues)
|
|
20
|
+
|
|
21
|
+
1. Fetch hada.io feedburner RSS
|
|
22
|
+
2. Filter entries by keyword regex (case-insensitive)
|
|
23
|
+
3. Dedup against existing `hada-scout` issues
|
|
24
|
+
4. Create GitHub issue per match with labels `hada-scout` + `pending-scout`
|
|
25
|
+
|
|
26
|
+
### Layer 2 — scout-runner.sh (issues → /scout)
|
|
27
|
+
|
|
28
|
+
1. Find open issues with `pending-scout` label
|
|
29
|
+
2. Extract source URL from issue body
|
|
30
|
+
3. Run `claude -p "/scout {url}"` (max 5 executions per run)
|
|
31
|
+
4. Parse verdict from /scout output
|
|
32
|
+
5. Apply verdict label, remove `pending-scout`
|
|
33
|
+
|
|
34
|
+
## Keyword Strategy
|
|
35
|
+
|
|
36
|
+
hada-scout uses harness/benchmark/eval focused keywords, distinct from geeknews-scout's broader AI agent coverage:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
harness|benchmark|eval|evaluation framework|agent framework|코드 리뷰 자동화|하네스|벤치마크|평가
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Geeknews-scout handles: `Claude|Anthropic|MCP|AI agent|에이전트|agentic|multi-agent|...`
|
|
43
|
+
|
|
44
|
+
## Label Scheme
|
|
45
|
+
|
|
46
|
+
| Label | Purpose |
|
|
47
|
+
|-------|---------|
|
|
48
|
+
| `hada-scout` | Source identification — all hada-scout created issues |
|
|
49
|
+
| `pending-scout` | Awaiting /scout analysis (set by Layer 1, cleared by Layer 2) |
|
|
50
|
+
| `scout:internalize` | /scout verdict: adopt into project |
|
|
51
|
+
| `scout:integrate` | /scout verdict: use as external dependency |
|
|
52
|
+
| `scout:skip` | /scout verdict: not relevant |
|
|
53
|
+
|
|
54
|
+
## Cost Controls
|
|
55
|
+
|
|
56
|
+
- Layer 2 runs at most **5 /scout executions per cron invocation**
|
|
57
|
+
- Each /scout call costs ~$0.5–1.5 (sonnet)
|
|
58
|
+
- Remaining `pending-scout` issues are processed in the next scheduled run
|
|
59
|
+
|
|
60
|
+
## Deployment
|
|
61
|
+
|
|
62
|
+
- Pattern: same K8s CronJob structure as `infra/geeknews-scout/`
|
|
63
|
+
- Host: `ubuntu-ext` cluster
|
|
64
|
+
- Infrastructure files: `infra/hada-scout/`
|
|
65
|
+
- `check-feed.sh` — Layer 1 feed poller
|
|
66
|
+
- `scout-runner.sh` — Layer 2 /scout executor
|
|
67
|
+
- `Dockerfile`
|
|
68
|
+
- `cronjob.template.yaml`
|
|
69
|
+
- `deploy.sh`
|
|
70
|
+
- `.env.example`
|
|
71
|
+
|
|
72
|
+
## Environment Variables
|
|
73
|
+
|
|
74
|
+
| Variable | Default | Description |
|
|
75
|
+
|----------|---------|-------------|
|
|
76
|
+
| `GH_TOKEN` | (required) | GitHub PAT for issue creation |
|
|
77
|
+
| `REPO` | `baekenough/oh-my-customcode` | Target repo |
|
|
78
|
+
| `FEED_URL` | `http://feeds.feedburner.com/geeknews-feed` | hada.io RSS feed |
|
|
79
|
+
| `KEYWORDS` | (see above) | Pipe-separated keyword regex |
|
|
80
|
+
| `MAX_SCOUT_PER_RUN` | `5` | Max /scout executions per Layer 2 run |
|
|
81
|
+
|
|
82
|
+
## Integration
|
|
83
|
+
|
|
84
|
+
| Rule | How |
|
|
85
|
+
|------|-----|
|
|
86
|
+
| R009 | Layer 1 and Layer 2 run as independent CronJobs |
|
|
87
|
+
| R010 | Skill defines the architecture; implementation delegated to infra-docker-expert for K8s manifests |
|
|
88
|
+
| scout skill | Layer 2 invokes `/scout` via `claude -p` subprocess |
|
|
89
|
+
|
|
90
|
+
## Tracking Issue
|
|
91
|
+
|
|
92
|
+
GitHub Issue #841
|
package/templates/CLAUDE.md
CHANGED
|
@@ -157,7 +157,7 @@ project/
|
|
|
157
157
|
+-- CLAUDE.md # 진입점
|
|
158
158
|
+-- .claude/
|
|
159
159
|
| +-- agents/ # 서브에이전트 정의 (48 파일)
|
|
160
|
-
| +-- skills/ # 스킬 (
|
|
160
|
+
| +-- skills/ # 스킬 (105 디렉토리)
|
|
161
161
|
| +-- rules/ # 전역 규칙 (R000-R022)
|
|
162
162
|
| +-- hooks/ # 훅 스크립트 (보안, 검증, HUD)
|
|
163
163
|
| +-- contexts/ # 컨텍스트 파일 (ecomode)
|
package/templates/manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.86.1",
|
|
3
3
|
"lastUpdated": "2026-04-13T00:00:00.000Z",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"name": "skills",
|
|
19
19
|
"path": ".claude/skills",
|
|
20
20
|
"description": "Reusable skill modules (includes slash commands)",
|
|
21
|
-
"files":
|
|
21
|
+
"files": 105
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
"name": "guides",
|