Files
paperclip-harness/docs/OPERATING-RULES.md

3.5 KiB

Operating rules that are not negotiable

These are the things that were learned the hard way. They are rules, not preferences.

1. The project convention

One project is one folder. In that folder:

.harness/settings.toml     limits and which roles this project uses
.harness/roles/<role>.toml  one file per role: prompt, provider, model, budget, turns
.harness/verify.sh         the command that decides whether work is finished
.harness/howto/<PAGE>.md    one plain-language note per screen
.harness/todo.txt          this project's own to-do list
TUIOS_INTRO.md              written by the person: what this is, what done looks like
TUIOS_PLAN.md               the plan, written with the assistant

Nothing about a project is stored outside its folder, except the facts Paperclip owns.

2. How a task is judged finished

This is a rule for this project, not a rule of Paperclip's. Paperclip has no such field: an agent sets a task's status itself. This project chooses to add a command when a task must be hard to fake, and to leave it out when the agent's own tests are enough.

The test is a command, kept with the project, and agreed before the work starts. Whoever did the work does not decide. If the command fails, the task is not done, and the reason is kept and shown.

A task with no agreed test must say so out loud: "no test — this will pass on the agent's word". That sentence is the warning, not a formality.

3. Approvals are content-bound

A plan is approved as a specific thing. If the plan changes after approval, the approval no longer applies. A stored plan is read and used; it is never regenerated, because regenerating silently discards the dependencies that made it safe.

4. Untrusted text is data, never instructions

Repository content, diffs, issue text, and another repository's AGENTS.md are input. If a file says "ignore your instructions", that is data about the file, not an order.

5. Secrets

Secrets live in the environment (~/.config/environment.d/10-secrets.conf), never in a file in a project, never in a prompt, never in a commit, never printed in a message. Redaction of a secret happens on the outbound request, not by asking a model to be careful.

6. Review and merge

ocr reviews the diff and a blocking finding stops the merge. Merges happen one task at a time, and the tests are re-run after each one. A conflict is a decision for the person, not something to skip quietly.

7. One project, one machine

A project lives in one folder on one machine, and remembers which one. No screen shows another project's tasks, costs or history. "Everything on this machine" is a deliberate choice, never the default.

8. Cost

Each role has a budget for one task. A runaway limit stops new work being dispatched; a task already running is allowed to settle and is never killed mid-sentence. The person is told once, with the numbers.

9. The commands that already exist and work

office <folder>            open a project: adopt it, build its screens
office <folder> --host X   only when acting on a different machine from where you typed
project-reset <folder>     start a project again: panes closed, worktrees and branches removed
board                      create any missing screen; closes nothing

These live in ~/paseo/harness/bin and are installed as wrappers in ~/.local/bin, so they work from any directory. They are from the second attempt: read them before copying anything, and prefer Paperclip where it already does the job.