Three claims. The receipts are below.
Before the diagrams and the code: here is what Loam actually does, in one line each. Skip to any section for the implementation behind it.
Trace each major claim to a running behavior, an implementation guarantee, a dated artifact, and the boundary where the evidence stops.
Before the diagrams and the code: here is what Loam actually does, in one line each. Skip to any section for the implementation behind it.
Learning-active sessions can add selected, source-tagged decisions, corrections, findings, and open work to the account-scoped record. Later sessions receive a prioritized working set; older entries remain available through recall.
Code Review can write findings and anchors to a ledger. In Loam’s dated internal case, later passes read the existing ledger and did not re-derive the original findings; results vary with the delta and review scope.
Build Mode dispatches a milestone as an isolated subagent, runs it against your real files, and chains to the next on completion — or calls your phone when it hits a blocker.
Redacted samples of the review ledger, remediation pass, memory compression, and security claim map are available in the Loam Proof Packet.
Learning-active sessions can add selected decisions, corrections, and open work to the account-scoped record for later recall.
Lane one — memory consolidation. Older indexed items become era summaries and durable lessons so ordinary sessions stay efficient. The source rows are retained, not replaced.
Lane two — identity synthesis. A separate deep read of the raw lived record produces a compact session reflection and a longer public portrait.
Why they are kept apart. Consolidation is about staying usable. Identity synthesis is about staying honest. Collapsing them into one 'synthesis' would let a summary of a summary become the team's self-description.
Coverage is the other half. Splitting the work into two lanes only helps if the lane that produces identity can prove it read everything it claimed to read.
Pin, then read. The input set is fixed to a cutoff and every raw entry is identified before anything is read.
Partition in code. The roster is divided into bounded groups by code, not by the model.
Require receipts. Each group accounts for the entries it was handed, and the totals must reconcile to the pinned roster or the read runs again.
Cite and verify. Every factual claim cites raw entries. An independent cold reader tries to refute them. One correction cycle is allowed.
Fail closed. An unsupported portrait is rejected and the last verified reflection stays live.
Voice callbacks with dynamic context generation. The team calls your phone with session-aware openers — not scripts.
Autonomous multi-milestone project execution. Subagent-per-milestone dispatch with fresh context windows.
Professional output generation — SOWs, SOPs, frameworks. Template-driven with brand injection.
Not cherry-picked examples. Actual patterns from the running system that make persistent memory work.
# Learning-active sessions can append selected entries
# with timestamped source tracking
timestamp = datetime.now(timezone.utc)
separator = f"\n\n--- {source} ({timestamp}) ---\n"
if memory:
existing = memory.content.strip()
memory.content = existing + separator + new_content
memory.updated_at = datetime.now(timezone.utc)
else:
memory = PersonaMemory(
user_id=user_id,
persona_key=persona_key,
content=new_content,
)
# Call context adapts to WHY the call is happening
def get_trigger_context(trigger_type, call_topic=None):
if trigger_type == "manual":
if call_topic:
return (
f'The user asked you to call about '
f'a SPECIFIC topic: "{call_topic}". '
'Lead with the topic.'
)
elif trigger_type == "team_blocked":
return "The team is working on a milestone..."
# Compression preserves critical preferences
# MUST-ENFORCE count validated before and after
before_count = content.count("MUST-ENFORCE")
compressed = await compress_with_ai(content)
after_count = compressed.count("MUST-ENFORCE")
if after_count < before_count:
logger.warning("Compression dropped preferences — aborting")
return None # Never lose client preferences
# Optimistic lock prevents concurrent corruption
if memory.updated_at != lock_timestamp:
return None # Someone wrote while we compressed
# Each milestone runs as an isolated subagent
# with an isolated workflow context
async def advance_milestone(project, action, status):
if action == "complete":
sign_off_milestone(current)
next_ms = kick_off_milestone(project)
context = build_milestone_context(next_ms)
return {"action": "continue", "context": context}
elif action == "blocked":
project.build_mode_paused = True
initiate_call(persona="carl")
return {"action": "paused"}
These are historical internal counts, not customer benchmarks or current totals. Each names the source used at the snapshot date.
Snapshot verified: June 2026 · Sources: git history, pytest suite, production memory store, release ledger.
From the VS Code sidebar to Loam and back — the request path used by supported sessions, reviews, and calls.
For the three big claims: what we assert, where to confirm it, and where the line sits. We'd rather hand you the limit than have you find it yourself.
persona_memory_service.py.
MUST-ENFORCE preference is dropped before it commits a smaller memory — pattern shown above.
project_service.py.
Every pattern mentioned on this page has a real implementation. Here's where to look.
When a 4,000-line module splits into six, every consumer keeps working. The facade re-exports the public API. Zero breaking changes across 11 import sites.
call_pipeline/__init__.py → 6 submodulesAI-driven compression with preference count validation. If a single MUST-ENFORCE preference is lost during compression, the operation aborts and the original is preserved.
persona_memory_service.py → compress_persona_memory()Each milestone runs as an isolated subagent with a fresh context window. The orchestrator chains completion calls — when one finishes, the next begins automatically.
ide.py → advance_milestone endpointAfter any component extraction, every JSX identifier is grep-verified against the import list. Three extraction bugs taught this rule. It's now enforced on every split.
Enforced across all frontend decompositionsInspect the architecture, dated evidence, and stated limits—then decide whether the delivery system fits your work.
Meet the Team →