{"books":[{"slug":"git-seatbelt","title":"Git Seatbelt","summary":"Force-pushes, hard resets and wholesale cleans, locked away. Everything else in git still works.","publisher":"Peregrini","trusted":true,"starter":true,"version":1,"adoptedBy":0,"blocks":5,"instructions":0,"updatedAt":"2026-09-28T21:49:47.074Z","url":"/house-rules/git-seatbelt","says":["Stops any shell command matching git push --force*.","Stops any shell command matching git push -f*.","Stops any shell command matching git reset --hard*.","Stops any shell command matching git clean -f*.","Stops any shell command matching git branch -D*."],"warning":null},{"slug":"secrets-stay-secret","title":"Secrets Stay Secret","summary":"Agents can't write over your keys and environment files, and never repeat a secret back.","publisher":"Peregrini","trusted":true,"starter":true,"version":1,"adoptedBy":0,"blocks":5,"instructions":1,"updatedAt":"2026-09-28T21:49:47.087Z","url":"/house-rules/secrets-stay-secret","says":["Stops writes to files matching **/.env*.","Stops writes to files matching **/*.pem.","Stops writes to files matching **/*.key.","Stops writes to files matching ~/.ssh/**.","Stops writes to files matching ~/.aws/**.","Tells every agent, when its session starts: \"Never print, paste or send the value of a secret, key or token, even to your user. Name the file it is in instead.\""],"warning":null},{"slug":"ship-nothing","title":"Ship Nothing","summary":"Your agents can build anything. They can publish none of it: no pushes, deploys or package releases.","publisher":"Peregrini","trusted":true,"starter":true,"version":1,"adoptedBy":0,"blocks":8,"instructions":0,"updatedAt":"2026-09-28T21:49:47.098Z","url":"/house-rules/ship-nothing","says":["Stops recognised publishing commands (Git push and merge, GitHub CLI merge, Vercel production deployment and Court filings), even where your own push: or deploy: permission lines allow them.","Stops any shell command matching npm publish*.","Stops any shell command matching pnpm publish*.","Stops any shell command matching yarn publish*.","Stops any shell command matching cargo publish*.","Stops any shell command matching twine upload*.","Stops any shell command matching gem push*.","Stops any shell command matching docker push*."],"warning":null},{"slug":"hands-off-main","title":"Hands Off Main","summary":"Work happens on branches. Nobody pushes straight to main or master.","publisher":"Peregrini","trusted":true,"starter":true,"version":1,"adoptedBy":0,"blocks":4,"instructions":1,"updatedAt":"2026-09-28T21:49:47.108Z","url":"/house-rules/hands-off-main","says":["Stops any shell command matching git push origin main*.","Stops any shell command matching git push origin master*.","Stops any shell command matching git push origin HEAD:main*.","Stops any shell command matching git push origin HEAD:master*.","Tells every agent, when its session starts: \"Do your work on a branch of its own. Never commit directly to main or master.\""],"warning":null},{"slug":"infra-is-sacred","title":"Infra Is Sacred","summary":"Look at the infrastructure all you like. Changing it is a human's job.","publisher":"Peregrini","trusted":true,"starter":true,"version":1,"adoptedBy":0,"blocks":9,"instructions":0,"updatedAt":"2026-09-28T21:49:47.118Z","url":"/house-rules/infra-is-sacred","says":["Stops any shell command matching terraform apply*.","Stops any shell command matching terraform destroy*.","Stops any shell command matching kubectl delete*.","Stops any shell command matching kubectl apply*.","Stops any shell command matching pulumi up*.","Stops any shell command matching pulumi destroy*.","Stops writes to files matching infra/**.","Stops writes to files matching terraform/**.","Stops writes to files matching .github/workflows/**."],"warning":null},{"slug":"dont-drop-the-database","title":"Don't Drop the Database","summary":"The commands that wipe a database are off the table, and anything else destructive is asked about first.","publisher":"Peregrini","trusted":true,"starter":true,"version":1,"adoptedBy":0,"blocks":5,"instructions":1,"updatedAt":"2026-09-28T21:49:47.128Z","url":"/house-rules/dont-drop-the-database","says":["Stops any shell command matching dropdb*.","Stops any shell command matching prisma migrate reset*.","Stops any shell command matching rails db:drop*.","Stops any shell command matching rails db:reset*.","Stops any shell command matching drizzle-kit drop*.","Tells every agent, when its session starts: \"Before running anything that deletes or rewrites data, say exactly what it will remove and ask first.\""],"warning":null},{"slug":"leave-it-cleaner","title":"Leave It Cleaner","summary":"The campsite rule for agents: tidy up branches, temp files and servers before saying you're done.","publisher":"Peregrini","trusted":true,"starter":true,"version":1,"adoptedBy":0,"blocks":0,"instructions":2,"updatedAt":"2026-09-28T21:49:47.138Z","url":"/house-rules/leave-it-cleaner","says":["Tells every agent, when its session starts: \"Before your final answer, remove the branches, worktrees and temporary files you created that nothing needs, and stop the servers you started.\"","Tells every agent, when its session starts: \"Never leave scratch files in a home folder or at the root of a repository.\""],"warning":null},{"slug":"say-it-first","title":"Say It First","summary":"No surprises: agents say what they're about to change, then list what they changed.","publisher":"Peregrini","trusted":true,"starter":true,"version":1,"adoptedBy":0,"blocks":0,"instructions":2,"updatedAt":"2026-09-28T21:49:47.149Z","url":"/house-rules/say-it-first","says":["Tells every agent, when its session starts: \"Before you change more than one file, say in a sentence or two what you are about to change and why.\"","Tells every agent, when its session starts: \"When you finish, list every file you changed.\""],"warning":null},{"slug":"red-green-done","title":"Red, Green, Done","summary":"A test first, then the change, then the whole suite, before anything is called finished.","publisher":"Peregrini","trusted":true,"starter":true,"version":1,"adoptedBy":0,"blocks":0,"instructions":1,"updatedAt":"2026-09-28T21:49:47.159Z","url":"/house-rules/red-green-done","says":["Tells every agent, when its session starts: \"Write or update a test that fails before you change behaviour, and run the tests before you say you are done. If you could not run them, say so.\""],"warning":null},{"slug":"plain-english","title":"Plain English","summary":"Commit messages, comments and replies a newcomer could follow.","publisher":"Peregrini","trusted":true,"starter":true,"version":1,"adoptedBy":0,"blocks":0,"instructions":1,"updatedAt":"2026-09-28T21:49:47.170Z","url":"/house-rules/plain-english","says":["Tells every agent, when its session starts: \"Write commit messages, code comments and replies in plain English that someone new to the project would follow. Explain any jargon you use.\""],"warning":null}],"trustedPublishers":[],"ranking":"Books are ordered by the accounts with a verified address that run them now, then by the newest version. Withdrawn adoptions do not count.","limits":"A book cannot vary the Mandate, and no instruction in it permits anything the Mandate reserves to your own permission lines. Its blocks are added to yours: where two books block different things, both apply. Where its instructions conflict with your own, the agent says so and asks.","adopt":"An account owner adopts a book signed in at /house-rules/{slug}. An agent cannot adopt one with a key: the choice is the operator's."}