The mini-project is a tool jxm-labs can actually use: an assistant that turns an incoming client brief into a <b>first-pass proposal</b> — approach, model, phase plan and a rough price band — that a senior just reviews. Below: the brief that kicks it off, then how each ask maps to a workflow decision. internal dogfood project
From: Maxime (founder) — jxm-labs
To: delivery team
Subject: Let's build ourselves a proposal assistant
Team,
We win deals on price and speed, but our own pre-sales is the bottleneck. Every incoming client email gets read by a senior who then hand-writes a scope, picks an approach, and guesses a price from memory. It's slow, inconsistent between people, and juniors can't do it at all yet.
What I want. An assistant that takes a raw client brief and drafts a first-pass proposal a senior just reviews and sends. For each brief it should output:
It must use our own knowledge, not make things up. Ground every estimate in our rate card and the most similar past project — and cite which one. A wrong number in a client's inbox costs us money or credibility.
Hard requirement: know when to shut up. If a brief is for something we don't offer (train a model from scratch, realtime voice), or it's too vague to scope, it must NOT invent a quote — it should ask the right questions and flag for a human.
Constraints. Keep running cost sane. A few seconds per brief is fine. English for now. It's internal — a CLI / Slack command is plenty to start.
Success. A senior sends most drafts with light edits, it never invents a price or a past project, and a junior can run it unaided.
— Max
Concretely, what ships — two ways in, one agent:
A simple web interface: a senior pastes a client brief and gets a structured proposal back in seconds — problem, approach, model, phase plan, price band, risks.
The same agent also watches a shared inbox: it reads each incoming email, detects the ones that are real briefs, and auto-drafts a proposal — so a senior opens their inbox to ready-to-review drafts, not blank replies.
Behind both: RAG over our company docs (services, rate card, past projects, method) and the client's own documents (brief attachments, their site, a spec). Claude drafts a grounded proposal and cites exactly what it used.
Every draft is saved to a database and shown in a dashboard. The senior reviews, exports a branded PDF, then accepts (→ emailed to the client) or refuses. Nothing is sent without a human click; it still refuses to quote out-of-scope or vague briefs.
Claude Sonnet + local embeddings (low running cost), a database for the proposals, a web dashboard, PDF export, and an email sender. CLI for devs today; the web app is the deliverable; a Slack command / CRM embed comes later.
| The brief said… | We decided (which phase) |
|---|---|
| "drafts a first-pass proposal a senior reviews" | Human-in-the-loop drafting, not auto-send (Phase 1 scope). |
| "use our own knowledge, not make things up" | Ground in agency knowledge + a no-invention guardrail (Phases 2–3, 5). |
| rate card & method rarely change; past projects grow | Hybrid: pin services/rate-card/method in the prompt, RAG over past projects (Phase 3). |
| "anchor every estimate on the most similar past project, cite it" | Retrieve top-k past projects; anchor + cite; price as a band (Phases 3, 5). |
| "know when to shut up" (out-of-scope / vague) | Low-confidence guardrail → clarifying questions, no quote; 2 "must not quote" eval traps (Phases 1, 6). |
| "a senior sends most drafts with light edits, never a wrong price" | Success criterion → the eval scorecard (Phases 1, 6). |
| drafting a proposal is real reasoning | Started on Haiku, climbed to Sonnet because the eval required it; Opus judges (Phase 4). |
Not sure which approach & model a brief needs? Run the advisor. The running code is in ai-delivery-playbook/project/.