@neikyun/ciel 6.11.3 → 6.13.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.
Files changed (125) hide show
  1. package/assets/.claude/agents/ciel-critic.md +71 -12
  2. package/assets/.claude/agents/ciel-explorer.md +59 -18
  3. package/assets/.claude/agents/ciel-improver.md +6 -3
  4. package/assets/.claude/agents/ciel-researcher.md +85 -25
  5. package/assets/.claude/hooks/block-destructive.sh +2 -2
  6. package/assets/.claude/hooks/check-test-first.sh +2 -2
  7. package/assets/.claude/hooks/memory-bootstrap.sh +0 -0
  8. package/assets/.claude/hooks/memory-engine.py +82 -15
  9. package/assets/.claude/hooks/post-tool-write.sh +32 -0
  10. package/assets/.claude/hooks/pre-agent-gate.sh +11 -6
  11. package/assets/.claude/hooks/pre-compact.sh +18 -0
  12. package/assets/.claude/hooks/pre-tool-write.sh +56 -31
  13. package/assets/.claude/hooks/session-start.sh +22 -1
  14. package/assets/.claude/hooks/session-version-check.sh +1 -1
  15. package/assets/.claude/hooks/stop.sh +104 -0
  16. package/assets/.claude/hooks/subagent-stop.sh +54 -0
  17. package/assets/.claude/hooks/track-file.sh +2 -2
  18. package/assets/.claude/hooks/user-prompt-submit.sh +11 -15
  19. package/assets/.claude/settings.json +18 -4
  20. package/assets/AGENTS.md +1 -1
  21. package/assets/CLAUDE.md +103 -175
  22. package/assets/commands/ciel-audit.md +58 -399
  23. package/assets/commands/ciel-create-skill.md +24 -38
  24. package/assets/commands/ciel-eval.md +25 -37
  25. package/assets/commands/ciel-init.md +36 -126
  26. package/assets/commands/ciel-status.md +22 -19
  27. package/assets/commands/ciel-update.md +20 -39
  28. package/assets/platforms/opencode/.opencode/agents/ciel-researcher.md +71 -895
  29. package/assets/platforms/opencode/.opencode/commands/ciel-audit.md +58 -296
  30. package/assets/platforms/opencode/.opencode/commands/ciel-create-skill.md +24 -46
  31. package/assets/platforms/opencode/.opencode/commands/ciel-eval.md +25 -45
  32. package/assets/platforms/opencode/.opencode/commands/ciel-init.md +36 -131
  33. package/assets/platforms/opencode/.opencode/commands/ciel-status.md +22 -24
  34. package/assets/platforms/opencode/.opencode/commands/ciel-update.md +20 -40
  35. package/assets/platforms/opencode/AGENTS.md +4 -4
  36. package/assets/rules/security.md +30 -0
  37. package/assets/rules/testing.md +23 -0
  38. package/assets/skills/agile/SKILL.md +42 -0
  39. package/assets/skills/alerting/SKILL.md +55 -0
  40. package/assets/skills/api-design/SKILL.md +46 -0
  41. package/assets/skills/appsec/SKILL.md +43 -0
  42. package/assets/skills/architecture/SKILL.md +74 -0
  43. package/assets/skills/backend/SKILL.md +41 -0
  44. package/assets/skills/backup-recovery/SKILL.md +42 -0
  45. package/assets/skills/caching/SKILL.md +44 -0
  46. package/assets/skills/cdn/SKILL.md +42 -0
  47. package/assets/skills/chaos/SKILL.md +41 -0
  48. package/assets/skills/cicd-pipeline/SKILL.md +56 -0
  49. package/assets/skills/cloud/SKILL.md +42 -0
  50. package/assets/skills/code-quality/SKILL.md +42 -0
  51. package/assets/skills/code-review/SKILL.md +41 -0
  52. package/assets/skills/communication/SKILL.md +42 -0
  53. package/assets/skills/containers/SKILL.md +42 -0
  54. package/assets/skills/cqrs/SKILL.md +41 -0
  55. package/assets/skills/crypto/SKILL.md +46 -0
  56. package/assets/skills/data-engineering/SKILL.md +42 -0
  57. package/assets/skills/database-design/SKILL.md +46 -0
  58. package/assets/skills/ddd/SKILL.md +45 -0
  59. package/assets/skills/deployment-strategies/SKILL.md +51 -0
  60. package/assets/skills/desktop/SKILL.md +42 -0
  61. package/assets/skills/devsecops/SKILL.md +43 -0
  62. package/assets/skills/event-driven/SKILL.md +46 -0
  63. package/assets/skills/frontend/SKILL.md +41 -0
  64. package/assets/skills/functional/SKILL.md +42 -0
  65. package/assets/skills/high-availability/SKILL.md +42 -0
  66. package/assets/skills/iac/SKILL.md +46 -0
  67. package/assets/skills/logging/SKILL.md +46 -0
  68. package/assets/skills/meta/ciel-improve/SKILL.md +127 -0
  69. package/assets/skills/meta/learnings-capture/SKILL.md +105 -0
  70. package/assets/skills/meta/patch-spec/patch-spec.md +50 -0
  71. package/assets/skills/meta/skill-creator/SKILL.md +115 -0
  72. package/assets/skills/meta/skill-freshness-auditor/SKILL.md +164 -0
  73. package/assets/skills/meta/skill-variant-evaluator/SKILL.md +100 -0
  74. package/assets/skills/meta/skills-first-design-auditor/SKILL.md +192 -0
  75. package/assets/skills/ml-engineering/SKILL.md +42 -0
  76. package/assets/skills/mobile/SKILL.md +42 -0
  77. package/assets/skills/monitoring/SKILL.md +54 -0
  78. package/assets/skills/networking/SKILL.md +42 -0
  79. package/assets/skills/nosql/SKILL.md +41 -0
  80. package/assets/skills/oop-solid/SKILL.md +42 -0
  81. package/assets/skills/performance/SKILL.md +41 -0
  82. package/assets/skills/reactive/SKILL.md +42 -0
  83. package/assets/skills/release-management/SKILL.md +51 -0
  84. package/assets/skills/research/fact-check-claims/SKILL.md +98 -0
  85. package/assets/skills/research/research-forums/SKILL.md +103 -0
  86. package/assets/skills/research/research-github-issues/SKILL.md +103 -0
  87. package/assets/skills/research/research-web-sources/SKILL.md +108 -0
  88. package/assets/skills/research/synthesize-findings/SKILL.md +112 -0
  89. package/assets/skills/research/validate-source-credibility/SKILL.md +103 -0
  90. package/assets/skills/resilience/SKILL.md +41 -0
  91. package/assets/skills/serverless/SKILL.md +42 -0
  92. package/assets/skills/servers/SKILL.md +41 -0
  93. package/assets/skills/sql/SKILL.md +45 -0
  94. package/assets/skills/supply-chain/SKILL.md +41 -0
  95. package/assets/skills/system-design/SKILL.md +91 -0
  96. package/assets/skills/tech-leadership/SKILL.md +46 -0
  97. package/assets/skills/testing/SKILL.md +41 -0
  98. package/assets/skills/tracing/SKILL.md +36 -0
  99. package/assets/skills/utility/branch-cleaner/SKILL.md +195 -0
  100. package/assets/skills/utility/branch-setup/SKILL.md +144 -0
  101. package/assets/skills/utility/changelog-updater/SKILL.md +125 -0
  102. package/assets/skills/utility/commit-writer/SKILL.md +154 -0
  103. package/assets/skills/utility/issue-closer/SKILL.md +106 -0
  104. package/assets/skills/utility/issue-creator/SKILL.md +200 -0
  105. package/assets/skills/utility/pr-merger/SKILL.md +189 -0
  106. package/assets/skills/utility/pr-opener/SKILL.md +180 -0
  107. package/assets/skills/utility/release-publisher/SKILL.md +224 -0
  108. package/assets/skills/workflow/ciel-dev-process/SKILL.md +94 -0
  109. package/assets/skills/workflow/faire-gatekeeper/SKILL.md +3 -1
  110. package/assets/skills/workflow/prouver-verifier/SKILL.md +11 -2
  111. package/dist/cli/check.d.ts.map +1 -1
  112. package/dist/cli/check.js +11 -2
  113. package/dist/cli/check.js.map +1 -1
  114. package/dist/cli/claude.d.ts.map +1 -1
  115. package/dist/cli/claude.js +0 -2
  116. package/dist/cli/claude.js.map +1 -1
  117. package/dist/cli/init.d.ts.map +1 -1
  118. package/dist/cli/init.js +11 -2
  119. package/dist/cli/init.js.map +1 -1
  120. package/dist/cli/opencode.d.ts.map +1 -1
  121. package/dist/cli/opencode.js +2 -1
  122. package/dist/cli/opencode.js.map +1 -1
  123. package/package.json +1 -1
  124. package/assets/commands/ciel-migrate.md +0 -35
  125. package/assets/commands/ciel-refresh.md +0 -91
