skeleton: plugin layout + docs, skill/agent migration deferred to iter 1
Establishes the repository structure for the skills plugin: - README + INSTALL describing the two-layer split (plugin mechanics vs per-project profile) - docs/design, profile-schema, pipeline, agent-template covering the universal discipline constants and the profile slot model - templates/project-profile.yml as a copy-and-fill starting point - templates/CLAUDE.md.fragment with the baseline orchestrator rules a project can import - install.sh / uninstall.sh wiring skills/ + agents/ into ~/.claude/ via idempotent symlinks - skills/ and agents/ directories empty except for migration READMEs; the actual SKILL bodies and agent files migrate from ~/dev/ailang/skills/ in the next iteration. No skill or agent runs yet — this commit only stands up the structure and documents the substitution model.
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# Universal discipline fragment
|
||||
#
|
||||
# Copy these sections into your project's CLAUDE.md to import the
|
||||
# baseline rules the skills plugin assumes. Edit freely afterwards —
|
||||
# this is a starting point, not a binding template.
|
||||
|
||||
## Roles
|
||||
|
||||
I am the **orchestrator** of this project, not the implementer.
|
||||
The agents under the skills plugin are my workers. I direct
|
||||
them, review their output, and integrate it. I do not silently
|
||||
take over their job because it feels faster — that erodes the
|
||||
discipline the agents are designed to enforce.
|
||||
|
||||
### What this means in practice
|
||||
|
||||
- **Plan, design, decide** — myself. Architectural choices,
|
||||
scope, invariants, commit bodies, and the contents of the
|
||||
design ledger are my work product.
|
||||
- **Implement, refactor, write tests, diagnose bugs** — by
|
||||
default, delegated. Implementer for code changes that follow
|
||||
a fixed design, tester for E2E coverage, debugger for
|
||||
diagnostics, architect for read-only drift review.
|
||||
- **Trivial mechanical edits** (one-line fixes, doc typos,
|
||||
rename across N files) — fine to do directly. Anything that
|
||||
requires reading large surface area or making judgement
|
||||
calls should go to an agent.
|
||||
- **Verify the work** — agent reports describe intent, not
|
||||
outcome. After every agent run I check the diff and the test
|
||||
output myself before committing.
|
||||
|
||||
## Commit discipline and main-branch sanctity
|
||||
|
||||
Two rules govern who touches git history and how:
|
||||
|
||||
- **Only the orchestrator commits.** No skill agent runs
|
||||
`git commit`. Every agent writes its output into the working
|
||||
tree as unstaged changes. I inspect the result, decide commit
|
||||
shape, and commit. Per-task or per-phase commits are not a
|
||||
goal in themselves.
|
||||
- **main HEAD is sacrosanct.** Nobody (including me) runs
|
||||
`git reset` or `git revert` on main. main moves forward only
|
||||
via my commits. If a dispatched agent's output is wrong, I
|
||||
discard it via `git checkout -- <paths>` or `git stash` on
|
||||
the working tree — main HEAD does not move. If something
|
||||
wrong does land on main, the remedy is a forward-fix commit,
|
||||
never a rewind.
|
||||
|
||||
## Design rationale ≠ implementation effort
|
||||
|
||||
When picking between design options, the rationale must come
|
||||
from the substance of the choice: semantics, structural fit,
|
||||
what the design permits vs forbids, compositional clarity,
|
||||
future-proofing. **Implementation effort is not a rationale.**
|
||||
"Approach A would touch ~250 sites, approach B touches 1" is an
|
||||
observation about the current state of the code, not a reason
|
||||
for either choice.
|
||||
|
||||
Effort is at most a tiebreaker after substantive reasons line up
|
||||
equally, and even then it should be named as a tiebreaker, not
|
||||
as the primary reason.
|
||||
|
||||
## Bug fixes — TDD, always
|
||||
|
||||
Bug fixes are RED-first, autonomous, no orchestrator gate. The
|
||||
debug skill is mandatory for any observable misbehaviour
|
||||
(failing test, segfault, wrong stdout, panic). See the debug
|
||||
SKILL.md and debugger agent for the Iron Law and four-phase
|
||||
process.
|
||||
@@ -0,0 +1,55 @@
|
||||
# Project profile for the skills plugin.
|
||||
#
|
||||
# Drop a copy of this file at <project-root>/.claude/dev-cycle-profile.yml
|
||||
# and edit. See ~/dev/skills/docs/profile-schema.md for the full schema
|
||||
# and per-key documentation.
|
||||
|
||||
paths:
|
||||
spec_dir: docs/specs
|
||||
plan_dir: docs/plans
|
||||
# design_ledger: design/INDEX.md # optional
|
||||
# design_contracts: design/contracts # optional
|
||||
# design_models: design/models # optional
|
||||
code_roots: [src]
|
||||
# bench_dir: bench # optional
|
||||
|
||||
naming:
|
||||
counter_dirs: []
|
||||
policy: flat # stable_per_directory_4digit | date_prefix | flat
|
||||
slug_separator: "-"
|
||||
|
||||
commands:
|
||||
build: "" # REQUIRED — e.g. "cargo build" or "npm run build"
|
||||
test: "" # REQUIRED — e.g. "cargo test" or "npm test"
|
||||
# lint: "" # optional
|
||||
regression: [] # list of shell commands run by audit; non-zero exit = regress
|
||||
|
||||
vocabulary:
|
||||
cycle: cycle # what a top-level work unit is called
|
||||
subcycle: iteration # what a sub-unit is called
|
||||
ledger_entry: contract # what one design-ledger entry is called
|
||||
|
||||
standing_reading:
|
||||
always:
|
||||
- CLAUDE.md
|
||||
- "git log -10 --format=full"
|
||||
by_role:
|
||||
# architect: [design/contracts]
|
||||
# debugger: ["git log -5 --format=full"]
|
||||
|
||||
git:
|
||||
main_sacrosanct: true
|
||||
only_orchestrator_commits: true
|
||||
protected_branches: [main]
|
||||
issue_tracker:
|
||||
kind: none # gitea | github | linear | none
|
||||
close_marker: "closes #N"
|
||||
|
||||
pipeline:
|
||||
brainstorm: { gates: [planner] }
|
||||
planner: { gates: [implement] }
|
||||
implement: {}
|
||||
audit: { mandatory_at: cycle_close }
|
||||
debug: { trigger: bug, red_first: true }
|
||||
# fieldtest: { boss_only: true, when: surface_touch }
|
||||
# docwriter: { boss_only: true, when: api_stable_across_n_cycles }
|
||||
Reference in New Issue
Block a user