← Back to recent work

  • Product management
  • Business analysis

Rules, agents & verified sources.

An agentic AI workflow built on Claude Code and MCP. Specialised agents, a constitutional rule file, and hooks that enforce between sessions. Everything traces to a source on disk, nothing is invented.

Build
Personal system
Focus
Agentic workflow, governance
Stack
Claude Code, MCP, hooks
Principle
AI assists, sources decide
Single Page Application (run locally)
Dashboard
+ New Variant

Role family 1

Primary target lane

Role family 2

Secondary target lane

Role family 3

Stretch lane

Role family 4

Exploratory lane

Pipeline by status
CompanyTarget titleUpdatedStatus
summit reSenior Product Owner23.05 · 09:37DRAFT
alpine fintechBusiness Analyst Claims23.05 · 18:17DRAFT
centro cxProduct Owner Digital CX23.05 · 09:37APPLIED
neura consultingAI Domain Lead22.05 · 14:02DRAFT
25 rules enforced ~4 min per pass 0 API tokens ATS-friendly

The problem

Keeping one CV sharp across roles breaks by hand.

The same career has to read differently for each role, Senior PO here, Business Analyst there, CX lead next, a stretch into AI Domain Lead. Tune one cut by hand and the others drift: words shift, numbers move, a gap gets glossed, and one bad sentence in a cover letter sinks the application. And that is before the part that isn't writing at all, tracking what's out, what came back, and which roles are even worth the effort.

The answer wasn't a faster writer. It was a system that treats the CV as data, governs every change against one source of truth, triages roles before they cost effort, and keeps the whole pipeline's status in view.

The approach

Constitution first. Agents second. Hooks enforce the rest.

A single rule file, twenty-five rules, loads at every session start. No agent can override it. Each agent is scoped to one concern and loads only the playbook and source files it needs. Hooks run between sessions to stamp state, trace sources, and surface drift.

The model runs locally via Claude Code on a Max plan. MCP extends the tool surface, file reads, script calls, renders, all within one session. No API tokens, no external calls, no data leaving the machine.

Facts only. No invention. Ever.

Every claim must trace to a source on disk. If a claim has no source, it does not appear. No exceptions. Ungrounded lines get flagged, the engine ships, but the flag becomes a ticket to resolve before the next run.

Rule 1, loaded every session

Rule constitution

Twenty-five rules load at every session start. No agent can override them. Behavioral rules always on; domain rules activate per agent.

Hook enforcement

Hooks run between sessions, stamping state on commit, scanning for drift on write, promoting stale questions into the ticket tree.

Scoped agents

Each agent loads one playbook and reads only the source files it needs. No agent sees the full system, only its concern.

The pipeline

Triage the role, tune the CV, track the outcome.

A role enters and is triaged first, fit, stretch, or skip, before it costs any effort. What's worth it gets a tailored cut of the one master CV, validated against the rules, rendered, and tracked from draft to outcome. The model never invents. It only fills values the schema allows, with content the corpus already contains.

01

Capture

JD → jd.md

A pasted job description becomes a versioned markdown file with metadata, role family inference, and the verbatim copy. Every claim downstream traces here.

capture.js jd.md role family
02

Triage

FIT · STRETCH · SKIP

A rule-based read of the JD against the positioning matrix. Strong fits go through. Stretches are scored. Wrong-shape roles get marked and don't burn an application slot.

triages.jsonl positioning-matrix Rule 4
03

Tailor

Claude inside the constitution.

The model produces a per-role variant: CV body, cover letter, summary. Strictly inside RULES.md and CV-ENGINE.md. No banned words, no inflated tenure, no claims absent from the source corpus.

retailor.js RULES.md CV-ENGINE.md letter-corpus.md
04

Validate

Every gate, no exceptions.

A second pass runs the variant against source-trace, banned-words, page-count, letter-QA, and metric-vs-numbers gates. Anything that fails blocks the render. No soft warnings, no overrides.

verify.js source-trace.sh letter-qa.sh 18 gates
05

Render

Every cut, ATS-friendly.

Each cut renders ATS-clean: DE/EN, with or without portfolio, with or without cover. Real embedded text, machine-readable section headers, parseable dates. Pdf.js enforces page count + ATS extraction before write.

pdf.js DE / EN 2 pages max ATS verified

What comes out

An ATS-friendly, source-traced PDF.

hello@… +41 … LinkedIn

Want this on your team?

I bring the same loop into product work: hand-write the rules, let the model produce inside them, gate the output.

Let’s talk