@@ -1,27 +1,20 @@
1
1
  ---
2
- description: ---
3
- subtask: false
4
- ---
5
-
6
- ---
7
- description: Bootstrap or repair Ciel wiring. Auto-detects platform (Claude Code, OpenCode, Cursor, etc.) and configures hooks. Preserves existing config, creates backups.
2
+ description: Bootstrap or repair Ciel v7 wiring. Auto-detects platform (Claude Code or OpenCode) and configures hooks, agents, and commands. Preserves existing config, creates backups.
8
3
  ---
9
4
 
10
5
  # /ciel-init — Wire Ciel into Current Project
11
6
 
12
- **Purpose:** Fix the #1 Ciel failure mode — hooks not firing because config is missing, has wrong paths, or platform not detected.
7
+ **Purpose:** Fix the #1 failure mode — hooks not firing because config is missing or has wrong paths.
13
8
 
14
- **Usage:** `/ciel-init [--check] [--user] [--platform=NAME]`
9
+ **Usage:** `/ciel-init [--check] [--user] [--platform=claude|opencode]`
15
10
 
16
11
  - `--check` — Dry-run: show what would change without writing
17
12
  - `--user` — Install to user scope (~/.claude/settings.json) instead of project
18
- - `--platform=NAME` — Force platform (claude, opencode, cursor, windsurf, codex, kilocode, ollama, lmstudio)
19
-
20
- ---
13
+ - `--platform=NAME` — Force platform (default: auto-detect)
21
14
 
22
15
  ## Instructions
23
16
 
24
- You are repairing Ciel wiring. This is deterministic — NO agent dispatch, NO research, NO pipeline.
17
+ This is deterministic — NO agent dispatch, NO research, NO pipeline.
25
18
 
26
19
  ### Step 1: Detect Platform
27
20
 
@@ -30,144 +23,56 @@ Run detection in order (pick FIRST match):
30
23
  1. **Project files:**
31
24
  - `./opencode.json` or `./.opencode/` → **opencode**
32
25
  - `./.claude/settings.json` or `./.claude/` → **claude**
33
- - `./.cursor/` → **cursor**
34
- - `./.windsurf/` → **windsurf**
35
- - `./.codex/` → **codex**
36
- - `./.kilocode/` or `./.kilo/` → **kilocode**
37
26
 
38
27
  2. **CLI availability:**
39
28
  - `command -v claude` → **claude**
40
29
  - `command -v opencode` → **opencode**
41
- - `command -v ollama` → **ollama**
42
30
 
43
31
  3. **If ambiguous:** Ask user to specify with `--platform=NAME`
44
32
 
45
- ### Step 2: Find Ciel Directory
33
+ ### Step 2: Find Ciel Source
46
34
 
47
35
  Check in order:
