mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 13:43:26 +08:00
Merge branch 'affaan-m:main' into main
This commit is contained in:
@@ -3,3 +3,15 @@
|
||||
If you plan to edit `.claude-plugin/plugin.json`, be aware that the Claude plugin validator enforces several **undocumented but strict constraints** that can cause installs to fail with vague errors (for example, `agents: Invalid input`). In particular, component fields must be arrays, `agents` must use explicit file paths rather than directories, and a `version` field is required for reliable validation and installation.
|
||||
|
||||
These constraints are not obvious from public examples and have caused repeated installation failures in the past. They are documented in detail in `.claude-plugin/PLUGIN_SCHEMA_NOTES.md`, which should be reviewed before making any changes to the plugin manifest.
|
||||
|
||||
### Custom Endpoints and Gateways
|
||||
|
||||
ECC does not override Claude Code transport settings. If Claude Code is configured to run through an official LLM gateway or a compatible custom endpoint, the plugin continues to work because hooks, commands, and skills execute locally after the CLI starts successfully.
|
||||
|
||||
Use Claude Code's own environment/configuration for transport selection, for example:
|
||||
|
||||
```bash
|
||||
export ANTHROPIC_BASE_URL=https://your-gateway.example.com
|
||||
export ANTHROPIC_AUTH_TOKEN=your-token
|
||||
claude
|
||||
```
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"name": "everything-claude-code",
|
||||
"source": "./",
|
||||
"description": "The most comprehensive Claude Code plugin — 14+ agents, 56+ skills, 33+ commands, and production-ready hooks for TDD, security scanning, code review, and continuous learning",
|
||||
"version": "1.7.0",
|
||||
"version": "1.8.0",
|
||||
"author": {
|
||||
"name": "Affaan Mustafa",
|
||||
"email": "me@affaanmustafa.com"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "everything-claude-code",
|
||||
"version": "1.7.0",
|
||||
"version": "1.8.0",
|
||||
"description": "Complete collection of battle-tested Claude Code configs from an Anthropic hackathon winner - agents, skills, hooks, and rules evolved over 10+ months of intensive daily use",
|
||||
"author": {
|
||||
"name": "Affaan Mustafa",
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
# Curated instincts for affaan-m/everything-claude-code
|
||||
# Import with: /instinct-import .claude/homunculus/instincts/inherited/everything-claude-code-instincts.yaml
|
||||
|
||||
---
|
||||
id: everything-claude-code-conventional-commits
|
||||
trigger: "when making a commit in everything-claude-code"
|
||||
confidence: 0.9
|
||||
domain: git
|
||||
source: repo-curation
|
||||
source_repo: affaan-m/everything-claude-code
|
||||
---
|
||||
|
||||
# Everything Claude Code Conventional Commits
|
||||
|
||||
## Action
|
||||
|
||||
Use conventional commit prefixes such as `feat:`, `fix:`, `docs:`, `test:`, `chore:`, and `refactor:`.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Mainline history consistently uses conventional commit subjects.
|
||||
- Release and changelog automation expect readable commit categorization.
|
||||
|
||||
---
|
||||
id: everything-claude-code-commit-length
|
||||
trigger: "when writing a commit subject in everything-claude-code"
|
||||
confidence: 0.8
|
||||
domain: git
|
||||
source: repo-curation
|
||||
source_repo: affaan-m/everything-claude-code
|
||||
---
|
||||
|
||||
# Everything Claude Code Commit Length
|
||||
|
||||
## Action
|
||||
|
||||
Keep commit subjects concise and close to the repository norm of about 70 characters.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Recent history clusters around ~70 characters, not ~50.
|
||||
- Short, descriptive subjects read well in release notes and PR summaries.
|
||||
|
||||
---
|
||||
id: everything-claude-code-js-file-naming
|
||||
trigger: "when creating a new JavaScript or TypeScript module in everything-claude-code"
|
||||
confidence: 0.85
|
||||
domain: code-style
|
||||
source: repo-curation
|
||||
source_repo: affaan-m/everything-claude-code
|
||||
---
|
||||
|
||||
# Everything Claude Code JS File Naming
|
||||
|
||||
## Action
|
||||
|
||||
Prefer camelCase for JavaScript and TypeScript module filenames, and keep skill or command directories in kebab-case.
|
||||
|
||||
## Evidence
|
||||
|
||||
- `scripts/` and test helpers mostly use camelCase module names.
|
||||
- `skills/` and `commands/` directories use kebab-case consistently.
|
||||
|
||||
---
|
||||
id: everything-claude-code-test-runner
|
||||
trigger: "when adding or updating tests in everything-claude-code"
|
||||
confidence: 0.9
|
||||
domain: testing
|
||||
source: repo-curation
|
||||
source_repo: affaan-m/everything-claude-code
|
||||
---
|
||||
|
||||
# Everything Claude Code Test Runner
|
||||
|
||||
## Action
|
||||
|
||||
Use the repository's existing Node-based test flow: targeted `*.test.js` files first, then `node tests/run-all.js` or `npm test` for broader verification.
|
||||
|
||||
## Evidence
|
||||
|
||||
- The repo uses `tests/run-all.js` as the central test orchestrator.
|
||||
- Test files follow the `*.test.js` naming pattern across hook, CI, and integration coverage.
|
||||
|
||||
---
|
||||
id: everything-claude-code-hooks-change-set
|
||||
trigger: "when modifying hooks or hook-adjacent behavior in everything-claude-code"
|
||||
confidence: 0.88
|
||||
domain: workflow
|
||||
source: repo-curation
|
||||
source_repo: affaan-m/everything-claude-code
|
||||
---
|
||||
|
||||
# Everything Claude Code Hooks Change Set
|
||||
|
||||
## Action
|
||||
|
||||
Update the hook script, its configuration, its tests, and its user-facing documentation together.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Hook fixes routinely span `hooks/hooks.json`, `scripts/hooks/`, `tests/hooks/`, `tests/integration/`, and `hooks/README.md`.
|
||||
- Partial hook changes are a common source of regressions and stale docs.
|
||||
|
||||
---
|
||||
id: everything-claude-code-cross-platform-sync
|
||||
trigger: "when shipping a user-visible feature across ECC surfaces"
|
||||
confidence: 0.9
|
||||
domain: workflow
|
||||
source: repo-curation
|
||||
source_repo: affaan-m/everything-claude-code
|
||||
---
|
||||
|
||||
# Everything Claude Code Cross Platform Sync
|
||||
|
||||
## Action
|
||||
|
||||
Treat the root repo as the source of truth, then mirror shipped changes to `.cursor/`, `.codex/`, `.opencode/`, and `.agents/` only where the feature actually exists.
|
||||
|
||||
## Evidence
|
||||
|
||||
- ECC maintains multiple harness-specific surfaces with overlapping but not identical files.
|
||||
- The safest workflow is root-first followed by explicit parity updates.
|
||||
|
||||
---
|
||||
id: everything-claude-code-release-sync
|
||||
trigger: "when preparing a release for everything-claude-code"
|
||||
confidence: 0.86
|
||||
domain: workflow
|
||||
source: repo-curation
|
||||
source_repo: affaan-m/everything-claude-code
|
||||
---
|
||||
|
||||
# Everything Claude Code Release Sync
|
||||
|
||||
## Action
|
||||
|
||||
Keep package versions, plugin manifests, and release-facing docs synchronized before publishing.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Release work spans `package.json`, `.claude-plugin/*`, `.opencode/package.json`, and release-note content.
|
||||
- Version drift causes broken update paths and confusing install surfaces.
|
||||
|
||||
---
|
||||
id: everything-claude-code-learning-curation
|
||||
trigger: "when importing or evolving instincts for everything-claude-code"
|
||||
confidence: 0.84
|
||||
domain: workflow
|
||||
source: repo-curation
|
||||
source_repo: affaan-m/everything-claude-code
|
||||
---
|
||||
|
||||
# Everything Claude Code Learning Curation
|
||||
|
||||
## Action
|
||||
|
||||
Prefer a small set of accurate instincts over bulk-generated, duplicated, or contradictory instincts.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Auto-generated instinct dumps can duplicate rules, widen triggers too far, or preserve placeholder detector output.
|
||||
- Curated instincts are easier to import, audit, and trust during continuous-learning workflows.
|
||||
97
.claude/skills/everything-claude-code/SKILL.md
Normal file
97
.claude/skills/everything-claude-code/SKILL.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# Everything Claude Code
|
||||
|
||||
Use this skill when working inside the `everything-claude-code` repository and you need repo-specific guidance instead of generic coding advice.
|
||||
|
||||
Optional companion instincts live at `.claude/homunculus/instincts/inherited/everything-claude-code-instincts.yaml` for teams using `continuous-learning-v2`.
|
||||
|
||||
## When to Use
|
||||
|
||||
Activate this skill when the task touches one or more of these areas:
|
||||
- cross-platform parity across Claude Code, Cursor, Codex, and OpenCode
|
||||
- hook scripts, hook docs, or hook tests
|
||||
- skills, commands, agents, or rules that must stay synchronized across surfaces
|
||||
- release work such as version bumps, changelog updates, or plugin metadata updates
|
||||
- continuous-learning or instinct workflows inside this repository
|
||||
|
||||
## How It Works
|
||||
|
||||
### 1. Follow the repo's development contract
|
||||
|
||||
- Use conventional commits such as `feat:`, `fix:`, `docs:`, `test:`, `chore:`.
|
||||
- Keep commit subjects concise and close to the repo norm of about 70 characters.
|
||||
- Prefer camelCase for JavaScript and TypeScript module filenames.
|
||||
- Use kebab-case for skill directories and command filenames.
|
||||
- Keep test files on the existing `*.test.js` pattern.
|
||||
|
||||
### 2. Treat the root repo as the source of truth
|
||||
|
||||
Start from the root implementation, then mirror changes where they are intentionally shipped.
|
||||
|
||||
Typical mirror targets:
|
||||
- `.cursor/`
|
||||
- `.codex/`
|
||||
- `.opencode/`
|
||||
- `.agents/`
|
||||
|
||||
Do not assume every `.claude/` artifact needs a cross-platform copy. Only mirror files that are part of the shipped multi-platform surface.
|
||||
|
||||
### 3. Update hooks with tests and docs together
|
||||
|
||||
When changing hook behavior:
|
||||
1. update `hooks/hooks.json` or the relevant script in `scripts/hooks/`
|
||||
2. update matching tests in `tests/hooks/` or `tests/integration/`
|
||||
3. update `hooks/README.md` if behavior or configuration changed
|
||||
4. verify parity for `.cursor/hooks/` and `.opencode/plugins/` when applicable
|
||||
|
||||
### 4. Keep release metadata in sync
|
||||
|
||||
When preparing a release, verify the same version is reflected anywhere it is surfaced:
|
||||
- `package.json`
|
||||
- `.claude-plugin/plugin.json`
|
||||
- `.claude-plugin/marketplace.json`
|
||||
- `.opencode/package.json`
|
||||
- release notes or changelog entries when the release process expects them
|
||||
|
||||
### 5. Be explicit about continuous-learning changes
|
||||
|
||||
If the task touches `skills/continuous-learning-v2/` or imported instincts:
|
||||
- prefer accurate, low-noise instincts over auto-generated bulk output
|
||||
- keep instinct files importable by `instinct-cli.py`
|
||||
- remove duplicated or contradictory instincts instead of layering more guidance on top
|
||||
|
||||
## Examples
|
||||
|
||||
### Naming examples
|
||||
|
||||
```text
|
||||
skills/continuous-learning-v2/SKILL.md
|
||||
commands/update-docs.md
|
||||
scripts/hooks/session-start.js
|
||||
tests/hooks/hooks.test.js
|
||||
```
|
||||
|
||||
### Commit examples
|
||||
|
||||
```text
|
||||
fix: harden session summary extraction on Stop hook
|
||||
docs: align Codex config examples with current schema
|
||||
test: cover Windows formatter fallback behavior
|
||||
```
|
||||
|
||||
### Skill update checklist
|
||||
|
||||
```text
|
||||
1. Update the root skill or command.
|
||||
2. Mirror it only where that surface is shipped.
|
||||
3. Run targeted tests first, then the broader suite if behavior changed.
|
||||
4. Review docs and release notes for user-visible changes.
|
||||
```
|
||||
|
||||
### Release checklist
|
||||
|
||||
```text
|
||||
1. Bump package and plugin versions.
|
||||
2. Run npm test.
|
||||
3. Verify platform-specific manifests.
|
||||
4. Publish the release notes with a human-readable summary.
|
||||
```
|
||||
@@ -6,10 +6,10 @@ This supplements the root `AGENTS.md` with Codex-specific guidance.
|
||||
|
||||
| Task Type | Recommended Model |
|
||||
|-----------|------------------|
|
||||
| Routine coding, tests, formatting | o4-mini |
|
||||
| Complex features, architecture | o3 |
|
||||
| Debugging, refactoring | o4-mini |
|
||||
| Security review | o3 |
|
||||
| Routine coding, tests, formatting | GPT 5.4 |
|
||||
| Complex features, architecture | GPT 5.4 |
|
||||
| Debugging, refactoring | GPT 5.4 |
|
||||
| Security review | GPT 5.4 |
|
||||
|
||||
## Skills Discovery
|
||||
|
||||
@@ -39,6 +39,20 @@ Available skills:
|
||||
|
||||
Configure in `~/.codex/config.toml` under `[mcp_servers]`. See `.codex/config.toml` for reference configuration with GitHub, Context7, Memory, and Sequential Thinking servers.
|
||||
|
||||
## Multi-Agent Support
|
||||
|
||||
Codex now supports multi-agent workflows behind the experimental `features.multi_agent` flag.
|
||||
|
||||
- Enable it in `.codex/config.toml` with `[features] multi_agent = true`
|
||||
- Define project-local roles under `[agents.<name>]`
|
||||
- Point each role at a TOML layer under `.codex/agents/`
|
||||
- Use `/agent` inside Codex CLI to inspect and steer child agents
|
||||
|
||||
Sample role configs in this repo:
|
||||
- `.codex/agents/explorer.toml` — read-only evidence gathering
|
||||
- `.codex/agents/reviewer.toml` — correctness/security review
|
||||
- `.codex/agents/docs-researcher.toml` — API and release-note verification
|
||||
|
||||
## Key Differences from Claude Code
|
||||
|
||||
| Feature | Claude Code | Codex CLI |
|
||||
@@ -47,7 +61,7 @@ Configure in `~/.codex/config.toml` under `[mcp_servers]`. See `.codex/config.to
|
||||
| Context file | CLAUDE.md + AGENTS.md | AGENTS.md only |
|
||||
| Skills | Skills loaded via plugin | `.agents/skills/` directory |
|
||||
| Commands | `/slash` commands | Instruction-based |
|
||||
| Agents | Subagent Task tool | Single agent model |
|
||||
| Agents | Subagent Task tool | Multi-agent via `/agent` and `[agents.<name>]` roles |
|
||||
| Security | Hook-based enforcement | Instruction + sandbox |
|
||||
| MCP | Full support | Command-based only |
|
||||
|
||||
|
||||
9
.codex/agents/docs-researcher.toml
Normal file
9
.codex/agents/docs-researcher.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
model = "gpt-5.4"
|
||||
model_reasoning_effort = "medium"
|
||||
sandbox_mode = "read-only"
|
||||
|
||||
developer_instructions = """
|
||||
Verify APIs, framework behavior, and release-note claims against primary documentation before changes land.
|
||||
Cite the exact docs or file paths that support each claim.
|
||||
Do not invent undocumented behavior.
|
||||
"""
|
||||
9
.codex/agents/explorer.toml
Normal file
9
.codex/agents/explorer.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
model = "o4-mini"
|
||||
model_reasoning_effort = "medium"
|
||||
sandbox_mode = "read-only"
|
||||
|
||||
developer_instructions = """
|
||||
Stay in exploration mode.
|
||||
Trace the real execution path, cite files and symbols, and avoid proposing fixes unless the parent agent asks for them.
|
||||
Prefer targeted search and file reads over broad scans.
|
||||
"""
|
||||
9
.codex/agents/reviewer.toml
Normal file
9
.codex/agents/reviewer.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
model = "gpt-5.4"
|
||||
model_reasoning_effort = "high"
|
||||
sandbox_mode = "read-only"
|
||||
|
||||
developer_instructions = """
|
||||
Review like an owner.
|
||||
Prioritize correctness, security, behavioral regressions, and missing tests.
|
||||
Lead with concrete findings and avoid style-only feedback unless it hides a real bug.
|
||||
"""
|
||||
@@ -1,42 +1,37 @@
|
||||
# Everything Claude Code (ECC) — Codex CLI Reference Configuration
|
||||
#:schema https://developers.openai.com/codex/config-schema.json
|
||||
|
||||
# Everything Claude Code (ECC) — Codex Reference Configuration
|
||||
#
|
||||
# Copy this file to ~/.codex/config.toml to apply globally.
|
||||
# Or keep it in your project root for project-level config.
|
||||
# Copy this file to ~/.codex/config.toml for global defaults, or keep it in
|
||||
# the project root as .codex/config.toml for project-local settings.
|
||||
#
|
||||
# Docs: https://github.com/openai/codex
|
||||
# Official docs:
|
||||
# - https://developers.openai.com/codex/config-reference
|
||||
# - https://developers.openai.com/codex/multi-agent
|
||||
|
||||
# Model selection
|
||||
model = "o4-mini"
|
||||
model_provider = "openai"
|
||||
|
||||
# Permissions
|
||||
[permissions]
|
||||
# "untrusted" = no writes, "on-request" = ask per action, "never" = full auto
|
||||
# Top-level runtime settings (current Codex schema)
|
||||
approval_policy = "on-request"
|
||||
# "off", "workspace-read", "workspace-write", "danger-full-access"
|
||||
sandbox_mode = "workspace-write"
|
||||
web_search = "live"
|
||||
|
||||
# Notifications (macOS)
|
||||
[notify]
|
||||
command = "terminal-notifier -title 'Codex ECC' -message 'Task completed!' -sound default"
|
||||
on_complete = true
|
||||
# External notifications receive a JSON payload on stdin.
|
||||
notify = [
|
||||
"terminal-notifier",
|
||||
"-title", "Codex ECC",
|
||||
"-message", "Task completed!",
|
||||
"-sound", "default",
|
||||
]
|
||||
|
||||
# History - persistent instructions applied to every session
|
||||
[history]
|
||||
# These are prepended to every conversation
|
||||
persistent_instructions = """
|
||||
Follow ECC principles:
|
||||
1. Test-Driven Development (TDD) - write tests first, 80%+ coverage required
|
||||
2. Immutability - always create new objects, never mutate
|
||||
3. Security-First - validate all inputs, no hardcoded secrets
|
||||
4. Conventional commits: feat|fix|refactor|docs|test|chore|perf|ci: description
|
||||
5. File organization: many small files (200-400 lines, 800 max)
|
||||
6. Error handling: handle at every level, never swallow errors
|
||||
7. Input validation: schema-based validation at system boundaries
|
||||
"""
|
||||
# Prefer AGENTS.md and project-local .codex/AGENTS.md for instructions.
|
||||
# model_instructions_file replaces built-in instructions instead of AGENTS.md,
|
||||
# so leave it unset unless you intentionally want a single override file.
|
||||
# model_instructions_file = "/absolute/path/to/instructions.md"
|
||||
|
||||
# MCP Servers
|
||||
# Codex supports command-based MCP servers
|
||||
# MCP servers
|
||||
[mcp_servers.github]
|
||||
command = "npx"
|
||||
args = ["-y", "@modelcontextprotocol/server-github"]
|
||||
@@ -62,19 +57,41 @@ args = ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
||||
# command = "npx"
|
||||
# args = ["-y", "firecrawl-mcp"]
|
||||
#
|
||||
# [mcp_servers.railway]
|
||||
# [mcp_servers.cloudflare]
|
||||
# command = "npx"
|
||||
# args = ["-y", "@anthropic/railway-mcp"]
|
||||
# args = ["-y", "@cloudflare/mcp-server-cloudflare"]
|
||||
|
||||
# Features
|
||||
[features]
|
||||
web_search_request = true
|
||||
# Codex multi-agent support is experimental as of March 2026.
|
||||
multi_agent = true
|
||||
|
||||
# Profiles — switch with CODEX_PROFILE=<name>
|
||||
# Profiles — switch with `codex -p <name>`
|
||||
[profiles.strict]
|
||||
approval_policy = "on-request"
|
||||
sandbox_mode = "workspace-read"
|
||||
sandbox_mode = "read-only"
|
||||
web_search = "cached"
|
||||
|
||||
[profiles.yolo]
|
||||
approval_policy = "never"
|
||||
sandbox_mode = "workspace-write"
|
||||
web_search = "live"
|
||||
|
||||
# Optional project-local multi-agent roles.
|
||||
# Keep these commented in global config, because config_file paths are resolved
|
||||
# relative to the config.toml file and must exist at load time.
|
||||
#
|
||||
# [agents]
|
||||
# max_threads = 6
|
||||
# max_depth = 1
|
||||
#
|
||||
# [agents.explorer]
|
||||
# description = "Read-only codebase explorer for gathering evidence before changes are proposed."
|
||||
# config_file = "agents/explorer.toml"
|
||||
#
|
||||
# [agents.reviewer]
|
||||
# description = "PR reviewer focused on correctness, security, and missing tests."
|
||||
# config_file = "agents/reviewer.toml"
|
||||
#
|
||||
# [agents.docs_researcher]
|
||||
# description = "Documentation specialist that verifies APIs, framework behavior, and release notes."
|
||||
# config_file = "agents/docs-researcher.toml"
|
||||
|
||||
@@ -29,13 +29,14 @@ function transformToClaude(cursorInput, overrides = {}) {
|
||||
return {
|
||||
tool_input: {
|
||||
command: cursorInput.command || cursorInput.args?.command || '',
|
||||
file_path: cursorInput.path || cursorInput.file || '',
|
||||
file_path: cursorInput.path || cursorInput.file || cursorInput.args?.filePath || '',
|
||||
...overrides.tool_input,
|
||||
},
|
||||
tool_output: {
|
||||
output: cursorInput.output || cursorInput.result || '',
|
||||
...overrides.tool_output,
|
||||
},
|
||||
transcript_path: cursorInput.transcript_path || cursorInput.transcriptPath || cursorInput.session?.transcript_path || '',
|
||||
_cursor: {
|
||||
conversation_id: cursorInput.conversation_id,
|
||||
hook_event_name: cursorInput.hook_event_name,
|
||||
@@ -59,4 +60,22 @@ function runExistingHook(scriptName, stdinData) {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { readStdin, getPluginRoot, transformToClaude, runExistingHook };
|
||||
function hookEnabled(hookId, allowedProfiles = ['standard', 'strict']) {
|
||||
const rawProfile = String(process.env.ECC_HOOK_PROFILE || 'standard').toLowerCase();
|
||||
const profile = ['minimal', 'standard', 'strict'].includes(rawProfile) ? rawProfile : 'standard';
|
||||
|
||||
const disabled = new Set(
|
||||
String(process.env.ECC_DISABLED_HOOKS || '')
|
||||
.split(',')
|
||||
.map(v => v.trim().toLowerCase())
|
||||
.filter(Boolean)
|
||||
);
|
||||
|
||||
if (disabled.has(String(hookId || '').toLowerCase())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return allowedProfiles.includes(profile);
|
||||
}
|
||||
|
||||
module.exports = { readStdin, getPluginRoot, transformToClaude, runExistingHook, hookEnabled };
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
#!/usr/bin/env node
|
||||
const { readStdin } = require('./adapter');
|
||||
const { readStdin, hookEnabled } = require('./adapter');
|
||||
|
||||
readStdin().then(raw => {
|
||||
try {
|
||||
const input = JSON.parse(raw);
|
||||
const cmd = input.command || '';
|
||||
const output = input.output || input.result || '';
|
||||
const input = JSON.parse(raw || '{}');
|
||||
const cmd = String(input.command || input.args?.command || '');
|
||||
const output = String(input.output || input.result || '');
|
||||
|
||||
// PR creation logging
|
||||
if (/gh pr create/.test(cmd)) {
|
||||
if (hookEnabled('post:bash:pr-created', ['standard', 'strict']) && /\bgh\s+pr\s+create\b/.test(cmd)) {
|
||||
const m = output.match(/https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/\d+/);
|
||||
if (m) {
|
||||
console.error('[ECC] PR created: ' + m[0]);
|
||||
@@ -17,10 +17,12 @@ readStdin().then(raw => {
|
||||
}
|
||||
}
|
||||
|
||||
// Build completion notice
|
||||
if (/(npm run build|pnpm build|yarn build)/.test(cmd)) {
|
||||
if (hookEnabled('post:bash:build-complete', ['standard', 'strict']) && /(npm run build|pnpm build|yarn build)/.test(cmd)) {
|
||||
console.error('[ECC] Build completed');
|
||||
}
|
||||
} catch {}
|
||||
} catch {
|
||||
// noop
|
||||
}
|
||||
|
||||
process.stdout.write(raw);
|
||||
}).catch(() => process.exit(0));
|
||||
|
||||
@@ -1,27 +1,41 @@
|
||||
#!/usr/bin/env node
|
||||
const { readStdin } = require('./adapter');
|
||||
readStdin().then(raw => {
|
||||
try {
|
||||
const input = JSON.parse(raw);
|
||||
const cmd = input.command || '';
|
||||
const { readStdin, hookEnabled } = require('./adapter');
|
||||
const { splitShellSegments } = require('../../scripts/lib/shell-split');
|
||||
|
||||
// 1. Block dev server outside tmux
|
||||
if (process.platform !== 'win32' && /(npm run dev\b|pnpm( run)? dev\b|yarn dev\b|bun run dev\b)/.test(cmd)) {
|
||||
console.error('[ECC] BLOCKED: Dev server must run in tmux for log access');
|
||||
console.error('[ECC] Use: tmux new-session -d -s dev "npm run dev"');
|
||||
process.exit(2);
|
||||
readStdin()
|
||||
.then(raw => {
|
||||
try {
|
||||
const input = JSON.parse(raw || '{}');
|
||||
const cmd = String(input.command || input.args?.command || '');
|
||||
|
||||
if (hookEnabled('pre:bash:dev-server-block', ['standard', 'strict']) && process.platform !== 'win32') {
|
||||
const segments = splitShellSegments(cmd);
|
||||
const tmuxLauncher = /^\s*tmux\s+(new|new-session|new-window|split-window)\b/;
|
||||
const devPattern = /\b(npm\s+run\s+dev|pnpm(?:\s+run)?\s+dev|yarn\s+dev|bun\s+run\s+dev)\b/;
|
||||
const hasBlockedDev = segments.some(segment => devPattern.test(segment) && !tmuxLauncher.test(segment));
|
||||
if (hasBlockedDev) {
|
||||
console.error('[ECC] BLOCKED: Dev server must run in tmux for log access');
|
||||
console.error('[ECC] Use: tmux new-session -d -s dev "npm run dev"');
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
hookEnabled('pre:bash:tmux-reminder', ['strict']) &&
|
||||
process.platform !== 'win32' &&
|
||||
!process.env.TMUX &&
|
||||
/(npm (install|test)|pnpm (install|test)|yarn (install|test)?|bun (install|test)|cargo build|make\b|docker\b|pytest|vitest|playwright)/.test(cmd)
|
||||
) {
|
||||
console.error('[ECC] Consider running in tmux for session persistence');
|
||||
}
|
||||
|
||||
if (hookEnabled('pre:bash:git-push-reminder', ['strict']) && /\bgit\s+push\b/.test(cmd)) {
|
||||
console.error('[ECC] Review changes before push: git diff origin/main...HEAD');
|
||||
}
|
||||
} catch {
|
||||
// noop
|
||||
}
|
||||
|
||||
// 2. Tmux reminder for long-running commands
|
||||
if (process.platform !== 'win32' && !process.env.TMUX &&
|
||||
/(npm (install|test)|pnpm (install|test)|yarn (install|test)?|bun (install|test)|cargo build|make\b|docker\b|pytest|vitest|playwright)/.test(cmd)) {
|
||||
console.error('[ECC] Consider running in tmux for session persistence');
|
||||
}
|
||||
|
||||
// 3. Git push review reminder
|
||||
if (/git push/.test(cmd)) {
|
||||
console.error('[ECC] Review changes before push: git diff origin/main...HEAD');
|
||||
}
|
||||
} catch {}
|
||||
process.stdout.write(raw);
|
||||
}).catch(() => process.exit(0));
|
||||
process.stdout.write(raw);
|
||||
})
|
||||
.catch(() => process.exit(0));
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
#!/usr/bin/env node
|
||||
const { readStdin, runExistingHook, transformToClaude } = require('./adapter');
|
||||
const { readStdin, runExistingHook, transformToClaude, hookEnabled } = require('./adapter');
|
||||
readStdin().then(raw => {
|
||||
const input = JSON.parse(raw);
|
||||
const input = JSON.parse(raw || '{}');
|
||||
const claudeInput = transformToClaude(input);
|
||||
runExistingHook('session-end.js', claudeInput);
|
||||
runExistingHook('evaluate-session.js', claudeInput);
|
||||
if (hookEnabled('session:end:marker', ['minimal', 'standard', 'strict'])) {
|
||||
runExistingHook('session-end-marker.js', claudeInput);
|
||||
}
|
||||
process.stdout.write(raw);
|
||||
}).catch(() => process.exit(0));
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
#!/usr/bin/env node
|
||||
const { readStdin, runExistingHook, transformToClaude } = require('./adapter');
|
||||
const { readStdin, runExistingHook, transformToClaude, hookEnabled } = require('./adapter');
|
||||
readStdin().then(raw => {
|
||||
const input = JSON.parse(raw);
|
||||
const input = JSON.parse(raw || '{}');
|
||||
const claudeInput = transformToClaude(input);
|
||||
runExistingHook('session-start.js', claudeInput);
|
||||
if (hookEnabled('session:start', ['minimal', 'standard', 'strict'])) {
|
||||
runExistingHook('session-start.js', claudeInput);
|
||||
}
|
||||
process.stdout.write(raw);
|
||||
}).catch(() => process.exit(0));
|
||||
|
||||
@@ -1,7 +1,21 @@
|
||||
#!/usr/bin/env node
|
||||
const { readStdin, runExistingHook, transformToClaude } = require('./adapter');
|
||||
const { readStdin, runExistingHook, transformToClaude, hookEnabled } = require('./adapter');
|
||||
readStdin().then(raw => {
|
||||
const claudeInput = JSON.parse(raw || '{}');
|
||||
runExistingHook('check-console-log.js', transformToClaude(claudeInput));
|
||||
const input = JSON.parse(raw || '{}');
|
||||
const claudeInput = transformToClaude(input);
|
||||
|
||||
if (hookEnabled('stop:check-console-log', ['standard', 'strict'])) {
|
||||
runExistingHook('check-console-log.js', claudeInput);
|
||||
}
|
||||
if (hookEnabled('stop:session-end', ['minimal', 'standard', 'strict'])) {
|
||||
runExistingHook('session-end.js', claudeInput);
|
||||
}
|
||||
if (hookEnabled('stop:evaluate-session', ['minimal', 'standard', 'strict'])) {
|
||||
runExistingHook('evaluate-session.js', claudeInput);
|
||||
}
|
||||
if (hookEnabled('stop:cost-tracker', ['minimal', 'standard', 'strict'])) {
|
||||
runExistingHook('cost-tracker.js', claudeInput);
|
||||
}
|
||||
|
||||
process.stdout.write(raw);
|
||||
}).catch(() => process.exit(0));
|
||||
|
||||
25
.cursor/rules/php-coding-style.md
Normal file
25
.cursor/rules/php-coding-style.md
Normal file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
description: "PHP coding style extending common rules"
|
||||
globs: ["**/*.php", "**/composer.json"]
|
||||
alwaysApply: false
|
||||
---
|
||||
# PHP Coding Style
|
||||
|
||||
> This file extends the common coding style rule with PHP specific content.
|
||||
|
||||
## Standards
|
||||
|
||||
- Follow **PSR-12** formatting and naming conventions.
|
||||
- Prefer `declare(strict_types=1);` in application code.
|
||||
- Use scalar type hints, return types, and typed properties everywhere new code permits.
|
||||
|
||||
## Immutability
|
||||
|
||||
- Prefer immutable DTOs and value objects for data crossing service boundaries.
|
||||
- Use `readonly` properties or immutable constructors for request/response payloads where possible.
|
||||
- Keep arrays for simple maps; promote business-critical structures into explicit classes.
|
||||
|
||||
## Formatting
|
||||
|
||||
- Use **PHP-CS-Fixer** or **Laravel Pint** for formatting.
|
||||
- Use **PHPStan** or **Psalm** for static analysis.
|
||||
21
.cursor/rules/php-hooks.md
Normal file
21
.cursor/rules/php-hooks.md
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
description: "PHP hooks extending common rules"
|
||||
globs: ["**/*.php", "**/composer.json", "**/phpstan.neon", "**/phpstan.neon.dist", "**/psalm.xml"]
|
||||
alwaysApply: false
|
||||
---
|
||||
# PHP Hooks
|
||||
|
||||
> This file extends the common hooks rule with PHP specific content.
|
||||
|
||||
## PostToolUse Hooks
|
||||
|
||||
Configure in `~/.claude/settings.json`:
|
||||
|
||||
- **Pint / PHP-CS-Fixer**: Auto-format edited `.php` files.
|
||||
- **PHPStan / Psalm**: Run static analysis after PHP edits in typed codebases.
|
||||
- **PHPUnit / Pest**: Run targeted tests for touched files or modules when edits affect behavior.
|
||||
|
||||
## Warnings
|
||||
|
||||
- Warn on `var_dump`, `dd`, `dump`, or `die()` left in edited files.
|
||||
- Warn when edited PHP files add raw SQL or disable CSRF/session protections.
|
||||
23
.cursor/rules/php-patterns.md
Normal file
23
.cursor/rules/php-patterns.md
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
description: "PHP patterns extending common rules"
|
||||
globs: ["**/*.php", "**/composer.json"]
|
||||
alwaysApply: false
|
||||
---
|
||||
# PHP Patterns
|
||||
|
||||
> This file extends the common patterns rule with PHP specific content.
|
||||
|
||||
## Thin Controllers, Explicit Services
|
||||
|
||||
- Keep controllers focused on transport: auth, validation, serialization, status codes.
|
||||
- Move business rules into application/domain services that are easy to test without HTTP bootstrapping.
|
||||
|
||||
## DTOs and Value Objects
|
||||
|
||||
- Replace shape-heavy associative arrays with DTOs for requests, commands, and external API payloads.
|
||||
- Use value objects for money, identifiers, and constrained concepts.
|
||||
|
||||
## Dependency Injection
|
||||
|
||||
- Depend on interfaces or narrow service contracts, not framework globals.
|
||||
- Pass collaborators through constructors so services are testable without service-locator lookups.
|
||||
24
.cursor/rules/php-security.md
Normal file
24
.cursor/rules/php-security.md
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
description: "PHP security extending common rules"
|
||||
globs: ["**/*.php", "**/composer.lock", "**/composer.json"]
|
||||
alwaysApply: false
|
||||
---
|
||||
# PHP Security
|
||||
|
||||
> This file extends the common security rule with PHP specific content.
|
||||
|
||||
## Database Safety
|
||||
|
||||
- Use prepared statements (`PDO`, Doctrine, Eloquent query builder) for all dynamic queries.
|
||||
- Scope ORM mass-assignment carefully and whitelist writable fields.
|
||||
|
||||
## Secrets and Dependencies
|
||||
|
||||
- Load secrets from environment variables or a secret manager, never from committed config files.
|
||||
- Run `composer audit` in CI and review package trust before adding dependencies.
|
||||
|
||||
## Auth and Session Safety
|
||||
|
||||
- Use `password_hash()` / `password_verify()` for password storage.
|
||||
- Regenerate session identifiers after authentication and privilege changes.
|
||||
- Enforce CSRF protection on state-changing web requests.
|
||||
26
.cursor/rules/php-testing.md
Normal file
26
.cursor/rules/php-testing.md
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
description: "PHP testing extending common rules"
|
||||
globs: ["**/*.php", "**/phpunit.xml", "**/phpunit.xml.dist", "**/composer.json"]
|
||||
alwaysApply: false
|
||||
---
|
||||
# PHP Testing
|
||||
|
||||
> This file extends the common testing rule with PHP specific content.
|
||||
|
||||
## Framework
|
||||
|
||||
Use **PHPUnit** as the default test framework. **Pest** is also acceptable when the project already uses it.
|
||||
|
||||
## Coverage
|
||||
|
||||
```bash
|
||||
vendor/bin/phpunit --coverage-text
|
||||
# or
|
||||
vendor/bin/pest --coverage
|
||||
```
|
||||
|
||||
## Test Organization
|
||||
|
||||
- Separate fast unit tests from framework/database integration tests.
|
||||
- Use factory/builders for fixtures instead of large hand-written arrays.
|
||||
- Keep HTTP/controller tests focused on transport and validation; move business rules into service-level tests.
|
||||
15
.github/FUNDING.yml
vendored
15
.github/FUNDING.yml
vendored
@@ -1,15 +1,2 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: [affaan-m]
|
||||
# patreon: # Replace with a single Patreon username
|
||||
# open_collective: # Replace with a single Open Collective username
|
||||
# ko_fi: # Replace with a single Ko-fi username
|
||||
# tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
# community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-hierarchical-namespace-controller
|
||||
# liberapay: # Replace with a single Liberapay username
|
||||
# issuehunt: # Replace with a single IssueHunt username
|
||||
# lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-hierarchical-namespace-controller
|
||||
# polar: # Replace with a single Polar username
|
||||
# buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
|
||||
# thanks_dev: # Replace with a single thanks.dev username
|
||||
github: affaan-m
|
||||
custom: ['https://ecc.tools']
|
||||
|
||||
20
.github/release.yml
vendored
Normal file
20
.github/release.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
changelog:
|
||||
categories:
|
||||
- title: Core Harness
|
||||
labels:
|
||||
- enhancement
|
||||
- feature
|
||||
- title: Reliability & Bug Fixes
|
||||
labels:
|
||||
- bug
|
||||
- fix
|
||||
- title: Docs & Guides
|
||||
labels:
|
||||
- docs
|
||||
- title: Tooling & CI
|
||||
labels:
|
||||
- ci
|
||||
- chore
|
||||
exclude:
|
||||
labels:
|
||||
- skip-changelog
|
||||
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
@@ -156,6 +156,9 @@ jobs:
|
||||
with:
|
||||
node-version: '20.x'
|
||||
|
||||
- name: Install validation dependencies
|
||||
run: npm ci --ignore-scripts
|
||||
|
||||
- name: Validate agents
|
||||
run: node scripts/ci/validate-agents.js
|
||||
continue-on-error: false
|
||||
|
||||
185
.github/workflows/monthly-metrics.yml
vendored
Normal file
185
.github/workflows/monthly-metrics.yml
vendored
Normal file
@@ -0,0 +1,185 @@
|
||||
name: Monthly Metrics Snapshot
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 14 1 * *' # Monthly on the 1st at 14:00 UTC
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
|
||||
jobs:
|
||||
snapshot:
|
||||
name: Update metrics issue
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Update monthly metrics issue
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const owner = context.repo.owner;
|
||||
const repo = context.repo.repo;
|
||||
const title = "Monthly Metrics Snapshot";
|
||||
const label = "metrics-snapshot";
|
||||
const monthKey = new Date().toISOString().slice(0, 7);
|
||||
|
||||
function parseLastPage(linkHeader) {
|
||||
if (!linkHeader) return null;
|
||||
const match = linkHeader.match(/&page=(\d+)>; rel="last"/);
|
||||
return match ? Number(match[1]) : null;
|
||||
}
|
||||
|
||||
function fmt(value) {
|
||||
if (value === null || value === undefined) return "n/a";
|
||||
return Number(value).toLocaleString("en-US");
|
||||
}
|
||||
|
||||
async function getNpmDownloads(range, pkg) {
|
||||
try {
|
||||
const res = await fetch(`https://api.npmjs.org/downloads/point/${range}/${pkg}`);
|
||||
if (!res.ok) return null;
|
||||
const data = await res.json();
|
||||
return data.downloads ?? null;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function getContributorsCount() {
|
||||
try {
|
||||
const resp = await github.rest.repos.listContributors({
|
||||
owner,
|
||||
repo,
|
||||
per_page: 1,
|
||||
anon: "false"
|
||||
});
|
||||
return parseLastPage(resp.headers.link) ?? resp.data.length;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function getReleasesCount() {
|
||||
try {
|
||||
const resp = await github.rest.repos.listReleases({
|
||||
owner,
|
||||
repo,
|
||||
per_page: 1
|
||||
});
|
||||
return parseLastPage(resp.headers.link) ?? resp.data.length;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function getTraffic(metric) {
|
||||
try {
|
||||
const route = metric === "clones"
|
||||
? "GET /repos/{owner}/{repo}/traffic/clones"
|
||||
: "GET /repos/{owner}/{repo}/traffic/views";
|
||||
const resp = await github.request(route, { owner, repo });
|
||||
return resp.data?.count ?? null;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
const [
|
||||
mainWeek,
|
||||
shieldWeek,
|
||||
mainMonth,
|
||||
shieldMonth,
|
||||
repoData,
|
||||
contributors,
|
||||
releases,
|
||||
views14d,
|
||||
clones14d
|
||||
] = await Promise.all([
|
||||
getNpmDownloads("last-week", "ecc-universal"),
|
||||
getNpmDownloads("last-week", "ecc-agentshield"),
|
||||
getNpmDownloads("last-month", "ecc-universal"),
|
||||
getNpmDownloads("last-month", "ecc-agentshield"),
|
||||
github.rest.repos.get({ owner, repo }),
|
||||
getContributorsCount(),
|
||||
getReleasesCount(),
|
||||
getTraffic("views"),
|
||||
getTraffic("clones")
|
||||
]);
|
||||
|
||||
const stars = repoData.data.stargazers_count;
|
||||
const forks = repoData.data.forks_count;
|
||||
|
||||
const tableHeader = [
|
||||
"| Month (UTC) | ecc-universal (week) | ecc-agentshield (week) | ecc-universal (30d) | ecc-agentshield (30d) | Stars | Forks | Contributors | GitHub App installs (manual) | Views (14d) | Clones (14d) | Releases |",
|
||||
"|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|"
|
||||
].join("\n");
|
||||
|
||||
const row = `| ${monthKey} | ${fmt(mainWeek)} | ${fmt(shieldWeek)} | ${fmt(mainMonth)} | ${fmt(shieldMonth)} | ${fmt(stars)} | ${fmt(forks)} | ${fmt(contributors)} | n/a | ${fmt(views14d)} | ${fmt(clones14d)} | ${fmt(releases)} |`;
|
||||
|
||||
const intro = [
|
||||
"# Monthly Metrics Snapshot",
|
||||
"",
|
||||
"Automated monthly snapshot for sponsor/partner reporting.",
|
||||
"",
|
||||
"- `GitHub App installs (manual)` is intentionally manual until a stable public API path is available.",
|
||||
"- Traffic metrics are 14-day rolling windows from the GitHub traffic API and can show `n/a` if unavailable.",
|
||||
"",
|
||||
tableHeader
|
||||
].join("\n");
|
||||
|
||||
try {
|
||||
await github.rest.issues.getLabel({ owner, repo, name: label });
|
||||
} catch (error) {
|
||||
if (error.status === 404) {
|
||||
await github.rest.issues.createLabel({
|
||||
owner,
|
||||
repo,
|
||||
name: label,
|
||||
color: "0e8a16",
|
||||
description: "Automated monthly project metrics snapshots"
|
||||
});
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
const issuesResp = await github.rest.issues.listForRepo({
|
||||
owner,
|
||||
repo,
|
||||
state: "open",
|
||||
labels: label,
|
||||
per_page: 100
|
||||
});
|
||||
|
||||
let issue = issuesResp.data.find((item) => item.title === title);
|
||||
|
||||
if (!issue) {
|
||||
const created = await github.rest.issues.create({
|
||||
owner,
|
||||
repo,
|
||||
title,
|
||||
labels: [label],
|
||||
body: `${intro}\n${row}\n`
|
||||
});
|
||||
console.log(`Created issue #${created.data.number}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const currentBody = issue.body || "";
|
||||
if (currentBody.includes(`| ${monthKey} |`)) {
|
||||
console.log(`Issue #${issue.number} already has snapshot row for ${monthKey}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const body = currentBody.includes("| Month (UTC) |")
|
||||
? `${currentBody.trimEnd()}\n${row}\n`
|
||||
: `${intro}\n${row}\n`;
|
||||
|
||||
await github.rest.issues.update({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: issue.number,
|
||||
body
|
||||
});
|
||||
console.log(`Updated issue #${issue.number}`);
|
||||
38
.github/workflows/release.yml
vendored
38
.github/workflows/release.yml
vendored
@@ -37,23 +37,31 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Generate changelog
|
||||
id: changelog
|
||||
- name: Generate release highlights
|
||||
id: highlights
|
||||
env:
|
||||
TAG_NAME: ${{ github.ref_name }}
|
||||
run: |
|
||||
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
|
||||
if [ -z "$PREV_TAG" ]; then
|
||||
COMMITS=$(git log --pretty=format:"- %s" HEAD)
|
||||
else
|
||||
COMMITS=$(git log --pretty=format:"- %s" ${PREV_TAG}..HEAD)
|
||||
fi
|
||||
echo "commits<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$COMMITS" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
TAG_VERSION="${TAG_NAME#v}"
|
||||
cat > release_body.md <<EOF
|
||||
## ECC ${TAG_VERSION}
|
||||
|
||||
### What This Release Focuses On
|
||||
- Harness reliability and hook stability across Claude Code, Cursor, OpenCode, and Codex
|
||||
- Stronger eval-driven workflows and quality gates
|
||||
- Better operator UX for autonomous loop execution
|
||||
|
||||
### Notable Changes
|
||||
- Session persistence and hook lifecycle fixes
|
||||
- Expanded skills and command coverage for harness performance work
|
||||
- Improved release-note generation and changelog hygiene
|
||||
|
||||
### Notes
|
||||
- For migration tips and compatibility notes, see README and CHANGELOG.
|
||||
EOF
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
body: |
|
||||
## Changes
|
||||
${{ steps.changelog.outputs.commits }}
|
||||
generate_release_notes: false
|
||||
body_path: release_body.md
|
||||
generate_release_notes: true
|
||||
|
||||
29
.github/workflows/reusable-release.yml
vendored
29
.github/workflows/reusable-release.yml
vendored
@@ -34,26 +34,23 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Generate changelog
|
||||
id: changelog
|
||||
- name: Generate release highlights
|
||||
env:
|
||||
TAG_NAME: ${{ inputs.tag }}
|
||||
run: |
|
||||
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
|
||||
if [ -z "$PREV_TAG" ]; then
|
||||
COMMITS=$(git log --pretty=format:"- %s" HEAD)
|
||||
else
|
||||
COMMITS=$(git log --pretty=format:"- %s" ${PREV_TAG}..HEAD)
|
||||
fi
|
||||
# Use unique delimiter to prevent truncation if commit messages contain EOF
|
||||
DELIMITER="COMMITS_END_$(date +%s)"
|
||||
echo "commits<<${DELIMITER}" >> $GITHUB_OUTPUT
|
||||
echo "$COMMITS" >> $GITHUB_OUTPUT
|
||||
echo "${DELIMITER}" >> $GITHUB_OUTPUT
|
||||
TAG_VERSION="${TAG_NAME#v}"
|
||||
cat > release_body.md <<EOF
|
||||
## ECC ${TAG_VERSION}
|
||||
|
||||
### What This Release Focuses On
|
||||
- Harness reliability and cross-platform compatibility
|
||||
- Eval-driven quality improvements
|
||||
- Better workflow and operator ergonomics
|
||||
EOF
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ inputs.tag }}
|
||||
body: |
|
||||
## Changes
|
||||
${{ steps.changelog.outputs.commits }}
|
||||
body_path: release_body.md
|
||||
generate_release_notes: ${{ inputs.generate-notes }}
|
||||
|
||||
3
.github/workflows/reusable-validate.yml
vendored
3
.github/workflows/reusable-validate.yml
vendored
@@ -24,6 +24,9 @@ jobs:
|
||||
with:
|
||||
node-version: ${{ inputs.node-version }}
|
||||
|
||||
- name: Install validation dependencies
|
||||
run: npm ci --ignore-scripts
|
||||
|
||||
- name: Validate agents
|
||||
run: node scripts/ci/validate-agents.js
|
||||
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -23,6 +23,7 @@ node_modules/
|
||||
|
||||
# Build output
|
||||
dist/
|
||||
coverage/
|
||||
|
||||
# Python
|
||||
__pycache__/
|
||||
|
||||
@@ -148,7 +148,7 @@ You are an expert planning specialist...
|
||||
"description": "Expert planning specialist...",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/planner.txt}",
|
||||
"prompt": "{file:prompts/agents/planner.txt}",
|
||||
"tools": { "read": true, "bash": true }
|
||||
}
|
||||
}
|
||||
@@ -213,7 +213,7 @@ Create a detailed implementation plan for: $ARGUMENTS
|
||||
```json
|
||||
{
|
||||
"instructions": [
|
||||
".opencode/instructions/INSTRUCTIONS.md",
|
||||
"instructions/INSTRUCTIONS.md",
|
||||
"rules/common/security.md",
|
||||
"rules/common/coding-style.md"
|
||||
]
|
||||
@@ -258,6 +258,8 @@ After migration, ALL 23 commands are available:
|
||||
| `/instinct-import` | Import instincts |
|
||||
| `/instinct-export` | Export instincts |
|
||||
| `/evolve` | Cluster instincts into skills |
|
||||
| `/promote` | Promote project instincts to global scope |
|
||||
| `/projects` | List known projects and instinct stats |
|
||||
|
||||
## Available Agents
|
||||
|
||||
@@ -295,6 +297,15 @@ Then in your `opencode.json`:
|
||||
}
|
||||
```
|
||||
|
||||
This only loads the published ECC OpenCode plugin module (hooks/events and exported plugin tools).
|
||||
It does **not** automatically inject ECC's full `agent`, `command`, or `instructions` config into your project.
|
||||
|
||||
If you want the full ECC OpenCode workflow surface, use the repository's bundled `.opencode/opencode.json` as your base config or copy these pieces into your project:
|
||||
- `.opencode/commands/`
|
||||
- `.opencode/prompts/`
|
||||
- `.opencode/instructions/INSTRUCTIONS.md`
|
||||
- the `agent` and `command` sections from `.opencode/opencode.json`
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Configuration Not Loading
|
||||
@@ -320,6 +331,7 @@ Then in your `opencode.json`:
|
||||
1. Verify the command is defined in `opencode.json` or as `.md` file in `.opencode/commands/`
|
||||
2. Check the referenced agent exists
|
||||
3. Ensure the template uses `$ARGUMENTS` for user input
|
||||
4. If you installed only `plugin: ["ecc-universal"]`, note that npm plugin install does not auto-add ECC commands or agents to your project config
|
||||
|
||||
## Best Practices
|
||||
|
||||
|
||||
@@ -32,7 +32,16 @@ Add to your `opencode.json`:
|
||||
"plugin": ["ecc-universal"]
|
||||
}
|
||||
```
|
||||
After installation, the `ecc-install` CLI becomes available:
|
||||
|
||||
This loads the ECC OpenCode plugin module from npm:
|
||||
- hook/event integrations
|
||||
- bundled custom tools exported by the plugin
|
||||
|
||||
It does **not** auto-register the full ECC command/agent/instruction catalog in your project config. For the full OpenCode setup, either:
|
||||
- run OpenCode inside this repository, or
|
||||
- copy the relevant `.opencode/commands/`, `.opencode/prompts/`, `.opencode/instructions/`, and the `instructions`, `agent`, and `command` config entries into your own project
|
||||
|
||||
After installation, the `ecc-install` CLI is also available:
|
||||
|
||||
```bash
|
||||
npx ecc-install typescript
|
||||
@@ -67,7 +76,7 @@ opencode
|
||||
| go-build-resolver | Go build errors |
|
||||
| database-reviewer | Database optimization |
|
||||
|
||||
### Commands (24)
|
||||
### Commands (31)
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
@@ -95,6 +104,13 @@ opencode
|
||||
| `/instinct-import` | Import instincts |
|
||||
| `/instinct-export` | Export instincts |
|
||||
| `/evolve` | Cluster instincts |
|
||||
| `/promote` | Promote project instincts |
|
||||
| `/projects` | List known projects |
|
||||
| `/harness-audit` | Audit harness reliability and eval readiness |
|
||||
| `/loop-start` | Start controlled agentic loops |
|
||||
| `/loop-status` | Check loop state and checkpoints |
|
||||
| `/quality-gate` | Run quality gates on file/repo scope |
|
||||
| `/model-route` | Route tasks by model and budget |
|
||||
|
||||
### Plugin Hooks
|
||||
|
||||
@@ -128,6 +144,18 @@ OpenCode's plugin system maps to Claude Code hooks:
|
||||
|
||||
OpenCode has 20+ additional events not available in Claude Code.
|
||||
|
||||
### Hook Runtime Controls
|
||||
|
||||
OpenCode plugin hooks honor the same runtime controls used by Claude Code/Cursor:
|
||||
|
||||
```bash
|
||||
export ECC_HOOK_PROFILE=standard
|
||||
export ECC_DISABLED_HOOKS="pre:bash:tmux-reminder,post:edit:typecheck"
|
||||
```
|
||||
|
||||
- `ECC_HOOK_PROFILE`: `minimal`, `standard` (default), `strict`
|
||||
- `ECC_DISABLED_HOOKS`: comma-separated hook IDs to disable
|
||||
|
||||
## Skills
|
||||
|
||||
The default OpenCode config loads 11 curated ECC skills via the `instructions` array:
|
||||
@@ -161,7 +189,7 @@ Full configuration in `opencode.json`:
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"model": "anthropic/claude-sonnet-4-5",
|
||||
"small_model": "anthropic/claude-haiku-4-5",
|
||||
"plugin": ["./.opencode/plugins"],
|
||||
"plugin": ["./plugins"],
|
||||
"instructions": [
|
||||
"skills/tdd-workflow/SKILL.md",
|
||||
"skills/security-review/SKILL.md"
|
||||
|
||||
@@ -1,112 +1,36 @@
|
||||
---
|
||||
description: Cluster instincts into skills
|
||||
description: Analyze instincts and suggest or generate evolved structures
|
||||
agent: build
|
||||
---
|
||||
|
||||
# Evolve Command
|
||||
|
||||
Cluster related instincts into structured skills: $ARGUMENTS
|
||||
Analyze and evolve instincts in continuous-learning-v2: $ARGUMENTS
|
||||
|
||||
## Your Task
|
||||
|
||||
Analyze instincts and promote clusters to skills.
|
||||
Run:
|
||||
|
||||
## Evolution Process
|
||||
|
||||
### Step 1: Analyze Instincts
|
||||
|
||||
Group instincts by:
|
||||
- Trigger similarity
|
||||
- Action patterns
|
||||
- Category tags
|
||||
- Confidence levels
|
||||
|
||||
### Step 2: Identify Clusters
|
||||
|
||||
```
|
||||
Cluster: Error Handling
|
||||
├── Instinct: Catch specific errors (0.85)
|
||||
├── Instinct: Wrap errors with context (0.82)
|
||||
├── Instinct: Log errors with stack trace (0.78)
|
||||
└── Instinct: Return meaningful error messages (0.80)
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" evolve $ARGUMENTS
|
||||
```
|
||||
|
||||
### Step 3: Generate Skill
|
||||
If `CLAUDE_PLUGIN_ROOT` is unavailable, use:
|
||||
|
||||
When cluster has:
|
||||
- 3+ instincts
|
||||
- Average confidence > 0.75
|
||||
- Cohesive theme
|
||||
|
||||
Generate SKILL.md:
|
||||
|
||||
```markdown
|
||||
# Error Handling Skill
|
||||
|
||||
## Overview
|
||||
Patterns for robust error handling learned from session observations.
|
||||
|
||||
## Patterns
|
||||
|
||||
### 1. Catch Specific Errors
|
||||
**Trigger**: When catching errors with generic catch
|
||||
**Action**: Use specific error types
|
||||
|
||||
### 2. Wrap Errors with Context
|
||||
**Trigger**: When re-throwing errors
|
||||
**Action**: Add context with fmt.Errorf or Error.cause
|
||||
|
||||
### 3. Log with Stack Trace
|
||||
**Trigger**: When logging errors
|
||||
**Action**: Include stack trace for debugging
|
||||
|
||||
### 4. Meaningful Messages
|
||||
**Trigger**: When returning errors to users
|
||||
**Action**: Provide actionable error messages
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve $ARGUMENTS
|
||||
```
|
||||
|
||||
### Step 4: Archive Instincts
|
||||
## Supported Args (v2.1)
|
||||
|
||||
Move evolved instincts to `archived/` with reference to skill.
|
||||
- no args: analysis only
|
||||
- `--generate`: also generate files under `evolved/{skills,commands,agents}`
|
||||
|
||||
## Evolution Report
|
||||
## Behavior Notes
|
||||
|
||||
```
|
||||
Evolution Summary
|
||||
=================
|
||||
|
||||
Clusters Found: X
|
||||
|
||||
Cluster 1: Error Handling
|
||||
- Instincts: 5
|
||||
- Avg Confidence: 0.82
|
||||
- Status: ✅ Promoted to skill
|
||||
|
||||
Cluster 2: Testing Patterns
|
||||
- Instincts: 3
|
||||
- Avg Confidence: 0.71
|
||||
- Status: ⏳ Needs more confidence
|
||||
|
||||
Cluster 3: Git Workflow
|
||||
- Instincts: 2
|
||||
- Avg Confidence: 0.88
|
||||
- Status: ⏳ Needs more instincts
|
||||
|
||||
Skills Created:
|
||||
- skills/error-handling/SKILL.md
|
||||
|
||||
Instincts Archived: 5
|
||||
Remaining Instincts: 12
|
||||
```
|
||||
|
||||
## Thresholds
|
||||
|
||||
| Metric | Threshold |
|
||||
|--------|-----------|
|
||||
| Min instincts per cluster | 3 |
|
||||
| Min average confidence | 0.75 |
|
||||
| Min cluster cohesion | 0.6 |
|
||||
|
||||
---
|
||||
|
||||
**TIP**: Run `/evolve` periodically to graduate instincts to skills as confidence grows.
|
||||
- Uses project + global instincts for analysis.
|
||||
- Shows skill/command/agent candidates from trigger and domain clustering.
|
||||
- Shows project -> global promotion candidates.
|
||||
- With `--generate`, output path is:
|
||||
- project context: `~/.claude/homunculus/projects/<project-id>/evolved/`
|
||||
- global fallback: `~/.claude/homunculus/evolved/`
|
||||
|
||||
58
.opencode/commands/harness-audit.md
Normal file
58
.opencode/commands/harness-audit.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Harness Audit Command
|
||||
|
||||
Audit the current repository's agent harness setup and return a prioritized scorecard.
|
||||
|
||||
## Usage
|
||||
|
||||
`/harness-audit [scope] [--format text|json]`
|
||||
|
||||
- `scope` (optional): `repo` (default), `hooks`, `skills`, `commands`, `agents`
|
||||
- `--format`: output style (`text` default, `json` for automation)
|
||||
|
||||
## What to Evaluate
|
||||
|
||||
Score each category from `0` to `10`:
|
||||
|
||||
1. Tool Coverage
|
||||
2. Context Efficiency
|
||||
3. Quality Gates
|
||||
4. Memory Persistence
|
||||
5. Eval Coverage
|
||||
6. Security Guardrails
|
||||
7. Cost Efficiency
|
||||
|
||||
## Output Contract
|
||||
|
||||
Return:
|
||||
|
||||
1. `overall_score` out of 70
|
||||
2. Category scores and concrete findings
|
||||
3. Top 3 actions with exact file paths
|
||||
4. Suggested ECC skills to apply next
|
||||
|
||||
## Checklist
|
||||
|
||||
- Inspect `hooks/hooks.json`, `scripts/hooks/`, and hook tests.
|
||||
- Inspect `skills/`, command coverage, and agent coverage.
|
||||
- Verify cross-harness parity for `.cursor/`, `.opencode/`, `.codex/`.
|
||||
- Flag broken or stale references.
|
||||
|
||||
## Example Result
|
||||
|
||||
```text
|
||||
Harness Audit (repo): 52/70
|
||||
- Quality Gates: 9/10
|
||||
- Eval Coverage: 6/10
|
||||
- Cost Efficiency: 4/10
|
||||
|
||||
Top 3 Actions:
|
||||
1) Add cost tracking hook in scripts/hooks/cost-tracker.js
|
||||
2) Add pass@k docs and templates in skills/eval-harness/SKILL.md
|
||||
3) Add command parity for /harness-audit in .opencode/commands/
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `repo|hooks|skills|commands|agents` (optional scope)
|
||||
- `--format text|json` (optional output format)
|
||||
@@ -1,75 +1,29 @@
|
||||
---
|
||||
description: View learned instincts with confidence scores
|
||||
description: Show learned instincts (project + global) with confidence
|
||||
agent: build
|
||||
---
|
||||
|
||||
# Instinct Status Command
|
||||
|
||||
Display learned instincts and their confidence scores: $ARGUMENTS
|
||||
Show instinct status from continuous-learning-v2: $ARGUMENTS
|
||||
|
||||
## Your Task
|
||||
|
||||
Read and display instincts from the continuous-learning-v2 system.
|
||||
Run:
|
||||
|
||||
## Instinct Location
|
||||
|
||||
Global: `~/.claude/instincts/`
|
||||
Project: `.claude/instincts/`
|
||||
|
||||
## Status Display
|
||||
|
||||
### Instinct Summary
|
||||
|
||||
| Category | Count | Avg Confidence |
|
||||
|----------|-------|----------------|
|
||||
| Coding | X | 0.XX |
|
||||
| Testing | X | 0.XX |
|
||||
| Security | X | 0.XX |
|
||||
| Git | X | 0.XX |
|
||||
|
||||
### High Confidence Instincts (>0.8)
|
||||
|
||||
```
|
||||
[trigger] → [action] (confidence: 0.XX)
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
### Learning Progress
|
||||
If `CLAUDE_PLUGIN_ROOT` is unavailable, use:
|
||||
|
||||
- Total instincts: X
|
||||
- This session: X
|
||||
- Promoted to skills: X
|
||||
|
||||
### Recent Instincts
|
||||
|
||||
Last 5 instincts learned:
|
||||
|
||||
1. **[timestamp]** - [trigger] → [action]
|
||||
2. **[timestamp]** - [trigger] → [action]
|
||||
...
|
||||
|
||||
## Instinct Structure
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "instinct-123",
|
||||
"trigger": "When I see a try-catch without specific error type",
|
||||
"action": "Suggest using specific error types for better handling",
|
||||
"confidence": 0.75,
|
||||
"applications": 5,
|
||||
"successes": 4,
|
||||
"source": "session-observation",
|
||||
"timestamp": "2025-01-15T10:30:00Z"
|
||||
}
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status
|
||||
```
|
||||
|
||||
## Confidence Calculation
|
||||
## Behavior Notes
|
||||
|
||||
```
|
||||
confidence = (successes + 1) / (applications + 2)
|
||||
```
|
||||
|
||||
Bayesian smoothing ensures new instincts don't have extreme confidence.
|
||||
|
||||
---
|
||||
|
||||
**TIP**: Use `/evolve` to cluster related instincts into skills when confidence is high.
|
||||
- Output includes both project-scoped and global instincts.
|
||||
- Project instincts override global instincts when IDs conflict.
|
||||
- Output is grouped by domain with confidence bars.
|
||||
- This command does not support extra filters in v2.1.
|
||||
|
||||
32
.opencode/commands/loop-start.md
Normal file
32
.opencode/commands/loop-start.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# Loop Start Command
|
||||
|
||||
Start a managed autonomous loop pattern with safety defaults.
|
||||
|
||||
## Usage
|
||||
|
||||
`/loop-start [pattern] [--mode safe|fast]`
|
||||
|
||||
- `pattern`: `sequential`, `continuous-pr`, `rfc-dag`, `infinite`
|
||||
- `--mode`:
|
||||
- `safe` (default): strict quality gates and checkpoints
|
||||
- `fast`: reduced gates for speed
|
||||
|
||||
## Flow
|
||||
|
||||
1. Confirm repository state and branch strategy.
|
||||
2. Select loop pattern and model tier strategy.
|
||||
3. Enable required hooks/profile for the chosen mode.
|
||||
4. Create loop plan and write runbook under `.claude/plans/`.
|
||||
5. Print commands to start and monitor the loop.
|
||||
|
||||
## Required Safety Checks
|
||||
|
||||
- Verify tests pass before first loop iteration.
|
||||
- Ensure `ECC_HOOK_PROFILE` is not disabled globally.
|
||||
- Ensure loop has explicit stop condition.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `<pattern>` optional (`sequential|continuous-pr|rfc-dag|infinite`)
|
||||
- `--mode safe|fast` optional
|
||||
24
.opencode/commands/loop-status.md
Normal file
24
.opencode/commands/loop-status.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Loop Status Command
|
||||
|
||||
Inspect active loop state, progress, and failure signals.
|
||||
|
||||
## Usage
|
||||
|
||||
`/loop-status [--watch]`
|
||||
|
||||
## What to Report
|
||||
|
||||
- active loop pattern
|
||||
- current phase and last successful checkpoint
|
||||
- failing checks (if any)
|
||||
- estimated time/cost drift
|
||||
- recommended intervention (continue/pause/stop)
|
||||
|
||||
## Watch Mode
|
||||
|
||||
When `--watch` is present, refresh status periodically and surface state changes.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `--watch` optional
|
||||
26
.opencode/commands/model-route.md
Normal file
26
.opencode/commands/model-route.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Model Route Command
|
||||
|
||||
Recommend the best model tier for the current task by complexity and budget.
|
||||
|
||||
## Usage
|
||||
|
||||
`/model-route [task-description] [--budget low|med|high]`
|
||||
|
||||
## Routing Heuristic
|
||||
|
||||
- `haiku`: deterministic, low-risk mechanical changes
|
||||
- `sonnet`: default for implementation and refactors
|
||||
- `opus`: architecture, deep review, ambiguous requirements
|
||||
|
||||
## Required Output
|
||||
|
||||
- recommended model
|
||||
- confidence level
|
||||
- why this model fits
|
||||
- fallback model if first attempt fails
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `[task-description]` optional free-text
|
||||
- `--budget low|med|high` optional
|
||||
23
.opencode/commands/projects.md
Normal file
23
.opencode/commands/projects.md
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
description: List registered projects and instinct counts
|
||||
agent: build
|
||||
---
|
||||
|
||||
# Projects Command
|
||||
|
||||
Show continuous-learning-v2 project registry and stats: $ARGUMENTS
|
||||
|
||||
## Your Task
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" projects
|
||||
```
|
||||
|
||||
If `CLAUDE_PLUGIN_ROOT` is unavailable, use:
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py projects
|
||||
```
|
||||
|
||||
23
.opencode/commands/promote.md
Normal file
23
.opencode/commands/promote.md
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
description: Promote project instincts to global scope
|
||||
agent: build
|
||||
---
|
||||
|
||||
# Promote Command
|
||||
|
||||
Promote instincts in continuous-learning-v2: $ARGUMENTS
|
||||
|
||||
## Your Task
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" promote $ARGUMENTS
|
||||
```
|
||||
|
||||
If `CLAUDE_PLUGIN_ROOT` is unavailable, use:
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py promote $ARGUMENTS
|
||||
```
|
||||
|
||||
29
.opencode/commands/quality-gate.md
Normal file
29
.opencode/commands/quality-gate.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Quality Gate Command
|
||||
|
||||
Run the ECC quality pipeline on demand for a file or project scope.
|
||||
|
||||
## Usage
|
||||
|
||||
`/quality-gate [path|.] [--fix] [--strict]`
|
||||
|
||||
- default target: current directory (`.`)
|
||||
- `--fix`: allow auto-format/fix where configured
|
||||
- `--strict`: fail on warnings where supported
|
||||
|
||||
## Pipeline
|
||||
|
||||
1. Detect language/tooling for target.
|
||||
2. Run formatter checks.
|
||||
3. Run lint/type checks when available.
|
||||
4. Produce a concise remediation list.
|
||||
|
||||
## Notes
|
||||
|
||||
This command mirrors hook behavior but is operator-invoked.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `[path|.]` optional target path
|
||||
- `--fix` optional
|
||||
- `--strict` optional
|
||||
@@ -1,12 +1,10 @@
|
||||
/**
|
||||
* Everything Claude Code (ECC) Plugin for OpenCode
|
||||
*
|
||||
* This package provides a complete OpenCode plugin with:
|
||||
* - 13 specialized agents (planner, architect, code-reviewer, etc.)
|
||||
* - 31 commands (/plan, /tdd, /code-review, etc.)
|
||||
* This package provides the published ECC OpenCode plugin module:
|
||||
* - Plugin hooks (auto-format, TypeScript check, console.log warning, env injection, etc.)
|
||||
* - Custom tools (run-tests, check-coverage, security-audit, format-code, lint-check, git-summary)
|
||||
* - 37 skills (coding-standards, security-review, tdd-workflow, etc.)
|
||||
* - Bundled reference config/assets for the wider ECC OpenCode setup
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
@@ -22,6 +20,10 @@
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* That enables the published plugin module only. For ECC commands, agents,
|
||||
* prompts, and instructions, use this repository's `.opencode/opencode.json`
|
||||
* as a base or copy the bundled `.opencode/` assets into your project.
|
||||
*
|
||||
* Option 2: Clone and use directly
|
||||
* ```bash
|
||||
* git clone https://github.com/affaan-m/everything-claude-code
|
||||
@@ -51,6 +53,7 @@ export const metadata = {
|
||||
agents: 13,
|
||||
commands: 31,
|
||||
skills: 37,
|
||||
configAssets: true,
|
||||
hookEvents: [
|
||||
"file.edited",
|
||||
"tool.execute.before",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"instructions": [
|
||||
"AGENTS.md",
|
||||
"CONTRIBUTING.md",
|
||||
".opencode/instructions/INSTRUCTIONS.md",
|
||||
"instructions/INSTRUCTIONS.md",
|
||||
"skills/tdd-workflow/SKILL.md",
|
||||
"skills/security-review/SKILL.md",
|
||||
"skills/coding-standards/SKILL.md",
|
||||
@@ -20,7 +20,7 @@
|
||||
"skills/eval-harness/SKILL.md"
|
||||
],
|
||||
"plugin": [
|
||||
"./.opencode/plugins"
|
||||
"./plugins"
|
||||
],
|
||||
"agent": {
|
||||
"build": {
|
||||
@@ -38,7 +38,7 @@
|
||||
"description": "Expert planning specialist for complex features and refactoring. Use for implementation planning, architectural changes, or complex refactoring.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/planner.txt}",
|
||||
"prompt": "{file:prompts/agents/planner.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"bash": true,
|
||||
@@ -50,7 +50,7 @@
|
||||
"description": "Software architecture specialist for system design, scalability, and technical decision-making.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/architect.txt}",
|
||||
"prompt": "{file:prompts/agents/architect.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"bash": true,
|
||||
@@ -62,7 +62,7 @@
|
||||
"description": "Expert code review specialist. Reviews code for quality, security, and maintainability. Use immediately after writing or modifying code.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/code-reviewer.txt}",
|
||||
"prompt": "{file:prompts/agents/code-reviewer.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"bash": true,
|
||||
@@ -74,7 +74,7 @@
|
||||
"description": "Security vulnerability detection and remediation specialist. Use after writing code that handles user input, authentication, API endpoints, or sensitive data.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/security-reviewer.txt}",
|
||||
"prompt": "{file:prompts/agents/security-reviewer.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"bash": true,
|
||||
@@ -86,7 +86,7 @@
|
||||
"description": "Test-Driven Development specialist enforcing write-tests-first methodology. Use when writing new features, fixing bugs, or refactoring code. Ensures 80%+ test coverage.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/tdd-guide.txt}",
|
||||
"prompt": "{file:prompts/agents/tdd-guide.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"write": true,
|
||||
@@ -98,7 +98,7 @@
|
||||
"description": "Build and TypeScript error resolution specialist. Use when build fails or type errors occur. Fixes build/type errors only with minimal diffs.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/build-error-resolver.txt}",
|
||||
"prompt": "{file:prompts/agents/build-error-resolver.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"write": true,
|
||||
@@ -110,7 +110,7 @@
|
||||
"description": "End-to-end testing specialist using Playwright. Generates, maintains, and runs E2E tests for critical user flows.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/e2e-runner.txt}",
|
||||
"prompt": "{file:prompts/agents/e2e-runner.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"write": true,
|
||||
@@ -122,7 +122,7 @@
|
||||
"description": "Documentation and codemap specialist. Use for updating codemaps and documentation.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/doc-updater.txt}",
|
||||
"prompt": "{file:prompts/agents/doc-updater.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"write": true,
|
||||
@@ -134,7 +134,7 @@
|
||||
"description": "Dead code cleanup and consolidation specialist. Use for removing unused code, duplicates, and refactoring.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/refactor-cleaner.txt}",
|
||||
"prompt": "{file:prompts/agents/refactor-cleaner.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"write": true,
|
||||
@@ -146,7 +146,7 @@
|
||||
"description": "Expert Go code reviewer specializing in idiomatic Go, concurrency patterns, error handling, and performance.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/go-reviewer.txt}",
|
||||
"prompt": "{file:prompts/agents/go-reviewer.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"bash": true,
|
||||
@@ -158,7 +158,7 @@
|
||||
"description": "Go build, vet, and compilation error resolution specialist. Fixes Go build errors with minimal changes.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/go-build-resolver.txt}",
|
||||
"prompt": "{file:prompts/agents/go-build-resolver.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"write": true,
|
||||
@@ -170,7 +170,7 @@
|
||||
"description": "PostgreSQL database specialist for query optimization, schema design, security, and performance. Incorporates Supabase best practices.",
|
||||
"mode": "subagent",
|
||||
"model": "anthropic/claude-opus-4-5",
|
||||
"prompt": "{file:.opencode/prompts/agents/database-reviewer.txt}",
|
||||
"prompt": "{file:prompts/agents/database-reviewer.txt}",
|
||||
"tools": {
|
||||
"read": true,
|
||||
"write": true,
|
||||
@@ -182,127 +182,135 @@
|
||||
"command": {
|
||||
"plan": {
|
||||
"description": "Create a detailed implementation plan for complex features",
|
||||
"template": "{file:.opencode/commands/plan.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/plan.md}\n\n$ARGUMENTS",
|
||||
"agent": "planner",
|
||||
"subtask": true
|
||||
},
|
||||
"tdd": {
|
||||
"description": "Enforce TDD workflow with 80%+ test coverage",
|
||||
"template": "{file:.opencode/commands/tdd.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/tdd.md}\n\n$ARGUMENTS",
|
||||
"agent": "tdd-guide",
|
||||
"subtask": true
|
||||
},
|
||||
"code-review": {
|
||||
"description": "Review code for quality, security, and maintainability",
|
||||
"template": "{file:.opencode/commands/code-review.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/code-review.md}\n\n$ARGUMENTS",
|
||||
"agent": "code-reviewer",
|
||||
"subtask": true
|
||||
},
|
||||
"security": {
|
||||
"description": "Run comprehensive security review",
|
||||
"template": "{file:.opencode/commands/security.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/security.md}\n\n$ARGUMENTS",
|
||||
"agent": "security-reviewer",
|
||||
"subtask": true
|
||||
},
|
||||
"build-fix": {
|
||||
"description": "Fix build and TypeScript errors with minimal changes",
|
||||
"template": "{file:.opencode/commands/build-fix.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/build-fix.md}\n\n$ARGUMENTS",
|
||||
"agent": "build-error-resolver",
|
||||
"subtask": true
|
||||
},
|
||||
"e2e": {
|
||||
"description": "Generate and run E2E tests with Playwright",
|
||||
"template": "{file:.opencode/commands/e2e.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/e2e.md}\n\n$ARGUMENTS",
|
||||
"agent": "e2e-runner",
|
||||
"subtask": true
|
||||
},
|
||||
"refactor-clean": {
|
||||
"description": "Remove dead code and consolidate duplicates",
|
||||
"template": "{file:.opencode/commands/refactor-clean.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/refactor-clean.md}\n\n$ARGUMENTS",
|
||||
"agent": "refactor-cleaner",
|
||||
"subtask": true
|
||||
},
|
||||
"orchestrate": {
|
||||
"description": "Orchestrate multiple agents for complex tasks",
|
||||
"template": "{file:.opencode/commands/orchestrate.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/orchestrate.md}\n\n$ARGUMENTS",
|
||||
"agent": "planner",
|
||||
"subtask": true
|
||||
},
|
||||
"learn": {
|
||||
"description": "Extract patterns and learnings from session",
|
||||
"template": "{file:.opencode/commands/learn.md}\n\n$ARGUMENTS"
|
||||
"template": "{file:commands/learn.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"checkpoint": {
|
||||
"description": "Save verification state and progress",
|
||||
"template": "{file:.opencode/commands/checkpoint.md}\n\n$ARGUMENTS"
|
||||
"template": "{file:commands/checkpoint.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"verify": {
|
||||
"description": "Run verification loop",
|
||||
"template": "{file:.opencode/commands/verify.md}\n\n$ARGUMENTS"
|
||||
"template": "{file:commands/verify.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"eval": {
|
||||
"description": "Run evaluation against criteria",
|
||||
"template": "{file:.opencode/commands/eval.md}\n\n$ARGUMENTS"
|
||||
"template": "{file:commands/eval.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"update-docs": {
|
||||
"description": "Update documentation",
|
||||
"template": "{file:.opencode/commands/update-docs.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/update-docs.md}\n\n$ARGUMENTS",
|
||||
"agent": "doc-updater",
|
||||
"subtask": true
|
||||
},
|
||||
"update-codemaps": {
|
||||
"description": "Update codemaps",
|
||||
"template": "{file:.opencode/commands/update-codemaps.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/update-codemaps.md}\n\n$ARGUMENTS",
|
||||
"agent": "doc-updater",
|
||||
"subtask": true
|
||||
},
|
||||
"test-coverage": {
|
||||
"description": "Analyze test coverage",
|
||||
"template": "{file:.opencode/commands/test-coverage.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/test-coverage.md}\n\n$ARGUMENTS",
|
||||
"agent": "tdd-guide",
|
||||
"subtask": true
|
||||
},
|
||||
"setup-pm": {
|
||||
"description": "Configure package manager",
|
||||
"template": "{file:.opencode/commands/setup-pm.md}\n\n$ARGUMENTS"
|
||||
"template": "{file:commands/setup-pm.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"go-review": {
|
||||
"description": "Go code review",
|
||||
"template": "{file:.opencode/commands/go-review.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/go-review.md}\n\n$ARGUMENTS",
|
||||
"agent": "go-reviewer",
|
||||
"subtask": true
|
||||
},
|
||||
"go-test": {
|
||||
"description": "Go TDD workflow",
|
||||
"template": "{file:.opencode/commands/go-test.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/go-test.md}\n\n$ARGUMENTS",
|
||||
"agent": "tdd-guide",
|
||||
"subtask": true
|
||||
},
|
||||
"go-build": {
|
||||
"description": "Fix Go build errors",
|
||||
"template": "{file:.opencode/commands/go-build.md}\n\n$ARGUMENTS",
|
||||
"template": "{file:commands/go-build.md}\n\n$ARGUMENTS",
|
||||
"agent": "go-build-resolver",
|
||||
"subtask": true
|
||||
},
|
||||
"skill-create": {
|
||||
"description": "Generate skills from git history",
|
||||
"template": "{file:.opencode/commands/skill-create.md}\n\n$ARGUMENTS"
|
||||
"template": "{file:commands/skill-create.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"instinct-status": {
|
||||
"description": "View learned instincts",
|
||||
"template": "{file:.opencode/commands/instinct-status.md}\n\n$ARGUMENTS"
|
||||
"template": "{file:commands/instinct-status.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"instinct-import": {
|
||||
"description": "Import instincts",
|
||||
"template": "{file:.opencode/commands/instinct-import.md}\n\n$ARGUMENTS"
|
||||
"template": "{file:commands/instinct-import.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"instinct-export": {
|
||||
"description": "Export instincts",
|
||||
"template": "{file:.opencode/commands/instinct-export.md}\n\n$ARGUMENTS"
|
||||
"template": "{file:commands/instinct-export.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"evolve": {
|
||||
"description": "Cluster instincts into skills",
|
||||
"template": "{file:.opencode/commands/evolve.md}\n\n$ARGUMENTS"
|
||||
"template": "{file:commands/evolve.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"promote": {
|
||||
"description": "Promote project instincts to global scope",
|
||||
"template": "{file:commands/promote.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"projects": {
|
||||
"description": "List known projects and instinct stats",
|
||||
"template": "{file:commands/projects.md}\n\n$ARGUMENTS"
|
||||
}
|
||||
},
|
||||
"permission": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ecc-universal",
|
||||
"version": "1.7.0",
|
||||
"version": "1.8.0",
|
||||
"description": "Everything Claude Code (ECC) plugin for OpenCode - agents, commands, hooks, and skills",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
|
||||
@@ -21,6 +21,8 @@ export const ECCHooksPlugin = async ({
|
||||
directory,
|
||||
worktree,
|
||||
}: PluginInput) => {
|
||||
type HookProfile = "minimal" | "standard" | "strict"
|
||||
|
||||
// Track files edited in current session for console.log audit
|
||||
const editedFiles = new Set<string>()
|
||||
|
||||
@@ -28,6 +30,40 @@ export const ECCHooksPlugin = async ({
|
||||
const log = (level: "debug" | "info" | "warn" | "error", message: string) =>
|
||||
client.app.log({ body: { service: "ecc", level, message } })
|
||||
|
||||
const normalizeProfile = (value: string | undefined): HookProfile => {
|
||||
if (value === "minimal" || value === "strict") return value
|
||||
return "standard"
|
||||
}
|
||||
|
||||
const currentProfile = normalizeProfile(process.env.ECC_HOOK_PROFILE)
|
||||
const disabledHooks = new Set(
|
||||
(process.env.ECC_DISABLED_HOOKS || "")
|
||||
.split(",")
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean)
|
||||
)
|
||||
|
||||
const profileOrder: Record<HookProfile, number> = {
|
||||
minimal: 0,
|
||||
standard: 1,
|
||||
strict: 2,
|
||||
}
|
||||
|
||||
const profileAllowed = (required: HookProfile | HookProfile[]): boolean => {
|
||||
if (Array.isArray(required)) {
|
||||
return required.some((entry) => profileOrder[currentProfile] >= profileOrder[entry])
|
||||
}
|
||||
return profileOrder[currentProfile] >= profileOrder[required]
|
||||
}
|
||||
|
||||
const hookEnabled = (
|
||||
hookId: string,
|
||||
requiredProfile: HookProfile | HookProfile[] = "standard"
|
||||
): boolean => {
|
||||
if (disabledHooks.has(hookId)) return false
|
||||
return profileAllowed(requiredProfile)
|
||||
}
|
||||
|
||||
return {
|
||||
/**
|
||||
* Prettier Auto-Format Hook
|
||||
@@ -41,7 +77,7 @@ export const ECCHooksPlugin = async ({
|
||||
editedFiles.add(event.path)
|
||||
|
||||
// Auto-format JS/TS files
|
||||
if (event.path.match(/\.(ts|tsx|js|jsx)$/)) {
|
||||
if (hookEnabled("post:edit:format", ["standard", "strict"]) && event.path.match(/\.(ts|tsx|js|jsx)$/)) {
|
||||
try {
|
||||
await $`prettier --write ${event.path} 2>/dev/null`
|
||||
log("info", `[ECC] Formatted: ${event.path}`)
|
||||
@@ -51,7 +87,7 @@ export const ECCHooksPlugin = async ({
|
||||
}
|
||||
|
||||
// Console.log warning check
|
||||
if (event.path.match(/\.(ts|tsx|js|jsx)$/)) {
|
||||
if (hookEnabled("post:edit:console-warn", ["standard", "strict"]) && event.path.match(/\.(ts|tsx|js|jsx)$/)) {
|
||||
try {
|
||||
const result = await $`grep -n "console\\.log" ${event.path} 2>/dev/null`.text()
|
||||
if (result.trim()) {
|
||||
@@ -80,6 +116,7 @@ export const ECCHooksPlugin = async ({
|
||||
) => {
|
||||
// Check if a TypeScript file was edited
|
||||
if (
|
||||
hookEnabled("post:edit:typecheck", ["standard", "strict"]) &&
|
||||
input.tool === "edit" &&
|
||||
input.args?.filePath?.match(/\.tsx?$/)
|
||||
) {
|
||||
@@ -98,7 +135,11 @@ export const ECCHooksPlugin = async ({
|
||||
}
|
||||
|
||||
// PR creation logging
|
||||
if (input.tool === "bash" && input.args?.toString().includes("gh pr create")) {
|
||||
if (
|
||||
hookEnabled("post:bash:pr-created", ["standard", "strict"]) &&
|
||||
input.tool === "bash" &&
|
||||
input.args?.toString().includes("gh pr create")
|
||||
) {
|
||||
log("info", "[ECC] PR created - check GitHub Actions status")
|
||||
}
|
||||
},
|
||||
@@ -115,6 +156,7 @@ export const ECCHooksPlugin = async ({
|
||||
) => {
|
||||
// Git push review reminder
|
||||
if (
|
||||
hookEnabled("pre:bash:git-push-reminder", "strict") &&
|
||||
input.tool === "bash" &&
|
||||
input.args?.toString().includes("git push")
|
||||
) {
|
||||
@@ -126,6 +168,7 @@ export const ECCHooksPlugin = async ({
|
||||
|
||||
// Block creation of unnecessary documentation files
|
||||
if (
|
||||
hookEnabled("pre:write:doc-file-warning", ["standard", "strict"]) &&
|
||||
input.tool === "write" &&
|
||||
input.args?.filePath &&
|
||||
typeof input.args.filePath === "string"
|
||||
@@ -146,7 +189,7 @@ export const ECCHooksPlugin = async ({
|
||||
}
|
||||
|
||||
// Long-running command reminder
|
||||
if (input.tool === "bash") {
|
||||
if (hookEnabled("pre:bash:tmux-reminder", "strict") && input.tool === "bash") {
|
||||
const cmd = String(input.args?.command || input.args || "")
|
||||
if (
|
||||
cmd.match(/^(npm|pnpm|yarn|bun)\s+(install|build|test|run)/) ||
|
||||
@@ -169,7 +212,9 @@ export const ECCHooksPlugin = async ({
|
||||
* Action: Loads context and displays welcome message
|
||||
*/
|
||||
"session.created": async () => {
|
||||
log("info", "[ECC] Session started - Everything Claude Code hooks active")
|
||||
if (!hookEnabled("session:start", ["minimal", "standard", "strict"])) return
|
||||
|
||||
log("info", `[ECC] Session started - profile=${currentProfile}`)
|
||||
|
||||
// Check for project-specific context files
|
||||
try {
|
||||
@@ -190,6 +235,7 @@ export const ECCHooksPlugin = async ({
|
||||
* Action: Runs console.log audit on all edited files
|
||||
*/
|
||||
"session.idle": async () => {
|
||||
if (!hookEnabled("stop:check-console-log", ["minimal", "standard", "strict"])) return
|
||||
if (editedFiles.size === 0) return
|
||||
|
||||
log("info", "[ECC] Session idle - running console.log audit")
|
||||
@@ -244,6 +290,7 @@ export const ECCHooksPlugin = async ({
|
||||
* Action: Final cleanup and state saving
|
||||
*/
|
||||
"session.deleted": async () => {
|
||||
if (!hookEnabled("session:end-marker", ["minimal", "standard", "strict"])) return
|
||||
log("info", "[ECC] Session ended - cleaning up")
|
||||
editedFiles.clear()
|
||||
},
|
||||
@@ -285,8 +332,10 @@ export const ECCHooksPlugin = async ({
|
||||
*/
|
||||
"shell.env": async () => {
|
||||
const env: Record<string, string> = {
|
||||
ECC_VERSION: "1.6.0",
|
||||
ECC_VERSION: "1.8.0",
|
||||
ECC_PLUGIN: "true",
|
||||
ECC_HOOK_PROFILE: currentProfile,
|
||||
ECC_DISABLED_HOOKS: process.env.ECC_DISABLED_HOOKS || "",
|
||||
PROJECT_ROOT: worktree || directory,
|
||||
}
|
||||
|
||||
@@ -343,7 +392,7 @@ export const ECCHooksPlugin = async ({
|
||||
const contextBlock = [
|
||||
"# ECC Context (preserve across compaction)",
|
||||
"",
|
||||
"## Active Plugin: Everything Claude Code v1.6.0",
|
||||
"## Active Plugin: Everything Claude Code v1.8.0",
|
||||
"- Hooks: file.edited, tool.execute.before/after, session.created/idle/deleted, shell.env, compacting, permission.ask",
|
||||
"- Tools: run-tests, check-coverage, security-audit, format-code, lint-check, git-summary",
|
||||
"- Agents: 13 specialized (planner, architect, tdd-guide, code-reviewer, security-reviewer, build-error-resolver, e2e-runner, refactor-cleaner, doc-updater, go-reviewer, go-build-resolver, database-reviewer, python-reviewer)",
|
||||
|
||||
@@ -1,66 +1,68 @@
|
||||
/**
|
||||
* ECC Custom Tool: Format Code
|
||||
*
|
||||
* Language-aware code formatter that auto-detects the project's formatter.
|
||||
* Supports: Biome/Prettier (JS/TS), Black (Python), gofmt (Go), rustfmt (Rust)
|
||||
* Returns the formatter command that should be run for a given file.
|
||||
* This avoids shell execution assumptions while still giving precise guidance.
|
||||
*/
|
||||
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import { z } from "zod"
|
||||
import { tool } from "@opencode-ai/plugin/tool"
|
||||
import * as path from "path"
|
||||
import * as fs from "fs"
|
||||
|
||||
type Formatter = "biome" | "prettier" | "black" | "gofmt" | "rustfmt"
|
||||
|
||||
export default tool({
|
||||
name: "format-code",
|
||||
description: "Format a file using the project's configured formatter. Auto-detects Biome, Prettier, Black, gofmt, or rustfmt.",
|
||||
parameters: z.object({
|
||||
filePath: z.string().describe("Path to the file to format"),
|
||||
formatter: z.string().optional().describe("Override formatter: biome, prettier, black, gofmt, rustfmt (default: auto-detect)"),
|
||||
}),
|
||||
execute: async ({ filePath, formatter }, { $ }) => {
|
||||
const ext = filePath.split(".").pop()?.toLowerCase() || ""
|
||||
|
||||
// Auto-detect formatter based on file extension and config files
|
||||
let detected = formatter
|
||||
if (!detected) {
|
||||
if (["ts", "tsx", "js", "jsx", "json", "css", "scss"].includes(ext)) {
|
||||
// Check for Biome first, then Prettier
|
||||
try {
|
||||
await $`test -f biome.json || test -f biome.jsonc`
|
||||
detected = "biome"
|
||||
} catch {
|
||||
detected = "prettier"
|
||||
}
|
||||
} else if (["py", "pyi"].includes(ext)) {
|
||||
detected = "black"
|
||||
} else if (ext === "go") {
|
||||
detected = "gofmt"
|
||||
} else if (ext === "rs") {
|
||||
detected = "rustfmt"
|
||||
}
|
||||
}
|
||||
description:
|
||||
"Detect formatter for a file and return the exact command to run (Biome, Prettier, Black, gofmt, rustfmt).",
|
||||
args: {
|
||||
filePath: tool.schema.string().describe("Path to the file to format"),
|
||||
formatter: tool.schema
|
||||
.enum(["biome", "prettier", "black", "gofmt", "rustfmt"])
|
||||
.optional()
|
||||
.describe("Optional formatter override"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const cwd = context.worktree || context.directory
|
||||
const ext = args.filePath.split(".").pop()?.toLowerCase() || ""
|
||||
const detected = args.formatter || detectFormatter(cwd, ext)
|
||||
|
||||
if (!detected) {
|
||||
return { formatted: false, message: `No formatter detected for .${ext} files` }
|
||||
return JSON.stringify({
|
||||
success: false,
|
||||
message: `No formatter detected for .${ext} files`,
|
||||
})
|
||||
}
|
||||
|
||||
const commands: Record<string, string> = {
|
||||
biome: `npx @biomejs/biome format --write ${filePath}`,
|
||||
prettier: `npx prettier --write ${filePath}`,
|
||||
black: `black ${filePath}`,
|
||||
gofmt: `gofmt -w ${filePath}`,
|
||||
rustfmt: `rustfmt ${filePath}`,
|
||||
}
|
||||
|
||||
const cmd = commands[detected]
|
||||
if (!cmd) {
|
||||
return { formatted: false, message: `Unknown formatter: ${detected}` }
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await $`${cmd}`.text()
|
||||
return { formatted: true, formatter: detected, output: result }
|
||||
} catch (error: unknown) {
|
||||
const err = error as { stderr?: string }
|
||||
return { formatted: false, formatter: detected, error: err.stderr || "Format failed" }
|
||||
}
|
||||
const command = buildFormatterCommand(detected, args.filePath)
|
||||
return JSON.stringify({
|
||||
success: true,
|
||||
formatter: detected,
|
||||
command,
|
||||
instructions: `Run this command:\n\n${command}`,
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
function detectFormatter(cwd: string, ext: string): Formatter | null {
|
||||
if (["ts", "tsx", "js", "jsx", "json", "css", "scss", "md", "yaml", "yml"].includes(ext)) {
|
||||
if (fs.existsSync(path.join(cwd, "biome.json")) || fs.existsSync(path.join(cwd, "biome.jsonc"))) {
|
||||
return "biome"
|
||||
}
|
||||
return "prettier"
|
||||
}
|
||||
if (["py", "pyi"].includes(ext)) return "black"
|
||||
if (ext === "go") return "gofmt"
|
||||
if (ext === "rs") return "rustfmt"
|
||||
return null
|
||||
}
|
||||
|
||||
function buildFormatterCommand(formatter: Formatter, filePath: string): string {
|
||||
const commands: Record<Formatter, string> = {
|
||||
biome: `npx @biomejs/biome format --write ${filePath}`,
|
||||
prettier: `npx prettier --write ${filePath}`,
|
||||
black: `black ${filePath}`,
|
||||
gofmt: `gofmt -w ${filePath}`,
|
||||
rustfmt: `rustfmt ${filePath}`,
|
||||
}
|
||||
return commands[formatter]
|
||||
}
|
||||
|
||||
@@ -1,56 +1,54 @@
|
||||
/**
|
||||
* ECC Custom Tool: Git Summary
|
||||
*
|
||||
* Provides a comprehensive git status including branch info, status,
|
||||
* recent log, and diff against base branch.
|
||||
* Returns branch/status/log/diff details for the active repository.
|
||||
*/
|
||||
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import { z } from "zod"
|
||||
import { tool } from "@opencode-ai/plugin/tool"
|
||||
import { execSync } from "child_process"
|
||||
|
||||
export default tool({
|
||||
name: "git-summary",
|
||||
description: "Get comprehensive git summary: branch, status, recent log, and diff against base branch.",
|
||||
parameters: z.object({
|
||||
depth: z.number().optional().describe("Number of recent commits to show (default: 5)"),
|
||||
includeDiff: z.boolean().optional().describe("Include diff against base branch (default: true)"),
|
||||
baseBranch: z.string().optional().describe("Base branch for comparison (default: main)"),
|
||||
}),
|
||||
execute: async ({ depth = 5, includeDiff = true, baseBranch = "main" }, { $ }) => {
|
||||
const results: Record<string, string> = {}
|
||||
description:
|
||||
"Generate git summary with branch, status, recent commits, and optional diff stats.",
|
||||
args: {
|
||||
depth: tool.schema
|
||||
.number()
|
||||
.optional()
|
||||
.describe("Number of recent commits to include (default: 5)"),
|
||||
includeDiff: tool.schema
|
||||
.boolean()
|
||||
.optional()
|
||||
.describe("Include diff stats against base branch (default: true)"),
|
||||
baseBranch: tool.schema
|
||||
.string()
|
||||
.optional()
|
||||
.describe("Base branch for diff comparison (default: main)"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const cwd = context.worktree || context.directory
|
||||
const depth = args.depth ?? 5
|
||||
const includeDiff = args.includeDiff ?? true
|
||||
const baseBranch = args.baseBranch ?? "main"
|
||||
|
||||
try {
|
||||
results.branch = (await $`git branch --show-current`.text()).trim()
|
||||
} catch {
|
||||
results.branch = "unknown"
|
||||
}
|
||||
|
||||
try {
|
||||
results.status = (await $`git status --short`.text()).trim()
|
||||
} catch {
|
||||
results.status = "unable to get status"
|
||||
}
|
||||
|
||||
try {
|
||||
results.log = (await $`git log --oneline -${depth}`.text()).trim()
|
||||
} catch {
|
||||
results.log = "unable to get log"
|
||||
const result: Record<string, string> = {
|
||||
branch: run("git branch --show-current", cwd) || "unknown",
|
||||
status: run("git status --short", cwd) || "clean",
|
||||
log: run(`git log --oneline -${depth}`, cwd) || "no commits found",
|
||||
}
|
||||
|
||||
if (includeDiff) {
|
||||
try {
|
||||
results.stagedDiff = (await $`git diff --cached --stat`.text()).trim()
|
||||
} catch {
|
||||
results.stagedDiff = ""
|
||||
}
|
||||
|
||||
try {
|
||||
results.branchDiff = (await $`git diff ${baseBranch}...HEAD --stat`.text()).trim()
|
||||
} catch {
|
||||
results.branchDiff = `unable to diff against ${baseBranch}`
|
||||
}
|
||||
result.stagedDiff = run("git diff --cached --stat", cwd) || ""
|
||||
result.branchDiff = run(`git diff ${baseBranch}...HEAD --stat`, cwd) || `unable to diff against ${baseBranch}`
|
||||
}
|
||||
|
||||
return results
|
||||
return JSON.stringify(result)
|
||||
},
|
||||
})
|
||||
|
||||
function run(command: string, cwd: string): string {
|
||||
try {
|
||||
return execSync(command, { cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"] }).trim()
|
||||
} catch {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,74 +1,85 @@
|
||||
/**
|
||||
* ECC Custom Tool: Lint Check
|
||||
*
|
||||
* Multi-language linter that auto-detects the project's linting tool.
|
||||
* Supports: ESLint/Biome (JS/TS), Pylint/Ruff (Python), golangci-lint (Go)
|
||||
* Detects the appropriate linter and returns a runnable lint command.
|
||||
*/
|
||||
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import { z } from "zod"
|
||||
import { tool } from "@opencode-ai/plugin/tool"
|
||||
import * as path from "path"
|
||||
import * as fs from "fs"
|
||||
|
||||
type Linter = "biome" | "eslint" | "ruff" | "pylint" | "golangci-lint"
|
||||
|
||||
export default tool({
|
||||
name: "lint-check",
|
||||
description: "Run linter on files or directories. Auto-detects ESLint, Biome, Ruff, Pylint, or golangci-lint.",
|
||||
parameters: z.object({
|
||||
target: z.string().optional().describe("File or directory to lint (default: current directory)"),
|
||||
fix: z.boolean().optional().describe("Auto-fix issues if supported (default: false)"),
|
||||
linter: z.string().optional().describe("Override linter: eslint, biome, ruff, pylint, golangci-lint (default: auto-detect)"),
|
||||
}),
|
||||
execute: async ({ target = ".", fix = false, linter }, { $ }) => {
|
||||
// Auto-detect linter
|
||||
let detected = linter
|
||||
if (!detected) {
|
||||
try {
|
||||
await $`test -f biome.json || test -f biome.jsonc`
|
||||
detected = "biome"
|
||||
} catch {
|
||||
try {
|
||||
await $`test -f .eslintrc.json || test -f .eslintrc.js || test -f .eslintrc.cjs || test -f eslint.config.js || test -f eslint.config.mjs`
|
||||
detected = "eslint"
|
||||
} catch {
|
||||
try {
|
||||
await $`test -f pyproject.toml && grep -q "ruff" pyproject.toml`
|
||||
detected = "ruff"
|
||||
} catch {
|
||||
try {
|
||||
await $`test -f .golangci.yml || test -f .golangci.yaml`
|
||||
detected = "golangci-lint"
|
||||
} catch {
|
||||
// Fall back based on file extensions in target
|
||||
detected = "eslint"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
description:
|
||||
"Detect linter for a target path and return command for check/fix runs.",
|
||||
args: {
|
||||
target: tool.schema
|
||||
.string()
|
||||
.optional()
|
||||
.describe("File or directory to lint (default: current directory)"),
|
||||
fix: tool.schema
|
||||
.boolean()
|
||||
.optional()
|
||||
.describe("Enable auto-fix mode"),
|
||||
linter: tool.schema
|
||||
.enum(["biome", "eslint", "ruff", "pylint", "golangci-lint"])
|
||||
.optional()
|
||||
.describe("Optional linter override"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const cwd = context.worktree || context.directory
|
||||
const target = args.target || "."
|
||||
const fix = args.fix ?? false
|
||||
const detected = args.linter || detectLinter(cwd)
|
||||
|
||||
const fixFlag = fix ? " --fix" : ""
|
||||
const commands: Record<string, string> = {
|
||||
biome: `npx @biomejs/biome lint${fix ? " --write" : ""} ${target}`,
|
||||
eslint: `npx eslint${fixFlag} ${target}`,
|
||||
ruff: `ruff check${fixFlag} ${target}`,
|
||||
pylint: `pylint ${target}`,
|
||||
"golangci-lint": `golangci-lint run${fixFlag} ${target}`,
|
||||
}
|
||||
|
||||
const cmd = commands[detected]
|
||||
if (!cmd) {
|
||||
return { success: false, message: `Unknown linter: ${detected}` }
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await $`${cmd}`.text()
|
||||
return { success: true, linter: detected, output: result, issues: 0 }
|
||||
} catch (error: unknown) {
|
||||
const err = error as { stdout?: string; stderr?: string }
|
||||
return {
|
||||
success: false,
|
||||
linter: detected,
|
||||
output: err.stdout || "",
|
||||
errors: err.stderr || "",
|
||||
}
|
||||
}
|
||||
const command = buildLintCommand(detected, target, fix)
|
||||
return JSON.stringify({
|
||||
success: true,
|
||||
linter: detected,
|
||||
command,
|
||||
instructions: `Run this command:\n\n${command}`,
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
function detectLinter(cwd: string): Linter {
|
||||
if (fs.existsSync(path.join(cwd, "biome.json")) || fs.existsSync(path.join(cwd, "biome.jsonc"))) {
|
||||
return "biome"
|
||||
}
|
||||
|
||||
const eslintConfigs = [
|
||||
".eslintrc.json",
|
||||
".eslintrc.js",
|
||||
".eslintrc.cjs",
|
||||
"eslint.config.js",
|
||||
"eslint.config.mjs",
|
||||
]
|
||||
if (eslintConfigs.some((name) => fs.existsSync(path.join(cwd, name)))) {
|
||||
return "eslint"
|
||||
}
|
||||
|
||||
const pyprojectPath = path.join(cwd, "pyproject.toml")
|
||||
if (fs.existsSync(pyprojectPath)) {
|
||||
try {
|
||||
const content = fs.readFileSync(pyprojectPath, "utf-8")
|
||||
if (content.includes("ruff")) return "ruff"
|
||||
} catch {
|
||||
// ignore read errors and keep fallback logic
|
||||
}
|
||||
}
|
||||
|
||||
if (fs.existsSync(path.join(cwd, ".golangci.yml")) || fs.existsSync(path.join(cwd, ".golangci.yaml"))) {
|
||||
return "golangci-lint"
|
||||
}
|
||||
|
||||
return "eslint"
|
||||
}
|
||||
|
||||
function buildLintCommand(linter: Linter, target: string, fix: boolean): string {
|
||||
if (linter === "biome") return `npx @biomejs/biome lint${fix ? " --write" : ""} ${target}`
|
||||
if (linter === "eslint") return `npx eslint${fix ? " --fix" : ""} ${target}`
|
||||
if (linter === "ruff") return `ruff check${fix ? " --fix" : ""} ${target}`
|
||||
if (linter === "pylint") return `pylint ${target}`
|
||||
return `golangci-lint run ${target}`
|
||||
}
|
||||
|
||||
8
.prettierrc
Normal file
8
.prettierrc
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none",
|
||||
"semi": true,
|
||||
"tabWidth": 2,
|
||||
"printWidth": 200,
|
||||
"arrowParens": "avoid"
|
||||
}
|
||||
19
AGENTS.md
19
AGENTS.md
@@ -1,6 +1,6 @@
|
||||
# Everything Claude Code (ECC) — Agent Instructions
|
||||
|
||||
This is a **production-ready AI coding plugin** providing 13 specialized agents, 50+ skills, 33 commands, and automated hook workflows for software development.
|
||||
This is a **production-ready AI coding plugin** providing 16 specialized agents, 65+ skills, 40 commands, and automated hook workflows for software development.
|
||||
|
||||
## Core Principles
|
||||
|
||||
@@ -27,6 +27,9 @@ This is a **production-ready AI coding plugin** providing 13 specialized agents,
|
||||
| go-build-resolver | Go build errors | Go build failures |
|
||||
| database-reviewer | PostgreSQL/Supabase specialist | Schema design, query optimization |
|
||||
| python-reviewer | Python code review | Python projects |
|
||||
| chief-of-staff | Communication triage and drafts | Multi-channel email, Slack, LINE, Messenger |
|
||||
| loop-operator | Autonomous loop execution | Run loops safely, monitor stalls, intervene |
|
||||
| harness-optimizer | Harness config tuning | Reliability, cost, throughput |
|
||||
|
||||
## Agent Orchestration
|
||||
|
||||
@@ -36,6 +39,9 @@ Use agents proactively without user prompt:
|
||||
- Bug fix or new feature → **tdd-guide**
|
||||
- Architectural decision → **architect**
|
||||
- Security-sensitive code → **security-reviewer**
|
||||
- Multi-channel communication triage → **chief-of-staff**
|
||||
- Autonomous loops / loop monitoring → **loop-operator**
|
||||
- Harness config reliability and cost → **harness-optimizer**
|
||||
|
||||
Use parallel execution for independent operations — launch multiple agents simultaneously.
|
||||
|
||||
@@ -92,7 +98,12 @@ Troubleshoot failures: check test isolation → verify mocks → fix implementat
|
||||
1. **Plan** — Use planner agent, identify dependencies and risks, break into phases
|
||||
2. **TDD** — Use tdd-guide agent, write tests first, implement, refactor
|
||||
3. **Review** — Use code-reviewer agent immediately, address CRITICAL/HIGH issues
|
||||
4. **Commit** — Conventional commits format, comprehensive PR summaries
|
||||
4. **Capture knowledge in the right place**
|
||||
- Personal debugging notes, preferences, and temporary context → auto memory
|
||||
- Team/project knowledge (architecture decisions, API changes, runbooks) → the project's existing docs structure
|
||||
- If the current task already produces the relevant docs or code comments, do not duplicate the same information elsewhere
|
||||
- If there is no obvious project doc location, ask before creating a new top-level file
|
||||
5. **Commit** — Conventional commits format, comprehensive PR summaries
|
||||
|
||||
## Git Workflow
|
||||
|
||||
@@ -118,8 +129,8 @@ Troubleshoot failures: check test isolation → verify mocks → fix implementat
|
||||
|
||||
```
|
||||
agents/ — 13 specialized subagents
|
||||
skills/ — 50+ workflow skills and domain knowledge
|
||||
commands/ — 33 slash commands
|
||||
skills/ — 65+ workflow skills and domain knowledge
|
||||
commands/ — 40 slash commands
|
||||
hooks/ — Trigger-based automations
|
||||
rules/ — Always-follow guidelines (common + per-language)
|
||||
scripts/ — Cross-platform Node.js utilities
|
||||
|
||||
46
CHANGELOG.md
Normal file
46
CHANGELOG.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Changelog
|
||||
|
||||
## 1.8.0 - 2026-03-04
|
||||
|
||||
### Highlights
|
||||
|
||||
- Harness-first release focused on reliability, eval discipline, and autonomous loop operations.
|
||||
- Hook runtime now supports profile-based control and targeted hook disabling.
|
||||
- NanoClaw v2 adds model routing, skill hot-load, branching, search, compaction, export, and metrics.
|
||||
|
||||
### Core
|
||||
|
||||
- Added new commands: `/harness-audit`, `/loop-start`, `/loop-status`, `/quality-gate`, `/model-route`.
|
||||
- Added new skills:
|
||||
- `agent-harness-construction`
|
||||
- `agentic-engineering`
|
||||
- `ralphinho-rfc-pipeline`
|
||||
- `ai-first-engineering`
|
||||
- `enterprise-agent-ops`
|
||||
- `nanoclaw-repl`
|
||||
- `continuous-agent-loop`
|
||||
- Added new agents:
|
||||
- `harness-optimizer`
|
||||
- `loop-operator`
|
||||
|
||||
### Hook Reliability
|
||||
|
||||
- Fixed SessionStart root resolution with robust fallback search.
|
||||
- Moved session summary persistence to `Stop` where transcript payload is available.
|
||||
- Added quality-gate and cost-tracker hooks.
|
||||
- Replaced fragile inline hook one-liners with dedicated script files.
|
||||
- Added `ECC_HOOK_PROFILE` and `ECC_DISABLED_HOOKS` controls.
|
||||
|
||||
### Cross-Platform
|
||||
|
||||
- Improved Windows-safe path handling in doc warning logic.
|
||||
- Hardened observer loop behavior to avoid non-interactive hangs.
|
||||
|
||||
### Notes
|
||||
|
||||
- `autonomous-loops` is kept as a compatibility alias for one release; `continuous-agent-loop` is the canonical name.
|
||||
|
||||
### Credits
|
||||
|
||||
- inspired by [zarazhangrui](https://github.com/zarazhangrui)
|
||||
- homunculus-inspired by [humanplane](https://github.com/humanplane)
|
||||
128
CODE_OF_CONDUCT.md
Normal file
128
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
@@ -10,6 +10,7 @@ Thanks for wanting to contribute! This repo is a community resource for Claude C
|
||||
- [Contributing Agents](#contributing-agents)
|
||||
- [Contributing Hooks](#contributing-hooks)
|
||||
- [Contributing Commands](#contributing-commands)
|
||||
- [Cross-Harness and Translations](#cross-harness-and-translations)
|
||||
- [Pull Request Process](#pull-request-process)
|
||||
|
||||
---
|
||||
@@ -62,7 +63,7 @@ cp -r skills/my-skill ~/.claude/skills/ # for skills
|
||||
# Then test with Claude Code
|
||||
|
||||
# 5. Submit PR
|
||||
git add . && git commit -m "feat: add my-skill" && git push
|
||||
git add . && git commit -m "feat: add my-skill" && git push -u origin feat/my-contribution
|
||||
```
|
||||
|
||||
---
|
||||
@@ -348,6 +349,29 @@ What the user receives.
|
||||
|
||||
---
|
||||
|
||||
## Cross-Harness and Translations
|
||||
|
||||
### Skill subsets (Codex and Cursor)
|
||||
|
||||
ECC ships skill subsets for other harnesses:
|
||||
|
||||
- **Codex:** `.agents/skills/` — skills listed in `agents/openai.yaml` are loaded by Codex.
|
||||
- **Cursor:** `.cursor/skills/` — a subset of skills is bundled for Cursor.
|
||||
|
||||
When you **add a new skill** that should be available on Codex or Cursor:
|
||||
|
||||
1. Add the skill under `skills/your-skill-name/` as usual.
|
||||
2. If it should be available on **Codex**, add it to `.agents/skills/` (copy the skill directory or add a reference) and ensure it is referenced in `agents/openai.yaml` if required.
|
||||
3. If it should be available on **Cursor**, add it under `.cursor/skills/` per Cursor's layout.
|
||||
|
||||
Check existing skills in those directories for the expected structure. Keeping these subsets in sync is manual; mention in your PR if you updated them.
|
||||
|
||||
### Translations
|
||||
|
||||
Translations live under `docs/` (e.g. `docs/zh-CN`, `docs/zh-TW`, `docs/ja-JP`). If you change agents, commands, or skills that are translated, consider updating the corresponding translation files or opening an issue so maintainers or translators can update them.
|
||||
|
||||
---
|
||||
|
||||
## Pull Request Process
|
||||
|
||||
### 1. PR Title Format
|
||||
|
||||
192
README.md
192
README.md
@@ -5,15 +5,19 @@
|
||||
[](https://github.com/affaan-m/everything-claude-code/stargazers)
|
||||
[](https://github.com/affaan-m/everything-claude-code/network/members)
|
||||
[](https://github.com/affaan-m/everything-claude-code/graphs/contributors)
|
||||
[](https://www.npmjs.com/package/ecc-universal)
|
||||
[](https://www.npmjs.com/package/ecc-agentshield)
|
||||
[](https://github.com/marketplace/ecc-tools)
|
||||
[](LICENSE)
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
> **50K+ stars** | **6K+ forks** | **30 contributors** | **6 languages supported** | **Anthropic Hackathon Winner**
|
||||
> **50K+ stars** | **6K+ forks** | **30 contributors** | **5 languages supported** | **Anthropic Hackathon Winner**
|
||||
|
||||
---
|
||||
|
||||
@@ -27,9 +31,11 @@
|
||||
|
||||
---
|
||||
|
||||
**The complete collection of Claude Code configs from an Anthropic hackathon winner.**
|
||||
**The performance optimization system for AI agent harnesses. From an Anthropic hackathon winner.**
|
||||
|
||||
Production-ready agents, skills, hooks, commands, rules, and MCP configurations evolved over 10+ months of intensive daily use building real products.
|
||||
Not just configs. A complete system: skills, instincts, memory optimization, continuous learning, security scanning, and research-first development. Production-ready agents, hooks, commands, rules, and MCP configurations evolved over 10+ months of intensive daily use building real products.
|
||||
|
||||
Works across **Claude Code**, **Codex**, **Cowork**, and other AI agent harnesses.
|
||||
|
||||
---
|
||||
|
||||
@@ -69,6 +75,16 @@ This repo is the raw code only. The guides explain everything.
|
||||
|
||||
## What's New
|
||||
|
||||
### v1.8.0 — Harness Performance System (Mar 2026)
|
||||
|
||||
- **Harness-first release** — ECC is now explicitly framed as an agent harness performance system, not just a config pack.
|
||||
- **Hook reliability overhaul** — SessionStart root fallback, Stop-phase session summaries, and script-based hooks replacing fragile inline one-liners.
|
||||
- **Hook runtime controls** — `ECC_HOOK_PROFILE=minimal|standard|strict` and `ECC_DISABLED_HOOKS=...` for runtime gating without editing hook files.
|
||||
- **New harness commands** — `/harness-audit`, `/loop-start`, `/loop-status`, `/quality-gate`, `/model-route`.
|
||||
- **NanoClaw v2** — model routing, skill hot-load, session branch/search/export/compact/metrics.
|
||||
- **Cross-harness parity** — behavior tightened across Claude Code, Cursor, OpenCode, and Codex app/CLI.
|
||||
- **997 internal tests passing** — full suite green after hook/runtime refactor and compatibility updates.
|
||||
|
||||
### v1.7.0 — Cross-Platform Expansion & Presentation Builder (Feb 2026)
|
||||
|
||||
- **Codex app + CLI support** — Direct `AGENTS.md`-based Codex support, installer targeting, and Codex docs
|
||||
@@ -140,11 +156,13 @@ git clone https://github.com/affaan-m/everything-claude-code.git
|
||||
cd everything-claude-code
|
||||
|
||||
# Recommended: use the installer (handles common + language rules safely)
|
||||
./install.sh typescript # or python or golang
|
||||
./install.sh typescript # or python or golang or swift or php
|
||||
# You can pass multiple languages:
|
||||
# ./install.sh typescript python golang
|
||||
# ./install.sh typescript python golang swift php
|
||||
# or target cursor:
|
||||
# ./install.sh --target cursor typescript
|
||||
# or target antigravity:
|
||||
# ./install.sh --target antigravity typescript
|
||||
```
|
||||
|
||||
For manual install instructions see the README in the `rules/` folder.
|
||||
@@ -162,13 +180,13 @@ For manual install instructions see the README in the `rules/` folder.
|
||||
/plugin list everything-claude-code@everything-claude-code
|
||||
```
|
||||
|
||||
✨ **That's it!** You now have access to 13 agents, 56 skills, and 32 commands.
|
||||
✨ **That's it!** You now have access to 16 agents, 65 skills, and 40 commands.
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Cross-Platform Support
|
||||
|
||||
This plugin now fully supports **Windows, macOS, and Linux**. All hooks and scripts have been rewritten in Node.js for maximum compatibility.
|
||||
This plugin now fully supports **Windows, macOS, and Linux**, alongside tight integration across major IDEs (Cursor, OpenCode, Antigravity) and CLI harnesses. All hooks and scripts have been rewritten in Node.js for maximum compatibility.
|
||||
|
||||
### Package Manager Detection
|
||||
|
||||
@@ -199,6 +217,18 @@ node scripts/setup-package-manager.js --detect
|
||||
|
||||
Or use the `/setup-pm` command in Claude Code.
|
||||
|
||||
### Hook Runtime Controls
|
||||
|
||||
Use runtime flags to tune strictness or disable specific hooks temporarily:
|
||||
|
||||
```bash
|
||||
# Hook strictness profile (default: standard)
|
||||
export ECC_HOOK_PROFILE=standard
|
||||
|
||||
# Comma-separated hook IDs to disable
|
||||
export ECC_DISABLED_HOOKS="pre:bash:tmux-reminder,post:edit:typecheck"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📦 What's Inside
|
||||
@@ -245,6 +275,7 @@ everything-claude-code/
|
||||
| |-- security-review/ # Security checklist
|
||||
| |-- eval-harness/ # Verification loop evaluation (Longform Guide)
|
||||
| |-- verification-loop/ # Continuous verification (Longform Guide)
|
||||
| |-- videodb/ # Video and audio: ingest, search, edit, generate, stream (NEW)
|
||||
| |-- golang-patterns/ # Go idioms and best practices
|
||||
| |-- golang-testing/ # Go testing patterns, TDD, benchmarks
|
||||
| |-- cpp-coding-standards/ # C++ coding standards from C++ Core Guidelines (NEW)
|
||||
@@ -281,6 +312,11 @@ everything-claude-code/
|
||||
| |-- liquid-glass-design/ # iOS 26 Liquid Glass design system (NEW)
|
||||
| |-- foundation-models-on-device/ # Apple on-device LLM with FoundationModels (NEW)
|
||||
| |-- swift-concurrency-6-2/ # Swift 6.2 Approachable Concurrency (NEW)
|
||||
| |-- perl-patterns/ # Modern Perl 5.36+ idioms and best practices (NEW)
|
||||
| |-- perl-security/ # Perl security patterns, taint mode, safe I/O (NEW)
|
||||
| |-- perl-testing/ # Perl TDD with Test2::V0, prove, Devel::Cover (NEW)
|
||||
| |-- autonomous-loops/ # Autonomous loop patterns: sequential pipelines, PR loops, DAG orchestration (NEW)
|
||||
| |-- plankton-code-quality/ # Write-time code quality enforcement with Plankton hooks (NEW)
|
||||
|
|
||||
|-- commands/ # Slash commands for quick execution
|
||||
| |-- tdd.md # /tdd - Test-driven development
|
||||
@@ -330,6 +366,8 @@ everything-claude-code/
|
||||
| |-- typescript/ # TypeScript/JavaScript specific
|
||||
| |-- python/ # Python specific
|
||||
| |-- golang/ # Go specific
|
||||
| |-- swift/ # Swift specific
|
||||
| |-- php/ # PHP specific (NEW)
|
||||
|
|
||||
|-- hooks/ # Trigger-based automations
|
||||
| |-- README.md # Hook documentation, recipes, and customization guide
|
||||
@@ -440,6 +478,10 @@ Use `/security-scan` in Claude Code to run it, or add to CI with the [GitHub Act
|
||||
|
||||
[GitHub](https://github.com/affaan-m/agentshield) | [npm](https://www.npmjs.com/package/ecc-agentshield)
|
||||
|
||||
### 🔬 Plankton — Write-Time Code Quality Enforcement
|
||||
|
||||
Plankton (credit: @alxfazio) is a recommended companion for write-time code quality enforcement. It runs formatters and 20+ linters on every file edit via PostToolUse hooks, then spawns Claude subprocesses (routed to Haiku/Sonnet/Opus by violation complexity) to fix issues the main agent missed. Three-phase architecture: auto-format silently (40-50% of issues), collect remaining violations as structured JSON, delegate fixes to a subprocess. Includes config protection hooks that prevent agents from modifying linter configs to pass instead of fixing code. Supports Python, TypeScript, Shell, YAML, JSON, TOML, Markdown, and Dockerfile. Use alongside AgentShield for security + quality coverage. See `skills/plankton-code-quality/` for full integration guide.
|
||||
|
||||
### 🧠 Continuous Learning v2
|
||||
|
||||
The instinct-based learning system automatically learns your patterns:
|
||||
@@ -528,6 +570,7 @@ This gives you instant access to all commands, agents, skills, and hooks.
|
||||
> cp -r everything-claude-code/rules/typescript/* ~/.claude/rules/ # pick your stack
|
||||
> cp -r everything-claude-code/rules/python/* ~/.claude/rules/
|
||||
> cp -r everything-claude-code/rules/golang/* ~/.claude/rules/
|
||||
> cp -r everything-claude-code/rules/php/* ~/.claude/rules/
|
||||
>
|
||||
> # Option B: Project-level rules (applies to current project only)
|
||||
> mkdir -p .claude/rules
|
||||
@@ -553,12 +596,20 @@ cp -r everything-claude-code/rules/common/* ~/.claude/rules/
|
||||
cp -r everything-claude-code/rules/typescript/* ~/.claude/rules/ # pick your stack
|
||||
cp -r everything-claude-code/rules/python/* ~/.claude/rules/
|
||||
cp -r everything-claude-code/rules/golang/* ~/.claude/rules/
|
||||
cp -r everything-claude-code/rules/php/* ~/.claude/rules/
|
||||
|
||||
# Copy commands
|
||||
cp everything-claude-code/commands/*.md ~/.claude/commands/
|
||||
|
||||
# Copy skills
|
||||
cp -r everything-claude-code/skills/* ~/.claude/skills/
|
||||
# Copy skills (core vs niche)
|
||||
# Recommended (new users): core/general skills only
|
||||
cp -r everything-claude-code/.agents/skills/* ~/.claude/skills/
|
||||
cp -r everything-claude-code/skills/search-first ~/.claude/skills/
|
||||
|
||||
# Optional: add niche/framework-specific skills only when needed
|
||||
# for s in django-patterns django-tdd springboot-patterns; do
|
||||
# cp -r everything-claude-code/skills/$s ~/.claude/skills/
|
||||
# done
|
||||
```
|
||||
|
||||
#### Add hooks to settings.json
|
||||
@@ -628,6 +679,8 @@ rules/
|
||||
typescript/ # TS/JS specific patterns and tools
|
||||
python/ # Python specific patterns and tools
|
||||
golang/ # Go specific patterns and tools
|
||||
swift/ # Swift specific patterns and tools
|
||||
php/ # PHP specific patterns and tools
|
||||
```
|
||||
|
||||
See [`rules/README.md`](rules/README.md) for installation and structure details.
|
||||
@@ -697,6 +750,31 @@ This shows all available agents, commands, and skills from the plugin.
|
||||
This is the most common issue. **Do NOT add a `"hooks"` field to `.claude-plugin/plugin.json`.** Claude Code v2.1+ automatically loads `hooks/hooks.json` from installed plugins. Explicitly declaring it causes duplicate detection errors. See [#29](https://github.com/affaan-m/everything-claude-code/issues/29), [#52](https://github.com/affaan-m/everything-claude-code/issues/52), [#103](https://github.com/affaan-m/everything-claude-code/issues/103).
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Can I use ECC with Claude Code on a custom API endpoint or model gateway?</b></summary>
|
||||
|
||||
Yes. ECC does not hardcode Anthropic-hosted transport settings. It runs locally through Claude Code's normal CLI/plugin surface, so it works with:
|
||||
|
||||
- Anthropic-hosted Claude Code
|
||||
- Official Claude Code gateway setups using `ANTHROPIC_BASE_URL` and `ANTHROPIC_AUTH_TOKEN`
|
||||
- Compatible custom endpoints that speak the Anthropic API Claude Code expects
|
||||
|
||||
Minimal example:
|
||||
|
||||
```bash
|
||||
export ANTHROPIC_BASE_URL=https://your-gateway.example.com
|
||||
export ANTHROPIC_AUTH_TOKEN=your-token
|
||||
claude
|
||||
```
|
||||
|
||||
If your gateway remaps model names, configure that in Claude Code rather than in ECC. ECC's hooks, skills, commands, and rules are model-provider agnostic once the `claude` CLI is already working.
|
||||
|
||||
Official references:
|
||||
- [Claude Code LLM gateway docs](https://docs.anthropic.com/en/docs/claude-code/llm-gateway)
|
||||
- [Claude Code model configuration docs](https://docs.anthropic.com/en/docs/claude-code/model-config)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>My context window is shrinking / Claude is running out of context</b></summary>
|
||||
|
||||
@@ -730,12 +808,13 @@ Each component is fully independent.
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Does this work with Cursor / OpenCode / Codex?</b></summary>
|
||||
<summary><b>Does this work with Cursor / OpenCode / Codex / Antigravity?</b></summary>
|
||||
|
||||
Yes. ECC is cross-platform:
|
||||
- **Cursor**: Pre-translated configs in `.cursor/`. See [Cursor IDE Support](#cursor-ide-support).
|
||||
- **OpenCode**: Full plugin support in `.opencode/`. See [OpenCode Support](#-opencode-support).
|
||||
- **Codex**: First-class support with adapter drift guards and SessionStart fallback. See PR [#257](https://github.com/affaan-m/everything-claude-code/pull/257).
|
||||
- **Codex**: First-class support for both macOS app and CLI, with adapter drift guards and SessionStart fallback. See PR [#257](https://github.com/affaan-m/everything-claude-code/pull/257).
|
||||
- **Antigravity**: Tightly integrated setup for workflows, skills, and flatten rules in `.agent/`.
|
||||
- **Claude Code**: Native — this is the primary target.
|
||||
</details>
|
||||
|
||||
@@ -781,7 +860,7 @@ Please contribute! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
||||
|
||||
### Ideas for Contributions
|
||||
|
||||
- Language-specific skills (Rust, C#, Swift, Kotlin) — Go, Python, Java already included
|
||||
- Language-specific skills (Rust, C#, Kotlin, Java) — Go, Python, Perl, Swift, and TypeScript already included
|
||||
- Framework-specific configs (Rails, Laravel, FastAPI, NestJS) — Django, Spring Boot already included
|
||||
- DevOps agents (Kubernetes, Terraform, AWS, Docker)
|
||||
- Testing strategies (different frameworks, visual regression)
|
||||
@@ -798,7 +877,7 @@ ECC provides **full Cursor IDE support** with hooks, rules, agents, skills, comm
|
||||
```bash
|
||||
# Install for your language(s)
|
||||
./install.sh --target cursor typescript
|
||||
./install.sh --target cursor python golang swift
|
||||
./install.sh --target cursor python golang swift php
|
||||
```
|
||||
|
||||
### What's Included
|
||||
@@ -807,7 +886,7 @@ ECC provides **full Cursor IDE support** with hooks, rules, agents, skills, comm
|
||||
|-----------|-------|---------|
|
||||
| Hook Events | 15 | sessionStart, beforeShellExecution, afterFileEdit, beforeMCPExecution, beforeSubmitPrompt, and 10 more |
|
||||
| Hook Scripts | 16 | Thin Node.js scripts delegating to `scripts/hooks/` via shared adapter |
|
||||
| Rules | 29 | 9 common (alwaysApply) + 20 language-specific (TypeScript, Python, Go, Swift) |
|
||||
| Rules | 34 | 9 common (alwaysApply) + 25 language-specific (TypeScript, Python, Go, Swift, PHP) |
|
||||
| Agents | Shared | Via AGENTS.md at root (read by Cursor natively) |
|
||||
| Skills | Shared + Bundled | Via AGENTS.md at root and `.cursor/skills/` for translated additions |
|
||||
| Commands | Shared | `.cursor/commands/` if installed |
|
||||
@@ -843,29 +922,36 @@ alwaysApply: false
|
||||
|
||||
---
|
||||
|
||||
## Codex CLI Support
|
||||
## Codex macOS App + CLI Support
|
||||
|
||||
ECC provides **first-class Codex CLI support** with a reference configuration, Codex-specific AGENTS.md supplement, and 16 ported skills.
|
||||
ECC provides **first-class Codex support** for both the macOS app and CLI, with a reference configuration, Codex-specific AGENTS.md supplement, and shared skills.
|
||||
|
||||
### Quick Start (Codex)
|
||||
### Quick Start (Codex App + CLI)
|
||||
|
||||
```bash
|
||||
# Copy the reference config to your home directory
|
||||
cp .codex/config.toml ~/.codex/config.toml
|
||||
|
||||
# Run Codex in the repo — AGENTS.md is auto-detected
|
||||
# Run Codex CLI in the repo — AGENTS.md and .codex/ are auto-detected
|
||||
codex
|
||||
|
||||
# Optional: copy the global-safe defaults to your home directory
|
||||
cp .codex/config.toml ~/.codex/config.toml
|
||||
```
|
||||
|
||||
Codex macOS app:
|
||||
- Open this repository as your workspace.
|
||||
- The root `AGENTS.md` is auto-detected.
|
||||
- `.codex/config.toml` and `.codex/agents/*.toml` work best when kept project-local.
|
||||
- Optional: copy `.codex/config.toml` to `~/.codex/config.toml` for global defaults; keep the multi-agent role files project-local unless you also copy `.codex/agents/`.
|
||||
|
||||
### What's Included
|
||||
|
||||
| Component | Count | Details |
|
||||
|-----------|-------|---------|
|
||||
| Config | 1 | `.codex/config.toml` — model, permissions, MCP servers, persistent instructions |
|
||||
| Config | 1 | `.codex/config.toml` — top-level approvals/sandbox/web_search, MCP servers, notifications, profiles |
|
||||
| AGENTS.md | 2 | Root (universal) + `.codex/AGENTS.md` (Codex-specific supplement) |
|
||||
| Skills | 16 | `.agents/skills/` — SKILL.md + agents/openai.yaml per skill |
|
||||
| MCP Servers | 4 | GitHub, Context7, Memory, Sequential Thinking (command-based) |
|
||||
| Profiles | 2 | `strict` (read-only sandbox) and `yolo` (full auto-approve) |
|
||||
| Agent Roles | 3 | `.codex/agents/` — explorer, reviewer, docs-researcher |
|
||||
|
||||
### Skills
|
||||
|
||||
@@ -892,7 +978,24 @@ Skills at `.agents/skills/` are auto-loaded by Codex:
|
||||
|
||||
### Key Limitation
|
||||
|
||||
Codex CLI does **not yet support hooks** ([GitHub Issue #2109](https://github.com/openai/codex/issues/2109), 430+ upvotes). Security enforcement is instruction-based via `persistent_instructions` in config.toml and the sandbox permission system.
|
||||
Codex does **not yet provide Claude-style hook execution parity**. ECC enforcement there is instruction-based via `AGENTS.md`, optional `model_instructions_file` overrides, and sandbox/approval settings.
|
||||
|
||||
### Multi-Agent Support
|
||||
|
||||
Current Codex builds support experimental multi-agent workflows.
|
||||
|
||||
- Enable `features.multi_agent = true` in `.codex/config.toml`
|
||||
- Define roles under `[agents.<name>]`
|
||||
- Point each role at a file under `.codex/agents/`
|
||||
- Use `/agent` in the CLI to inspect or steer child agents
|
||||
|
||||
ECC ships three sample role configs:
|
||||
|
||||
| Role | Purpose |
|
||||
|------|---------|
|
||||
| `explorer` | Read-only codebase evidence gathering before edits |
|
||||
| `reviewer` | Correctness, security, and missing-test review |
|
||||
| `docs_researcher` | Documentation and API verification before release/docs changes |
|
||||
|
||||
---
|
||||
|
||||
@@ -916,9 +1019,9 @@ The configuration is automatically detected from `.opencode/opencode.json`.
|
||||
|
||||
| Feature | Claude Code | OpenCode | Status |
|
||||
|---------|-------------|----------|--------|
|
||||
| Agents | ✅ 13 agents | ✅ 12 agents | **Claude Code leads** |
|
||||
| Commands | ✅ 33 commands | ✅ 24 commands | **Claude Code leads** |
|
||||
| Skills | ✅ 50+ skills | ✅ 37 skills | **Claude Code leads** |
|
||||
| Agents | ✅ 16 agents | ✅ 12 agents | **Claude Code leads** |
|
||||
| Commands | ✅ 40 commands | ✅ 31 commands | **Claude Code leads** |
|
||||
| Skills | ✅ 65 skills | ✅ 37 skills | **Claude Code leads** |
|
||||
| Hooks | ✅ 8 event types | ✅ 11 events | **OpenCode has more!** |
|
||||
| Rules | ✅ 29 rules | ✅ 13 instructions | **Claude Code leads** |
|
||||
| MCP Servers | ✅ 14 servers | ✅ Full | **Full parity** |
|
||||
@@ -938,7 +1041,7 @@ OpenCode's plugin system is MORE sophisticated than Claude Code with 20+ event t
|
||||
|
||||
**Additional OpenCode events**: `file.edited`, `file.watcher.updated`, `message.updated`, `lsp.client.diagnostics`, `tui.toast.show`, and more.
|
||||
|
||||
### Available Commands (32)
|
||||
### Available Commands (31+)
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
@@ -972,8 +1075,15 @@ OpenCode's plugin system is MORE sophisticated than Claude Code with 20+ event t
|
||||
| `/instinct-import` | Import instincts |
|
||||
| `/instinct-export` | Export instincts |
|
||||
| `/evolve` | Cluster instincts into skills |
|
||||
| `/promote` | Promote project instincts to global scope |
|
||||
| `/projects` | List known projects and instinct stats |
|
||||
| `/learn-eval` | Extract and evaluate patterns before saving |
|
||||
| `/setup-pm` | Configure package manager |
|
||||
| `/harness-audit` | Audit harness reliability, eval readiness, and risk posture |
|
||||
| `/loop-start` | Start controlled agentic loop execution pattern |
|
||||
| `/loop-status` | Inspect active loop status and checkpoints |
|
||||
| `/quality-gate` | Run quality gate checks for paths or entire repo |
|
||||
| `/model-route` | Route tasks to models by complexity and budget |
|
||||
|
||||
### Plugin Installation
|
||||
|
||||
@@ -995,6 +1105,13 @@ Then add to your `opencode.json`:
|
||||
}
|
||||
```
|
||||
|
||||
That npm plugin entry enables ECC's published OpenCode plugin module (hooks/events and plugin tools).
|
||||
It does **not** automatically add ECC's full command/agent/instruction catalog to your project config.
|
||||
|
||||
For the full ECC OpenCode setup, either:
|
||||
- run OpenCode inside this repository, or
|
||||
- copy the bundled `.opencode/` config assets into your project and wire the `instructions`, `agent`, and `command` entries in `opencode.json`
|
||||
|
||||
### Documentation
|
||||
|
||||
- **Migration Guide**: `.opencode/MIGRATION.md`
|
||||
@@ -1010,25 +1127,25 @@ ECC is the **first plugin to maximize every major AI coding tool**. Here's how e
|
||||
|
||||
| Feature | Claude Code | Cursor IDE | Codex CLI | OpenCode |
|
||||
|---------|------------|------------|-----------|----------|
|
||||
| **Agents** | 13 | Shared (AGENTS.md) | Shared (AGENTS.md) | 12 |
|
||||
| **Commands** | 33 | Shared | Instruction-based | 24 |
|
||||
| **Skills** | 50+ | Shared | 10 (native format) | 37 |
|
||||
| **Agents** | 16 | Shared (AGENTS.md) | Shared (AGENTS.md) | 12 |
|
||||
| **Commands** | 40 | Shared | Instruction-based | 31 |
|
||||
| **Skills** | 65 | Shared | 10 (native format) | 37 |
|
||||
| **Hook Events** | 8 types | 15 types | None yet | 11 types |
|
||||
| **Hook Scripts** | 9 scripts | 16 scripts (DRY adapter) | N/A | Plugin hooks |
|
||||
| **Rules** | 29 (common + lang) | 29 (YAML frontmatter) | Instruction-based | 13 instructions |
|
||||
| **Hook Scripts** | 20+ scripts | 16 scripts (DRY adapter) | N/A | Plugin hooks |
|
||||
| **Rules** | 34 (common + lang) | 34 (YAML frontmatter) | Instruction-based | 13 instructions |
|
||||
| **Custom Tools** | Via hooks | Via hooks | N/A | 6 native tools |
|
||||
| **MCP Servers** | 14 | Shared (mcp.json) | 4 (command-based) | Full |
|
||||
| **Config Format** | settings.json | hooks.json + rules/ | config.toml | opencode.json |
|
||||
| **Context File** | CLAUDE.md + AGENTS.md | AGENTS.md | AGENTS.md | AGENTS.md |
|
||||
| **Secret Detection** | Hook-based | beforeSubmitPrompt hook | Sandbox-based | Hook-based |
|
||||
| **Auto-Format** | PostToolUse hook | afterFileEdit hook | N/A | file.edited hook |
|
||||
| **Version** | Plugin | Plugin | Reference config | 1.6.0 |
|
||||
| **Version** | Plugin | Plugin | Reference config | 1.8.0 |
|
||||
|
||||
**Key architectural decisions:**
|
||||
- **AGENTS.md** at root is the universal cross-tool file (read by all 4 tools)
|
||||
- **DRY adapter pattern** lets Cursor reuse Claude Code's hook scripts without duplication
|
||||
- **Skills format** (SKILL.md with YAML frontmatter) works across Claude Code, Codex, and OpenCode
|
||||
- Codex's lack of hooks is compensated by `persistent_instructions` and sandbox permissions
|
||||
- Codex's lack of hooks is compensated by `AGENTS.md`, optional `model_instructions_file` overrides, and sandbox permissions
|
||||
|
||||
---
|
||||
|
||||
@@ -1038,6 +1155,11 @@ I've been using Claude Code since the experimental rollout. Won the Anthropic x
|
||||
|
||||
These configs are battle-tested across multiple production applications.
|
||||
|
||||
## Inspiration Credits
|
||||
|
||||
- inspired by [zarazhangrui](https://github.com/zarazhangrui)
|
||||
- homunculus-inspired by [humanplane](https://github.com/humanplane)
|
||||
|
||||
---
|
||||
|
||||
## Token Optimization
|
||||
@@ -1142,7 +1264,7 @@ These configs work for my workflow. You should:
|
||||
|
||||
This project is free and open source. Sponsors help keep it maintained and growing.
|
||||
|
||||
[**Become a Sponsor**](https://github.com/sponsors/affaan-m) | [Sponsor Tiers](SPONSORS.md)
|
||||
[**Become a Sponsor**](https://github.com/sponsors/affaan-m) | [Sponsor Tiers](SPONSORS.md) | [Sponsorship Program](SPONSORING.md)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
---
|
||||
@@ -81,8 +82,12 @@
|
||||
# 首先克隆仓库
|
||||
git clone https://github.com/affaan-m/everything-claude-code.git
|
||||
|
||||
# 复制规则(应用于所有项目)
|
||||
cp -r everything-claude-code/rules/* ~/.claude/rules/
|
||||
# 复制规则(通用 + 语言特定)
|
||||
cp -r everything-claude-code/rules/common/* ~/.claude/rules/
|
||||
cp -r everything-claude-code/rules/typescript/* ~/.claude/rules/ # 选择你的技术栈
|
||||
cp -r everything-claude-code/rules/python/* ~/.claude/rules/
|
||||
cp -r everything-claude-code/rules/golang/* ~/.claude/rules/
|
||||
cp -r everything-claude-code/rules/perl/* ~/.claude/rules/
|
||||
```
|
||||
|
||||
### 第三步:开始使用
|
||||
@@ -175,6 +180,9 @@ everything-claude-code/
|
||||
| |-- golang-patterns/ # Go 惯用语和最佳实践(新增)
|
||||
| |-- golang-testing/ # Go 测试模式、TDD、基准测试(新增)
|
||||
| |-- cpp-testing/ # C++ 测试模式、GoogleTest、CMake/CTest(新增)
|
||||
| |-- perl-patterns/ # 现代 Perl 5.36+ 惯用语和最佳实践(新增)
|
||||
| |-- perl-security/ # Perl 安全模式、污染模式、安全 I/O(新增)
|
||||
| |-- perl-testing/ # 使用 Test2::V0、prove、Devel::Cover 的 Perl TDD(新增)
|
||||
|
|
||||
|-- commands/ # 用于快速执行的斜杠命令
|
||||
| |-- tdd.md # /tdd - 测试驱动开发
|
||||
@@ -197,12 +205,20 @@ everything-claude-code/
|
||||
| |-- evolve.md # /evolve - 将直觉聚类到技能中(新增)
|
||||
|
|
||||
|-- rules/ # 始终遵循的指南(复制到 ~/.claude/rules/)
|
||||
| |-- security.md # 强制性安全检查
|
||||
| |-- coding-style.md # 不可变性、文件组织
|
||||
| |-- testing.md # TDD、80% 覆盖率要求
|
||||
| |-- git-workflow.md # 提交格式、PR 流程
|
||||
| |-- agents.md # 何时委托给子代理
|
||||
| |-- performance.md # 模型选择、上下文管理
|
||||
| |-- README.md # 结构概述和安装指南
|
||||
| |-- common/ # 与语言无关的原则
|
||||
| | |-- coding-style.md # 不可变性、文件组织
|
||||
| | |-- git-workflow.md # 提交格式、PR 流程
|
||||
| | |-- testing.md # TDD、80% 覆盖率要求
|
||||
| | |-- performance.md # 模型选择、上下文管理
|
||||
| | |-- patterns.md # 设计模式、骨架项目
|
||||
| | |-- hooks.md # 钩子架构、TodoWrite
|
||||
| | |-- agents.md # 何时委托给子代理
|
||||
| | |-- security.md # 强制性安全检查
|
||||
| |-- typescript/ # TypeScript/JavaScript 特定
|
||||
| |-- python/ # Python 特定
|
||||
| |-- golang/ # Go 特定
|
||||
| |-- perl/ # Perl 特定(新增)
|
||||
|
|
||||
|-- hooks/ # 基于触发器的自动化
|
||||
| |-- hooks.json # 所有钩子配置(PreToolUse、PostToolUse、Stop 等)
|
||||
@@ -287,6 +303,8 @@ everything-claude-code/
|
||||
/instinct-import <file> # 从他人导入直觉
|
||||
/instinct-export # 导出你的直觉以供分享
|
||||
/evolve # 将相关直觉聚类到技能中
|
||||
/promote # 将项目级直觉提升为全局直觉
|
||||
/projects # 查看已识别项目与直觉统计
|
||||
```
|
||||
|
||||
完整文档见 `skills/continuous-learning-v2/`。
|
||||
@@ -354,8 +372,12 @@ git clone https://github.com/affaan-m/everything-claude-code.git
|
||||
# 将代理复制到你的 Claude 配置
|
||||
cp everything-claude-code/agents/*.md ~/.claude/agents/
|
||||
|
||||
# 复制规则
|
||||
cp everything-claude-code/rules/*.md ~/.claude/rules/
|
||||
# 复制规则(通用 + 语言特定)
|
||||
cp -r everything-claude-code/rules/common/* ~/.claude/rules/
|
||||
cp -r everything-claude-code/rules/typescript/* ~/.claude/rules/ # 选择你的技术栈
|
||||
cp -r everything-claude-code/rules/python/* ~/.claude/rules/
|
||||
cp -r everything-claude-code/rules/golang/* ~/.claude/rules/
|
||||
cp -r everything-claude-code/rules/perl/* ~/.claude/rules/
|
||||
|
||||
# 复制命令
|
||||
cp everything-claude-code/commands/*.md ~/.claude/commands/
|
||||
@@ -423,13 +445,15 @@ model: opus
|
||||
|
||||
### 规则
|
||||
|
||||
规则是始终遵循的指南。保持模块化:
|
||||
规则是始终遵循的指南,分为 `common/`(通用)+ 语言特定目录:
|
||||
|
||||
```
|
||||
~/.claude/rules/
|
||||
security.md # 无硬编码秘密
|
||||
coding-style.md # 不可变性、文件限制
|
||||
testing.md # TDD、覆盖率要求
|
||||
common/ # 通用原则(必装)
|
||||
typescript/ # TS/JS 特定模式和工具
|
||||
python/ # Python 特定模式和工具
|
||||
golang/ # Go 特定模式和工具
|
||||
perl/ # Perl 特定模式和工具
|
||||
```
|
||||
|
||||
---
|
||||
@@ -464,7 +488,7 @@ node tests/hooks/hooks.test.js
|
||||
|
||||
### 贡献想法
|
||||
|
||||
- 特定语言的技能(Python、Rust 模式)- 现已包含 Go!
|
||||
- 特定语言的技能(Rust、C#、Kotlin、Java)- 现已包含 Go、Python、Perl、Swift 和 TypeScript!
|
||||
- 特定框架的配置(Django、Rails、Laravel)
|
||||
- DevOps 代理(Kubernetes、Terraform、AWS)
|
||||
- 测试策略(不同框架)
|
||||
|
||||
43
SPONSORING.md
Normal file
43
SPONSORING.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Sponsoring ECC
|
||||
|
||||
ECC is maintained as an open-source agent harness performance system across Claude Code, Cursor, OpenCode, and Codex app/CLI.
|
||||
|
||||
## Why Sponsor
|
||||
|
||||
Sponsorship directly funds:
|
||||
|
||||
- Faster bug-fix and release cycles
|
||||
- Cross-platform parity work across harnesses
|
||||
- Public docs, skills, and reliability tooling that remain free for the community
|
||||
|
||||
## Sponsorship Tiers
|
||||
|
||||
These are practical starting points and can be adjusted for partnership scope.
|
||||
|
||||
| Tier | Price | Best For | Includes |
|
||||
|------|-------|----------|----------|
|
||||
| Pilot Partner | $200/mo | First sponsor engagement | Monthly metrics update, roadmap preview, prioritized maintainer feedback |
|
||||
| Growth Partner | $500/mo | Teams actively adopting ECC | Pilot benefits + monthly office-hours sync + workflow integration guidance |
|
||||
| Strategic Partner | $1,000+/mo | Platform/ecosystem partnerships | Growth benefits + coordinated launch support + deeper maintainer collaboration |
|
||||
|
||||
## Sponsor Reporting
|
||||
|
||||
Metrics shared monthly can include:
|
||||
|
||||
- npm downloads (`ecc-universal`, `ecc-agentshield`)
|
||||
- Repository adoption (stars, forks, contributors)
|
||||
- GitHub App install trend
|
||||
- Release cadence and reliability milestones
|
||||
|
||||
For exact command snippets and a repeatable pull process, see [`docs/business/metrics-and-sponsorship.md`](docs/business/metrics-and-sponsorship.md).
|
||||
|
||||
## Expectations and Scope
|
||||
|
||||
- Sponsorship supports maintenance and acceleration; it does not transfer project ownership.
|
||||
- Feature requests are prioritized based on sponsor tier, ecosystem impact, and maintenance risk.
|
||||
- Security and reliability fixes take precedence over net-new features.
|
||||
|
||||
## Sponsor Here
|
||||
|
||||
- GitHub Sponsors: [https://github.com/sponsors/affaan-m](https://github.com/sponsors/affaan-m)
|
||||
- Project site: [https://ecc.tools](https://ecc.tools)
|
||||
12
SPONSORS.md
12
SPONSORS.md
@@ -29,6 +29,17 @@ Your sponsorship helps:
|
||||
- **Better support** — Sponsors get priority responses
|
||||
- **Shape the roadmap** — Pro+ sponsors vote on features
|
||||
|
||||
## Sponsor Readiness Signals
|
||||
|
||||
Use these proof points in sponsor conversations:
|
||||
|
||||
- Live npm install/download metrics for `ecc-universal` and `ecc-agentshield`
|
||||
- GitHub App distribution via Marketplace installs
|
||||
- Public adoption signals: stars, forks, contributors, release cadence
|
||||
- Cross-harness support: Claude Code, Cursor, OpenCode, Codex app/CLI
|
||||
|
||||
See [`docs/business/metrics-and-sponsorship.md`](docs/business/metrics-and-sponsorship.md) for a copy/paste metrics pull workflow.
|
||||
|
||||
## Sponsor Tiers
|
||||
|
||||
| Tier | Price | Benefits |
|
||||
@@ -37,6 +48,7 @@ Your sponsorship helps:
|
||||
| Builder | $10/mo | Premium tools access |
|
||||
| Pro | $25/mo | Priority support, office hours |
|
||||
| Team | $100/mo | 5 seats, team configs |
|
||||
| Harness Partner | $200/mo | Monthly roadmap sync, prioritized maintainer feedback, release-note mention |
|
||||
| Business | $500/mo | 25 seats, consulting credit |
|
||||
| Enterprise | $2K/mo | Unlimited seats, custom tools |
|
||||
|
||||
|
||||
422
TROUBLESHOOTING.md
Normal file
422
TROUBLESHOOTING.md
Normal file
@@ -0,0 +1,422 @@
|
||||
# Troubleshooting Guide
|
||||
|
||||
Common issues and solutions for Everything Claude Code (ECC) plugin.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Memory & Context Issues](#memory--context-issues)
|
||||
- [Agent Harness Failures](#agent-harness-failures)
|
||||
- [Hook & Workflow Errors](#hook--workflow-errors)
|
||||
- [Installation & Setup](#installation--setup)
|
||||
- [Performance Issues](#performance-issues)
|
||||
- [Common Error Messages](#common-error-messages)
|
||||
- [Getting Help](#getting-help)
|
||||
|
||||
---
|
||||
|
||||
## Memory & Context Issues
|
||||
|
||||
### Context Window Overflow
|
||||
|
||||
**Symptom:** "Context too long" errors or incomplete responses
|
||||
|
||||
**Causes:**
|
||||
- Large file uploads exceeding token limits
|
||||
- Accumulated conversation history
|
||||
- Multiple large tool outputs in single session
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# 1. Clear conversation history and start fresh
|
||||
# Use Claude Code: "New Chat" or Cmd/Ctrl+Shift+N
|
||||
|
||||
# 2. Reduce file size before analysis
|
||||
head -n 100 large-file.log > sample.log
|
||||
|
||||
# 3. Use streaming for large outputs
|
||||
head -n 50 large-file.txt
|
||||
|
||||
# 4. Split tasks into smaller chunks
|
||||
# Instead of: "Analyze all 50 files"
|
||||
# Use: "Analyze files in src/components/ directory"
|
||||
```
|
||||
|
||||
### Memory Persistence Failures
|
||||
|
||||
**Symptom:** Agent doesn't remember previous context or observations
|
||||
|
||||
**Causes:**
|
||||
- Disabled continuous-learning hooks
|
||||
- Corrupted observation files
|
||||
- Project detection failures
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Check if observations are being recorded
|
||||
ls ~/.claude/homunculus/projects/*/observations.jsonl
|
||||
|
||||
# Find the current project's hash id
|
||||
python3 - <<'PY'
|
||||
import json, os
|
||||
registry_path = os.path.expanduser("~/.claude/homunculus/projects.json")
|
||||
with open(registry_path) as f:
|
||||
registry = json.load(f)
|
||||
for project_id, meta in registry.items():
|
||||
if meta.get("root") == os.getcwd():
|
||||
print(project_id)
|
||||
break
|
||||
else:
|
||||
raise SystemExit("Project hash not found in ~/.claude/homunculus/projects.json")
|
||||
PY
|
||||
|
||||
# View recent observations for that project
|
||||
tail -20 ~/.claude/homunculus/projects/<project-hash>/observations.jsonl
|
||||
|
||||
# Back up a corrupted observations file before recreating it
|
||||
mv ~/.claude/homunculus/projects/<project-hash>/observations.jsonl \
|
||||
~/.claude/homunculus/projects/<project-hash>/observations.jsonl.bak.$(date +%Y%m%d-%H%M%S)
|
||||
|
||||
# Verify hooks are enabled
|
||||
grep -r "observe" ~/.claude/settings.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Agent Harness Failures
|
||||
|
||||
### Agent Not Found
|
||||
|
||||
**Symptom:** "Agent not loaded" or "Unknown agent" errors
|
||||
|
||||
**Causes:**
|
||||
- Plugin not installed correctly
|
||||
- Agent path misconfiguration
|
||||
- Marketplace vs manual install mismatch
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Check plugin installation
|
||||
ls ~/.claude/plugins/cache/
|
||||
|
||||
# Verify agent exists (marketplace install)
|
||||
ls ~/.claude/plugins/cache/*/agents/
|
||||
|
||||
# For manual install, agents should be in:
|
||||
ls ~/.claude/agents/ # Custom agents only
|
||||
|
||||
# Reload plugin
|
||||
# Claude Code → Settings → Extensions → Reload
|
||||
```
|
||||
|
||||
### Workflow Execution Hangs
|
||||
|
||||
**Symptom:** Agent starts but never completes
|
||||
|
||||
**Causes:**
|
||||
- Infinite loops in agent logic
|
||||
- Blocked on user input
|
||||
- Network timeout waiting for API
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# 1. Check for stuck processes
|
||||
ps aux | grep claude
|
||||
|
||||
# 2. Enable debug mode
|
||||
export CLAUDE_DEBUG=1
|
||||
|
||||
# 3. Set shorter timeouts
|
||||
export CLAUDE_TIMEOUT=30
|
||||
|
||||
# 4. Check network connectivity
|
||||
curl -I https://api.anthropic.com
|
||||
```
|
||||
|
||||
### Tool Use Errors
|
||||
|
||||
**Symptom:** "Tool execution failed" or permission denied
|
||||
|
||||
**Causes:**
|
||||
- Missing dependencies (npm, python, etc.)
|
||||
- Insufficient file permissions
|
||||
- Path not found
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Verify required tools are installed
|
||||
which node python3 npm git
|
||||
|
||||
# Fix permissions on hook scripts
|
||||
chmod +x ~/.claude/plugins/cache/*/hooks/*.sh
|
||||
chmod +x ~/.claude/plugins/cache/*/skills/*/hooks/*.sh
|
||||
|
||||
# Check PATH includes necessary binaries
|
||||
echo $PATH
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Hook & Workflow Errors
|
||||
|
||||
### Hooks Not Firing
|
||||
|
||||
**Symptom:** Pre/post hooks don't execute
|
||||
|
||||
**Causes:**
|
||||
- Hooks not registered in settings.json
|
||||
- Invalid hook syntax
|
||||
- Hook script not executable
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Check hooks are registered
|
||||
grep -A 10 '"hooks"' ~/.claude/settings.json
|
||||
|
||||
# Verify hook files exist and are executable
|
||||
ls -la ~/.claude/plugins/cache/*/hooks/
|
||||
|
||||
# Test hook manually
|
||||
bash ~/.claude/plugins/cache/*/hooks/pre-bash.sh <<< '{"command":"echo test"}'
|
||||
|
||||
# Re-register hooks (if using plugin)
|
||||
# Disable and re-enable plugin in Claude Code settings
|
||||
```
|
||||
|
||||
### Python/Node Version Mismatches
|
||||
|
||||
**Symptom:** "python3 not found" or "node: command not found"
|
||||
|
||||
**Causes:**
|
||||
- Missing Python/Node installation
|
||||
- PATH not configured
|
||||
- Wrong Python version (Windows)
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Install Python 3 (if missing)
|
||||
# macOS: brew install python3
|
||||
# Ubuntu: sudo apt install python3
|
||||
# Windows: Download from python.org
|
||||
|
||||
# Install Node.js (if missing)
|
||||
# macOS: brew install node
|
||||
# Ubuntu: sudo apt install nodejs npm
|
||||
# Windows: Download from nodejs.org
|
||||
|
||||
# Verify installations
|
||||
python3 --version
|
||||
node --version
|
||||
npm --version
|
||||
|
||||
# Windows: Ensure python (not python3) works
|
||||
python --version
|
||||
```
|
||||
|
||||
### Dev Server Blocker False Positives
|
||||
|
||||
**Symptom:** Hook blocks legitimate commands mentioning "dev"
|
||||
|
||||
**Causes:**
|
||||
- Heredoc content triggering pattern match
|
||||
- Non-dev commands with "dev" in arguments
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# This is fixed in v1.8.0+ (PR #371)
|
||||
# Upgrade plugin to latest version
|
||||
|
||||
# Workaround: Wrap dev servers in tmux
|
||||
tmux new-session -d -s dev "npm run dev"
|
||||
tmux attach -t dev
|
||||
|
||||
# Disable hook temporarily if needed
|
||||
# Edit ~/.claude/settings.json and remove pre-bash hook
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Installation & Setup
|
||||
|
||||
### Plugin Not Loading
|
||||
|
||||
**Symptom:** Plugin features unavailable after install
|
||||
|
||||
**Causes:**
|
||||
- Marketplace cache not updated
|
||||
- Claude Code version incompatibility
|
||||
- Corrupted plugin files
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Inspect the plugin cache before changing it
|
||||
ls -la ~/.claude/plugins/cache/
|
||||
|
||||
# Back up the plugin cache instead of deleting it in place
|
||||
mv ~/.claude/plugins/cache ~/.claude/plugins/cache.backup.$(date +%Y%m%d-%H%M%S)
|
||||
mkdir -p ~/.claude/plugins/cache
|
||||
|
||||
# Reinstall from marketplace
|
||||
# Claude Code → Extensions → Everything Claude Code → Uninstall
|
||||
# Then reinstall from marketplace
|
||||
|
||||
# Check Claude Code version
|
||||
claude --version
|
||||
# Requires Claude Code 2.0+
|
||||
|
||||
# Manual install (if marketplace fails)
|
||||
git clone https://github.com/affaan-m/everything-claude-code.git
|
||||
cp -r everything-claude-code ~/.claude/plugins/ecc
|
||||
```
|
||||
|
||||
### Package Manager Detection Fails
|
||||
|
||||
**Symptom:** Wrong package manager used (npm instead of pnpm)
|
||||
|
||||
**Causes:**
|
||||
- No lock file present
|
||||
- CLAUDE_PACKAGE_MANAGER not set
|
||||
- Multiple lock files confusing detection
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Set preferred package manager globally
|
||||
export CLAUDE_PACKAGE_MANAGER=pnpm
|
||||
# Add to ~/.bashrc or ~/.zshrc
|
||||
|
||||
# Or set per-project
|
||||
echo '{"packageManager": "pnpm"}' > .claude/package-manager.json
|
||||
|
||||
# Or use package.json field
|
||||
npm pkg set packageManager="pnpm@8.15.0"
|
||||
|
||||
# Warning: removing lock files can change installed dependency versions.
|
||||
# Commit or back up the lock file first, then run a fresh install and re-run CI.
|
||||
# Only do this when intentionally switching package managers.
|
||||
rm package-lock.json # If using pnpm/yarn/bun
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Performance Issues
|
||||
|
||||
### Slow Response Times
|
||||
|
||||
**Symptom:** Agent takes 30+ seconds to respond
|
||||
|
||||
**Causes:**
|
||||
- Large observation files
|
||||
- Too many active hooks
|
||||
- Network latency to API
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Archive large observations instead of deleting them
|
||||
archive_dir="$HOME/.claude/homunculus/archive/$(date +%Y%m%d)"
|
||||
mkdir -p "$archive_dir"
|
||||
find ~/.claude/homunculus/projects -name "observations.jsonl" -size +10M -exec sh -c '
|
||||
for file do
|
||||
base=$(basename "$(dirname "$file")")
|
||||
gzip -c "$file" > "'"$archive_dir"'/${base}-observations.jsonl.gz"
|
||||
: > "$file"
|
||||
done
|
||||
' sh {} +
|
||||
|
||||
# Disable unused hooks temporarily
|
||||
# Edit ~/.claude/settings.json
|
||||
|
||||
# Keep active observation files small
|
||||
# Large archives should live under ~/.claude/homunculus/archive/
|
||||
```
|
||||
|
||||
### High CPU Usage
|
||||
|
||||
**Symptom:** Claude Code consuming 100% CPU
|
||||
|
||||
**Causes:**
|
||||
- Infinite observation loops
|
||||
- File watching on large directories
|
||||
- Memory leaks in hooks
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Check for runaway processes
|
||||
top -o cpu | grep claude
|
||||
|
||||
# Disable continuous learning temporarily
|
||||
touch ~/.claude/homunculus/disabled
|
||||
|
||||
# Restart Claude Code
|
||||
# Cmd/Ctrl+Q then reopen
|
||||
|
||||
# Check observation file size
|
||||
du -sh ~/.claude/homunculus/*/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Common Error Messages
|
||||
|
||||
### "EACCES: permission denied"
|
||||
|
||||
```bash
|
||||
# Fix hook permissions
|
||||
find ~/.claude/plugins -name "*.sh" -exec chmod +x {} \;
|
||||
|
||||
# Fix observation directory permissions
|
||||
chmod -R u+rwX,go+rX ~/.claude/homunculus
|
||||
```
|
||||
|
||||
### "MODULE_NOT_FOUND"
|
||||
|
||||
```bash
|
||||
# Install plugin dependencies
|
||||
cd ~/.claude/plugins/cache/everything-claude-code
|
||||
npm install
|
||||
|
||||
# Or for manual install
|
||||
cd ~/.claude/plugins/ecc
|
||||
npm install
|
||||
```
|
||||
|
||||
### "spawn UNKNOWN"
|
||||
|
||||
```bash
|
||||
# Windows-specific: Ensure scripts use correct line endings
|
||||
# Convert CRLF to LF
|
||||
find ~/.claude/plugins -name "*.sh" -exec dos2unix {} \;
|
||||
|
||||
# Or install dos2unix
|
||||
# macOS: brew install dos2unix
|
||||
# Ubuntu: sudo apt install dos2unix
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Getting Help
|
||||
|
||||
If you're still experiencing issues:
|
||||
|
||||
1. **Check GitHub Issues**: [github.com/affaan-m/everything-claude-code/issues](https://github.com/affaan-m/everything-claude-code/issues)
|
||||
2. **Enable Debug Logging**:
|
||||
```bash
|
||||
export CLAUDE_DEBUG=1
|
||||
export CLAUDE_LOG_LEVEL=debug
|
||||
```
|
||||
3. **Collect Diagnostic Info**:
|
||||
```bash
|
||||
claude --version
|
||||
node --version
|
||||
python3 --version
|
||||
echo $CLAUDE_PACKAGE_MANAGER
|
||||
ls -la ~/.claude/plugins/cache/
|
||||
```
|
||||
4. **Open an Issue**: Include debug logs, error messages, and diagnostic info
|
||||
|
||||
---
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [README.md](./README.md) - Installation and features
|
||||
- [CONTRIBUTING.md](./CONTRIBUTING.md) - Development guidelines
|
||||
- [docs/](./docs/) - Detailed documentation
|
||||
- [examples/](./examples/) - Usage examples
|
||||
@@ -146,6 +146,6 @@ claude /schedule-reply "Reply to Sarah about the board meeting"
|
||||
## Prerequisites
|
||||
|
||||
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code)
|
||||
- Gmail CLI (e.g., [gog](https://github.com/pterm/gog))
|
||||
- Gmail CLI (e.g., gog by @pterm)
|
||||
- Node.js 18+ (for calendar-suggest.js)
|
||||
- Optional: Slack MCP server, Matrix bridge (LINE), Chrome + Playwright (Messenger)
|
||||
|
||||
@@ -222,3 +222,16 @@ When available, also check project-specific conventions from `CLAUDE.md` or proj
|
||||
- State management conventions (Zustand, Redux, Context)
|
||||
|
||||
Adapt your review to the project's established patterns. When in doubt, match what the rest of the codebase does.
|
||||
|
||||
## v1.8 AI-Generated Code Review Addendum
|
||||
|
||||
When reviewing AI-generated changes, prioritize:
|
||||
|
||||
1. Behavioral regressions and edge-case handling
|
||||
2. Security assumptions and trust boundaries
|
||||
3. Hidden coupling or accidental architecture drift
|
||||
4. Unnecessary model-cost-inducing complexity
|
||||
|
||||
Cost-awareness check:
|
||||
- Flag workflows that escalate to higher-cost models without clear reasoning need.
|
||||
- Recommend defaulting to lower-cost tiers for deterministic refactors.
|
||||
|
||||
@@ -7,7 +7,7 @@ model: sonnet
|
||||
|
||||
# Database Reviewer
|
||||
|
||||
You are an expert PostgreSQL database specialist focused on query optimization, schema design, security, and performance. Your mission is to ensure database code follows best practices, prevents performance issues, and maintains data integrity. Incorporates patterns from [Supabase's postgres-best-practices](https://github.com/supabase/agent-skills).
|
||||
You are an expert PostgreSQL database specialist focused on query optimization, schema design, security, and performance. Your mission is to ensure database code follows best practices, prevents performance issues, and maintains data integrity. Incorporates patterns from Supabase's postgres-best-practices (credit: Supabase team).
|
||||
|
||||
## Core Responsibilities
|
||||
|
||||
@@ -88,4 +88,4 @@ For detailed index patterns, schema design examples, connection management, conc
|
||||
|
||||
**Remember**: Database issues are often the root cause of application performance problems. Optimize queries and schema design early. Use EXPLAIN ANALYZE to verify assumptions. Always index foreign keys and RLS policy columns.
|
||||
|
||||
*Patterns adapted from [Supabase Agent Skills](https://github.com/supabase/agent-skills) under MIT license.*
|
||||
*Patterns adapted from Supabase Agent Skills (credit: Supabase team) under MIT license.*
|
||||
|
||||
35
agents/harness-optimizer.md
Normal file
35
agents/harness-optimizer.md
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
name: harness-optimizer
|
||||
description: Analyze and improve the local agent harness configuration for reliability, cost, and throughput.
|
||||
tools: ["Read", "Grep", "Glob", "Bash", "Edit"]
|
||||
model: sonnet
|
||||
color: teal
|
||||
---
|
||||
|
||||
You are the harness optimizer.
|
||||
|
||||
## Mission
|
||||
|
||||
Raise agent completion quality by improving harness configuration, not by rewriting product code.
|
||||
|
||||
## Workflow
|
||||
|
||||
1. Run `/harness-audit` and collect baseline score.
|
||||
2. Identify top 3 leverage areas (hooks, evals, routing, context, safety).
|
||||
3. Propose minimal, reversible configuration changes.
|
||||
4. Apply changes and run validation.
|
||||
5. Report before/after deltas.
|
||||
|
||||
## Constraints
|
||||
|
||||
- Prefer small changes with measurable effect.
|
||||
- Preserve cross-platform behavior.
|
||||
- Avoid introducing fragile shell quoting.
|
||||
- Keep compatibility across Claude Code, Cursor, OpenCode, and Codex.
|
||||
|
||||
## Output
|
||||
|
||||
- baseline scorecard
|
||||
- applied changes
|
||||
- measured improvements
|
||||
- remaining risks
|
||||
159
agents/kotlin-reviewer.md
Normal file
159
agents/kotlin-reviewer.md
Normal file
@@ -0,0 +1,159 @@
|
||||
---
|
||||
name: kotlin-reviewer
|
||||
description: Kotlin and Android/KMP code reviewer. Reviews Kotlin code for idiomatic patterns, coroutine safety, Compose best practices, clean architecture violations, and common Android pitfalls.
|
||||
tools: ["Read", "Grep", "Glob", "Bash"]
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
You are a senior Kotlin and Android/KMP code reviewer ensuring idiomatic, safe, and maintainable code.
|
||||
|
||||
## Your Role
|
||||
|
||||
- Review Kotlin code for idiomatic patterns and Android/KMP best practices
|
||||
- Detect coroutine misuse, Flow anti-patterns, and lifecycle bugs
|
||||
- Enforce clean architecture module boundaries
|
||||
- Identify Compose performance issues and recomposition traps
|
||||
- You DO NOT refactor or rewrite code — you report findings only
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Gather Context
|
||||
|
||||
Run `git diff --staged` and `git diff` to see changes. If no diff, check `git log --oneline -5`. Identify Kotlin/KTS files that changed.
|
||||
|
||||
### Step 2: Understand Project Structure
|
||||
|
||||
Check for:
|
||||
- `build.gradle.kts` or `settings.gradle.kts` to understand module layout
|
||||
- `CLAUDE.md` for project-specific conventions
|
||||
- Whether this is Android-only, KMP, or Compose Multiplatform
|
||||
|
||||
### Step 2b: Security Review
|
||||
|
||||
Apply the Kotlin/Android security guidance before continuing:
|
||||
- exported Android components, deep links, and intent filters
|
||||
- insecure crypto, WebView, and network configuration usage
|
||||
- keystore, token, and credential handling
|
||||
- platform-specific storage and permission risks
|
||||
|
||||
If you find a CRITICAL security issue, stop the review and hand off to `security-reviewer` before doing any further analysis.
|
||||
|
||||
### Step 3: Read and Review
|
||||
|
||||
Read changed files fully. Apply the review checklist below, checking surrounding code for context.
|
||||
|
||||
### Step 4: Report Findings
|
||||
|
||||
Use the output format below. Only report issues with >80% confidence.
|
||||
|
||||
## Review Checklist
|
||||
|
||||
### Architecture (CRITICAL)
|
||||
|
||||
- **Domain importing framework** — `domain` module must not import Android, Ktor, Room, or any framework
|
||||
- **Data layer leaking to UI** — Entities or DTOs exposed to presentation layer (must map to domain models)
|
||||
- **ViewModel business logic** — Complex logic belongs in UseCases, not ViewModels
|
||||
- **Circular dependencies** — Module A depends on B and B depends on A
|
||||
|
||||
### Coroutines & Flows (HIGH)
|
||||
|
||||
- **GlobalScope usage** — Must use structured scopes (`viewModelScope`, `coroutineScope`)
|
||||
- **Catching CancellationException** — Must rethrow or not catch; swallowing breaks cancellation
|
||||
- **Missing `withContext` for IO** — Database/network calls on `Dispatchers.Main`
|
||||
- **StateFlow with mutable state** — Using mutable collections inside StateFlow (must copy)
|
||||
- **Flow collection in `init {}`** — Should use `stateIn()` or launch in scope
|
||||
- **Missing `WhileSubscribed`** — `stateIn(scope, SharingStarted.Eagerly)` when `WhileSubscribed` is appropriate
|
||||
|
||||
```kotlin
|
||||
// BAD — swallows cancellation
|
||||
try { fetchData() } catch (e: Exception) { log(e) }
|
||||
|
||||
// GOOD — preserves cancellation
|
||||
try { fetchData() } catch (e: CancellationException) { throw e } catch (e: Exception) { log(e) }
|
||||
// or use runCatching and check
|
||||
```
|
||||
|
||||
### Compose (HIGH)
|
||||
|
||||
- **Unstable parameters** — Composables receiving mutable types cause unnecessary recomposition
|
||||
- **Side effects outside LaunchedEffect** — Network/DB calls must be in `LaunchedEffect` or ViewModel
|
||||
- **NavController passed deep** — Pass lambdas instead of `NavController` references
|
||||
- **Missing `key()` in LazyColumn** — Items without stable keys cause poor performance
|
||||
- **`remember` with missing keys** — Computation not recalculated when dependencies change
|
||||
- **Object allocation in parameters** — Creating objects inline causes recomposition
|
||||
|
||||
```kotlin
|
||||
// BAD — new lambda every recomposition
|
||||
Button(onClick = { viewModel.doThing(item.id) })
|
||||
|
||||
// GOOD — stable reference
|
||||
val onClick = remember(item.id) { { viewModel.doThing(item.id) } }
|
||||
Button(onClick = onClick)
|
||||
```
|
||||
|
||||
### Kotlin Idioms (MEDIUM)
|
||||
|
||||
- **`!!` usage** — Non-null assertion; prefer `?.`, `?:`, `requireNotNull`, or `checkNotNull`
|
||||
- **`var` where `val` works** — Prefer immutability
|
||||
- **Java-style patterns** — Static utility classes (use top-level functions), getters/setters (use properties)
|
||||
- **String concatenation** — Use string templates `"Hello $name"` instead of `"Hello " + name`
|
||||
- **`when` without exhaustive branches** — Sealed classes/interfaces should use exhaustive `when`
|
||||
- **Mutable collections exposed** — Return `List` not `MutableList` from public APIs
|
||||
|
||||
### Android Specific (MEDIUM)
|
||||
|
||||
- **Context leaks** — Storing `Activity` or `Fragment` references in singletons/ViewModels
|
||||
- **Missing ProGuard rules** — Serialized classes without `@Keep` or ProGuard rules
|
||||
- **Hardcoded strings** — User-facing strings not in `strings.xml` or Compose resources
|
||||
- **Missing lifecycle handling** — Collecting Flows in Activities without `repeatOnLifecycle`
|
||||
|
||||
### Security (CRITICAL)
|
||||
|
||||
- **Exported component exposure** — Activities, services, or receivers exported without proper guards
|
||||
- **Insecure crypto/storage** — Homegrown crypto, plaintext secrets, or weak keystore usage
|
||||
- **Unsafe WebView/network config** — JavaScript bridges, cleartext traffic, permissive trust settings
|
||||
- **Sensitive logging** — Tokens, credentials, PII, or secrets emitted to logs
|
||||
|
||||
If any CRITICAL security issue is present, stop and escalate to `security-reviewer`.
|
||||
|
||||
### Gradle & Build (LOW)
|
||||
|
||||
- **Version catalog not used** — Hardcoded versions instead of `libs.versions.toml`
|
||||
- **Unnecessary dependencies** — Dependencies added but not used
|
||||
- **Missing KMP source sets** — Declaring `androidMain` code that could be `commonMain`
|
||||
|
||||
## Output Format
|
||||
|
||||
```
|
||||
[CRITICAL] Domain module imports Android framework
|
||||
File: domain/src/main/kotlin/com/app/domain/UserUseCase.kt:3
|
||||
Issue: `import android.content.Context` — domain must be pure Kotlin with no framework dependencies.
|
||||
Fix: Move Context-dependent logic to data or platforms layer. Pass data via repository interface.
|
||||
|
||||
[HIGH] StateFlow holding mutable list
|
||||
File: presentation/src/main/kotlin/com/app/ui/ListViewModel.kt:25
|
||||
Issue: `_state.value.items.add(newItem)` mutates the list inside StateFlow — Compose won't detect the change.
|
||||
Fix: Use `_state.update { it.copy(items = it.items + newItem) }`
|
||||
```
|
||||
|
||||
## Summary Format
|
||||
|
||||
End every review with:
|
||||
|
||||
```
|
||||
## Review Summary
|
||||
|
||||
| Severity | Count | Status |
|
||||
|----------|-------|--------|
|
||||
| CRITICAL | 0 | pass |
|
||||
| HIGH | 1 | block |
|
||||
| MEDIUM | 2 | info |
|
||||
| LOW | 0 | note |
|
||||
|
||||
Verdict: BLOCK — HIGH issues must be fixed before merge.
|
||||
```
|
||||
|
||||
## Approval Criteria
|
||||
|
||||
- **Approve**: No CRITICAL or HIGH issues
|
||||
- **Block**: Any CRITICAL or HIGH issues — must fix before merge
|
||||
36
agents/loop-operator.md
Normal file
36
agents/loop-operator.md
Normal file
@@ -0,0 +1,36 @@
|
||||
---
|
||||
name: loop-operator
|
||||
description: Operate autonomous agent loops, monitor progress, and intervene safely when loops stall.
|
||||
tools: ["Read", "Grep", "Glob", "Bash", "Edit"]
|
||||
model: sonnet
|
||||
color: orange
|
||||
---
|
||||
|
||||
You are the loop operator.
|
||||
|
||||
## Mission
|
||||
|
||||
Run autonomous loops safely with clear stop conditions, observability, and recovery actions.
|
||||
|
||||
## Workflow
|
||||
|
||||
1. Start loop from explicit pattern and mode.
|
||||
2. Track progress checkpoints.
|
||||
3. Detect stalls and retry storms.
|
||||
4. Pause and reduce scope when failure repeats.
|
||||
5. Resume only after verification passes.
|
||||
|
||||
## Required Checks
|
||||
|
||||
- quality gates are active
|
||||
- eval baseline exists
|
||||
- rollback path exists
|
||||
- branch/worktree isolation is configured
|
||||
|
||||
## Escalation
|
||||
|
||||
Escalate when any condition is true:
|
||||
- no progress across two consecutive checkpoints
|
||||
- repeated failures with identical stack traces
|
||||
- cost drift outside budget window
|
||||
- merge conflicts blocking queue advancement
|
||||
@@ -78,3 +78,14 @@ npm run test:coverage
|
||||
- [ ] Coverage is 80%+
|
||||
|
||||
For detailed mocking patterns and framework-specific examples, see `skill: tdd-workflow`.
|
||||
|
||||
## v1.8 Eval-Driven TDD Addendum
|
||||
|
||||
Integrate eval-driven development into TDD flow:
|
||||
|
||||
1. Define capability + regression evals before implementation.
|
||||
2. Run baseline and capture failure signatures.
|
||||
3. Implement minimum passing change.
|
||||
4. Re-run tests and evals; report pass@1 and pass@3.
|
||||
|
||||
Release-critical paths should target pass^3 stability before merge.
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
---
|
||||
description: Start the NanoClaw agent REPL — a persistent, session-aware AI assistant powered by the claude CLI.
|
||||
description: Start NanoClaw v2 — ECC's persistent, zero-dependency REPL with model routing, skill hot-load, branching, compaction, export, and metrics.
|
||||
---
|
||||
|
||||
# Claw Command
|
||||
|
||||
Start an interactive AI agent session that persists conversation history to disk and optionally loads ECC skill context.
|
||||
Start an interactive AI agent session with persistent markdown history and operational controls.
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -23,57 +23,29 @@ npm run claw
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `CLAW_SESSION` | `default` | Session name (alphanumeric + hyphens) |
|
||||
| `CLAW_SKILLS` | *(empty)* | Comma-separated skill names to load as system context |
|
||||
| `CLAW_SKILLS` | *(empty)* | Comma-separated skills loaded at startup |
|
||||
| `CLAW_MODEL` | `sonnet` | Default model for the session |
|
||||
|
||||
## REPL Commands
|
||||
|
||||
Inside the REPL, type these commands directly at the prompt:
|
||||
|
||||
```
|
||||
/clear Clear current session history
|
||||
/history Print full conversation history
|
||||
/sessions List all saved sessions
|
||||
/help Show available commands
|
||||
exit Quit the REPL
|
||||
```text
|
||||
/help Show help
|
||||
/clear Clear current session history
|
||||
/history Print full conversation history
|
||||
/sessions List saved sessions
|
||||
/model [name] Show/set model
|
||||
/load <skill-name> Hot-load a skill into context
|
||||
/branch <session-name> Branch current session
|
||||
/search <query> Search query across sessions
|
||||
/compact Compact old turns, keep recent context
|
||||
/export <md|json|txt> [path] Export session
|
||||
/metrics Show session metrics
|
||||
exit Quit
|
||||
```
|
||||
|
||||
## How It Works
|
||||
## Notes
|
||||
|
||||
1. Reads `CLAW_SESSION` env var to select a named session (default: `default`)
|
||||
2. Loads conversation history from `~/.claude/claw/{session}.md`
|
||||
3. Optionally loads ECC skill context from `CLAW_SKILLS` env var
|
||||
4. Enters a blocking prompt loop — each user message is sent to `claude -p` with full history
|
||||
5. Responses are appended to the session file for persistence across restarts
|
||||
|
||||
## Session Storage
|
||||
|
||||
Sessions are stored as Markdown files in `~/.claude/claw/`:
|
||||
|
||||
```
|
||||
~/.claude/claw/default.md
|
||||
~/.claude/claw/my-project.md
|
||||
```
|
||||
|
||||
Each turn is formatted as:
|
||||
|
||||
```markdown
|
||||
### [2025-01-15T10:30:00.000Z] User
|
||||
What does this function do?
|
||||
---
|
||||
### [2025-01-15T10:30:05.000Z] Assistant
|
||||
This function calculates...
|
||||
---
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Start default session
|
||||
node scripts/claw.js
|
||||
|
||||
# Named session
|
||||
CLAW_SESSION=my-project node scripts/claw.js
|
||||
|
||||
# With skill context
|
||||
CLAW_SKILLS=tdd-workflow,security-review node scripts/claw.js
|
||||
```
|
||||
- NanoClaw remains zero-dependency.
|
||||
- Sessions are stored at `~/.claude/claw/<session>.md`.
|
||||
- Compaction keeps the most recent turns and writes a compaction header.
|
||||
- Export supports markdown, JSON turns, and plain text.
|
||||
|
||||
@@ -337,8 +337,10 @@ For PMX, prioritize these E2E tests:
|
||||
|
||||
## Related Agents
|
||||
|
||||
This command invokes the `e2e-runner` agent located at:
|
||||
`~/.claude/agents/e2e-runner.md`
|
||||
This command invokes the `e2e-runner` agent provided by ECC.
|
||||
|
||||
For manual installs, the source file lives at:
|
||||
`agents/e2e-runner.md`
|
||||
|
||||
## Quick Commands
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: evolve
|
||||
description: Cluster related instincts into skills, commands, or agents
|
||||
description: Analyze instincts and suggest or generate evolved structures
|
||||
command: true
|
||||
---
|
||||
|
||||
@@ -29,9 +29,7 @@ Analyzes instincts and clusters related ones into higher-level structures:
|
||||
|
||||
```
|
||||
/evolve # Analyze all instincts and suggest evolutions
|
||||
/evolve --domain testing # Only evolve instincts in testing domain
|
||||
/evolve --dry-run # Show what would be created without creating
|
||||
/evolve --threshold 5 # Require 5+ related instincts to cluster
|
||||
/evolve --generate # Also generate files under evolved/{skills,commands,agents}
|
||||
```
|
||||
|
||||
## Evolution Rules
|
||||
@@ -78,63 +76,50 @@ Example:
|
||||
|
||||
## What to Do
|
||||
|
||||
1. Read all instincts from `~/.claude/homunculus/instincts/`
|
||||
2. Group instincts by:
|
||||
- Domain similarity
|
||||
- Trigger pattern overlap
|
||||
- Action sequence relationship
|
||||
3. For each cluster of 3+ related instincts:
|
||||
- Determine evolution type (command/skill/agent)
|
||||
- Generate the appropriate file
|
||||
- Save to `~/.claude/homunculus/evolved/{commands,skills,agents}/`
|
||||
4. Link evolved structure back to source instincts
|
||||
1. Detect current project context
|
||||
2. Read project + global instincts (project takes precedence on ID conflicts)
|
||||
3. Group instincts by trigger/domain patterns
|
||||
4. Identify:
|
||||
- Skill candidates (trigger clusters with 2+ instincts)
|
||||
- Command candidates (high-confidence workflow instincts)
|
||||
- Agent candidates (larger, high-confidence clusters)
|
||||
5. Show promotion candidates (project -> global) when applicable
|
||||
6. If `--generate` is passed, write files to:
|
||||
- Project scope: `~/.claude/homunculus/projects/<project-id>/evolved/`
|
||||
- Global fallback: `~/.claude/homunculus/evolved/`
|
||||
|
||||
## Output Format
|
||||
|
||||
```
|
||||
🧬 Evolve Analysis
|
||||
==================
|
||||
============================================================
|
||||
EVOLVE ANALYSIS - 12 instincts
|
||||
Project: my-app (a1b2c3d4e5f6)
|
||||
Project-scoped: 8 | Global: 4
|
||||
============================================================
|
||||
|
||||
Found 3 clusters ready for evolution:
|
||||
High confidence instincts (>=80%): 5
|
||||
|
||||
## Cluster 1: Database Migration Workflow
|
||||
Instincts: new-table-migration, update-schema, regenerate-types
|
||||
Type: Command
|
||||
Confidence: 85% (based on 12 observations)
|
||||
## SKILL CANDIDATES
|
||||
1. Cluster: "adding tests"
|
||||
Instincts: 3
|
||||
Avg confidence: 82%
|
||||
Domains: testing
|
||||
Scopes: project
|
||||
|
||||
Would create: /new-table command
|
||||
Files:
|
||||
- ~/.claude/homunculus/evolved/commands/new-table.md
|
||||
## COMMAND CANDIDATES (2)
|
||||
/adding-tests
|
||||
From: test-first-workflow [project]
|
||||
Confidence: 84%
|
||||
|
||||
## Cluster 2: Functional Code Style
|
||||
Instincts: prefer-functional, use-immutable, avoid-classes, pure-functions
|
||||
Type: Skill
|
||||
Confidence: 78% (based on 8 observations)
|
||||
|
||||
Would create: functional-patterns skill
|
||||
Files:
|
||||
- ~/.claude/homunculus/evolved/skills/functional-patterns.md
|
||||
|
||||
## Cluster 3: Debugging Process
|
||||
Instincts: debug-check-logs, debug-isolate, debug-reproduce, debug-verify
|
||||
Type: Agent
|
||||
Confidence: 72% (based on 6 observations)
|
||||
|
||||
Would create: debugger agent
|
||||
Files:
|
||||
- ~/.claude/homunculus/evolved/agents/debugger.md
|
||||
|
||||
---
|
||||
Run `/evolve --execute` to create these files.
|
||||
## AGENT CANDIDATES (1)
|
||||
adding-tests-agent
|
||||
Covers 3 instincts
|
||||
Avg confidence: 82%
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
- `--execute`: Actually create the evolved structures (default is preview)
|
||||
- `--dry-run`: Preview without creating
|
||||
- `--domain <name>`: Only evolve instincts in specified domain
|
||||
- `--threshold <n>`: Minimum instincts required to form cluster (default: 3)
|
||||
- `--type <command|skill|agent>`: Only create specified type
|
||||
- `--generate`: Generate evolved files in addition to analysis output
|
||||
|
||||
## Generated File Format
|
||||
|
||||
|
||||
70
commands/gradle-build.md
Normal file
70
commands/gradle-build.md
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
description: Fix Gradle build errors for Android and KMP projects
|
||||
---
|
||||
|
||||
# Gradle Build Fix
|
||||
|
||||
Incrementally fix Gradle build and compilation errors for Android and Kotlin Multiplatform projects.
|
||||
|
||||
## Step 1: Detect Build Configuration
|
||||
|
||||
Identify the project type and run the appropriate build:
|
||||
|
||||
| Indicator | Build Command |
|
||||
|-----------|---------------|
|
||||
| `build.gradle.kts` + `composeApp/` (KMP) | `./gradlew composeApp:compileKotlinMetadata 2>&1` |
|
||||
| `build.gradle.kts` + `app/` (Android) | `./gradlew app:compileDebugKotlin 2>&1` |
|
||||
| `settings.gradle.kts` with modules | `./gradlew assemble 2>&1` |
|
||||
| Detekt configured | `./gradlew detekt 2>&1` |
|
||||
|
||||
Also check `gradle.properties` and `local.properties` for configuration.
|
||||
|
||||
## Step 2: Parse and Group Errors
|
||||
|
||||
1. Run the build command and capture output
|
||||
2. Separate Kotlin compilation errors from Gradle configuration errors
|
||||
3. Group by module and file path
|
||||
4. Sort: configuration errors first, then compilation errors by dependency order
|
||||
|
||||
## Step 3: Fix Loop
|
||||
|
||||
For each error:
|
||||
|
||||
1. **Read the file** — Full context around the error line
|
||||
2. **Diagnose** — Common categories:
|
||||
- Missing import or unresolved reference
|
||||
- Type mismatch or incompatible types
|
||||
- Missing dependency in `build.gradle.kts`
|
||||
- Expect/actual mismatch (KMP)
|
||||
- Compose compiler error
|
||||
3. **Fix minimally** — Smallest change that resolves the error
|
||||
4. **Re-run build** — Verify fix and check for new errors
|
||||
5. **Continue** — Move to next error
|
||||
|
||||
## Step 4: Guardrails
|
||||
|
||||
Stop and ask the user if:
|
||||
- Fix introduces more errors than it resolves
|
||||
- Same error persists after 3 attempts
|
||||
- Error requires adding new dependencies or changing module structure
|
||||
- Gradle sync itself fails (configuration-phase error)
|
||||
- Error is in generated code (Room, SQLDelight, KSP)
|
||||
|
||||
## Step 5: Summary
|
||||
|
||||
Report:
|
||||
- Errors fixed (module, file, description)
|
||||
- Errors remaining
|
||||
- New errors introduced (should be zero)
|
||||
- Suggested next steps
|
||||
|
||||
## Common Gradle/KMP Fixes
|
||||
|
||||
| Error | Fix |
|
||||
|-------|-----|
|
||||
| Unresolved reference in `commonMain` | Check if the dependency is in `commonMain.dependencies {}` |
|
||||
| Expect declaration without actual | Add `actual` implementation in each platform source set |
|
||||
| Compose compiler version mismatch | Align Kotlin and Compose compiler versions in `libs.versions.toml` |
|
||||
| Duplicate class | Check for conflicting dependencies with `./gradlew dependencies` |
|
||||
| KSP error | Run `./gradlew kspCommonMainKotlinMetadata` to regenerate |
|
||||
| Configuration cache issue | Check for non-serializable task inputs |
|
||||
58
commands/harness-audit.md
Normal file
58
commands/harness-audit.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Harness Audit Command
|
||||
|
||||
Audit the current repository's agent harness setup and return a prioritized scorecard.
|
||||
|
||||
## Usage
|
||||
|
||||
`/harness-audit [scope] [--format text|json]`
|
||||
|
||||
- `scope` (optional): `repo` (default), `hooks`, `skills`, `commands`, `agents`
|
||||
- `--format`: output style (`text` default, `json` for automation)
|
||||
|
||||
## What to Evaluate
|
||||
|
||||
Score each category from `0` to `10`:
|
||||
|
||||
1. Tool Coverage
|
||||
2. Context Efficiency
|
||||
3. Quality Gates
|
||||
4. Memory Persistence
|
||||
5. Eval Coverage
|
||||
6. Security Guardrails
|
||||
7. Cost Efficiency
|
||||
|
||||
## Output Contract
|
||||
|
||||
Return:
|
||||
|
||||
1. `overall_score` out of 70
|
||||
2. Category scores and concrete findings
|
||||
3. Top 3 actions with exact file paths
|
||||
4. Suggested ECC skills to apply next
|
||||
|
||||
## Checklist
|
||||
|
||||
- Inspect `hooks/hooks.json`, `scripts/hooks/`, and hook tests.
|
||||
- Inspect `skills/`, command coverage, and agent coverage.
|
||||
- Verify cross-harness parity for `.cursor/`, `.opencode/`, `.codex/`.
|
||||
- Flag broken or stale references.
|
||||
|
||||
## Example Result
|
||||
|
||||
```text
|
||||
Harness Audit (repo): 52/70
|
||||
- Quality Gates: 9/10
|
||||
- Eval Coverage: 6/10
|
||||
- Cost Efficiency: 4/10
|
||||
|
||||
Top 3 Actions:
|
||||
1) Add cost tracking hook in scripts/hooks/cost-tracker.js
|
||||
2) Add pass@k docs and templates in skills/eval-harness/SKILL.md
|
||||
3) Add command parity for /harness-audit in .opencode/commands/
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `repo|hooks|skills|commands|agents` (optional scope)
|
||||
- `--format text|json` (optional output format)
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: instinct-export
|
||||
description: Export instincts for sharing with teammates or other projects
|
||||
description: Export instincts from project/global scope to a file
|
||||
command: /instinct-export
|
||||
---
|
||||
|
||||
@@ -18,17 +18,18 @@ Exports instincts to a shareable format. Perfect for:
|
||||
/instinct-export --domain testing # Export only testing instincts
|
||||
/instinct-export --min-confidence 0.7 # Only export high-confidence instincts
|
||||
/instinct-export --output team-instincts.yaml
|
||||
/instinct-export --scope project --output project-instincts.yaml
|
||||
```
|
||||
|
||||
## What to Do
|
||||
|
||||
1. Read instincts from `~/.claude/homunculus/instincts/personal/`
|
||||
2. Filter based on flags
|
||||
3. Strip sensitive information:
|
||||
- Remove session IDs
|
||||
- Remove file paths (keep only patterns)
|
||||
- Remove timestamps older than "last week"
|
||||
4. Generate export file
|
||||
1. Detect current project context
|
||||
2. Load instincts by selected scope:
|
||||
- `project`: current project only
|
||||
- `global`: global only
|
||||
- `all`: project + global merged (default)
|
||||
3. Apply filters (`--domain`, `--min-confidence`)
|
||||
4. Write YAML-style export to file (or stdout if no output path provided)
|
||||
|
||||
## Output Format
|
||||
|
||||
@@ -40,52 +41,26 @@ Creates a YAML file:
|
||||
# Source: personal
|
||||
# Count: 12 instincts
|
||||
|
||||
version: "2.0"
|
||||
exported_by: "continuous-learning-v2"
|
||||
export_date: "2025-01-22T10:30:00Z"
|
||||
---
|
||||
id: prefer-functional-style
|
||||
trigger: "when writing new functions"
|
||||
confidence: 0.8
|
||||
domain: code-style
|
||||
source: session-observation
|
||||
scope: project
|
||||
project_id: a1b2c3d4e5f6
|
||||
project_name: my-app
|
||||
---
|
||||
|
||||
instincts:
|
||||
- id: prefer-functional-style
|
||||
trigger: "when writing new functions"
|
||||
action: "Use functional patterns over classes"
|
||||
confidence: 0.8
|
||||
domain: code-style
|
||||
observations: 8
|
||||
# Prefer Functional Style
|
||||
|
||||
- id: test-first-workflow
|
||||
trigger: "when adding new functionality"
|
||||
action: "Write test first, then implementation"
|
||||
confidence: 0.9
|
||||
domain: testing
|
||||
observations: 12
|
||||
|
||||
- id: grep-before-edit
|
||||
trigger: "when modifying code"
|
||||
action: "Search with Grep, confirm with Read, then Edit"
|
||||
confidence: 0.7
|
||||
domain: workflow
|
||||
observations: 6
|
||||
## Action
|
||||
Use functional patterns over classes.
|
||||
```
|
||||
|
||||
## Privacy Considerations
|
||||
|
||||
Exports include:
|
||||
- ✅ Trigger patterns
|
||||
- ✅ Actions
|
||||
- ✅ Confidence scores
|
||||
- ✅ Domains
|
||||
- ✅ Observation counts
|
||||
|
||||
Exports do NOT include:
|
||||
- ❌ Actual code snippets
|
||||
- ❌ File paths
|
||||
- ❌ Session transcripts
|
||||
- ❌ Personal identifiers
|
||||
|
||||
## Flags
|
||||
|
||||
- `--domain <name>`: Export only specified domain
|
||||
- `--min-confidence <n>`: Minimum confidence threshold (default: 0.3)
|
||||
- `--output <file>`: Output file path (default: instincts-export-YYYYMMDD.yaml)
|
||||
- `--format <yaml|json|md>`: Output format (default: yaml)
|
||||
- `--include-evidence`: Include evidence text (default: excluded)
|
||||
- `--min-confidence <n>`: Minimum confidence threshold
|
||||
- `--output <file>`: Output file path (prints to stdout when omitted)
|
||||
- `--scope <project|global|all>`: Export scope (default: `all`)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: instinct-import
|
||||
description: Import instincts from teammates, Skill Creator, or other sources
|
||||
description: Import instincts from file or URL into project/global scope
|
||||
command: true
|
||||
---
|
||||
|
||||
@@ -11,7 +11,7 @@ command: true
|
||||
Run the instinct CLI using the plugin root path:
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" import <file-or-url> [--dry-run] [--force] [--min-confidence 0.7]
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" import <file-or-url> [--dry-run] [--force] [--min-confidence 0.7] [--scope project|global]
|
||||
```
|
||||
|
||||
Or if `CLAUDE_PLUGIN_ROOT` is not set (manual installation):
|
||||
@@ -20,18 +20,15 @@ Or if `CLAUDE_PLUGIN_ROOT` is not set (manual installation):
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py import <file-or-url>
|
||||
```
|
||||
|
||||
Import instincts from:
|
||||
- Teammates' exports
|
||||
- Skill Creator (repo analysis)
|
||||
- Community collections
|
||||
- Previous machine backups
|
||||
Import instincts from local file paths or HTTP(S) URLs.
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
/instinct-import team-instincts.yaml
|
||||
/instinct-import https://github.com/org/repo/instincts.yaml
|
||||
/instinct-import --from-skill-creator acme/webapp
|
||||
/instinct-import team-instincts.yaml --dry-run
|
||||
/instinct-import team-instincts.yaml --scope global --force
|
||||
```
|
||||
|
||||
## What to Do
|
||||
@@ -40,7 +37,9 @@ Import instincts from:
|
||||
2. Parse and validate the format
|
||||
3. Check for duplicates with existing instincts
|
||||
4. Merge or add new instincts
|
||||
5. Save to `~/.claude/homunculus/instincts/inherited/`
|
||||
5. Save to inherited instincts directory:
|
||||
- Project scope: `~/.claude/homunculus/projects/<project-id>/instincts/inherited/`
|
||||
- Global scope: `~/.claude/homunculus/instincts/inherited/`
|
||||
|
||||
## Import Process
|
||||
|
||||
@@ -71,60 +70,33 @@ Already have similar instincts:
|
||||
Import: 0.9 confidence
|
||||
→ Update to import (higher confidence)
|
||||
|
||||
## Conflicting Instincts (1)
|
||||
These contradict local instincts:
|
||||
❌ use-classes-for-services
|
||||
Conflicts with: avoid-classes
|
||||
→ Skip (requires manual resolution)
|
||||
|
||||
---
|
||||
Import 8 new, update 1, skip 3?
|
||||
Import 8 new, update 1?
|
||||
```
|
||||
|
||||
## Merge Strategies
|
||||
## Merge Behavior
|
||||
|
||||
### For Duplicates
|
||||
When importing an instinct that matches an existing one:
|
||||
- **Higher confidence wins**: Keep the one with higher confidence
|
||||
- **Merge evidence**: Combine observation counts
|
||||
- **Update timestamp**: Mark as recently validated
|
||||
|
||||
### For Conflicts
|
||||
When importing an instinct that contradicts an existing one:
|
||||
- **Skip by default**: Don't import conflicting instincts
|
||||
- **Flag for review**: Mark both as needing attention
|
||||
- **Manual resolution**: User decides which to keep
|
||||
When importing an instinct with an existing ID:
|
||||
- Higher-confidence import becomes an update candidate
|
||||
- Equal/lower-confidence import is skipped
|
||||
- User confirms unless `--force` is used
|
||||
|
||||
## Source Tracking
|
||||
|
||||
Imported instincts are marked with:
|
||||
```yaml
|
||||
source: "inherited"
|
||||
source: inherited
|
||||
scope: project
|
||||
imported_from: "team-instincts.yaml"
|
||||
imported_at: "2025-01-22T10:30:00Z"
|
||||
original_source: "session-observation" # or "repo-analysis"
|
||||
project_id: "a1b2c3d4e5f6"
|
||||
project_name: "my-project"
|
||||
```
|
||||
|
||||
## Skill Creator Integration
|
||||
|
||||
When importing from Skill Creator:
|
||||
|
||||
```
|
||||
/instinct-import --from-skill-creator acme/webapp
|
||||
```
|
||||
|
||||
This fetches instincts generated from repo analysis:
|
||||
- Source: `repo-analysis`
|
||||
- Higher initial confidence (0.7+)
|
||||
- Linked to source repository
|
||||
|
||||
## Flags
|
||||
|
||||
- `--dry-run`: Preview without importing
|
||||
- `--force`: Import even if conflicts exist
|
||||
- `--merge-strategy <higher|local|import>`: How to handle duplicates
|
||||
- `--from-skill-creator <owner/repo>`: Import from Skill Creator analysis
|
||||
- `--force`: Skip confirmation prompt
|
||||
- `--min-confidence <n>`: Only import instincts above threshold
|
||||
- `--scope <project|global>`: Select target scope (default: `project`)
|
||||
|
||||
## Output
|
||||
|
||||
@@ -134,7 +106,7 @@ After import:
|
||||
|
||||
Added: 8 instincts
|
||||
Updated: 1 instinct
|
||||
Skipped: 3 instincts (2 duplicates, 1 conflict)
|
||||
Skipped: 3 instincts (equal/higher confidence already exists)
|
||||
|
||||
New instincts saved to: ~/.claude/homunculus/instincts/inherited/
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: instinct-status
|
||||
description: Show all learned instincts with their confidence levels
|
||||
description: Show learned instincts (project + global) with confidence
|
||||
command: true
|
||||
---
|
||||
|
||||
# Instinct Status Command
|
||||
|
||||
Shows all learned instincts with their confidence scores, grouped by domain.
|
||||
Shows learned instincts for the current project plus global instincts, grouped by domain.
|
||||
|
||||
## Implementation
|
||||
|
||||
@@ -26,61 +26,34 @@ python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status
|
||||
|
||||
```
|
||||
/instinct-status
|
||||
/instinct-status --domain code-style
|
||||
/instinct-status --low-confidence
|
||||
```
|
||||
|
||||
## What to Do
|
||||
|
||||
1. Read all instinct files from `~/.claude/homunculus/instincts/personal/`
|
||||
2. Read inherited instincts from `~/.claude/homunculus/instincts/inherited/`
|
||||
3. Display them grouped by domain with confidence bars
|
||||
1. Detect current project context (git remote/path hash)
|
||||
2. Read project instincts from `~/.claude/homunculus/projects/<project-id>/instincts/`
|
||||
3. Read global instincts from `~/.claude/homunculus/instincts/`
|
||||
4. Merge with precedence rules (project overrides global when IDs collide)
|
||||
5. Display grouped by domain with confidence bars and observation stats
|
||||
|
||||
## Output Format
|
||||
|
||||
```
|
||||
📊 Instinct Status
|
||||
==================
|
||||
============================================================
|
||||
INSTINCT STATUS - 12 total
|
||||
============================================================
|
||||
|
||||
## Code Style (4 instincts)
|
||||
Project: my-app (a1b2c3d4e5f6)
|
||||
Project instincts: 8
|
||||
Global instincts: 4
|
||||
|
||||
### prefer-functional-style
|
||||
Trigger: when writing new functions
|
||||
Action: Use functional patterns over classes
|
||||
Confidence: ████████░░ 80%
|
||||
Source: session-observation | Last updated: 2025-01-22
|
||||
## PROJECT-SCOPED (my-app)
|
||||
### WORKFLOW (3)
|
||||
███████░░░ 70% grep-before-edit [project]
|
||||
trigger: when modifying code
|
||||
|
||||
### use-path-aliases
|
||||
Trigger: when importing modules
|
||||
Action: Use @/ path aliases instead of relative imports
|
||||
Confidence: ██████░░░░ 60%
|
||||
Source: repo-analysis (github.com/acme/webapp)
|
||||
|
||||
## Testing (2 instincts)
|
||||
|
||||
### test-first-workflow
|
||||
Trigger: when adding new functionality
|
||||
Action: Write test first, then implementation
|
||||
Confidence: █████████░ 90%
|
||||
Source: session-observation
|
||||
|
||||
## Workflow (3 instincts)
|
||||
|
||||
### grep-before-edit
|
||||
Trigger: when modifying code
|
||||
Action: Search with Grep, confirm with Read, then Edit
|
||||
Confidence: ███████░░░ 70%
|
||||
Source: session-observation
|
||||
|
||||
---
|
||||
Total: 9 instincts (4 personal, 5 inherited)
|
||||
Observer: Running (last analysis: 5 min ago)
|
||||
## GLOBAL (apply to all projects)
|
||||
### SECURITY (2)
|
||||
█████████░ 85% validate-user-input [global]
|
||||
trigger: when handling user input
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
- `--domain <name>`: Filter by domain (code-style, testing, git, etc.)
|
||||
- `--low-confidence`: Show only instincts with confidence < 0.5
|
||||
- `--high-confidence`: Show only instincts with confidence >= 0.7
|
||||
- `--source <type>`: Filter by source (session-observation, repo-analysis, inherited)
|
||||
- `--json`: Output as JSON for programmatic use
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
---
|
||||
description: Extract reusable patterns from the session, self-evaluate quality before saving, and determine the right save location (Global vs Project).
|
||||
description: "Extract reusable patterns from the session, self-evaluate quality before saving, and determine the right save location (Global vs Project)."
|
||||
---
|
||||
|
||||
# /learn-eval - Extract, Evaluate, then Save
|
||||
|
||||
Extends `/learn` with a quality gate and save-location decision before writing any skill file.
|
||||
Extends `/learn` with a quality gate, save-location decision, and knowledge-placement awareness before writing any skill file.
|
||||
|
||||
## What to Extract
|
||||
|
||||
@@ -51,36 +51,61 @@ origin: auto-extracted
|
||||
[Trigger conditions]
|
||||
```
|
||||
|
||||
5. **Self-evaluate before saving** using this rubric:
|
||||
5. **Quality gate — Checklist + Holistic verdict**
|
||||
|
||||
| Dimension | 1 | 3 | 5 |
|
||||
|-----------|---|---|---|
|
||||
| Specificity | Abstract principles only, no code examples | Representative code example present | Rich examples covering all usage patterns |
|
||||
| Actionability | Unclear what to do | Main steps are understandable | Immediately actionable, edge cases covered |
|
||||
| Scope Fit | Too broad or too narrow | Mostly appropriate, some boundary ambiguity | Name, trigger, and content perfectly aligned |
|
||||
| Non-redundancy | Nearly identical to another skill | Some overlap but unique perspective exists | Completely unique value |
|
||||
| Coverage | Covers only a fraction of the target task | Main cases covered, common variants missing | Main cases, edge cases, and pitfalls covered |
|
||||
### 5a. Required checklist (verify by actually reading files)
|
||||
|
||||
- Score each dimension 1–5
|
||||
- If any dimension scores 1–2, improve the draft and re-score until all dimensions are ≥ 3
|
||||
- Show the user the scores table and the final draft
|
||||
Execute **all** of the following before evaluating the draft:
|
||||
|
||||
6. Ask user to confirm:
|
||||
- Show: proposed save path + scores table + final draft
|
||||
- Wait for explicit confirmation before writing
|
||||
- [ ] Grep `~/.claude/skills/` and relevant project `.claude/skills/` files by keyword to check for content overlap
|
||||
- [ ] Check MEMORY.md (both project and global) for overlap
|
||||
- [ ] Consider whether appending to an existing skill would suffice
|
||||
- [ ] Confirm this is a reusable pattern, not a one-off fix
|
||||
|
||||
7. Save to the determined location
|
||||
### 5b. Holistic verdict
|
||||
|
||||
## Output Format for Step 5 (scores table)
|
||||
Synthesize the checklist results and draft quality, then choose **one** of the following:
|
||||
|
||||
| Dimension | Score | Rationale |
|
||||
|-----------|-------|-----------|
|
||||
| Specificity | N/5 | ... |
|
||||
| Actionability | N/5 | ... |
|
||||
| Scope Fit | N/5 | ... |
|
||||
| Non-redundancy | N/5 | ... |
|
||||
| Coverage | N/5 | ... |
|
||||
| **Total** | **N/25** | |
|
||||
| Verdict | Meaning | Next Action |
|
||||
|---------|---------|-------------|
|
||||
| **Save** | Unique, specific, well-scoped | Proceed to Step 6 |
|
||||
| **Improve then Save** | Valuable but needs refinement | List improvements → revise → re-evaluate (once) |
|
||||
| **Absorb into [X]** | Should be appended to an existing skill | Show target skill and additions → Step 6 |
|
||||
| **Drop** | Trivial, redundant, or too abstract | Explain reasoning and stop |
|
||||
|
||||
**Guideline dimensions** (informing the verdict, not scored):
|
||||
|
||||
- **Specificity & Actionability**: Contains code examples or commands that are immediately usable
|
||||
- **Scope Fit**: Name, trigger conditions, and content are aligned and focused on a single pattern
|
||||
- **Uniqueness**: Provides value not covered by existing skills (informed by checklist results)
|
||||
- **Reusability**: Realistic trigger scenarios exist in future sessions
|
||||
|
||||
6. **Verdict-specific confirmation flow**
|
||||
|
||||
- **Improve then Save**: Present the required improvements + revised draft + updated checklist/verdict after one re-evaluation; if the revised verdict is **Save**, save after user confirmation, otherwise follow the new verdict
|
||||
- **Save**: Present save path + checklist results + 1-line verdict rationale + full draft → save after user confirmation
|
||||
- **Absorb into [X]**: Present target path + additions (diff format) + checklist results + verdict rationale → append after user confirmation
|
||||
- **Drop**: Show checklist results + reasoning only (no confirmation needed)
|
||||
|
||||
7. Save / Absorb to the determined location
|
||||
|
||||
## Output Format for Step 5
|
||||
|
||||
```
|
||||
### Checklist
|
||||
- [x] skills/ grep: no overlap (or: overlap found → details)
|
||||
- [x] MEMORY.md: no overlap (or: overlap found → details)
|
||||
- [x] Existing skill append: new file appropriate (or: should append to [X])
|
||||
- [x] Reusability: confirmed (or: one-off → Drop)
|
||||
|
||||
### Verdict: Save / Improve then Save / Absorb into [X] / Drop
|
||||
|
||||
**Rationale:** (1-2 sentences explaining the verdict)
|
||||
```
|
||||
|
||||
## Design Rationale
|
||||
|
||||
This version replaces the previous 5-dimension numeric scoring rubric (Specificity, Actionability, Scope Fit, Non-redundancy, Coverage scored 1-5) with a checklist-based holistic verdict system. Modern frontier models (Opus 4.6+) have strong contextual judgment — forcing rich qualitative signals into numeric scores loses nuance and can produce misleading totals. The holistic approach lets the model weigh all factors naturally, producing more accurate save/drop decisions while the explicit checklist ensures no critical check is skipped.
|
||||
|
||||
## Notes
|
||||
|
||||
@@ -88,4 +113,4 @@ origin: auto-extracted
|
||||
- Don't extract one-time issues (specific API outages, etc.)
|
||||
- Focus on patterns that will save time in future sessions
|
||||
- Keep skills focused — one pattern per skill
|
||||
- If Coverage score is low, add related variants before saving
|
||||
- When the verdict is Absorb, append to the existing skill rather than creating a new file
|
||||
|
||||
32
commands/loop-start.md
Normal file
32
commands/loop-start.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# Loop Start Command
|
||||
|
||||
Start a managed autonomous loop pattern with safety defaults.
|
||||
|
||||
## Usage
|
||||
|
||||
`/loop-start [pattern] [--mode safe|fast]`
|
||||
|
||||
- `pattern`: `sequential`, `continuous-pr`, `rfc-dag`, `infinite`
|
||||
- `--mode`:
|
||||
- `safe` (default): strict quality gates and checkpoints
|
||||
- `fast`: reduced gates for speed
|
||||
|
||||
## Flow
|
||||
|
||||
1. Confirm repository state and branch strategy.
|
||||
2. Select loop pattern and model tier strategy.
|
||||
3. Enable required hooks/profile for the chosen mode.
|
||||
4. Create loop plan and write runbook under `.claude/plans/`.
|
||||
5. Print commands to start and monitor the loop.
|
||||
|
||||
## Required Safety Checks
|
||||
|
||||
- Verify tests pass before first loop iteration.
|
||||
- Ensure `ECC_HOOK_PROFILE` is not disabled globally.
|
||||
- Ensure loop has explicit stop condition.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `<pattern>` optional (`sequential|continuous-pr|rfc-dag|infinite`)
|
||||
- `--mode safe|fast` optional
|
||||
24
commands/loop-status.md
Normal file
24
commands/loop-status.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Loop Status Command
|
||||
|
||||
Inspect active loop state, progress, and failure signals.
|
||||
|
||||
## Usage
|
||||
|
||||
`/loop-status [--watch]`
|
||||
|
||||
## What to Report
|
||||
|
||||
- active loop pattern
|
||||
- current phase and last successful checkpoint
|
||||
- failing checks (if any)
|
||||
- estimated time/cost drift
|
||||
- recommended intervention (continue/pause/stop)
|
||||
|
||||
## Watch Mode
|
||||
|
||||
When `--watch` is present, refresh status periodically and surface state changes.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `--watch` optional
|
||||
26
commands/model-route.md
Normal file
26
commands/model-route.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Model Route Command
|
||||
|
||||
Recommend the best model tier for the current task by complexity and budget.
|
||||
|
||||
## Usage
|
||||
|
||||
`/model-route [task-description] [--budget low|med|high]`
|
||||
|
||||
## Routing Heuristic
|
||||
|
||||
- `haiku`: deterministic, low-risk mechanical changes
|
||||
- `sonnet`: default for implementation and refactors
|
||||
- `opus`: architecture, deep review, ambiguous requirements
|
||||
|
||||
## Required Output
|
||||
|
||||
- recommended model
|
||||
- confidence level
|
||||
- why this model fits
|
||||
- fallback model if first attempt fails
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `[task-description]` optional free-text
|
||||
- `--budget low|med|high` optional
|
||||
@@ -85,13 +85,13 @@ EOF",
|
||||
|
||||
### Phase 0: Prompt Enhancement (Optional)
|
||||
|
||||
`[Mode: Prepare]` - If ace-tool MCP available, call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for subsequent Codex calls**
|
||||
`[Mode: Prepare]` - If ace-tool MCP available, call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for subsequent Codex calls**. If unavailable, use `$ARGUMENTS` as-is.
|
||||
|
||||
### Phase 1: Research
|
||||
|
||||
`[Mode: Research]` - Understand requirements and gather context
|
||||
|
||||
1. **Code Retrieval** (if ace-tool MCP available): Call `mcp__ace-tool__search_context` to retrieve existing APIs, data models, service architecture
|
||||
1. **Code Retrieval** (if ace-tool MCP available): Call `mcp__ace-tool__search_context` to retrieve existing APIs, data models, service architecture. If unavailable, use built-in tools: `Glob` for file discovery, `Grep` for symbol/API search, `Read` for context gathering, `Task` (Explore agent) for deeper exploration.
|
||||
2. Requirement completeness score (0-10): >=7 continue, <7 stop and supplement
|
||||
|
||||
### Phase 2: Ideation
|
||||
|
||||
@@ -136,7 +136,7 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
`[Mode: Retrieval]`
|
||||
|
||||
**Must use MCP tool for quick context retrieval, do NOT manually read files one by one**
|
||||
**If ace-tool MCP is available**, use it for quick context retrieval:
|
||||
|
||||
Based on "Key Files" list in plan, call `mcp__ace-tool__search_context`:
|
||||
|
||||
@@ -151,7 +151,12 @@ mcp__ace-tool__search_context({
|
||||
- Extract target paths from plan's "Key Files" table
|
||||
- Build semantic query covering: entry files, dependency modules, related type definitions
|
||||
- If results insufficient, add 1-2 recursive retrievals
|
||||
- **NEVER** use Bash + find/ls to manually explore project structure
|
||||
|
||||
**If ace-tool MCP is NOT available**, use Claude Code built-in tools as fallback:
|
||||
1. **Glob**: Find target files from plan's "Key Files" table (e.g., `Glob("src/components/**/*.tsx")`)
|
||||
2. **Grep**: Search for key symbols, function names, type definitions across the codebase
|
||||
3. **Read**: Read the discovered files to gather complete context
|
||||
4. **Task (Explore agent)**: For broader exploration, use `Task` with `subagent_type: "Explore"`
|
||||
|
||||
**After Retrieval**:
|
||||
- Organize retrieved code snippets
|
||||
|
||||
@@ -85,13 +85,13 @@ EOF",
|
||||
|
||||
### Phase 0: Prompt Enhancement (Optional)
|
||||
|
||||
`[Mode: Prepare]` - If ace-tool MCP available, call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for subsequent Gemini calls**
|
||||
`[Mode: Prepare]` - If ace-tool MCP available, call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for subsequent Gemini calls**. If unavailable, use `$ARGUMENTS` as-is.
|
||||
|
||||
### Phase 1: Research
|
||||
|
||||
`[Mode: Research]` - Understand requirements and gather context
|
||||
|
||||
1. **Code Retrieval** (if ace-tool MCP available): Call `mcp__ace-tool__search_context` to retrieve existing components, styles, design system
|
||||
1. **Code Retrieval** (if ace-tool MCP available): Call `mcp__ace-tool__search_context` to retrieve existing components, styles, design system. If unavailable, use built-in tools: `Glob` for file discovery, `Grep` for component/style search, `Read` for context gathering, `Task` (Explore agent) for deeper exploration.
|
||||
2. Requirement completeness score (0-10): >=7 continue, <7 stop and supplement
|
||||
|
||||
### Phase 2: Ideation
|
||||
|
||||
@@ -71,7 +71,7 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
#### 1.1 Prompt Enhancement (MUST execute first)
|
||||
|
||||
**MUST call `mcp__ace-tool__enhance_prompt` tool**:
|
||||
**If ace-tool MCP is available**, call `mcp__ace-tool__enhance_prompt` tool:
|
||||
|
||||
```
|
||||
mcp__ace-tool__enhance_prompt({
|
||||
@@ -83,9 +83,11 @@ mcp__ace-tool__enhance_prompt({
|
||||
|
||||
Wait for enhanced prompt, **replace original $ARGUMENTS with enhanced result** for all subsequent phases.
|
||||
|
||||
**If ace-tool MCP is NOT available**: Skip this step and use the original `$ARGUMENTS` as-is for all subsequent phases.
|
||||
|
||||
#### 1.2 Context Retrieval
|
||||
|
||||
**Call `mcp__ace-tool__search_context` tool**:
|
||||
**If ace-tool MCP is available**, call `mcp__ace-tool__search_context` tool:
|
||||
|
||||
```
|
||||
mcp__ace-tool__search_context({
|
||||
@@ -96,7 +98,12 @@ mcp__ace-tool__search_context({
|
||||
|
||||
- Build semantic query using natural language (Where/What/How)
|
||||
- **NEVER answer based on assumptions**
|
||||
- If MCP unavailable: fallback to Glob + Grep for file discovery and key symbol location
|
||||
|
||||
**If ace-tool MCP is NOT available**, use Claude Code built-in tools as fallback:
|
||||
1. **Glob**: Find relevant files by pattern (e.g., `Glob("**/*.ts")`, `Glob("src/**/*.py")`)
|
||||
2. **Grep**: Search for key symbols, function names, class definitions (e.g., `Grep("className|functionName")`)
|
||||
3. **Read**: Read the discovered files to gather complete context
|
||||
4. **Task (Explore agent)**: For deeper exploration, use `Task` with `subagent_type: "Explore"` to search across the codebase
|
||||
|
||||
#### 1.3 Completeness Check
|
||||
|
||||
|
||||
@@ -15,14 +15,14 @@ Structured development workflow with quality gates, MCP services, and multi-mode
|
||||
- Task to develop: $ARGUMENTS
|
||||
- Structured 6-phase workflow with quality gates
|
||||
- Multi-model collaboration: Codex (backend) + Gemini (frontend) + Claude (orchestration)
|
||||
- MCP service integration (ace-tool) for enhanced capabilities
|
||||
- MCP service integration (ace-tool, optional) for enhanced capabilities
|
||||
|
||||
## Your Role
|
||||
|
||||
You are the **Orchestrator**, coordinating a multi-model collaborative system (Research → Ideation → Plan → Execute → Optimize → Review). Communicate concisely and professionally for experienced developers.
|
||||
|
||||
**Collaborative Models**:
|
||||
- **ace-tool MCP** – Code retrieval + Prompt enhancement
|
||||
- **ace-tool MCP** (optional) – Code retrieval + Prompt enhancement
|
||||
- **Codex** – Backend logic, algorithms, debugging (**Backend authority, trustworthy**)
|
||||
- **Gemini** – Frontend UI/UX, visual design (**Frontend expert, backend opinions for reference only**)
|
||||
- **Claude (self)** – Orchestration, planning, execution, delivery
|
||||
@@ -111,8 +111,8 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
`[Mode: Research]` - Understand requirements and gather context:
|
||||
|
||||
1. **Prompt Enhancement**: Call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for all subsequent Codex/Gemini calls**
|
||||
2. **Context Retrieval**: Call `mcp__ace-tool__search_context`
|
||||
1. **Prompt Enhancement** (if ace-tool MCP available): Call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for all subsequent Codex/Gemini calls**. If unavailable, use `$ARGUMENTS` as-is.
|
||||
2. **Context Retrieval** (if ace-tool MCP available): Call `mcp__ace-tool__search_context`. If unavailable, use built-in tools: `Glob` for file discovery, `Grep` for symbol search, `Read` for context gathering, `Task` (Explore agent) for deeper exploration.
|
||||
3. **Requirement Completeness Score** (0-10):
|
||||
- Goal clarity (0-3), Expected outcome (0-3), Scope boundaries (0-2), Constraints (0-2)
|
||||
- ≥7: Continue | <7: Stop, ask clarifying questions
|
||||
|
||||
@@ -109,5 +109,7 @@ After planning:
|
||||
|
||||
## Related Agents
|
||||
|
||||
This command invokes the `planner` agent located at:
|
||||
`~/.claude/agents/planner.md`
|
||||
This command invokes the `planner` agent provided by ECC.
|
||||
|
||||
For manual installs, the source file lives at:
|
||||
`agents/planner.md`
|
||||
|
||||
39
commands/projects.md
Normal file
39
commands/projects.md
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
name: projects
|
||||
description: List known projects and their instinct statistics
|
||||
command: true
|
||||
---
|
||||
|
||||
# Projects Command
|
||||
|
||||
List project registry entries and per-project instinct/observation counts for continuous-learning-v2.
|
||||
|
||||
## Implementation
|
||||
|
||||
Run the instinct CLI using the plugin root path:
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" projects
|
||||
```
|
||||
|
||||
Or if `CLAUDE_PLUGIN_ROOT` is not set (manual installation):
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py projects
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/projects
|
||||
```
|
||||
|
||||
## What to Do
|
||||
|
||||
1. Read `~/.claude/homunculus/projects.json`
|
||||
2. For each project, display:
|
||||
- Project name, id, root, remote
|
||||
- Personal and inherited instinct counts
|
||||
- Observation event count
|
||||
- Last seen timestamp
|
||||
3. Also display global instinct totals
|
||||
41
commands/promote.md
Normal file
41
commands/promote.md
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
name: promote
|
||||
description: Promote project-scoped instincts to global scope
|
||||
command: true
|
||||
---
|
||||
|
||||
# Promote Command
|
||||
|
||||
Promote instincts from project scope to global scope in continuous-learning-v2.
|
||||
|
||||
## Implementation
|
||||
|
||||
Run the instinct CLI using the plugin root path:
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" promote [instinct-id] [--force] [--dry-run]
|
||||
```
|
||||
|
||||
Or if `CLAUDE_PLUGIN_ROOT` is not set (manual installation):
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py promote [instinct-id] [--force] [--dry-run]
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/promote # Auto-detect promotion candidates
|
||||
/promote --dry-run # Preview auto-promotion candidates
|
||||
/promote --force # Promote all qualified candidates without prompt
|
||||
/promote grep-before-edit # Promote one specific instinct from current project
|
||||
```
|
||||
|
||||
## What to Do
|
||||
|
||||
1. Detect current project
|
||||
2. If `instinct-id` is provided, promote only that instinct (if present in current project)
|
||||
3. Otherwise, find cross-project candidates that:
|
||||
- Appear in at least 2 projects
|
||||
- Meet confidence threshold
|
||||
4. Write promoted instincts to `~/.claude/homunculus/instincts/personal/` with `scope: global`
|
||||
29
commands/quality-gate.md
Normal file
29
commands/quality-gate.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Quality Gate Command
|
||||
|
||||
Run the ECC quality pipeline on demand for a file or project scope.
|
||||
|
||||
## Usage
|
||||
|
||||
`/quality-gate [path|.] [--fix] [--strict]`
|
||||
|
||||
- default target: current directory (`.`)
|
||||
- `--fix`: allow auto-format/fix where configured
|
||||
- `--strict`: fail on warnings where supported
|
||||
|
||||
## Pipeline
|
||||
|
||||
1. Detect language/tooling for target.
|
||||
2. Run formatter checks.
|
||||
3. Run lint/type checks when available.
|
||||
4. Produce a concise remediation list.
|
||||
|
||||
## Notes
|
||||
|
||||
This command mirrors hook behavior but is operator-invoked.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `[path|.]` optional target path
|
||||
- `--fix` optional
|
||||
- `--strict` optional
|
||||
155
commands/resume-session.md
Normal file
155
commands/resume-session.md
Normal file
@@ -0,0 +1,155 @@
|
||||
---
|
||||
description: Load the most recent session file from ~/.claude/sessions/ and resume work with full context from where the last session ended.
|
||||
---
|
||||
|
||||
# Resume Session Command
|
||||
|
||||
Load the last saved session state and orient fully before doing any work.
|
||||
This command is the counterpart to `/save-session`.
|
||||
|
||||
## When to Use
|
||||
|
||||
- Starting a new session to continue work from a previous day
|
||||
- After starting a fresh session due to context limits
|
||||
- When handing off a session file from another source (just provide the file path)
|
||||
- Any time you have a session file and want Claude to fully absorb it before proceeding
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
/resume-session # loads most recent file in ~/.claude/sessions/
|
||||
/resume-session 2024-01-15 # loads most recent session for that date
|
||||
/resume-session ~/.claude/sessions/2024-01-15-session.tmp # loads a specific legacy-format file
|
||||
/resume-session ~/.claude/sessions/2024-01-15-abc123de-session.tmp # loads a current short-id session file
|
||||
```
|
||||
|
||||
## Process
|
||||
|
||||
### Step 1: Find the session file
|
||||
|
||||
If no argument provided:
|
||||
|
||||
1. Check `~/.claude/sessions/`
|
||||
2. Pick the most recently modified `*-session.tmp` file
|
||||
3. If the folder does not exist or has no matching files, tell the user:
|
||||
```
|
||||
No session files found in ~/.claude/sessions/
|
||||
Run /save-session at the end of a session to create one.
|
||||
```
|
||||
Then stop.
|
||||
|
||||
If an argument is provided:
|
||||
|
||||
- If it looks like a date (`YYYY-MM-DD`), search `~/.claude/sessions/` for files matching
|
||||
`YYYY-MM-DD-session.tmp` (legacy format) or `YYYY-MM-DD-<shortid>-session.tmp` (current format)
|
||||
and load the most recently modified variant for that date
|
||||
- If it looks like a file path, read that file directly
|
||||
- If not found, report clearly and stop
|
||||
|
||||
### Step 2: Read the entire session file
|
||||
|
||||
Read the complete file. Do not summarize yet.
|
||||
|
||||
### Step 3: Confirm understanding
|
||||
|
||||
Respond with a structured briefing in this exact format:
|
||||
|
||||
```
|
||||
SESSION LOADED: [actual resolved path to the file]
|
||||
════════════════════════════════════════════════
|
||||
|
||||
PROJECT: [project name / topic from file]
|
||||
|
||||
WHAT WE'RE BUILDING:
|
||||
[2-3 sentence summary in your own words]
|
||||
|
||||
CURRENT STATE:
|
||||
✅ Working: [count] items confirmed
|
||||
🔄 In Progress: [list files that are in progress]
|
||||
🗒️ Not Started: [list planned but untouched]
|
||||
|
||||
WHAT NOT TO RETRY:
|
||||
[list every failed approach with its reason — this is critical]
|
||||
|
||||
OPEN QUESTIONS / BLOCKERS:
|
||||
[list any blockers or unanswered questions]
|
||||
|
||||
NEXT STEP:
|
||||
[exact next step if defined in the file]
|
||||
[if not defined: "No next step defined — recommend reviewing 'What Has NOT Been Tried Yet' together before starting"]
|
||||
|
||||
════════════════════════════════════════════════
|
||||
Ready to continue. What would you like to do?
|
||||
```
|
||||
|
||||
### Step 4: Wait for the user
|
||||
|
||||
Do NOT start working automatically. Do NOT touch any files. Wait for the user to say what to do next.
|
||||
|
||||
If the next step is clearly defined in the session file and the user says "continue" or "yes" or similar — proceed with that exact next step.
|
||||
|
||||
If no next step is defined — ask the user where to start, and optionally suggest an approach from the "What Has NOT Been Tried Yet" section.
|
||||
|
||||
---
|
||||
|
||||
## Edge Cases
|
||||
|
||||
**Multiple sessions for the same date** (`2024-01-15-session.tmp`, `2024-01-15-abc123de-session.tmp`):
|
||||
Load the most recently modified matching file for that date, regardless of whether it uses the legacy no-id format or the current short-id format.
|
||||
|
||||
**Session file references files that no longer exist:**
|
||||
Note this during the briefing — "⚠️ `path/to/file.ts` referenced in session but not found on disk."
|
||||
|
||||
**Session file is from more than 7 days ago:**
|
||||
Note the gap — "⚠️ This session is from N days ago (threshold: 7 days). Things may have changed." — then proceed normally.
|
||||
|
||||
**User provides a file path directly (e.g., forwarded from a teammate):**
|
||||
Read it and follow the same briefing process — the format is the same regardless of source.
|
||||
|
||||
**Session file is empty or malformed:**
|
||||
Report: "Session file found but appears empty or unreadable. You may need to create a new one with /save-session."
|
||||
|
||||
---
|
||||
|
||||
## Example Output
|
||||
|
||||
```
|
||||
SESSION LOADED: /Users/you/.claude/sessions/2024-01-15-abc123de-session.tmp
|
||||
════════════════════════════════════════════════
|
||||
|
||||
PROJECT: my-app — JWT Authentication
|
||||
|
||||
WHAT WE'RE BUILDING:
|
||||
User authentication with JWT tokens stored in httpOnly cookies.
|
||||
Register and login endpoints are partially done. Route protection
|
||||
via middleware hasn't been started yet.
|
||||
|
||||
CURRENT STATE:
|
||||
✅ Working: 3 items (register endpoint, JWT generation, password hashing)
|
||||
🔄 In Progress: app/api/auth/login/route.ts (token works, cookie not set yet)
|
||||
🗒️ Not Started: middleware.ts, app/login/page.tsx
|
||||
|
||||
WHAT NOT TO RETRY:
|
||||
❌ Next-Auth — conflicts with custom Prisma adapter, threw adapter error on every request
|
||||
❌ localStorage for JWT — causes SSR hydration mismatch, incompatible with Next.js
|
||||
|
||||
OPEN QUESTIONS / BLOCKERS:
|
||||
- Does cookies().set() work inside a Route Handler or only Server Actions?
|
||||
|
||||
NEXT STEP:
|
||||
In app/api/auth/login/route.ts — set the JWT as an httpOnly cookie using
|
||||
cookies().set('token', jwt, { httpOnly: true, secure: true, sameSite: 'strict' })
|
||||
then test with Postman for a Set-Cookie header in the response.
|
||||
|
||||
════════════════════════════════════════════════
|
||||
Ready to continue. What would you like to do?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- Never modify the session file when loading it — it's a read-only historical record
|
||||
- The briefing format is fixed — do not skip sections even if they are empty
|
||||
- "What Not To Retry" must always be shown, even if it just says "None" — it's too important to miss
|
||||
- After resuming, the user may want to run `/save-session` again at the end of the new session to create a new dated file
|
||||
275
commands/save-session.md
Normal file
275
commands/save-session.md
Normal file
@@ -0,0 +1,275 @@
|
||||
---
|
||||
description: Save current session state to a dated file in ~/.claude/sessions/ so work can be resumed in a future session with full context.
|
||||
---
|
||||
|
||||
# Save Session Command
|
||||
|
||||
Capture everything that happened in this session — what was built, what worked, what failed, what's left — and write it to a dated file so the next session can pick up exactly where this one left off.
|
||||
|
||||
## When to Use
|
||||
|
||||
- End of a work session before closing Claude Code
|
||||
- Before hitting context limits (run this first, then start a fresh session)
|
||||
- After solving a complex problem you want to remember
|
||||
- Any time you need to hand off context to a future session
|
||||
|
||||
## Process
|
||||
|
||||
### Step 1: Gather context
|
||||
|
||||
Before writing the file, collect:
|
||||
|
||||
- Read all files modified during this session (use git diff or recall from conversation)
|
||||
- Review what was discussed, attempted, and decided
|
||||
- Note any errors encountered and how they were resolved (or not)
|
||||
- Check current test/build status if relevant
|
||||
|
||||
### Step 2: Create the sessions folder if it doesn't exist
|
||||
|
||||
Create the canonical sessions folder in the user's Claude home directory:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.claude/sessions
|
||||
```
|
||||
|
||||
### Step 3: Write the session file
|
||||
|
||||
Create `~/.claude/sessions/YYYY-MM-DD-<short-id>-session.tmp`, using today's actual date and a short-id that satisfies the rules enforced by `SESSION_FILENAME_REGEX` in `session-manager.js`:
|
||||
|
||||
- Allowed characters: lowercase `a-z`, digits `0-9`, hyphens `-`
|
||||
- Minimum length: 8 characters
|
||||
- No uppercase letters, no underscores, no spaces
|
||||
|
||||
Valid examples: `abc123de`, `a1b2c3d4`, `frontend-worktree-1`
|
||||
Invalid examples: `ABC123de` (uppercase), `short` (under 8 chars), `test_id1` (underscore)
|
||||
|
||||
Full valid filename example: `2024-01-15-abc123de-session.tmp`
|
||||
|
||||
The legacy filename `YYYY-MM-DD-session.tmp` is still valid, but new session files should prefer the short-id form to avoid same-day collisions.
|
||||
|
||||
### Step 4: Populate the file with all sections below
|
||||
|
||||
Write every section honestly. Do not skip sections — write "Nothing yet" or "N/A" if a section genuinely has no content. An incomplete file is worse than an honest empty section.
|
||||
|
||||
### Step 5: Show the file to the user
|
||||
|
||||
After writing, display the full contents and ask:
|
||||
|
||||
```
|
||||
Session saved to [actual resolved path to the session file]
|
||||
|
||||
Does this look accurate? Anything to correct or add before we close?
|
||||
```
|
||||
|
||||
Wait for confirmation. Make edits if requested.
|
||||
|
||||
---
|
||||
|
||||
## Session File Format
|
||||
|
||||
```markdown
|
||||
# Session: YYYY-MM-DD
|
||||
|
||||
**Started:** [approximate time if known]
|
||||
**Last Updated:** [current time]
|
||||
**Project:** [project name or path]
|
||||
**Topic:** [one-line summary of what this session was about]
|
||||
|
||||
---
|
||||
|
||||
## What We Are Building
|
||||
|
||||
[1-3 paragraphs describing the feature, bug fix, or task. Include enough
|
||||
context that someone with zero memory of this session can understand the goal.
|
||||
Include: what it does, why it's needed, how it fits into the larger system.]
|
||||
|
||||
---
|
||||
|
||||
## What WORKED (with evidence)
|
||||
|
||||
[List only things that are confirmed working. For each item include WHY you
|
||||
know it works — test passed, ran in browser, Postman returned 200, etc.
|
||||
Without evidence, move it to "Not Tried Yet" instead.]
|
||||
|
||||
- **[thing that works]** — confirmed by: [specific evidence]
|
||||
- **[thing that works]** — confirmed by: [specific evidence]
|
||||
|
||||
If nothing is confirmed working yet: "Nothing confirmed working yet — all approaches still in progress or untested."
|
||||
|
||||
---
|
||||
|
||||
## What Did NOT Work (and why)
|
||||
|
||||
[This is the most important section. List every approach tried that failed.
|
||||
For each failure write the EXACT reason so the next session doesn't retry it.
|
||||
Be specific: "threw X error because Y" is useful. "didn't work" is not.]
|
||||
|
||||
- **[approach tried]** — failed because: [exact reason / error message]
|
||||
- **[approach tried]** — failed because: [exact reason / error message]
|
||||
|
||||
If nothing failed: "No failed approaches yet."
|
||||
|
||||
---
|
||||
|
||||
## What Has NOT Been Tried Yet
|
||||
|
||||
[Approaches that seem promising but haven't been attempted. Ideas from the
|
||||
conversation. Alternative solutions worth exploring. Be specific enough that
|
||||
the next session knows exactly what to try.]
|
||||
|
||||
- [approach / idea]
|
||||
- [approach / idea]
|
||||
|
||||
If nothing is queued: "No specific untried approaches identified."
|
||||
|
||||
---
|
||||
|
||||
## Current State of Files
|
||||
|
||||
[Every file touched this session. Be precise about what state each file is in.]
|
||||
|
||||
| File | Status | Notes |
|
||||
| ----------------- | -------------- | -------------------------- |
|
||||
| `path/to/file.ts` | ✅ Complete | [what it does] |
|
||||
| `path/to/file.ts` | 🔄 In Progress | [what's done, what's left] |
|
||||
| `path/to/file.ts` | ❌ Broken | [what's wrong] |
|
||||
| `path/to/file.ts` | 🗒️ Not Started | [planned but not touched] |
|
||||
|
||||
If no files were touched: "No files modified this session."
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
[Architecture choices, tradeoffs accepted, approaches chosen and why.
|
||||
These prevent the next session from relitigating settled decisions.]
|
||||
|
||||
- **[decision]** — reason: [why this was chosen over alternatives]
|
||||
|
||||
If no significant decisions: "No major decisions made this session."
|
||||
|
||||
---
|
||||
|
||||
## Blockers & Open Questions
|
||||
|
||||
[Anything unresolved that the next session needs to address or investigate.
|
||||
Questions that came up but weren't answered. External dependencies waiting on.]
|
||||
|
||||
- [blocker / open question]
|
||||
|
||||
If none: "No active blockers."
|
||||
|
||||
---
|
||||
|
||||
## Exact Next Step
|
||||
|
||||
[If known: The single most important thing to do when resuming. Be precise
|
||||
enough that resuming requires zero thinking about where to start.]
|
||||
|
||||
[If not known: "Next step not determined — review 'What Has NOT Been Tried Yet'
|
||||
and 'Blockers' sections to decide on direction before starting."]
|
||||
|
||||
---
|
||||
|
||||
## Environment & Setup Notes
|
||||
|
||||
[Only fill this if relevant — commands needed to run the project, env vars
|
||||
required, services that need to be running, etc. Skip if standard setup.]
|
||||
|
||||
[If none: omit this section entirely.]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Example Output
|
||||
|
||||
```markdown
|
||||
# Session: 2024-01-15
|
||||
|
||||
**Started:** ~2pm
|
||||
**Last Updated:** 5:30pm
|
||||
**Project:** my-app
|
||||
**Topic:** Building JWT authentication with httpOnly cookies
|
||||
|
||||
---
|
||||
|
||||
## What We Are Building
|
||||
|
||||
User authentication system for the Next.js app. Users register with email/password,
|
||||
receive a JWT stored in an httpOnly cookie (not localStorage), and protected routes
|
||||
check for a valid token via middleware. The goal is session persistence across browser
|
||||
refreshes without exposing the token to JavaScript.
|
||||
|
||||
---
|
||||
|
||||
## What WORKED (with evidence)
|
||||
|
||||
- **`/api/auth/register` endpoint** — confirmed by: Postman POST returns 200 with user
|
||||
object, row visible in Supabase dashboard, bcrypt hash stored correctly
|
||||
- **JWT generation in `lib/auth.ts`** — confirmed by: unit test passes
|
||||
(`npm test -- auth.test.ts`), decoded token at jwt.io shows correct payload
|
||||
- **Password hashing** — confirmed by: `bcrypt.compare()` returns true in test
|
||||
|
||||
---
|
||||
|
||||
## What Did NOT Work (and why)
|
||||
|
||||
- **Next-Auth library** — failed because: conflicts with our custom Prisma adapter,
|
||||
threw "Cannot use adapter with credentials provider in this configuration" on every
|
||||
request. Not worth debugging — too opinionated for our setup.
|
||||
- **Storing JWT in localStorage** — failed because: SSR renders happen before
|
||||
localStorage is available, caused React hydration mismatch error on every page load.
|
||||
This approach is fundamentally incompatible with Next.js SSR.
|
||||
|
||||
---
|
||||
|
||||
## What Has NOT Been Tried Yet
|
||||
|
||||
- Store JWT as httpOnly cookie in the login route response (most likely solution)
|
||||
- Use `cookies()` from `next/headers` to read token in server components
|
||||
- Write middleware.ts to protect routes by checking cookie existence
|
||||
|
||||
---
|
||||
|
||||
## Current State of Files
|
||||
|
||||
| File | Status | Notes |
|
||||
| -------------------------------- | -------------- | ----------------------------------------------- |
|
||||
| `app/api/auth/register/route.ts` | ✅ Complete | Works, tested |
|
||||
| `app/api/auth/login/route.ts` | 🔄 In Progress | Token generates but not setting cookie yet |
|
||||
| `lib/auth.ts` | ✅ Complete | JWT helpers, all tested |
|
||||
| `middleware.ts` | 🗒️ Not Started | Route protection, needs cookie read logic first |
|
||||
| `app/login/page.tsx` | 🗒️ Not Started | UI not started |
|
||||
|
||||
---
|
||||
|
||||
## Decisions Made
|
||||
|
||||
- **httpOnly cookie over localStorage** — reason: prevents XSS token theft, works with SSR
|
||||
- **Custom auth over Next-Auth** — reason: Next-Auth conflicts with our Prisma setup, not worth the fight
|
||||
|
||||
---
|
||||
|
||||
## Blockers & Open Questions
|
||||
|
||||
- Does `cookies().set()` work inside a Route Handler or only in Server Actions? Need to verify.
|
||||
|
||||
---
|
||||
|
||||
## Exact Next Step
|
||||
|
||||
In `app/api/auth/login/route.ts`, after generating the JWT, set it as an httpOnly
|
||||
cookie using `cookies().set('token', jwt, { httpOnly: true, secure: true, sameSite: 'strict' })`.
|
||||
Then test with Postman — the response should include a `Set-Cookie` header.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- Each session gets its own file — never append to a previous session's file
|
||||
- The "What Did NOT Work" section is the most critical — future sessions will blindly retry failed approaches without it
|
||||
- If the user asks to save mid-session (not just at the end), save what's known so far and mark in-progress items clearly
|
||||
- The file is meant to be read by Claude at the start of the next session via `/resume-session`
|
||||
- Use the canonical global session store: `~/.claude/sessions/`
|
||||
- Prefer the short-id filename form (`YYYY-MM-DD-<short-id>-session.tmp`) for any new session file
|
||||
@@ -319,8 +319,10 @@ Never skip the RED phase. Never write code before tests.
|
||||
|
||||
## Related Agents
|
||||
|
||||
This command invokes the `tdd-guide` agent located at:
|
||||
`~/.claude/agents/tdd-guide.md`
|
||||
This command invokes the `tdd-guide` agent provided by ECC.
|
||||
|
||||
And can reference the `tdd-workflow` skill at:
|
||||
`~/.claude/skills/tdd-workflow/`
|
||||
The related `tdd-workflow` skill is also bundled with ECC.
|
||||
|
||||
For manual installs, the source files live at:
|
||||
- `agents/tdd-guide.md`
|
||||
- `skills/tdd-workflow/SKILL.md`
|
||||
|
||||
146
docs/ARCHITECTURE-IMPROVEMENTS.md
Normal file
146
docs/ARCHITECTURE-IMPROVEMENTS.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# Architecture Improvement Recommendations
|
||||
|
||||
This document captures architect-level improvements for the Everything Claude Code (ECC) project. It is written from the perspective of a Claude Code coding architect aiming to improve maintainability, consistency, and long-term quality.
|
||||
|
||||
---
|
||||
|
||||
## 1. Documentation and Single Source of Truth
|
||||
|
||||
### 1.1 Agent / Command / Skill Count Sync
|
||||
|
||||
**Issue:** AGENTS.md states "13 specialized agents, 50+ skills, 33 commands" while the repo has **16 agents**, **65+ skills**, and **40 commands**. README and other docs also vary. This causes confusion for contributors and users.
|
||||
|
||||
**Recommendation:**
|
||||
|
||||
- **Single source of truth:** Derive counts (and optionally tables) from the filesystem or a small manifest. Options:
|
||||
- **Option A:** Add a script (e.g. `scripts/ci/catalog.js`) that scans `agents/*.md`, `commands/*.md`, and `skills/*/SKILL.md` and outputs JSON/Markdown. CI and docs can consume this.
|
||||
- **Option B:** Maintain one `docs/catalog.json` (or YAML) that lists agents, commands, and skills with metadata; scripts and docs read from it. Requires discipline to update on add/remove.
|
||||
- **Short-term:** Manually sync AGENTS.md, README.md, and CLAUDE.md with actual counts and list any new agents (e.g. chief-of-staff, loop-operator, harness-optimizer) in the agent table.
|
||||
|
||||
**Impact:** High — affects first impression and contributor trust.
|
||||
|
||||
---
|
||||
|
||||
### 1.2 Command → Agent / Skill Map
|
||||
|
||||
**Issue:** There is no single machine- or human-readable map of "which command uses which agent(s) or skill(s)." This lives in README tables and individual command `.md` files, which can drift.
|
||||
|
||||
**Recommendation:**
|
||||
|
||||
- Add a **command registry** (e.g. in `docs/` or as frontmatter in command files) that lists for each command: name, description, primary agent(s), skills referenced. Can be generated from command file content or maintained by hand.
|
||||
- Expose a "map" in docs (e.g. `docs/COMMAND-AGENT-MAP.md`) or in the generated catalog for discoverability and for tooling (e.g. "which commands use tdd-guide?").
|
||||
|
||||
**Impact:** Medium — improves discoverability and refactoring safety.
|
||||
|
||||
---
|
||||
|
||||
## 2. Testing and Quality
|
||||
|
||||
### 2.1 Test Discovery vs Hardcoded List
|
||||
|
||||
**Issue:** `tests/run-all.js` uses a **hardcoded list** of test files. New test files are not run unless someone updates `run-all.js`, so coverage can be incomplete by omission.
|
||||
|
||||
**Recommendation:**
|
||||
|
||||
- **Glob-based discovery:** Discover test files by pattern (e.g. `**/*.test.js` under `tests/`) and run them, with an optional allowlist/denylist for special cases. This makes new tests automatically part of the suite.
|
||||
- Keep a single entry point (`tests/run-all.js`) that runs discovered tests and aggregates results.
|
||||
|
||||
**Impact:** High — prevents regression where new tests exist but are never executed.
|
||||
|
||||
---
|
||||
|
||||
### 2.2 Test Coverage Metrics
|
||||
|
||||
**Issue:** There is no coverage tool (e.g. nyc/c8/istanbul). The project cannot assert "80%+ coverage" for its own scripts; coverage is implicit.
|
||||
|
||||
**Recommendation:**
|
||||
|
||||
- Introduce a coverage tool for Node scripts (e.g. `c8` or `nyc`) and run it in CI. Start with a baseline (e.g. 60%) and raise over time; or at least report coverage in CI without failing so the team can see trends.
|
||||
- Focus on `scripts/` (lib + hooks + ci) as the primary target; exclude one-off scripts if needed.
|
||||
|
||||
**Impact:** Medium — aligns the project with its own AGENTS.md guidance (80%+ coverage) and surfaces untested paths.
|
||||
|
||||
---
|
||||
|
||||
## 3. Schema and Validation
|
||||
|
||||
### 3.1 Use Hooks JSON Schema in CI
|
||||
|
||||
**Issue:** `schemas/hooks.schema.json` exists and defines the hook configuration shape, but `scripts/ci/validate-hooks.js` does **not** use it. Validation is duplicated (VALID_EVENTS, structure) and can drift from the schema.
|
||||
|
||||
**Recommendation:**
|
||||
|
||||
- Use a JSON Schema validator (e.g. `ajv`) in `validate-hooks.js` to validate `hooks/hooks.json` against `schemas/hooks.schema.json`. Keep the validator as the single source of truth for structure; retain only hook-specific checks (e.g. inline JS syntax) in the script.
|
||||
- Ensures schema and validator stay in sync and allows IDE/editor validation via `$schema` in hooks.json.
|
||||
|
||||
**Impact:** Medium — reduces drift and improves contributor experience when editing hooks.
|
||||
|
||||
---
|
||||
|
||||
## 4. Cross-Harness and i18n
|
||||
|
||||
### 4.1 Skill/Agent Subset Sync (.agents/skills, .cursor/skills)
|
||||
|
||||
**Issue:** `.agents/skills/` (Codex) and `.cursor/skills/` are subsets of `skills/`. Adding or removing a skill in the main repo requires manually updating these subsets, which can be forgotten.
|
||||
|
||||
**Recommendation:**
|
||||
|
||||
- Document in CONTRIBUTING.md that adding a skill may require updating `.agents/skills` and `.cursor/skills` (and how to do it).
|
||||
- Optionally: a CI check or script that compares `skills/` to the subsets and fails or warns if a skill is in one set but not the other when it should be (e.g. by convention or by a small manifest).
|
||||
|
||||
**Impact:** Low–Medium — reduces cross-harness drift.
|
||||
|
||||
---
|
||||
|
||||
### 4.2 Translation Drift (docs/ zh-CN, zh-TW, ja-JP)
|
||||
|
||||
**Issue:** Translations in `docs/` duplicate agents, commands, skills. As the English source evolves, translations can become outdated without clear process or tooling.
|
||||
|
||||
**Recommendation:**
|
||||
|
||||
- Document a **translation process:** when to update (e.g. on release), who owns each locale, and how to detect stale content (e.g. diff file lists or key sections).
|
||||
- Consider: translation status file (e.g. `docs/i18n-status.md`) or CI that checks translation file existence/timestamps and warns if English was updated more recently than a translation.
|
||||
- Long-term: consider extraction/placeholder format (e.g. i18n keys) so translations reference the same structure as the English source.
|
||||
|
||||
**Impact:** Medium — improves experience for non-English users and reduces confusion from outdated translations.
|
||||
|
||||
---
|
||||
|
||||
## 5. Hooks and Scripts
|
||||
|
||||
### 5.1 Hook Runtime Consistency
|
||||
|
||||
**Issue:** Most hooks invoke Node scripts via `run-with-flags.js`; one path uses `run-with-flags-shell.sh` + `observe.sh`. The mixed runtime is documented but could be simplified over time.
|
||||
|
||||
**Recommendation:**
|
||||
|
||||
- Prefer Node for new hooks when possible (cross-platform, single runtime). If shell is required, document why and keep the surface small.
|
||||
- Ensure `ECC_HOOK_PROFILE` and `ECC_DISABLED_HOOKS` are respected in all code paths (including shell) so behavior is consistent.
|
||||
|
||||
**Impact:** Low — maintains current design; improves if more hooks migrate to Node.
|
||||
|
||||
---
|
||||
|
||||
## 6. Summary Table
|
||||
|
||||
| Area | Improvement | Priority | Effort |
|
||||
|-------------------|--------------------------------------|----------|---------|
|
||||
| Doc sync | Sync AGENTS.md/README counts & table | High | Low |
|
||||
| Single source | Catalog script or manifest | High | Medium |
|
||||
| Test discovery | Glob-based test runner | High | Low |
|
||||
| Coverage | Add c8/nyc and CI coverage | Medium | Medium |
|
||||
| Hook schema in CI | Validate hooks.json via schema | Medium | Low |
|
||||
| Command map | Command → agent/skill registry | Medium | Medium |
|
||||
| Subset sync | Document/CI for .agents/.cursor | Low–Med | Low–Med |
|
||||
| Translations | Process + stale detection | Medium | Medium |
|
||||
| Hook runtime | Prefer Node; document shell use | Low | Low |
|
||||
|
||||
---
|
||||
|
||||
## 7. Quick Wins (Immediate)
|
||||
|
||||
1. **Update AGENTS.md:** Set agent count to 16; add chief-of-staff, loop-operator, harness-optimizer to the agent table; align skill/command counts with repo.
|
||||
2. **Test discovery:** Change `run-all.js` to discover `**/*.test.js` under `tests/` (with optional allowlist) so new tests are always run.
|
||||
3. **Wire hooks schema:** In `validate-hooks.js`, validate `hooks/hooks.json` against `schemas/hooks.schema.json` using ajv (or similar) and keep only hook-specific checks in the script.
|
||||
|
||||
These three can be done in one or two sessions and materially improve consistency and reliability.
|
||||
61
docs/COMMAND-AGENT-MAP.md
Normal file
61
docs/COMMAND-AGENT-MAP.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# Command → Agent / Skill Map
|
||||
|
||||
This document lists each slash command and the primary agent(s) or skills it invokes. Use it to discover which commands use which agents and to keep refactoring consistent.
|
||||
|
||||
| Command | Primary agent(s) | Notes |
|
||||
|---------|------------------|--------|
|
||||
| `/plan` | planner | Implementation planning before code |
|
||||
| `/tdd` | tdd-guide | Test-driven development |
|
||||
| `/code-review` | code-reviewer | Quality and security review |
|
||||
| `/build-fix` | build-error-resolver | Fix build/type errors |
|
||||
| `/e2e` | e2e-runner | Playwright E2E tests |
|
||||
| `/refactor-clean` | refactor-cleaner | Dead code removal |
|
||||
| `/update-docs` | doc-updater | Documentation sync |
|
||||
| `/update-codemaps` | doc-updater | Codemaps / architecture docs |
|
||||
| `/go-review` | go-reviewer | Go code review |
|
||||
| `/go-test` | tdd-guide | Go TDD workflow |
|
||||
| `/go-build` | go-build-resolver | Fix Go build errors |
|
||||
| `/python-review` | python-reviewer | Python code review |
|
||||
| `/harness-audit` | — | Harness scorecard (no single agent) |
|
||||
| `/loop-start` | loop-operator | Start autonomous loop |
|
||||
| `/loop-status` | loop-operator | Inspect loop status |
|
||||
| `/quality-gate` | — | Quality pipeline (hook-like) |
|
||||
| `/model-route` | — | Model recommendation (no agent) |
|
||||
| `/orchestrate` | planner, tdd-guide, code-reviewer, security-reviewer, architect | Multi-agent handoff |
|
||||
| `/multi-plan` | architect (Codex/Gemini prompts) | Multi-model planning |
|
||||
| `/multi-execute` | architect / frontend prompts | Multi-model execution |
|
||||
| `/multi-backend` | architect | Backend multi-service |
|
||||
| `/multi-frontend` | architect | Frontend multi-service |
|
||||
| `/multi-workflow` | architect | General multi-service |
|
||||
| `/learn` | — | continuous-learning skill, instincts |
|
||||
| `/learn-eval` | — | continuous-learning-v2, evaluate then save |
|
||||
| `/instinct-status` | — | continuous-learning-v2 |
|
||||
| `/instinct-import` | — | continuous-learning-v2 |
|
||||
| `/instinct-export` | — | continuous-learning-v2 |
|
||||
| `/evolve` | — | continuous-learning-v2, cluster instincts |
|
||||
| `/promote` | — | continuous-learning-v2 |
|
||||
| `/projects` | — | continuous-learning-v2 |
|
||||
| `/skill-create` | — | skill-create-output script, git history |
|
||||
| `/checkpoint` | — | verification-loop skill |
|
||||
| `/verify` | — | verification-loop skill |
|
||||
| `/eval` | — | eval-harness skill |
|
||||
| `/test-coverage` | — | Coverage analysis |
|
||||
| `/sessions` | — | Session history |
|
||||
| `/setup-pm` | — | Package manager setup script |
|
||||
| `/claw` | — | NanoClaw CLI (scripts/claw.js) |
|
||||
| `/pm2` | — | PM2 service lifecycle |
|
||||
| `/security-scan` | security-reviewer (skill) | AgentShield via security-scan skill |
|
||||
|
||||
## Skills referenced by commands
|
||||
|
||||
- **continuous-learning**, **continuous-learning-v2**: `/learn`, `/learn-eval`, `/instinct-*`, `/evolve`, `/promote`, `/projects`
|
||||
- **verification-loop**: `/checkpoint`, `/verify`
|
||||
- **eval-harness**: `/eval`
|
||||
- **security-scan**: `/security-scan` (runs AgentShield)
|
||||
- **strategic-compact**: suggested at compaction points (hooks)
|
||||
|
||||
## How to use this map
|
||||
|
||||
- **Discoverability:** Find which command triggers which agent (e.g. “use `/code-review` for code-reviewer”).
|
||||
- **Refactoring:** When renaming or removing an agent, search this doc and the command files for references.
|
||||
- **CI/docs:** The catalog script (`node scripts/ci/catalog.js`) outputs agent/command/skill counts; this map complements it with command–agent relationships.
|
||||
74
docs/business/metrics-and-sponsorship.md
Normal file
74
docs/business/metrics-and-sponsorship.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# Metrics and Sponsorship Playbook
|
||||
|
||||
This file is a practical script for sponsor calls and ecosystem partner reviews.
|
||||
|
||||
## What to Track
|
||||
|
||||
Use four categories in every update:
|
||||
|
||||
1. **Distribution** — npm packages and GitHub App installs
|
||||
2. **Adoption** — stars, forks, contributors, release cadence
|
||||
3. **Product surface** — commands/skills/agents and cross-platform support
|
||||
4. **Reliability** — test pass counts and production bug turnaround
|
||||
|
||||
## Pull Live Metrics
|
||||
|
||||
### npm downloads
|
||||
|
||||
```bash
|
||||
# Weekly downloads
|
||||
curl -s https://api.npmjs.org/downloads/point/last-week/ecc-universal
|
||||
curl -s https://api.npmjs.org/downloads/point/last-week/ecc-agentshield
|
||||
|
||||
# Last 30 days
|
||||
curl -s https://api.npmjs.org/downloads/point/last-month/ecc-universal
|
||||
curl -s https://api.npmjs.org/downloads/point/last-month/ecc-agentshield
|
||||
```
|
||||
|
||||
### GitHub repository adoption
|
||||
|
||||
```bash
|
||||
gh api repos/affaan-m/everything-claude-code \
|
||||
--jq '{stars:.stargazers_count,forks:.forks_count,contributors_url:.contributors_url,open_issues:.open_issues_count}'
|
||||
```
|
||||
|
||||
### GitHub traffic (maintainer access required)
|
||||
|
||||
```bash
|
||||
gh api repos/affaan-m/everything-claude-code/traffic/views
|
||||
gh api repos/affaan-m/everything-claude-code/traffic/clones
|
||||
```
|
||||
|
||||
### GitHub App installs
|
||||
|
||||
GitHub App install count is currently most reliable in the Marketplace/App dashboard.
|
||||
Use the latest value from:
|
||||
|
||||
- [ECC Tools Marketplace](https://github.com/marketplace/ecc-tools)
|
||||
|
||||
## What Cannot Be Measured Publicly (Yet)
|
||||
|
||||
- Claude plugin install/download counts are not currently exposed via a public API.
|
||||
- For partner conversations, use npm metrics + GitHub App installs + repo traffic as the proxy bundle.
|
||||
|
||||
## Suggested Sponsor Packaging
|
||||
|
||||
Use these as starting points in negotiation:
|
||||
|
||||
- **Pilot Partner:** `$200/month`
|
||||
- Best for first partnership validation and simple monthly sponsor updates.
|
||||
- **Growth Partner:** `$500/month`
|
||||
- Includes roadmap check-ins and implementation feedback loop.
|
||||
- **Strategic Partner:** `$1,000+/month`
|
||||
- Multi-touch collaboration, launch support, and deeper operational alignment.
|
||||
|
||||
## 60-Second Talking Track
|
||||
|
||||
Use this on calls:
|
||||
|
||||
> ECC is now positioned as an agent harness performance system, not a config repo.
|
||||
> We track adoption through npm distribution, GitHub App installs, and repository growth.
|
||||
> Claude plugin installs are structurally undercounted publicly, so we use a blended metrics model.
|
||||
> The project supports Claude Code, Cursor, OpenCode, and Codex app/CLI with production-grade hook reliability and a large passing test suite.
|
||||
|
||||
For launch-ready social copy snippets, see [`social-launch-copy.md`](./social-launch-copy.md).
|
||||
62
docs/business/social-launch-copy.md
Normal file
62
docs/business/social-launch-copy.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# Social Launch Copy (X + LinkedIn)
|
||||
|
||||
Use these templates as launch-ready starting points. Replace placeholders before posting.
|
||||
|
||||
## X Post: Release Announcement
|
||||
|
||||
```text
|
||||
ECC v1.8.0 is live.
|
||||
|
||||
We moved from “config pack” to an agent harness performance system:
|
||||
- hook reliability fixes
|
||||
- new harness commands
|
||||
- cross-tool parity (Claude Code, Cursor, OpenCode, Codex)
|
||||
|
||||
Start here: <repo-link>
|
||||
```
|
||||
|
||||
## X Post: Proof + Metrics
|
||||
|
||||
```text
|
||||
If you evaluate agent tooling, use blended distribution metrics:
|
||||
- npm installs (`ecc-universal`, `ecc-agentshield`)
|
||||
- GitHub App installs
|
||||
- repo adoption (stars/forks/contributors)
|
||||
|
||||
We now track this monthly in-repo for sponsor transparency.
|
||||
```
|
||||
|
||||
## X Quote Tweet: Eval Skills Article
|
||||
|
||||
```text
|
||||
Strong point on eval discipline.
|
||||
|
||||
In ECC we turned this into production checks via:
|
||||
- /harness-audit
|
||||
- /quality-gate
|
||||
- Stop-phase session summaries
|
||||
|
||||
This is where harness performance compounds over time.
|
||||
```
|
||||
|
||||
## X Quote Tweet: Plankton / deslop workflow
|
||||
|
||||
```text
|
||||
This workflow direction is right: optimize the harness, not just prompts.
|
||||
|
||||
Our v1.8.0 focus was reliability + parity + measurable quality gates across toolchains.
|
||||
```
|
||||
|
||||
## LinkedIn Post: Partner-Friendly Summary
|
||||
|
||||
```text
|
||||
We shipped ECC v1.8.0 with one objective: improve agent harness performance in production.
|
||||
|
||||
Highlights:
|
||||
- more reliable hook lifecycle behavior
|
||||
- new harness-level quality commands
|
||||
- parity across Claude Code, Cursor, OpenCode, and Codex
|
||||
- stronger sponsor-facing metrics tracking
|
||||
|
||||
If your team runs AI coding agents daily, this is designed for operational use.
|
||||
```
|
||||
14
docs/continuous-learning-v2-spec.md
Normal file
14
docs/continuous-learning-v2-spec.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# Continuous Learning v2 Spec
|
||||
|
||||
This document captures the v2 continuous-learning architecture:
|
||||
|
||||
1. Hook-based observation capture
|
||||
2. Background observer analysis loop
|
||||
3. Instinct scoring and persistence
|
||||
4. Evolution of instincts into reusable skills/commands
|
||||
|
||||
Primary implementation lives in:
|
||||
- `skills/continuous-learning-v2/`
|
||||
- `scripts/hooks/`
|
||||
|
||||
Use this file as the stable reference path for docs and translations.
|
||||
@@ -7,7 +7,7 @@ model: opus
|
||||
|
||||
# データベースレビューアー
|
||||
|
||||
あなたはクエリ最適化、スキーマ設計、セキュリティ、パフォーマンスに焦点を当てたエキスパートPostgreSQLデータベーススペシャリストです。あなたのミッションは、データベースコードがベストプラクティスに従い、パフォーマンス問題を防ぎ、データ整合性を維持することを確実にすることです。このエージェントは[SupabaseのPostgreSQLベストプラクティス](https://github.com/supabase/agent-skills)からのパターンを組み込んでいます。
|
||||
あなたはクエリ最適化、スキーマ設計、セキュリティ、パフォーマンスに焦点を当てたエキスパートPostgreSQLデータベーススペシャリストです。あなたのミッションは、データベースコードがベストプラクティスに従い、パフォーマンス問題を防ぎ、データ整合性を維持することを確実にすることです。このエージェントは[SupabaseのPostgreSQLベストプラクティス](Supabase Agent Skills (credit: Supabase team))からのパターンを組み込んでいます。
|
||||
|
||||
## 主な責務
|
||||
|
||||
@@ -651,4 +651,4 @@ ORDER BY rank DESC;
|
||||
|
||||
**覚えておくこと**: データベースの問題は、アプリケーションパフォーマンス問題の根本原因であることが多いです。クエリとスキーマ設計を早期に最適化してください。仮定を検証するためにEXPLAIN ANALYZEを使用してください。常に外部キーとRLSポリシー列にインデックスを作成してください。
|
||||
|
||||
*パターンはMITライセンスの下で[Supabase Agent Skills](https://github.com/supabase/agent-skills)から適応されています。*
|
||||
*パターンはMITライセンスの下で[Supabase Agent Skills](Supabase Agent Skills (credit: Supabase team))から適応されています。*
|
||||
|
||||
@@ -85,13 +85,13 @@ EOF",
|
||||
|
||||
### フェーズ 0: プロンプト強化(オプション)
|
||||
|
||||
`[Mode: Prepare]` - ace-tool MCPが利用可能な場合、`mcp__ace-tool__enhance_prompt`を呼び出し、**後続のCodex呼び出しのために元の$ARGUMENTSを強化結果で置き換える**
|
||||
`[Mode: Prepare]` - ace-tool MCPが利用可能な場合、`mcp__ace-tool__enhance_prompt`を呼び出し、**後続のCodex呼び出しのために元の$ARGUMENTSを強化結果で置き換える**。利用できない場合は`$ARGUMENTS`をそのまま使用。
|
||||
|
||||
### フェーズ 1: 調査
|
||||
|
||||
`[Mode: Research]` - 要件の理解とコンテキストの収集
|
||||
|
||||
1. **コード取得**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__search_context`を呼び出して既存のAPI、データモデル、サービスアーキテクチャを取得
|
||||
1. **コード取得**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__search_context`を呼び出して既存のAPI、データモデル、サービスアーキテクチャを取得。利用できない場合は組み込みツールを使用: `Glob`でファイル検索、`Grep`でシンボル/API検索、`Read`でコンテキスト収集、`Task`(Exploreエージェント)でより深い探索。
|
||||
2. 要件の完全性スコア(0-10): >=7で継続、<7で停止して補足
|
||||
|
||||
### フェーズ 2: アイデア創出
|
||||
|
||||
@@ -136,7 +136,7 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
`[Mode: Retrieval]`
|
||||
|
||||
**MCPツールを使用したクイックコンテキスト取得が必須です。ファイルを1つずつ手動で読まないでください**
|
||||
**ace-tool MCPが利用可能な場合**、クイックコンテキスト取得に使用:
|
||||
|
||||
計画の「キーファイル」リストに基づいて、`mcp__ace-tool__search_context`を呼び出します:
|
||||
|
||||
@@ -151,7 +151,12 @@ mcp__ace-tool__search_context({
|
||||
- 計画の「キーファイル」テーブルから対象パスを抽出
|
||||
- カバー範囲のセマンティッククエリを構築: エントリファイル、依存モジュール、関連する型定義
|
||||
- 結果が不十分な場合、1-2回の再帰的取得を追加
|
||||
- **決して**Bash + find/lsを使用してプロジェクト構造を手動で探索しない
|
||||
|
||||
**ace-tool MCPが利用できない場合**、Claude Code組み込みツールでフォールバック:
|
||||
1. **Glob**: 計画の「キーファイル」テーブルから対象ファイルを検索 (例: `Glob("src/components/**/*.tsx")`)
|
||||
2. **Grep**: キーシンボル、関数名、型定義をコードベース全体で検索
|
||||
3. **Read**: 発見したファイルを読み取り、完全なコンテキストを収集
|
||||
4. **Task (Explore エージェント)**: より広範な探索が必要な場合、`Task` を `subagent_type: "Explore"` で使用
|
||||
|
||||
**取得後**:
|
||||
- 取得したコードスニペットを整理
|
||||
|
||||
@@ -85,13 +85,13 @@ EOF",
|
||||
|
||||
### フェーズ 0: プロンプト強化(オプション)
|
||||
|
||||
`[Mode: Prepare]` - ace-tool MCPが利用可能な場合、`mcp__ace-tool__enhance_prompt`を呼び出し、**後続のGemini呼び出しのために元の$ARGUMENTSを強化結果で置き換える**
|
||||
`[Mode: Prepare]` - ace-tool MCPが利用可能な場合、`mcp__ace-tool__enhance_prompt`を呼び出し、**後続のGemini呼び出しのために元の$ARGUMENTSを強化結果で置き換える**。利用できない場合は`$ARGUMENTS`をそのまま使用。
|
||||
|
||||
### フェーズ 1: 調査
|
||||
|
||||
`[Mode: Research]` - 要件の理解とコンテキストの収集
|
||||
|
||||
1. **コード取得**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__search_context`を呼び出して既存のコンポーネント、スタイル、デザインシステムを取得
|
||||
1. **コード取得**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__search_context`を呼び出して既存のコンポーネント、スタイル、デザインシステムを取得。利用できない場合は組み込みツールを使用: `Glob`でファイル検索、`Grep`でコンポーネント/スタイル検索、`Read`でコンテキスト収集、`Task`(Exploreエージェント)でより深い探索。
|
||||
2. 要件の完全性スコア(0-10): >=7で継続、<7で停止して補足
|
||||
|
||||
### フェーズ 2: アイデア創出
|
||||
|
||||
@@ -71,7 +71,7 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
#### 1.1 プロンプト強化(最初に実行する必要があります)
|
||||
|
||||
**`mcp__ace-tool__enhance_prompt`ツールを呼び出す必要があります**:
|
||||
**ace-tool MCPが利用可能な場合**、`mcp__ace-tool__enhance_prompt`ツールを呼び出す:
|
||||
|
||||
```
|
||||
mcp__ace-tool__enhance_prompt({
|
||||
@@ -83,9 +83,11 @@ mcp__ace-tool__enhance_prompt({
|
||||
|
||||
強化されたプロンプトを待ち、**後続のすべてのフェーズのために元の$ARGUMENTSを強化結果で置き換える**。
|
||||
|
||||
**ace-tool MCPが利用できない場合**: このステップをスキップし、後続のすべてのフェーズで元の`$ARGUMENTS`をそのまま使用する。
|
||||
|
||||
#### 1.2 コンテキスト取得
|
||||
|
||||
**`mcp__ace-tool__search_context`ツールを呼び出す**:
|
||||
**ace-tool MCPが利用可能な場合**、`mcp__ace-tool__search_context`ツールを呼び出す:
|
||||
|
||||
```
|
||||
mcp__ace-tool__search_context({
|
||||
@@ -96,7 +98,12 @@ mcp__ace-tool__search_context({
|
||||
|
||||
- 自然言語を使用してセマンティッククエリを構築(Where/What/How)
|
||||
- **仮定に基づいて回答しない**
|
||||
- MCPが利用できない場合: Glob + Grepにフォールバックしてファイル検出とキーシンボル位置を特定
|
||||
|
||||
**ace-tool MCPが利用できない場合**、Claude Code組み込みツールでフォールバック:
|
||||
1. **Glob**: パターンで関連ファイルを検索 (例: `Glob("**/*.ts")`, `Glob("src/**/*.py")`)
|
||||
2. **Grep**: キーシンボル、関数名、クラス定義を検索 (例: `Grep("className|functionName")`)
|
||||
3. **Read**: 発見したファイルを読み取り、完全なコンテキストを収集
|
||||
4. **Task (Explore エージェント)**: より深い探索が必要な場合、`Task` を `subagent_type: "Explore"` で使用
|
||||
|
||||
#### 1.3 完全性チェック
|
||||
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
- 開発するタスク: $ARGUMENTS
|
||||
- 品質ゲートを備えた構造化された6フェーズワークフロー
|
||||
- マルチモデル連携: Codex(バックエンド) + Gemini(フロントエンド) + Claude(オーケストレーション)
|
||||
- MCPサービス統合(ace-tool)による機能強化
|
||||
- MCPサービス統合(ace-tool、オプション)による機能強化
|
||||
|
||||
## 役割
|
||||
|
||||
あなたは**オーケストレーター**として、マルチモデル協調システムを調整します(調査 → アイデア創出 → 計画 → 実装 → 最適化 → レビュー)。経験豊富な開発者向けに簡潔かつ専門的にコミュニケーションします。
|
||||
|
||||
**連携モデル**:
|
||||
- **ace-tool MCP** – コード取得 + プロンプト強化
|
||||
- **ace-tool MCP**(オプション) – コード取得 + プロンプト強化
|
||||
- **Codex** – バックエンドロジック、アルゴリズム、デバッグ(**バックエンドの権威、信頼できる**)
|
||||
- **Gemini** – フロントエンドUI/UX、ビジュアルデザイン(**フロントエンドエキスパート、バックエンドの意見は参考のみ**)
|
||||
- **Claude(自身)** – オーケストレーション、計画、実装、配信
|
||||
@@ -111,8 +111,8 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
`[Mode: Research]` - 要件の理解とコンテキストの収集:
|
||||
|
||||
1. **プロンプト強化**: `mcp__ace-tool__enhance_prompt`を呼び出し、**後続のすべてのCodex/Gemini呼び出しのために元の$ARGUMENTSを強化結果で置き換える**
|
||||
2. **コンテキスト取得**: `mcp__ace-tool__search_context`を呼び出す
|
||||
1. **プロンプト強化**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__enhance_prompt`を呼び出し、**後続のすべてのCodex/Gemini呼び出しのために元の$ARGUMENTSを強化結果で置き換える**。利用できない場合は`$ARGUMENTS`をそのまま使用。
|
||||
2. **コンテキスト取得**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__search_context`を呼び出す。利用できない場合は組み込みツールを使用: `Glob`でファイル検索、`Grep`でシンボル検索、`Read`でコンテキスト収集、`Task`(Exploreエージェント)でより深い探索。
|
||||
3. **要件完全性スコア**(0-10):
|
||||
- 目標の明確性(0-3)、期待される結果(0-3)、スコープの境界(0-2)、制約(0-2)
|
||||
- ≥7: 継続 | <7: 停止、明確化の質問を尋ねる
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
claude plugin marketplace add https://github.com/anthropics/claude-plugins-official
|
||||
|
||||
# コミュニティマーケットプレイスを追加
|
||||
claude plugin marketplace add https://github.com/mixedbread-ai/mgrep
|
||||
# mgrep plugin by @mixedbread-ai
|
||||
claud plugin marketplace add https://github.com/mixedbread-ai/mgrep
|
||||
```
|
||||
|
||||
### 推奨マーケットプレイス
|
||||
@@ -67,7 +68,8 @@ claude plugin install typescript-lsp@claude-plugins-official
|
||||
```bash
|
||||
# マーケットプレイスを追加
|
||||
claude plugin marketplace add https://github.com/anthropics/claude-plugins-official
|
||||
claude plugin marketplace add https://github.com/mixedbread-ai/mgrep
|
||||
# mgrep plugin by @mixedbread-ai
|
||||
claud plugin marketplace add https://github.com/mixedbread-ai/mgrep
|
||||
|
||||
# /pluginsを開き、必要なものをインストール
|
||||
```
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user