Field OS

Check it before you say it.

Five steps between an idea and a message. Each step gets a stamp: go or stop. If any step says stop, you fix it before anyone hears it.

It checks that every fact says where it came from, that nothing new sneaks in along the way, and that someone really pushed back. It can't tell you whether a claim is true. That part is still yours.

  1. 1Find the factsWhen you need to know what's true before building on it.analysis-by-arcs3 checks, all visibleGo
  2. 2Check the factsWhen you need to tell a solid fact from a shaky one.assessment-by-arcs3 checks, all visibleGo
  3. 3Poke holesWhen you need to find the weak spot before someone else does.evaluation-by-arcs4 checks, all visibleGo
  4. 4Make it shortWhen you need it short without adding anything unchecked.synthesis-by-arcs5 checks, all visibleStop
  5. 5Write the noteWhen you need a note that's ready for a person to send.recapitulation-by-arcs4 checks, all visibleReady for a person

Example run: steps 1 to 3 said go. Step 4 said stop, because the short version added "trusted by 50+ teams" and nobody had checked it.

Why bother

Nothing sneaks in

Each step can only use what the step before it approved. A fact that skipped a check gets caught.

No yes-men

If every reviewer just agrees, the check fails. Someone has to have tried to break it.

A person hits send

The last step can only say "ready." It never sends anything for you.

Three questions

Is this the AI's chain of thought?
No. It checks the finished work, not the thinking. Each step saves a file you can open later.
What do I need to run it?
Just Python. Nothing to install. It runs in a terminal, in code, in GitHub, or before each commit.
Who decides the parts a machine can't?
A person. Each step has a short scorecard. The tool leaves it blank for you.

Try it on your own work

Pick a step, paste your work, press Check it. It runs in this page. Nothing you paste is uploaded.

Press Check it to see the stamp. Start with "Load a broken one" to watch a check catch it.

Inside each step

Pick a step to see its checks and copy its code. Step 4 is showing because that's where the example stopped.

4Make it shortSynthesis by ARCSStop

Machine checks

Any one of these fails, the step says stop.

  • No new marked facts snuck in"Trusted by 50+ teams" was never checkedfailed
  • Required fixes were madethe 40-customer number still looks certainfailed
  • Writing has no fillercleanpassed
  • No long dashes0passed
  • Hidden from search until readyyespassed

Person checks

Scored 0 to 2 by a person. The tool never scores these itself.

  • Plain words?
  • Clear structure?
  • Easy rhythm?
  • Specific, not vague?
  • About five times shorter?

Copy it

tools/arcs-verb-eval/arcs-verb-eval synthesis surface.html --upstream prints/evaluation.json --out prints/synthesis.json

For builders

All five steps as one GitHub workflow
# .github/workflows/check-before-you-say-it.yml
name: check-before-you-say-it
on: [pull_request]
jobs:
  five-steps:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - name: Self-test (the checks check themselves)
        run: tools/arcs-verb-eval/arcs-verb-eval --self-test
      - name: All five steps
        run: tools/arcs-verb-eval/arcs-verb-eval pipeline --config arc.json
      - name: Report
        if: always()
        run: |
          tools/arcs-verb-eval/arcs-verb-eval export prints --format md >> "$GITHUB_STEP_SUMMARY"
          tools/arcs-verb-eval/arcs-verb-eval export prints --format junit --out prints/junit.xml
      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: five-step-prints
          path: prints/
What each step saves

One format for all five. The next step reads it.

{
  "verb": "synthesis",
  "fate": "hold",
  "upstream": "evaluation.json#sha256:9f1c",
  "gates": [
    {
      "id": "no-new-claims",
      "ok": false,
      "evidence": "line 212"
    }
  ],
  "rubric": [
    {
      "row": "D-specificity",
      "score": 2,
      "judge": "human"
    }
  ],
  "sycophancy": {
    "agreement": 4,
    "dissent": 3,
    "verdict": "OK",
    "blocking": false
  }
}