48
- 1. `$CLAUDE_PLUGIN_DIR/ciel` (if env var set)
49
- 2. `$HOME/.claude/plugins/ciel`
50
- 3. `$HOME/.ciel`
51
- 4. `find "$HOME" -maxdepth 5 -path '*/ciel/hooks/session-start.sh' 2>/dev/null | head -1`
52
-
53
- If not found → Tell user to run install first:
54
- ```bash
55
- bash <(curl -fsSL https://raw.githubusercontent.com/KaosKyun/Ciel/main/scripts/install.sh)
56
- ```
57
-
58
- ### Step 3: Verify Hooks Exist
59
-
60
- Check for 8 required hooks in `$CIEL_DIR/hooks/`:
61
- ```
62
- session-start.sh, user-prompt-submit.sh, pre-tool-write.sh, post-tool-write.sh,
63
- stop.sh, subagent-stop.sh, pre-compact.sh, pre-agent-gate.sh
64
- ```
65
-
66
- If missing → Copy from nearest Ciel source or tell user to reinstall.
67
-
68
- ### Step 4: Configure Platform
69
-
70
- #### Claude Code Branch
71
-
72
- **Config file:** `./.claude/settings.json` (project) or `$HOME/.claude/settings.json` (user)
73
-
74
- **Before writing:**
75
- 1. Check CWD sanity — warn if running Claude from different directory
76
- 2. Backup existing config: `cp file.json file.json.bak-TIMESTAMP`
77
-
78
- **Write config:**
79
- ```json
80
- {
81
- "hooks": {
82
- "SessionStart": { "command": "$CIEL_DIR/hooks/session-start.sh", "stdin": true },
83
- "UserPromptSubmit": { "command": "$CIEL_DIR/hooks/user-prompt-submit.sh", "stdin": true },
84
- "PreToolUse": { "command": "$CIEL_DIR/hooks/pre-tool-write.sh", "stdin": true, "matcher": "Write|Edit" },
85
- "PostToolUse": { "command": "$CIEL_DIR/hooks/post-tool-write.sh", "stdin": true, "matcher": "Write|Edit" },
86
- "PreCompact": { "command": "$CIEL_DIR/hooks/pre-compact.sh", "stdin": true },
87
- "Stop": { "command": "$CIEL_DIR/hooks/stop.sh", "stdin": true }
88
- }
89
- }
90
- ```
91
-
92
- #### OpenCode Branch
93
-
94
- **Config file:** `./opencode.json`
95
-
96
- **Before writing:**
97
- 1. Backup: `cp opencode.json opencode.json.bak-TIMESTAMP`
98
- 2. Merge existing config (preserve model, provider, mcp, keybinds)
99
-
100
- **Ensure:**
36
+ 1. `$CLAUDE_PROJECT_DIR/.claude/hooks/` project-scoped install (v7 default)
37
+ 2. `$HOME/.ciel/` — user-level sentinel
38
+ 3. If not found → tell user to install:
39
+ ```bash
40
+ bash <(curl -fsSL https://raw.githubusercontent.com/KaosKyun/Ciel/main/scripts/install.sh)
41
+ ```
42
+
43
+ ### Step 3: Configure Platform
44
+
45
+ **Claude Code** — Backup then write `.claude/settings.json` with hooks registered:
46
+ - SessionStart, UserPromptSubmit, PreToolUse (Edit|Write + Bash rm + Agent), PostToolUse (Edit|Write), SubagentStart (ciel-*), Stop, SubagentStop, PreCompact
47
+ - Copy agents from source to `.claude/agents/`
48
+ - Copy commands from source to `.claude/commands/`
49
+ - Copy skills from source to `.claude/skills/`
50
+ - Ensure `CLAUDE.md` references Ciel pipeline
51
+
52
+ **OpenCode** — Backup then ensure `opencode.json`:
101
53
  - `plugin` array contains `"./.opencode/plugins/ciel.ts"`
102
54
  - `instructions` array contains `"AGENTS.md"`
55
+ - Copy plugin, agents, commands to `.opencode/`
103
56
 
104
- **Copy files:**
105
- - `.opencode/plugins/ciel.ts`
106
- - `.opencode/agents/ciel-*.md` (6 files)
107
- - `.opencode/commands/ciel-*.md` (9 files)
108
-
109
- #### Other Platforms Branch
110
-
111
- Install platform-specific artifacts:
112
- - **Cursor:** `.cursor/rules/ciel.mdc`
113
- - **Windsurf:** `.windsurf/rules/*.md`
114
- - **Codex:** `AGENTS.md`, `.codex/hooks.json`
115
- - **Kilocode:** `.kilocode/rules/ciel.md`, `.kilo/agents/*`
116
- - **Ollama:** `Modelfile` (user runs `ollama create`)
117
- - **LM Studio:** `ciel.preset.json`, `system-prompt.md`
118
-
119
- ### Step 5: Verification
120
-
121
- After configuration, verify:
57
+ ### Step 4: Verify
122
58
 
123
- 1. **Config file exists** at expected path
124
- 2. **Hooks are executable:** `chmod +x "$CIEL_DIR/hooks/"*.sh`
125
- 3. **Plugin file syntax valid** (for OpenCode: `npx tsc --noEmit`)
59
+ 1. Config file exists at expected path
60
+ 2. Hooks are executable: `chmod +x .claude/hooks/*.sh`
61
+ 3. Agent definitions present (4 files)
62
+ 4. Report summary: platform, config path, hooks count, next steps
126
63
 
127
- ### Step 6: Report
64
+ ## What's preserved
128
65
 
129
- Output summary:
130
-
131
- ```
132
- /ciel-init completed
133
-
134
- Platform: Claude Code
135
- Config: /path/to/settings.json
136
- CIEL_DIR: /path/to/ciel
137
- Hooks: 8/8 present
138
-
139
- Next steps:
140
- 1. Restart Claude Code
141
- 2. Run a test prompt — should see depth hint
142
- 3. Make code changes — should see RELIRE reminder
143
- ```
144
-
145
- ---
66
+ - `ciel-overlay.md` — project-specific rules
67
+ - `.ciel/` — state directory (map.json, memory.json, parking.md)
68
+ - Existing `settings.json` — merged non-destructively
69
+ - Existing `opencode.json` — merged non-destructively
146
70
 
147
71
  ## Error Handling
148
72
 
149
73
  | Error | Action |
150
74
  |-------|--------|
151
- | Ciel directory not found | Tell user to run install script |
152
- | Hooks missing | Try to copy from source, else reinstall |
75
+ | Ciel source not found | Tell user to run install script |
153
76
  | Config write fails | Show manual instructions |
154
77
  | Platform ambiguous | Ask user to specify with --platform |
155
- | Permission denied | Suggest running with sudo or check file permissions |
156
-
157
- ---
158
-
159
- ## Examples
160
-
161
- ```bash
162
- # Auto-detect and install to project
163
- /ciel-init
164
-
165
- # Force Claude Code, user scope
166
- /ciel-init --platform=claude --user
167
-
168
- # Check what would change (dry-run)
169
- /ciel-init --check
170
-
171
- # Force OpenCode
172
- /ciel-init --platform=opencode
173
- ```
78
+ | Permission denied | Check file permissions |
@@ -1,45 +1,43 @@
1
1
  ---
