The core rules
Source: docs/guide.md · v0.1.2
The full table, with the reasons, is in kit/project/AGENTS.md.
- Every piece of work starts as an issue. No todo files.
- Nothing reaches
mainwithout a pull request and green CI. - Only the owner creates tags and releases. A general “merge” or “ship it” does not approve a release.
- A fix task changes code, never tests (
YOKOTEN_FIX_TASK=1). - A worker doesn’t change lead-only files: the rules, agent config, hooks, CI.
- Never skip the commit check. Reading core.hooksPath is fine. A new hooks folder is fine
when its pre-commit is an executable shell script that runs
yokoten checkon a line of its own and stops the commit when the check fails, asyokoten initsets up for husky. Change a setting by name:git config --editand a new config include are refused. So is a shell write to.git/config,.git/commondir,.git/hooksor.githooks: a redirect,cp,mv,tee,sed -i,rm,chmod,ln,install,truncate,patch,awk -i inplace,ed,vim,tar -x -C,unzip -dorfind -delete. A path with a glob that could match them counts too (.git/conf*). So is settingGIT_CONFIG_GLOBAL,GIT_CONFIG_SYSTEM,GIT_CONFIG_COUNT,GIT_CONFIG_KEY_norGIT_CONFIG_VALUE_nfor git or a shell, or for the rest of the line. Reading those files passes, and so domkdir .githooks, files in another repo (/tmp/x/.git), and the lead’sgit checkoutorgit restoreof the committed hook. Usegit -c <name>=<value>for one setting in one command, and your edit tool oryokoten initfor a hook. - No plain force push. Never rebase a shared branch.
- Squash merge. One pull request, one purpose; small polish goes in one batch.
- Review and test the exact commit that merges.
- No folder holds more than 7 entries.
- Nothing in the repo, or in what yokoten prints, points at a person or holds a secret.
- Decisions are written down once and kept. Facts are replaced. Times are UTC.
How to release
Only the owner releases (rule 3). An agent that is stopped from releasing tells the owner, and the owner takes these steps:
- Ask an agent to prepare the release pull request. The
releaseskill writes the changelog and the version. - Read the pull request, approve it, and merge it.
- Create the tag yourself:
git tag vX.Y.Z && git push origin vX.Y.Z. - If the project publishes from CI, approve the publish on the run page (Review deployments).
An agent can push the tag only in a session the owner starts with approval:
YOKOTEN_RELEASE_APPROVAL=1 claude. For another agent, put the same variable before its
command: codex, gemini, agy, or dsh tui --patch .dsh/yokoten.patch.yml. Copilot
CLI uses the Claude Code command. Muse Code and OpenCode are not known to pass the variable
to their hooks, so the owner releases outside them. If Gemini CLI’s strict environment
sanitization is on, the variable is dropped, and the owner releases outside Gemini CLI.