AGENTS.md · git:20260905.fe1577d · 2026-09-05 · sha256 64d0e2bd1427f546

AGENTS.md git:20260905.fe1577dA

Immutable. This exact content is served forever at /api/v1/blob/64d0e2bd1427f546.

# Agent Instructions for easy-cheese

This document is for LLMs, agents, and automation tools working in this repository.

## Single Quality Gate: `just check`

**Always run `just check` before declaring work done — before any commit, push, PR open, or hand-off.** Treat green from `just check` as the only signal that a change is shippable.

`just check` autofixes lint (markdown, yaml, python via `ruff`) and runs the full local build: skill frontmatter validation (`validate_skills.py`), shell lint, python + bash test suites, and `mkdocs build --strict`. CI runs `just ci` (same checks, no autofixes).

```bash
just check
```

Do NOT commit or push when `just check` fails. If CI fails, pull the branch locally, run `just check`, commit the autofixes, and push.

### Prerequisites

- [`just`](https://github.com/casey/just) — recipe runner
- [`uv`](https://github.com/astral-sh/uv) — `lint-py-fix` invokes `uvx ruff` (no global ruff install needed)
- `yamllint`, `yamlfmt`, `markdownlint-cli2`, `shellcheck`, `bats` — see README for install hints

## Skills in this repo

This is a skills-only collection following the [Agent Skills spec](https://agentskills.io/specification). Every change either adds, edits, or supports a skill under `skills/<name>/`.

## Skill Python bundle doctrine

This is the target contract. Existing violations are migration work; do not expand
them while enforcement is implemented separately.

- A skill that executes Python ships exactly
  `skills/<skill>/scripts/<skill>.pyz`; a skill with no Python ships no
  `.pyz`. Skill prose invokes only its own archive—never loose source,
  `common.pyz`, repository automation, or another skill's bundle.
- Runtime Python lives under `src/`. Tests remain under `tests/`; repository
  build, release, generation, and maintenance programs may live under
  `scripts/`.
- Published schemas live in `src/easy_cheese_schemas/`. All non-published
  runtime code lives under `src/easy_cheese/`, split between
  `skills/<python_skill_name>/` and `shared/`. Skill slugs remain kebab-case;
  Python package segments use underscores.
- Bundles may contain Python modules, bytecode, and immutable package resources.
  Dependencies must be pure Python and zip-importable. Native extensions,
  platform-specific libraries, required external executables, runtime
  installation/downloads, and caller-managed extraction are prohibited. Shiv's
  transparent cache extraction is part of the archive runtime contract.
- Each bundle contains its entrypoints and metadata-resolved runtime closure:
  one skill distribution, the cohesive internal shared distribution, schemas,
  and approved pure-Python dependencies. Other skill distributions are excluded.
- Checked-in `.pyz` files are generated deployment artifacts, never source of
  truth. Python source never lives under `skills/`.

The durable rationale and migration boundary live in
[the skill Python bundle doctrine](.hallouminate/wiki/architecture/skill-python-bundle-doctrine.md).

### Workflow skills (the cheese pipeline)

| Skill | Purpose |
|---|---|
| `/cheese` | Unified entry — classifies input and routes to the right downstream skill |
| `/briesearch` | External research router (Context7, Tavily, gh, local code) |
| `/mold` | Iterative dialogue to converge a fuzzy idea into an approved spec, with ceremony tiered (quick / light / full) to the size of the job |
| `/culture` | No-code thinking partner that records the session's ideas, decisions, and info to the durable knowledge lane |
| `/pasteurize` | Hard-bug diagnosis — feedback-loop-first investigation, regression test, minimal fix, then handoff to `/cook` |
| `/cook` | Single implementation orchestrator: TDD-disciplined single-coder execution or fresh-context fan-out of an approved curd block |
| `/press` | Adversarial test hardening after `/cook` |
| `/age` | Ten-dimension code review producing a severity-grouped findings report |
| `/affinage` | Triages a PR's review comments and CI failures through the `/age` lens, routes fixes to `/cure`, posts replies |
| `/cure` | Applies selected `/age` findings as focused fixes |
| `/plate` | Final durable-artifact gate, safe commit transaction, and ordinary-or-stacked PR publication |
| `/hard-cheese` | Metacognitive vibecheck gate before sharing for review (standalone or via `--hard` propagation) |
| `/ultracook` | Compatibility redirect to `/cook`; retained scripts, references, and manifest paths remain `/cook` fan-path internals |
| `/melt` | Resolves merge / rebase / cherry-pick conflicts via the structural-merge cascade |
| `/wheypoint` | Checkpoints a mid-task conversation into a durable handoff at `.cheese/notes/<slug>.md`, resumable via `/cheese --continue` |

### Source-code routing

Workflow skills call source-code backends directly according to the shared
[`code-intelligence-routing.md`](skills/cheese/references/code-intelligence-routing.md)
contract.

See `README.md` for the full workflow and the suggested skill ordering.

## Durable memory

This repo keeps a durable-knowledge wiki at `.hallouminate/wiki/`
(git-tracked, corpus `repo:easy-cheese:wiki`), separate from the
transient per-task scratch under `.cheese/` (gitignored). **Recommended
default:** after a change lands on `main` that altered durable
knowledge — architecture, protocols, conventions, or a "why this design
not that one" decision — query the wiki and update it. Routine fixes and
per-task output stay in `.cheese/`.

This is a recommended default, not a hard gate: updating the wiki
requires the [hallouminate](https://github.com/paulnsorensen/hallouminate)
MCP server. When it is unavailable, skip the update — do not hand-edit
the LanceDB-indexed tree. See `.hallouminate/wiki/wiki-conventions.md`
for the durable-vs-transient boundary and the authoring loop.

## Development notes

- Python validators in `.github/scripts/` allow only `pyyaml` and `pytest` as third-party deps — see `.github/instructions/python.instructions.md`.
- Shell scripts and bats tests follow the rules in `.github/instructions/shell.instructions.md`.
- Source-code work follows `skills/cheese/references/code-intelligence-routing.md`: route by question or edit shape, preserve search → fresh bounded read → stale-safe write sequencing, prefer semantic and anchored backends, and report precision loss when only weaker fallbacks exist. Optional integrations — hallouminate (repo-wiki grounding for `/mold` and `/age`) and milknado (mikado task-graph backend for `/cook`'s fan pathway) — are wired in as optional plugins per `skills/cheese/references/optional-plugins.md`: they degrade gracefully when absent and never block a skill run.
- SKILL.md files must pass `validate_skills.py` (YAML frontmatter validation).
- Conventional Commits format for all commits and PR titles (enforced by `validate.yml` for PRs).
- Cheese / Dune / Mad Max / LOTR / Princess Bride flavor is welcome in user-facing docs and `SKILL.md` files. Keep commit messages and YAML frontmatter neutral.