Skip to content
Belief Engines
Esc
↑↓navigate↵open⌘Jpreview
On this page

The harness

One invariant layer, hashed, under every home and every repo. Types and instances stack on top.

be-harness is one repo. Its contents land in two places and never change in either — they change in be-harness, then get carried out.

  be-harness
  ├── home/   ──▶  ~/                    every employee's home on the box
  │                CLAUDE.md AGENTS.md .claude/{settings,agents,commands,skills} .config/be/
  └── repo/   ──▶  be-<type>-template ──▶ be-<type>-<name>
                   .be/  .claude/settings.json  /gm /gn  core agents
                   be-naming  be-harness  .mcp.json  CLAUDE.md  .gitignore
                   .be/MANIFEST ── sha256 of each of the above

Three layers, one hard line

  INVARIANT   be-harness            hashed. Edit → validate fails → push refused
  TYPE        be-<type>-template    be.conf · AGENTS.md · its agents/commands/skills/scripts
  INSTANCE    be-<type>-<name>      the work

sh .be/check.sh reads the manifest and says which files are which. sh .be/scripts/validate.sh runs it first, every time, and the autopush hook runs validate before every push. Drift blocks. be upgrade restores or updates from be-harness and touches nothing else.

be.conf — how a type talks to the harness

Four values. Everything the harness does that varies by type, varies through these:

BE_TYPE=wiki                    # which skill to load next: be-wiki
BE_CONTENT="docs"               # roots autopush + validate watch; empty = off
BE_WORDS_MAX=500
BE_VALIDATE=scripts/validate.sh # the type's extra gate

A wiki watches docs/. A CLI has no content, so autopush is off and its gate checks that every command answers the contract.

settings.json — permission to finish

advisorModel is on in every home and every repo. The allowlist covers the loop — be, git, gh, the scripts — so an agent lands work without stopping to ask. Nothing destructive is on it.

Two hooks: SessionStart prints orientation into context before the first prompt (at home: the map; in a repo: that type’s help). PostToolUse on writes under BE_CONTENT: validate, commit, push.

Home and repo, not a hierarchy

   ~/.claude/                     ~/be-wiki-x/.claude/
   provisioned, user level        vendored, project level
   the core four, /gm /gn /new    core four + writer + reader, /dump …
            └──────── the repo wins on a name clash ────────┘

Both are ours and both are the same core; the repo adds its type. Personal config does not exist on the box — the harness is the config.

Changing it

Edit be-harness, bump VERSION, sh bin/manifest.sh, push. Then be upgrade in each template, and instances follow when their owners run it. A harness change is a commit someone can read.

Last updated on August 29, 2026

Was this page helpful?