Naming
be-<type>-<name>. The name is the routing table for every repo, folder, page and command.
Every thing Belief Engines makes is named the same way. The name says whose it is, what kind it is, and which one. Nothing else carries that information — not a parent folder, not a registry, not a README.
be - type - name
│ │ │
│ │ └── which one kebab-case, 1-3 words
│ └─────────── what kind it is one word, from the list
└──────────────────── ours always "be"
Why it matters
human says "idea about zoom transcripts"
Claude runs be wiki new zoom-etl
CLI creates github.com/beliefengines/be-wiki-zoom-etl -> ~/be-wiki-zoom-etl
teammate's Claude be wiki pull zoom-etl
any agent reads ~/be-wiki-zoom-etl/docs/ knows the shape on sight
it graduates to be-internal/docs/be-pipeline-zoom-etl/
Home on the dev box is flat: every folder under ~ is be-<type>-<name>
and ls ~ is the whole inventory.
One name, five places, zero lookups. A cold agent or a new hire sorts by type and finds everything of that kind. That is what keeps flat survivable.
Types
| Type | Is a | Lives as |
|---|---|---|
wiki |
one person’s idea, being flushed out | its own repo, from be-wiki-template |
customer |
a client engagement | be-internal/docs/customers/ |
agent |
an agent we are specifying | area in be-internal |
pipeline |
a data flow, source to sink | area in be-internal + eng repo |
app |
something with a UI | eng repo |
infra |
AWS, Vercel, DNS, the plumbing | eng repo |
flow |
a multi-step process | area or eng repo |
cli |
a command-line tool | eng repo |
podcast |
an audio project | eng repo |
harness |
the invariant layer under everything | singleton be-harness |
Need a type that is not here? Add the row first, in this page, then use it. A type is a shared word — inventing one in a repo name creates a category of one.
Singletons
When there is exactly one of a type and there will only ever be one, the
name is dropped: be-internal, be-website, be-cli, be-harness. The test is could a
second one exist? If yes, it gets a name now, not later.
Where the pattern repeats
The same three parts name smaller things, so the type is visible at every level:
repo be-wiki-zoom-etl
area docs/be-pipeline-zoom-etl/
page docs/.../decision-storage-layer.md <kind>-<what>.md
command be wiki new zoom-etl be <type> <verb> <name>
agent .claude/agents/historian.md one word, a role
Page kinds are fixed: idea question research decision spec.
index.md is the only page without a kind prefix.
Rules
- Lowercase, hyphens only. No underscores, no camelCase, no dots.
- Type is one word. Name is one to three.
- Never nest a type inside a type:
be-wiki-agent-wolfis a wiki namedagent-wolf, and that is fine — but it is a wiki, not an agent. - Order is fixed.
be-template-appreads as “a template called app”;be-app-templatereads as “the app that is a template”. The second is right. Rename candidates go in the table below, not in place.
Rename candidates
| Now | Should be | Why |
|---|---|---|
be-template-app |
be-app-template |
type before name |
be-pulpcrew |
be-<type>-pulpcrew |
missing type |
be-vincent |
be-<type>-vincent |
missing type |