2
- description: ---
3
- subtask: false
4
- ---
5
-
6
- ---
7
- description: Displays the current Ciel environment status — active version, loaded skills, registered hooks, last session state, and configuration health. A diagnostic entry point for "is Ciel working?" questions.
2
+ description: Displays current Ciel environment status — version, platform, hooks, skills, agents, commands, memory health. Diagnostic entry point for "is Ciel working?" questions.
8
3
  ---
9
4
 
10
5
  # /ciel-status — Ciel Environment Health Check
11
6
 
12
- *Displays the current Ciel environment status: version, skills, hooks, and config.*
7
+ Displays the current Ciel environment status: version, platform, hooks, skills, agents, and config health.
13
8
 
14
9
  Usage: `/ciel-status [--check]`
15
10
 
16
- - `--check`run diagnostics (verify hooks fire, skills load, config is valid)
11
+ - No flag summary view
12
+ - `--check` — run full diagnostics (verify hooks fire, skills load, config valid)
17
13
 
18
- ## Output
14
+ ## Summary output
19
15
 
20
16
  ```
21
17
  ## CIEL STATUS
22
18
 
23
- Version: v6.2.4
19
+ Version: v4.0.1
24
20
  Platform: Claude Code
25
- Config: .claude/settings.json — OK (4 hooks registered)
26
- Skills directory: skills/ — 43 skills loaded
27
- Commands: 7 commands available
28
- Last session: 2026-05-06T11:20:00Z Skills library reorg
21
+ Config: .claude/settings.json — OK
22
+ Hooks: 12 registered
23
+ Skills: 48 domain skills in .claude/skills/
24
+ Agents: 4 sub-agents (researcher, explorer, critic, improver)
25
+ Commands: 7 available
26
+ Memory: .ciel/memory/ — N episodes
29
27
  ```
30
28
 
31
29
  ## Diagnostics (--check)
32
30
 
33
- - [ ] CLAUDE.md readable and includes Ciel pipeline
34
- - [ ] .claude/settings.json valid JSON, hooks registered
35
- - [ ] .ciel/map.json parseable and up-to-date
36
- - [ ] .ciel/memory.json parseable
37
- - [ ] Shell hooks executable (check-test-first, block-destructive, track-file, meta-critiquer)
38
- - [ ] Skills directory non-empty and accessible
39
- - [ ] Agent definitions present (.claude/agents/ or .opencode/agents/)
31
+ - CLAUDE.md readable and includes Ciel pipeline
32
+ - .claude/settings.json valid JSON, all hooks registered
33
+ - .ciel/map.json parseable
34
+ - .ciel/memory/index.json present
35
+ - Shell hooks executable and firing
36
+ - Skills directory non-empty
37
+ - Agent definitions present (4 files)
40
38
 
41
- ## When triggered
39
+ ## When to use
42
40
 
43
- - User asks "is Ciel working?" or "check Ciel health"
44
- - After ciel-init to verify installation
41
+ - After `/ciel-init` to verify installation
42
+ - When "is Ciel working?" is asked
45
43
  - Debugging hook failures or missing depth classification
@@ -1,63 +1,43 @@
1
1
  ---
2
- description: ---
3
- subtask: false
4
- ---
5
-
6
- ---
7
- description: Check GitHub for newer Ciel release and re-install. Runs `scripts/install.sh --check-update` then `--update`.
2
+ description: Check GitHub for newer Ciel release and re-install. Preserves project config — ciel-overlay.md, .ciel/, settings.json.
8
3
  ---
9
4
 
10
5
  # /ciel-update — Update Ciel to the latest version
11
6
 
12
7
  Checks GitHub for a newer release and re-installs if available.
13
8
 
14
- ## Steps
15
-
16
- 1. **Check version**: `bash scripts/install.sh --check-update`
17
- - Fetches `VERSION` from GitHub, compares with local
18
- - Prints "up to date" or "update available"
19
-
20
- 2. **Apply update**: `bash scripts/install.sh --update -y`
21
- - Re-installs all Ciel files (plugins, agents, commands, hooks)
22
- - Preserves: `ciel-overlay.md`, `.ciel/`, existing configs
23
- - Non-destructive merge on `opencode.json`
9
+ Usage: `/ciel-update [--check]`
24
10
 
25
- ## Flags
11
+ - No flag — full update (check + apply)
12
+ - `--check` — only check remote version, report, don't install
26
13
 
27
- | Flag | Purpose |
28
- |------|---------|
29
- | `--check-update` | Check remote version, don't install |
30
- | `--update` / `-u` | Force reinstall all files |
31
- | `-y` | Skip confirmation (non-interactive) |
32
- | `-q` | Quiet mode (summary only) |
33
-
34
- ## One-liner
14
+ ## Steps
35
15
 
36
- ```bash
37
- bash <(curl -fsSL https://raw.githubusercontent.com/KaosKyun/Ciel/main/scripts/install.sh) --check-update
38
- bash <(curl -fsSL https://raw.githubusercontent.com/KaosKyun/Ciel/main/scripts/install.sh) --update -y
39
- ```
16
+ 1. **Check version**: fetch `VERSION` from GitHub, compare with `.ciel/version` or `VERSION`
17
+ 2. **Apply update**: re-install all Ciel files (hooks, agents, commands, skills, plugin)
18
+ 3. **Verify**: confirm hooks executable, agents present, config valid
40
19
 
41
20
  ## What's preserved
42
21
 
43
22
  - `ciel-overlay.md` — project-specific rules
44
- - `.ciel/map.json`, `.ciel/memory.json`, `.ciel/parking.md`
45
- - `opencode.json` — existing config merged non-destructively
46
- - `.claude/settings.json` — hook paths preserved
23
+ - `.ciel/` — state directory (map.json, memory/, parking.md)
24
+ - `.claude/settings.json` — merged non-destructively
25
+ - `.opencode/opencode.json` — merged non-destructively
47
26
 
48
27
  ## What's replaced
49
28
 
50
- - `.opencode/plugins/ciel.ts` — fresh plugin
51
- - `.opencode/agents/ciel-*.md` — agent definitions
52
- - `.opencode/commands/ciel-*.md` — command files
53
- - `.claude/agents/ciel-*.md` — Claude Code agents
54
29
  - `.claude/hooks/*.sh` — shell hooks
