AutoSkillit
CLAUDE.md5 starsChanged 6 months agoMITView on GitHub
Mandatory instructions for AI-assisted development in this repository. A Claude Code plugin that orchestrates automated skill-driven workflows using headless sessions. It provides MCP tools (gated behind open_kitchen/close_kitchen via FastMCP v3 tag-based visibility) and bundled skills registered as /autoskillit:* slash commands. * Do Not Oversimplify: Implement logic with required complexity. No shortcuts that compromise correctness. * Respect the Existing Architecture: Build on established patterns. Understand existing code before modifying. * Address the Root Cause: Debug to find and fix root causes.…
- Installs packages
In this repository23 other files it gives its agents.
- .github/CLAUDE.mdCLAUDE.md
- tests/CLAUDE.mdCLAUDE.md
- audit-archSkill
- audit-bugsSkill
- audit-cohesionSkill
- audit-defense-standardsSkill
- audit-testsSkill
- chart-courseSkill
- check-bearingSkill
- design-guardsSkill
- elaborate-phaseSkill
- id-slopSkill
- make-arch-diagSkill
- make-reqSkill
- make-scenariosSkill
- promote-to-mainSkill
- render-recipeSkill
- review-promotionSkill
- update-architectureSkill
- update-reqsSkill
- update-specsSkill
- validate-auditSkill
- verify-diagSkill
The file
Show its rules and text
We split this CLAUDE.md into the rules it gives an agent
18 rules. About 0 are common, 8 are distinctive, and 10 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 12
Adhere to Task Scope: Do not work on unassigned features or unrelated refactoring.
- Distinctive: line 14
Adhere to Project Standards: Write clean, maintainable Python following established conventions.
- Very specific: line 20
When a message includes a /skill-name, execute it via the Skill tool BEFORE any other action.
- Distinctive: line 21
Never skip or substitute a skill invocation based on your own judgment.
- Distinctive: line 28
No Backward Compatibility Hacks: No comments about dead code.
- Distinctive: line 29
Avoid Redundancy: Do not duplicate logic or utilities.
- Very specific: line 31
Version Bumps: When bumping the package version, update pyproject.toml and run task sync-versions && uv lock.
- Very specific: line 32
Run pre-commit before committing: Always run pre-commit run --all-files before committing.
- Very specific: line 35
Grep tool uses ripgrep (ERE) syntax: Use | for OR-alternation in Grep tool pattern arguments.
- Very specific: line 39
Worktree Init Prohibition: Never run autoskillit init from within a git worktree.
- Very specific: line 46
Temporary Files: All temp files must go in the project's .autoskillit/temp/ directory.
- Distinctive: line 47
Do Not Add Root Files: Never create new root files unless explicitly required.
- Distinctive: line 52
Correcting existing content is permitted: If you discover that CLAUDE.md contains inaccurate information (wrong file paths, stale names, …
- Distinctive: line 53
Adding new content requires explicit instruction: Never add new sections, bullet points, entries, or any new information to CLAUDE.md …
- Very specific: line 63
Never check response body for
commentsarray length: after POST /pulls/{N}/reviews — GitHub does not echo back the comments array. - Very specific: line 110
Worktree setup: Use task install-worktree in worktrees.
- Very specific: line 115
Run manually with pre-commit run --all-files.
- Very specific: line 158
CRITICAL: When using subagents, invoke with CLAUDE_CODE_EXIT_AFTER_STOP_DELAY=120000 to ensure subagents exit when finished.
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AutoSkillit: Development Guidelines
Mandatory instructions for AI-assisted development in this repository.
1. Core Project Goal
A Claude Code plugin that orchestrates automated skill-driven workflows using headless sessions. It provides MCP tools (gated behind open_kitchen/close_kitchen via FastMCP v3 tag-based visibility) and bundled skills registered as /autoskillit:* slash commands.
2. General Principles
- Follow the Task Description: The issue or ticket is your primary source of truth.
- Adhere to Task Scope: Do not work on unassigned features or unrelated refactoring.
- Implement Faithfully: Produce functionally correct implementations. Do not add unrequested features.
- Adhere to Project Standards: Write clean, maintainable Python following established conventions.
3. Critical Rules - DO NOT VIOLATE
3.0. Skill Invocations Are Orders
- When a message includes a
/skill-name, execute it via the Skill tool BEFORE any other action. No exceptions. - Never skip or substitute a skill invocation based on your own judgment.
3.1. Code and Implementation
- Do Not Oversimplify: Implement logic with required complexity. No shortcuts that compromise correctness.
- Respect the Existing Architecture: Build on established patterns. Understand existing code before modifying.
- Address the Root Cause: Debug to find and fix root causes. No hardcoded workarounds.
- No Backward Compatibility Hacks: No comments about dead code. Remove dead code entirely.
- Avoid Redundancy: Do not duplicate logic or utilities.
- Use Current Package Versions: Web search for current stable versions when adding dependencies.
- Version Bumps: When bumping the package version, update
pyproject.tomland runtask sync-versions && uv lock; then search tests for hardcoded version strings (e.g.AUTOSKILLIT_INSTALLED_VERSIONmonkeypatches) and update them. - Run pre-commit before committing: Always run
pre-commit run --all-filesbefore committing. Do not skip this step even when code appears clean — hooks auto-fix formatting and abort the commit, requiring re-stage and retry. - Hook Renames: Renaming a hook script under
src/autoskillit/hooks/must updateHOOK_REGISTRYinhook_registry.pyAND add the old basename toRETIRED_SCRIPT_BASENAMESin the same commit.test_no_retired_name_has_a_live_filewill fail otherwise. - Skill Renames: Renaming a skill under
src/autoskillit/skills_extended/(orsrc/autoskillit/skills/) must update the skill'sSKILL.mdname:field AND add the old directory name toRETIRED_SKILL_NAMESinsrc/autoskillit/core/types/_type_constants.pyin the SAME commit.test_no_retired_skill_name_has_a_live_directorywill fail otherwise. - Grep tool uses ripgrep (ERE) syntax: Use
|for OR-alternation in Grep toolpatternarguments.\|is Bash grep BRE syntax — ripgrep treats it as a literal backslash-pipe and returns 0 results. Example:Grep(pattern="foo|bar")notGrep(pattern="foo\|bar"). In production,grep_pattern_lint_guard.py(hooks/guards/) blocks\|calls with a correction hint. The silent zero-results failure described above only occurs in hook-inactive contexts (e.g., raw CLI usage without the plugin installed). - Worktree Init Prohibition: Never run
autoskillit initfrom within a git worktree.sync_hooks_to_settings()will raiseRuntimeErrorifpkg_root()resolves to a worktree. Usetask install-worktreefor worktree setup — it does NOT callinit. - Naming convention —
*Defvs*Specsuffixes:*Def— static definition of a registered entity (e.g.,HookDef,PackDef,FeatureDef,RuleDef). Typically aNamedTupleor@dataclass(frozen=True), used as elements in a registry or lookup table. Typically lives incore/; stdlib-only types importable from hook scripts may live at the package root (e.g.,HookDefinhook_registry.py).*Spec— behavioral specification or validation rule (e.g.,ExperimentTypeSpec,WriteBehaviorSpec). Typically a@dataclassorTypedDictconfiguring a pipeline or validation stage. Typically lives inrecipe/or domain layers;*Spectypes used by IL-0 core protocols live incore/(e.g.,WriteBehaviorSpecincore/types/_type_results.py).
3.2. File System
- Temporary Files: All temp files must go in the project's
.autoskillit/temp/directory. - Do Not Add Root Files: Never create new root files unless explicitly required.
- Never commit unless told to do so
3.3. CLAUDE.md Modifications
- Correcting existing content is permitted: If you discover that CLAUDE.md contains inaccurate information (wrong file paths, stale names, incorrect tool attributions), you may correct it without being asked.
- Adding new content requires explicit instruction: Never add new sections, bullet points, entries, or any new information to CLAUDE.md unless the user has explicitly asked you to update or extend it. Corrections to existing facts ≠ permission to expand scope.
3.4. GitHub API Call Discipline
- Batch inline review comments via
POST /pulls/{N}/reviewswithcomments[]array — never post comments individually unless the batch call fails. - Batch GraphQL mutations via aliases (N mutations in 1 request = 5 pts total, not N × 5 pts). Use for thread resolution, bulk PR queries, and any operation touching multiple entities.
- Delay 1s between POST/PATCH/PUT/DELETE calls — add
sleep 1(in shell) orawait asyncio.sleep(1)(in Python) between consecutive mutating GitHub API calls. - Pre-fetch entity lists upfront in a single call; pass results via manifest files or variables rather than querying per-entity.
- Use
--jsonfield selection to request only needed fields fromghCLI commands. - Prefer GraphQL for multi-entity reads — alias queries cost 1 point regardless of entity count.
- Never check response body for
commentsarray length afterPOST /pulls/{N}/reviews— GitHub does not echo back the comments array; HTTP 200 is the success signal.
3.5. GitHub Issue Body is the Source of Truth
- Never use
gh issue commentto communicate issue status, triage feedback, tracking info, or occurrence data. Comments are not read by downstream consumers and fragment the record. - All issue content updates must use
gh issue edit --body-file: fetch the current body, append the new section, write to${{AUTOSKILLIT_TEMP}}, then rungh issue edit {number} --body-file "$FILE". - The
update_issue_body()method onGitHubFetcheris the Python API equivalent.
3.6. Pyright LSP Usage
The LSP tool provides type-aware code intelligence via Pyright. Use it for precise
navigation instead of grep when tracing symbols through imports, re-exports, or protocols.
Available operations (all take filePath, line, character — 1-based):
| Operation | Use case |
goToDefinition | Jump to where a symbol is defined (follows imports/re-exports) |
findReferences | Find all usages of a symbol across the codebase |
documentSymbol | List all classes, functions, and variables in a file |
goToImplementation | Find concrete implementations of a Protocol or ABC |
prepareCallHierarchy | Get the call hierarchy item at a position |
incomingCalls | Find all callers of a function/method |
outgoingCalls | Find all functions/methods called by a function |
When to use LSP over grep:
- Tracing a symbol through re-exports (e.g.,
core/__init__.py-> actual definition) - Finding all implementations of a Protocol
- Mapping call hierarchies (who calls X, what does X call)
- Understanding a file's structure before editing
When grep is still better:
- Searching for string literals, comments, or non-symbol patterns
- Searching across non-Python files (YAML, JSON, markdown)
4. Testing Guidelines
The project uses pytest with pytest-asyncio. Tests run in parallel via pytest-xdist (-n 4). All tests must be safe for parallel execution.
- Run tests:
task test-allfrom the project root (human-facing, runs lint + tests). For automation and MCP tools,task test-checkis used (unambiguous PASS/FAIL, correct PIPESTATUS capture). Never usepytest,python -m pytest, or any other test runner directly. - Always run tests at end of task
- Add tests for new features
- Follow existing test patterns in
tests/— avoid test code redundancy - Worktree setup: Use
task install-worktreein worktrees. Never hardcodeuv venv/pip installin skills or plans. - Filtered tests:
task test-filteredruns path-filtered tests (defaultsAUTOSKILLIT_TEST_FILTER=conservative). SetAUTOSKILLIT_TEST_BASE_REFto control the diff base. Seetests/CLAUDE.mdfor filter modes and algorithm details.
5. Pre-commit Hooks
Run manually with pre-commit run --all-files.
Configured hooks: ruff format (auto-fix), ruff check (auto-fix), mypy type checking, uv lock check, gitleaks secret scanning.
6. Architecture
Top-level layout:
generic_automation_mcp/
├── assets/
├── docs/
├── scripts/
├── src/autoskillit/ # see below
├── tests/ # mirrors src/ layout; see tests/CLAUDE.md
├── Taskfile.yml
├── install.sh
└── pyproject.tomlsrc/autoskillit/ packages — each has its own CLAUDE.md with file-level detail (except recipes/, skills/, and skills_extended/ — CLAUDE.md files for these are pending):
| Package | IL | Purpose |
./ | — | Package root: __init__, __main__, hook_registry, version, _test_filter, _llm_triage, smoke_utils |
core/ | IL-0 | Foundation — types/, runtime/, paths, IO, feature flags (zero autoskillit imports) |
config/ | IL-1 | AutomationConfig + Dynaconf loader + 24 leaf dataclasses |
pipeline/ | IL-1 | Pipeline state — ToolContext DI, gate, audit log, telemetry |
execution/ | IL-1 | Headless sessions (headless/, process/, merge_queue/, session/), CI/GitHub |
workspace/ | IL-1 | Clone management, worktrees, skill resolution |
planner/ | IL-1 | Progressive resolution planner — phases, assignments, WPs, validation |
recipe/ | IL-2 | Recipe schema, validation, semantic rules/ |
migration/ | IL-2 | Versioned migration engine + failure store |
fleet/ | IL-2 | Campaign dispatch, semaphore, sidecar, liveness, state persistence |
server/ | IL-3 | FastMCP server — tools/, kitchen gating, session-type dispatch |
cli/ | IL-3 | CLI — doctor/, update/, fleet/ subcommands, ui/, session/ management |
hooks/ | — | Claude Code hook scripts — guards/, formatters/ |
recipes/ | — | Bundled recipe YAML + contracts, diagrams, sub-recipes |
skills/ | — | Tier 1 skills: open-kitchen, close-kitchen, sous-chef |
skills_extended/ | — | Tier 2 (interactive) + Tier 3 (pipeline) skills, incl. arch-lens-* (13), exp-lens-* (18), vis-lens-* (12) |
Session diagnostics logs live at ~/.local/share/autoskillit/logs/ (Linux) or ~/Library/Application Support/autoskillit/logs/ (macOS). Override with linux_tracing.log_dir. Session directories are named by Claude Code session UUID when available (parsed from stdout, or discovered from JSONL filename via Channel B (the JSONL stream written by the Claude Code subprocess)). Fallback: no_session_{timestamp}. Query the index: jq 'select(.success == false)' ~/.local/share/autoskillit/logs/sessions.jsonl.
CRITICAL: When using subagents, invoke with CLAUDE_CODE_EXIT_AFTER_STOP_DELAY=120000 to ensure subagents exit when finished.
Import layer vs. orchestration level — disambiguation table:
| Notation | System | Example | Meaning |
| IL-N (single digit) | Import layer level | IL-0, IL-2 | Module's position in the import DAG |
| IL-NNN (three-digit) | Import-linter contract ID | IL-001, IL-009 | Specific pyproject.toml contract |
| L-N | Orchestration level | L0, L3 | Runtime session spawning tier (see docs/orchestration-levels.md) |
7. Session Diagnostics
Path components use hyphens, not underscores. Log directory names and session folder names are hyphen-separated. Never assume underscores when constructing or searching for log paths — hyphen mismatch causes ENOENT (session f9170655 pattern).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

