Claude Code is very good at a task. It is not, by default, good at everything you are running: several goals, a dozen projects, a budget, and a pile of decisions nobody is making.
Left alone, each session starts from zero. Task lists rot. Decisions pile up. "Progress" becomes a feeling instead of a number.
This is the structure that fixed it. It has run a real multi-project portfolio every day for six months. It is a folder layout and a handful of Markdown files, nothing else.
The shape: three tiers
Portfolio/
├── CLAUDE.md SCOREBOARD.md ← Tier 1: the whole plan, every target
├── 2.1-Goal-Name/ CLAUDE.md + SCOREBOARD.md ← Tier 2: a thin monitor per goal
│ └── 3.1.1-Project-Name/ CLAUDE · ROADMAP · TASKS · PROGRESS · DECISIONS ← Tier 3: where work runs
Measure at the top, work at the bottom.
- Tier 1 holds every target and the priority order.
- Tier 2 is a thin monitor per goal: the target, which projects feed it, how the number is measured.
- Tier 3 is where work actually happens.
The rule that keeps it from rotting: task lists live only at Tier 3. The moment a task list appears at Tier 1 or 2, two places claim the same work and both drift.
The session flow
Every session, Claude does the same thing:
- Read the master
CLAUDE.md. - Read the Tier 1 scoreboard, then every Tier 2 scoreboard. Target against actual.
- For each active project in priority order: read
DECISIONS.mdandTASKS.md, do every unblocked task, updatePROGRESS.md, list what needs you.
Top-down to load context. Bottom-up to do work. The order matters. A Claude that reads scoreboards before tasks optimises for the number, not for the to-do list.
Five files per project, one writer each
| File | Who writes | Job |
|---|---|---|
CLAUDE.md |
Claude, with you | project context, runbook, rules |
ROADMAP.md |
you only | milestones, each with an exit test |
TASKS.md |
Claude | working list; done items move to Done, never deleted |
PROGRESS.md |
Claude | append-only session log |
DECISIONS.md |
you, Claude as scribe | your directives, verbatim, signed |
Why five files and not one: each has one writer and one job. A file with two writers becomes a negotiation.
Three rules that carry the whole thing
1. The scribe rule. Claude writes a decision entry only when you state a directive in the session, in your words. Never on inferred intent. This prevents the most expensive failure: Claude quietly making a judgment call, then treating its own note as your authority next session.
2. Flag, don't block. Anything only you can do (an account, an API key, a payment, an approval) goes under ## CEO Actions Needed. Claude writes it down and keeps going on everything else. A session never halts waiting for you.
3. Decide what can be decided. Routine technical choices: Claude decides. Anything that commits money, time or public credibility, or touches your values: Claude surfaces it as a yes/no question with a default and one clause of why. Never an open question. Open questions are why decisions pile up.
Scoreboards
Every row has the same five columns:
target · current actual · delta · as-of · source
Start with manual entry. Keep the source column from day one. It is what lets a data feed replace a manual field later without restructuring the file.
Troubleshooting discipline
When something fails, before Claude recommends any fix:
- Which layer failed? Trigger, runtime, dependency, config, network, app logic, data.
- Three hypotheses at that layer, including the boring ones.
- The cheapest 30-second test that tells them apart.
- Stop. Wait for the result before proposing a fix that costs more than the test.
One observation is a hypothesis, not a verdict. Most root causes are mundane.
Try it
The skeleton is free and MIT licensed:
github.com/backshift-works/portfolio-os
Copy it into a folder, fill in the {{fields}}, open Claude Code and say: "Read CLAUDE.md and run the session flow."
If you want the operating layer on top (the full autonomy framework, the capital-flow gate, the weekly decision card that turns every pending decision into a yes/no you can clear from your phone, and the prompt pattern for scheduled runs that never stall on a permission prompt), that is the Portfolio OS Kit.
Clock off. The work keeps going.
Top comments (0)