55
- - `CLAUDE.md` — root instruction
30
+ - `.claude/agents/ciel-*.md` — agent definitions
31
+ - `.claude/commands/ciel-*.md` — command files
32
+ - `.claude/skills/` — domain skills
33
+ - `.opencode/plugins/ciel.ts` — plugin
34
+ - `.opencode/agents/ciel-*.md` — OpenCode agents
35
+ - `.opencode/commands/ciel*.md` — OpenCode commands
56
36
 
57
37
  ## Troubleshooting
58
38
 
59
39
  | Symptom | Fix |
60
40
  |---------|-----|
61
- | `Could not fetch remote version` | Check internet or proxy: `https_proxy=... bash install.sh --check-update` |
62
- | Plugin not loaded after update | Restart OpenCode (plugin loaded at session start) |
63
- | `jq not found` warning | Install jq for automatic opencode.json patching |
41
+ | Could not fetch remote version | Check internet or proxy: `https_proxy=...` |
42
+ | Plugin not loaded after update | Restart editor (plugin loaded at session start) |
43
+ | Hook permissions after update | `chmod +x .claude/hooks/*.sh` |
@@ -1,4 +1,4 @@
1
- # AGENTS.md — Ciel deep-reasoning workflow (OpenCode, v6.2.4)
1
+ # AGENTS.md — Ciel deep-reasoning workflow (OpenCode, v3.3.0)
2
2
 
3
3
  Source: https://github.com/KaosKyun/Ciel
4
4
 
@@ -8,7 +8,7 @@ Ciel is installed as OpenCode-native primitives:
8
8
 
9
9
  - **Plugin** (`.opencode/plugins/ciel.ts`) — pre/post-write hooks + depth classification on user prompts.
10
10
  - **Subagents** (`.opencode/agents/ciel-*.md`) — dispatch with `@ciel-researcher`, `@ciel-explorer`, `@ciel-critic`, `@ciel-improver`.
11
- - **Commands** (`.opencode/commands/ciel*.md`) — run with `/ciel`, `/ciel-improve`, `/ciel-refresh`, `/ciel-audit`, `/ciel-init`, `/ciel-eval`, `/ciel-create-skill`, `/ciel-recommend`, `/ciel-update`.
11
+ - **Commands** (`.opencode/commands/ciel*.md`) — run with `/ciel`, `/ciel-improve`, `/ciel-refresh`, `/ciel-audit`, `/ciel-init`, `/ciel-eval`, `/ciel-create-skill`, `/ciel-status`, `/ciel-migrate`, `/ciel-update`.
12
12
 
13
13
  ---
14
14
 
@@ -16,7 +16,7 @@ Ciel is installed as OpenCode-native primitives:
16
16
 
17
17
  | Level | Example | Pipeline |
18
18
  |-------|---------|----------|
19
- | **Trivial** | rename, typo, 1-line fix | `QUOI` → `FAIRE` → `META` |
19
+ | **Trivial** | rename, typo, 1-line fix | `quoi-framer` → `pattern-fitness-check` → `faire-gatekeeper` → inline review → push |
20
20
  | **Standard** | hook, route, component, service | Full pipeline, dispatch `@ciel-researcher` + `@ciel-explorer` in parallel before coding |
21
21
  | **Critical** | auth, DB schema, security, payment | Full pipeline + STRIDE threat model + `@ciel-critic` mandatory |
22
22
 
@@ -78,7 +78,7 @@ The `ciel.ts` plugin injects depth classification on every user prompt and RELIR
78
78
  Ciel ships a `.mcp.json` template at the repo root with two opt-in servers: `playwright` (visual critique) and `context7` (live official docs). Register them via:
79
79
 
80
80
  ```bash
81
- bash ~/.claude/plugins/ciel/scripts/install.sh --with-mcp=playwright,context7
81
+ bash <(curl -fsSL https://raw.githubusercontent.com/KaosKyun/Ciel/main/scripts/install.sh) --with-mcp=playwright,context7
82
82
  ```
83
83
 
84
84
  **Important** — OpenCode issue #2319: plugin hooks (`tool.execute.before/after`) do NOT fire for MCP tool calls. The `playwright-visual-critic` skill orchestrates the flow explicitly (navigate → snapshot → dispatch `@ciel-critic`) rather than relying on auto-triggered hooks. When you use a visual-critique workflow, dispatch the critic agent yourself after capture.
