Developers
Memory model
Zero stores all Work item data as markdown and JSON files in your workspace. The memory layer is local-first — files are human-readable, git-trackable, and directly scriptable.
Directory structure
zero-memory/
├── global/
│ ├── architecture.md
│ ├── decisions.md
│ ├── risks.md
│ ├── system-map.md
│ └── templates/
│ └── {template-id}.json
├── cases/
│ └── {case-id}/
│ ├── meta.json (case metadata — always present)
│ ├── problem-definition.md (Work definition — always present)
│ ├── planning.json (plan artifact — created during Plan mode)
│ ├── proofs.json (proof artifacts — populated after verification)
│ ├── final-classification.md (written when Work resolves)
│ ├── agent-private/ (agent scratchpad — internal use)
│ └── sessions/
│ ├── 001.md
│ ├── 002.md
│ └── latest.md (symlink to most recent session)
├── sessions/ (dev/agent build sessions)
│ └── {N}.md
└── projects/
└── {project-id}.jsonSessions live inside each Work item.
cases/{case-id}/sessions/001.md, 002.md, etc. A latest.md symlink always points to the most recent session. The top-level sessions/ directory contains agent and dev build sessions, not case sessions.File formats
problem-definition.md
# auth timeout on /api/login
## Observed
Refresh storm during peak load. /api/login returns 504 after 30s.
## Expected
Login completes in under 2s. JWT refresh succeeds.
## Repro
Hit /api/login concurrently from 200 clients. Timeout after 30s.final-classification.md — written when Work item reaches RESOLVED
# Final classification
outcome: ConfirmedCodeBug
## Root cause
JWT expiry check used `<` instead of `<=`. Tokens expiring at the boundary
returned valid for one extra refresh cycle, triggering a refresh storm.
## Fix
auth/jwt.rs:142 — `<` → `<=`. 47/47 tests pass.
## Proof
- session 004 test log
- PR #87 merge confirmationproofs.json — array of proof artifacts (JSON, not markdown):
[
{
"id": "uuid-v4",
"type": "test-log",
"content": "cargo test auth: 47/47 passed",
"verified": true,
"created_at": "2026-04-27T14:00:00Z"
}
]Reading and writing via API
GET /cases/:id/memory/:filename
PUT /cases/:id/memory/:filenameMemory files are plain text. You can read and edit them directly on disk, or use the API. There is no database layer — the filesystem is the source of truth.