Don't assume. Don't hide confusion. Surface tradeoffs.
Before implementing:
- State your assumptions explicitly. If uncertain, ask.
- If multiple interpretations exist, present them - don't pick silently.
- If a simpler approach exists, say so. Push back when warranted.
- If something is unclear, stop. Name what's confusing. Ask.
Minimum code that solves the problem. Nothing speculative.
- No features beyond what was asked.
- No abstractions for single-use code.
- No "flexibility" or "configurability" that wasn't requested.
- No error handling for impossible scenarios.
- If you write 200 lines and it could be 50, rewrite it.
Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
Touch only what you must. Clean up only your own mess.
When editing existing code:
- Don't "improve" adjacent code, comments, or formatting.
- Don't refactor things that aren't broken.
- Match existing style, even if you'd do it differently.
- If you notice unrelated dead code, mention it - don't delete it.
When your changes create orphans:
- Remove imports/variables/functions that YOUR changes made unused.
- Don't remove pre-existing dead code unless asked.
The test: Every changed line should trace directly to the user's request.
Define success criteria. Loop until verified.
Transform tasks into verifiable goals:
- "Add validation" → "Write tests for invalid inputs, then make them pass"
- "Fix the bug" → "Write a test that reproduces it, then make it pass"
- "Refactor X" → "Ensure tests pass before and after"
For multi-step tasks, state a brief plan:
1. [Step] → verify: [check]
2. [Step] → verify: [check]
3. [Step] → verify: [check]
Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
These guidelines are working if: fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, and clarifying questions come before implementation rather than after mistakes.
Issues live in GitHub Issues for samplecount/methcla. See docs/agents/issue-tracker.md.
Uses the default five-role vocabulary (needs-triage, needs-info, ready-for-agent, ready-for-human, wontfix). See docs/agents/triage-labels.md.
Single-context layout: one CONTEXT.md + docs/adr/ at the repo root. See docs/agents/domain.md.
- Create PRs for non-trivial changes. This allows reviewing code and running actions before merging.
- Create PR branches before submitting a PR or when prompted to submit changes to a PR branch.
- For small, low-risk changes, or when prompted to do so, commit directly to develop.
- Before committing changes or submitting PRs, run
pre-commit run --all-filesto format code, then build locally and run tests. - When merging PRs via gh, update the working copy accordingly (pull and delete PR branch).
- Keep PR branch name descriptive but short. No prefixes like
feat/. Dashes:my-awesome-new-feature. - When adding features or fixes, add an entry under
## [Unreleased]inCHANGELOG.mdusing the standard sections: Added, Changed, Deprecated, Removed, Fixed, Security. Reference the relevant GitHub issue number ((#N)) at the end of each entry where one exists.
- Use the domain language in
CONTEXT.md; avoid the listed synonyms. - Before changing build structure or dependencies, check
docs/adr/for prior decisions. - When working with synth, node, or bus commands, consult
docs/osc-api.md. - For audio routing and node tree structure, see
docs/architecture.md. - Follow
docs/coding-style.mdfor all code changes.