@@ -0,0 +1,30 @@
1
+ ---
2
+ paths:
3
+ - "**/auth/**"
4
+ - "**/security/**"
5
+ - "**/*Token*"
6
+ - "**/*Password*"
7
+ - "**/*Secret*"
8
+ - "**/*Session*"
9
+ - "**/*Crypto*"
10
+ - "**/*Credential*"
11
+ - "**/encrypt*"
12
+ - "**/cipher*"
13
+ ---
14
+
15
+ ## Dispatch
16
+ - Charge `appsec` AVANT d'ecrire du code d'auth ou de crypto.
17
+ - Si tu touches des tokens/sessions → charge aussi `crypto`.
18
+ - Si le fichier est dans `.github/workflows/` → charge aussi `devsecops` + `supply-chain`.
19
+
20
+ ## Regles dures (zero tolerance)
21
+ - **Jamais** de secret, token, cle API, mot de passe dans le code. Env vars ou secret manager.
22
+ - **Jamais** de `import { random }` pour la crypto. Toujours `crypto.randomBytes` ou equivalent.
23
+ - **Jamais** de `bcrypt.compare` sans `await`. Un `== true` oublie = tous les comptes ouverts.
24
+
25
+ ## Conventions du projet
26
+ - Hachage mots de passe : bcrypt ou argon2. Jamais MD5/SHA1.
27
+ - Chiffrement : AES-256-GCM ou ChaCha20-Poly1305. Jamais ECB.
28
+ - JWT : RS256 ou ES256. Pas de `secret: "mon-super-secret"`.
29
+ - Les cles tournent automatiquement (max 90 jours).
30
+ - Log scrubbing : jamais de PII/token/secret dans les logs.
@@ -0,0 +1,23 @@
1
+ ---
2
+ paths:
3
+ - "**/*.test.*"
4
+ - "**/*.spec.*"
5
+ - "**/__tests__/**"
6
+ - "**/test/**"
7
+ - "**/tests/**"
8
+ ---
9
+
10
+ ## Dispatch
11
+ - Charge `testing` AVANT d'ecrire du code source.
12
+ - Si c'est un test d'integration avec DB → charge aussi `database-design`.
13
+ - Si c'est un test E2E → charge aussi `cicd-pipeline` (le test doit passer en CI).
14
+
15
+ ## Regle dure (zero tolerance)
16
+ - **RED FIRST** : ecris le test et vois-le echouer avant d'ecrire le code source. Jamais l'inverse.
17
+ - **Flaky test** : si un test echoue sans changement de code > 2% du temps → quarantaine. Jamais "relance le job".
18
+ - **Pas de mock systematique** : vraie DB en integration (testcontainers, pg_tmp). Mock seulement les frontieres lentes (HTTP externe, email).
19
+
20
+ ## Conventions du projet
21
+ - Test pyramid : 70% unitaires, 20% integration, 10% E2E.
22
+ - Tester le comportement observable, pas l'implementation. Input → output.
23
+ - Arrange-Act-Assert. DAMP > DRY dans les tests (lisibilite avant factorisation).
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: agile
3
+ description: "Agile — Scrum, Kanban, Shape Up, sprints, estimation, retros, amelioration continue. A charger quand on travaille en mode agile."
4
+ ---
5
+
6
+ # Agile
7
+
8
+ **Principe premier :** L'agilite n'est pas un framework (Scrum n'est pas l'agilite) — c'est un principe : livrer de la valeur en petits increments, inspecter le resultat, et adapter le plan. Le manifeste agile a 4 valeurs, et la premiere est "les individus et leurs interactions plus que les processus et les outils". Si ton processus agile est plus important que les personnes qui l'utilisent, tu as echoue l'agilite. Le but du process n'est pas d'etre suivi — c'est de rendre l'equipe plus efficace. Un processus qui ralentit l'equipe n'est pas agile, meme s'il suit Scrum a la lettre. Le meilleur indicateur d'agilite : combien de temps entre "j'ai une idee" et "c'est en production" ?
9
+
10
+ ## Checklist
11
+ - [ ] Les ceremonies sont cadrees : standup 15min, retro 1h, planning 1-2h — si plus long, le processus est casse
12
+ - [ ] Les tickets sont INVEST : Independent, Negotiable, Valuable, Estimable, Small, Testable
13
+ - [ ] Le WIP est limite (Kanban/Scrum avec capacite explicite) — pas plus de travail en cours que de capacite
14
+ - [ ] Les retros produisent des actions concretes (pas "on communiquera mieux") — max 2-3 actions par retro
15
+ - [ ] La velocite est utilisee pour le planning, pas pour le jugement de performance
16
+ - [ ] Le backlog est priorise par valeur business, pas par "c'est facile" ou "c'est urgent depuis 6 mois"
17
+ - [ ] Le cycle time (temps ticket ouvert → ferme) est mesure et s'ameliore — c'est le vrai KPI agile
18
+
19
+ ## Anti-patterns
20
+ ### Agile = Scrum = standups + sprints
21
+ **Ce qu'on voit :** l'equipe fait des standups, des sprints de 2 semaines, et un retro. "On est agile." Les stories sont estimees en story points. Les sprints sont bookes a 110%. Rien n'est livre en production a la fin du sprint.
22
+ **Pourquoi c'est dangereux :** c'est du theatre agile. Les ceremonies sont suivies mais l'objectif (livrer de la valeur rapidement) est manque. Le processus devient le produit. L'equipe est frustree ("l'agile c'est des reunions qui servent a rien") sans comprendre que le probleme n'est pas l'agilite, c'est l'imitation vide de l'agilite.
23
+ **Faire plutot :** se demander POURQUOI on fait chaque ceremonie. Si le standup est un compte-rendu au manager, c'est foutu — le standup est pour que l'equipe se synchronise. Si la retro ne produit jamais d'actions, l'arreter. Moins de processus, plus de livraison. Commencer par Kanban (pas de sprint, flux continu) et ajouter des ceremonies seulement si le besoin emerge.
24
+
25
+ ### Story points = mesure de performance
26
+ **Ce qu'on voit :** "tu as fait 8 points ce sprint, l'objectif est 13." Les story points deviennent un KPI individuel.
27
+ **Pourquoi c'est dangereux :** les story points mesurent la complexite relative, pas la productivite. Les utiliser comme KPI = l'equipe gonfle les estimations. 1 point devient 3. La velocite augmente mais rien n'est livre plus vite. Culture de la peur et du gaming du systeme.
28
+ **Faire plutot :** les story points servent UNIQUEMENT a la planification de sprint (combien de travail l'equipe peut absorber). La vraie metrique est le cycle time (combien de temps pour livrer) et le throughput (combien de tickets livres par semaine). Ces metriques ne sont pas gameables.
29
+
30
+ ### Retro = rituel vide
31
+ **Ce qu'on voit :** "Qu'est-ce qui s'est bien passe ? Qu'est-ce qui s'est mal passe ?" Memes reponses depuis 6 mois : "la communication" et "les specs pas claires". Zero action concrete.
32
+ **Pourquoi c'est dangereux :** une retro sans action est un signal que l'equipe est apprise a l'impuissance. Les problemes sont identifies mais jamais resolus. La retro devient une soupape ou on se plaint sans consequence — c'est pire que pas de retro car ca cree du cynisme.
33
+ **Faire plutot :** chaque retro produit 1-2 actions concretes, assignees, avec deadline. La retro suivante commence par "est-ce que les actions de la derniere retro sont faites ?" Si non, pourquoi ? Si une action n'est jamais faite, le probleme n'est pas l'equipe — c'est que le systeme empeche l'amelioration.
34
+
35
+ ## Patterns
36
+ ### Kanban pour commencer
37
+ **Quand :** equipe qui decouvre l'agilite ou qui a ete brulee par Scrum.
38
+ **Comment :** visualiser le flux (colonnes To Do / In Progress / Done), limiter le WIP (max 2 taches par personne en In Progress), mesurer le cycle time. Pas de sprint, pas d'estimation obligatoire, pas de ceremonies forcees. Ajouter un standup uniquement si la synchro est necessaire. Iterer sur le processus a partir de la.
39
+
40
+ ### Cycle time comme North Star
41
+ **Quand :** mesurer l'amelioration continue.
42
+ **Comment :** cycle time = temps entre "le ticket est pret a developper" et "en production". Mesurer le P50 et P85 (pas la moyenne — les outliers faussent). Objectif : reduire le cycle time sans sacrifier la qualite. Un cycle time qui diminue = l'equipe s'ameliore VRAIMENT.
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: alerting
3
+ description: "Alerting — SLO-based alerting, alert fatigue prevention, on-call, post-mortems, runbooks. A charger quand on configure des alertes."
4
+ ---
5
+
6
+ # Alerting
7
+
8
+ **Principe premier :** Une alerte qui ne declenche pas d'action n'est pas une alerte — c'est du bruit qui tue les vraies alertes. Chaque alerte doit etre : actionable (tu sais quoi faire), symptom-based (pas cause-based), et avoir un runbook. Si tu ne peux pas ecrire le runbook en < 5 etapes, ne cree pas l'alerte. Le but n'est pas d'etre notifie de tout — c'est d'etre notifie assez tot pour agir avant que les utilisateurs ne remarquent.
9
+
10
+ ## Checklist
11
+ - [ ] Les alertes sont sur les symptomes (P95 > 1s, error rate > 1%), pas sur les causes (CPU > 70%)
12
+ - [ ] Chaque alerte a un runbook — pas "on verra quand ca sonnera"
13
+ - [ ] Les regles d'alerte et la config AlertManager sont dans le repo (alerting as code) — pas creees a la main
14
+ - [ ] SLA de reponse defini : critical (page, < 5 min), high (page jour, < 30 min), medium (ticket, < 4h)
15
+ - [ ] Alertes groupees et de-dupliquees — pas 50 pages pour la meme cause racine
16
+ - [ ] On-call rotation documentee avec escalation — personne n'est on-call seul sans backup
17
+ - [ ] Post-mortem blameless apres chaque incident majeur + 5 Whys jusqu'a la cause racine
18
+
19
+ ## Anti-patterns
20
+ ### Alerter sur tout
21
+ **Ce qu'on voit :** "CPU > 70%", "memoire > 60%", "disque > 70%" — 200 alertes configurees. 15 pages par nuit. L'equipe a mute le canal.
22
+ **Pourquoi c'est dangereux :** alert fatigue. Chaque fausse alerte entraine la suivante vers l'ignore. Quand la vraie alerte critique arrive, personne ne la voit. Le canal d'alerte est devenu un flux de bruit ignore.
23
+ **Faire plutot :** alerter sur les symptomes utilisateur. "P95 latency > 1s pendant 5 min" (l'utilisateur ressent la lenteur). "Error rate > 1% pendant 5 min" (l'utilisateur voit des erreurs). Le CPU est une cause possible parmi 10, pas un symptome.
24
+
25
+ ### Alerte sans runbook
26
+ **Ce qu'on voit :** alerte "PaymentService is down". Pas de runbook. L'on-call Googlise "comment restart payment service" a 3h du matin.
27
+ **Pourquoi c'est dangereux :** MTTR explose. L'on-call stresse fait des erreurs. Le runbook est la difference entre "redemarrer en 2 minutes" et "aggraver l'incident en 30 minutes de debugging panique".
28
+ **Faire plutot :** runbook attache a chaque alerte. Etapes concretes. "1. Verifier les logs dans Loki avec {service=payment, level=error}. 2. Si OOM -> restart le pod. 3. Si DB timeout -> verifier les connexions pool. 4. Si rien -> escalader a l'equipe backend. 5. Post-mortem avec 5 Whys dans les 48h."
29
+
30
+ ### Aucun post-mortem
31
+ **Ce qu'on voit :** incident resolu -> "ouf, on passe a autre chose". Pas d'analyse. Le meme incident se reproduit 3 mois plus tard.
32
+ **Pourquoi c'est dangereux :** sans post-mortem, l'organisation n'apprend pas. Les memes erreurs se repetent. Le but du post-mortem n'est pas de trouver un coupable — c'est d'identifier les failles du SYSTEME qui ont permis l'incident.
33
+ **Faire plutot :** post-mortem blameless dans les 48h. Format : timeline, impact, 5 Whys jusqu'a la cause racine, what went well, what went wrong, action items. Les action items ont des owners et des deadlines.
34
+
35
+ ### Corriger le symptome, pas la cause racine
36
+ **Ce qu'on voit :** le disque est plein -> on supprime des logs. Le disque se remplit 3 jours plus tard. Meme incident, meme reponse. 5 iterations avant de se demander POURQUOI.
37
+ **Pourquoi c'est dangereux :** corriger le symptome sans trouver la cause racine garantit la recidive. Chaque recurrence erode la confiance. Le MTTR apparent est bas, le MTTR reel est infini (l'incident n'est jamais vraiment resolu).
38
+ **Faire plutot :** methode des 5 Whys. "Le disque est plein" -> Pourquoi ? "Les logs font 50 Go/jour" -> Pourquoi ? "Level DEBUG active en prod" -> Pourquoi ? "Le deploiement a ecrase la config" -> Pourquoi ? "La config n'est pas versionnee" -> Action racine : versionner la config + alerter si disque > 80%. Le bug est le niveau DEBUG. La cause racine est l'absence d'IaC pour la config. On corrige la cause, pas le symptome.
39
+
40
+ ## Patterns
41
+ ### AlertManager (routing + dedup + silence)
42
+ **Quand :** toute stack Prometheus en production.
43
+ **Comment :** Prometheus evalue les rules -> alertes -> AlertManager. AlertManager groupe les alertes (`group_by: [service, severity]`), deduplique (meme alerte = une notification), silencie la maintenance (`matchers: [env=staging]`). Routes par severite : critical -> PagerDuty/Opsgenie, warning -> Slack. Config dans `monitoring/alertmanager.yml`, versionne dans le repo.
44
+
45
+ ### Alerting as Code (regles dans le repo)
46
+ **Quand :** toute equipe de plus d'une personne.
47
+ **Comment :** regles Prometheus (`monitoring/rules.yml`), config AlertManager (`monitoring/alertmanager.yml`), dashboards Grafana (`monitoring/dashboards/`) — tout dans le repo, versionne, deploye via CI/CD. Pas de regle creee a la main dans l'UI Grafana. Une PR pour chaque changement d'alerte — le seuil, le runbook_url, la severite sont revus comme du code.
48
+
49
+ ### Runbook integre a l'alerte
50
+ **Quand :** chaque alerte creee.
51
+ **Comment :** `annotations: { runbook_url: "https://wiki.corp/runbooks/payment-latency" }`. Le runbook contient : (1) ce que signifie l'alerte, (2) comment verifier dans Grafana/Loki/Tempo, (3) actions de mitigation, (4) qui escalader, (5) comment faire un 5 Whys si la mitigation ne suffit pas.
52
+
53
+ ### Post-mortem blameless + 5 Whys
54
+ **Quand :** tout incident qui a declenche une alerte on-call.
55
+ **Comment :** document blameless dans les 48h. Sections : timeline, impact, 5 Whys jusqu'a la cause racine systemique, what went well, what went wrong, action items avec owners et deadlines. L'objectif est d'ameliorer le SYSTEME — pas de trouver un responsable. Action items prioritaires sur le prochain sprint.
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: api-design
3
+ description: "API Design — l'API comme contrat, REST/GraphQL/gRPC, pagination cursor-based, idempotency, structured errors, rate limiting. À charger quand on crée ou modifie des endpoints."
4
+ ---
5
+
6
+ # API Design
7
+
8
+ **Principe premier :** Une API est un contrat entre un client et un serveur qui évoluent à des rythmes différents. Le client peut être une app mobile qui se met à jour une fois par mois, le serveur peut être déployé 10× par jour. Le design d'API est l'art de faire évoluer le contrat sans le casser. Chaque champ que tu ajoutes est un engagement, chaque champ que tu changes est une rupture. La question n'est pas "est-ce que c'est RESTful ?" mais "est-ce que le client peut survivre à 6 mois de changements serveur sans mise à jour ?"
9
+
10
+ ## Checklist
11
+ - [ ] L'API est versionnée — dans l'URL (/v1/) ou le header (Accept-Version)
12
+ - [ ] Pagination cursor-based — stable, index-friendly, pas de doublon entre pages
13
+ - [ ] Les erreurs sont structurées : `{error: {code, message, details}}` — pas de `200 OK {success: false}`
14
+ - [ ] Les mutations POST/PUT/DELETE supportent l'idempotency key
15
+ - [ ] Rate limiting en place avec headers standards : `Retry-After`, `X-RateLimit-*`
16
+ - [ ] Le schéma est documenté (OpenAPI/GraphQL schema/gRPC proto) et la doc est le contrat, pas une suggestion
17
+ - [ ] Pas de breaking change sans nouvelle version ou deprecation window explicite
18
+
19
+ ## Anti-patterns
20
+ ### Breaking change silencieux
21
+ **Ce qu'on voit :** `{price: 10}` devient `{price: {amount: 10, currency: "EUR"}}` sur la même version d'API. Les clients mobiles qui n'ont pas été mis à jour crashent.
22
+ **Pourquoi c'est dangereux :** le client n'a aucun moyen de savoir que le contrat a changé. Il parse ce qu'il reçoit, ça casse. Le pire : ça peut arriver à 20% des utilisateurs seulement (ceux qui n'ont pas la dernière version de l'app). Le bug est invisible côté serveur.
23
+ **Faire plutôt :** nouvelle version (/v2/) avec le nouveau format. L'ancienne version (/v1/) est maintenue pendant une deprecation window (6-12 mois) avec un header `Deprecation: true` et `Sunset: <date>`. Les clients ont le temps de migrer.
24
+
25
+ ### `200 OK` avec erreur dedans
26
+ **Ce qu'on voit :** toutes les réponses sont HTTP 200. Le corps contient `{success: false, error: "quelque chose"}`. Même pour une erreur 500.
27
+ **Pourquoi c'est dangereux :** HTTP a un système de codes d'erreur pour une raison. Les CDN cachent les 200. Les load balancers comptent les 5xx. Les outils de monitoring alertent sur les taux d'erreur HTTP. En faisant tout en 200, tu rends ton API invisible à toute la chaîne d'infrastructure.
28
+ **Faire plutôt :** utiliser les codes HTTP comme prévu. 201 Created, 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 409 Conflict, 422 Unprocessable, 429 Too Many Requests, 500 Internal. Le code HTTP est un signal machine-readable.
29
+
30
+ ### Offset pagination
31
+ **Ce qu'on voit :** `GET /orders?page=3&limit=50` → `LIMIT 50 OFFSET 100`. À la page 100, la DB scanne 5000 rows pour en retourner 50.
32
+ **Pourquoi c'est dangereux :** deux problèmes. Performance : OFFSET N oblige la DB à scanner N rows. Cohérence : si une row est insérée entre deux pages, toutes les rows suivantes sont décalées et l'utilisateur voit des doublons ou manque des entrées.
33
+ **Faire plutôt :** cursor-based : `GET /orders?cursor=xyz&limit=50` → `WHERE id > 'xyz' ORDER BY id LIMIT 50`. Index-friendly. Stable. Pas de doublon. Le cursor est opaque pour le client.
34
+
35
+ ## Patterns
36
+ ### Structured errors
37
+ **Quand :** toute API.
38
+ **Comment :** `{error: {code: "INSUFFICIENT_FUNDS", message: "Solde insuffisant", details: [{field: "amount", reason: "minimum 10 EUR"}]}}`. `code` : machine-readable (switch côté client). `message` : human-readable (debug). `details` : actionable (form validation).
39
+
40
+ ### Idempotency key
41
+ **Quand :** toute mutation où le double-submit est dangereux (paiements, créations).
42
+ **Comment :** header `Idempotency-Key: <uuid>`. Le serveur stocke la clé + le résultat. Même clé = même réponse, l'opération n'est exécutée qu'une fois. Stripe utilise ce pattern pour 100% de leurs mutations.
43
+
44
+ ### Rate limiting avec headers
45
+ **Quand :** tout endpoint public.
46
+ **Comment :** `429 Too Many Requests` + `Retry-After: 30` + `X-RateLimit-Limit: 100` + `X-RateLimit-Remaining: 0` + `X-RateLimit-Reset: 1716000000`. Le client sait exactement quand réessayer. Pas de backoff deviné.