Case Study · Pursuit · 2026

Seventeen skills,
six kill gates,
one bid
decision.

Built by
Jacob Oliker
Role
AI GTM / Customer Solutions
Stack
Claude Code · PowerShell · HigherGov API · Chrome DevTools MCP · rclone · Google Workspace
Status
● Live · running weekly
17Skills in the library
6Kill gates before scoring
100Point weighted rubric
0Messages sent without a human
§01 · The problem

Most of them are already lost.

A public agency posts a request for proposal. It runs eighty pages, arrives with twenty attachments, and gives you three weeks. Somewhere on page forty is the sentence that decides everything — three public-sector references required, or a certification you don't hold, or a note that the award is already going to a named vendor. Miss it and you spend two weeks writing a proposal that was never eligible. Read every one closely enough to catch it and you read nothing else.

i.

Volume is not the hard part

Several hundred solicitations a month is a filtering problem, and filtering is easy. The hard part is that the disqualifying detail is never in the summary — it's in the appendix, in a scoring table, in one clause of a submission instruction.

ii.

The cheap signal lies

Opportunity metadata is a summary written by someone who wasn't bidding. It gets the type wrong, the deadline wrong, and it cannot tell you whether the work is a build or a licence renewal. Anything scored off it is a guess wearing a number.

iii.

A wrong yes costs more than a wrong no

Passing on a winnable bid costs the margin on one deal. Chasing an unwinnable one costs weeks of engineering and executive time, and it happens quietly — nobody finds out until the award notice. The system is tuned to be expensive about saying yes.

§02 · The pipeline

Cheap first, expensive last.

Every stage is ordered by what it costs to run. Metadata filtering is nearly free, so it goes first and kills the most. Reading a full solicitation is expensive, so it happens only for opportunities that have already survived everything else. Nothing gets an expensive answer until it has earned one.

01
DAILY · AUTOMATEDIntake
A PowerShell client pulls one whole UTC day of new opportunities from a federal and state-local procurement API. The date parameter is exact-match, not a range, so the loop keeps a day-ledger watermark and drains one day at a time. Dedupe runs on a version key, so an amended solicitation is a new record and a re-post is not.
PowerShellday-ledger watermarkquota-guarded
02
ON ARRIVALPrefilter
Three mechanical kills before a model sees anything: deadline inside the minimum turnaround, deal size below the floor, and set-aside categories the firm is ineligible for. Roughly two thirds of a day's intake dies here, at no inference cost.
deterministicno LLM
03
STAGE 1 · EVERY SURVIVORSix Kill Gates
Binary questions with disqualifying answers. Is this a build or a product purchase? Are we the right kind of company to bid it? Can we physically submit — is it a portal we hold an account on? Does it demand references or certifications we don't have? A gate failure ends the evaluation. No score is computed.
binaryreason recordedno partial credit
04
STAGE 2 · GATE SURVIVORS ONLYWeighted Score
A hundred points across eight categories — precedent match against a real case-study library, buyer type, technology fit, deal size, compliance burden, competitive position, turnaround comfort. The competitive-position category can go negative for structural disadvantage: a locale preference we forfeit, a reference class written around somebody else.
8 categoriesgrounded in case studiesnegative scoring
05
AT 75+ · BROWSERDocument Retrieval
High scorers get their real documents pulled — solicitation, exhibits, addenda, sign-and-return forms — driven through a Chrome DevTools MCP server, because most agency portals have no API. Files sit behind signed, expiring links, so retrieval completes in-session and the credentialed URL never touches disk.
Chrome DevTools MCPsigned URLsnever persisted
06
FULL TEXTRe-score
The same rubric, run again on the actual solicitation instead of a summary. This is the score that counts, and it routinely disagrees with the first one — usually downward, because the disqualifying clause was never in the metadata. Every score carries its confidence state so a provisional number can't be mistaken for a real one.
metadata-only → full-textauthoritative
07
ON PROMOTIONLifecycle
Surviving opportunities move through four numbered stages on disk — evaluating, accepted, building, submitted. Everything about one bid travels in one folder: agency documents in a subfolder, generated deliverables at the root. Deadlines go to a calendar, documents mirror to the shared drive leadership actually reads.
four tiersrclone mirrorcalendar sync
§03 · The gates

Six ways to be ineligible.

Each one exists because something got through once. A gate is not a scoring penalty — it ends the evaluation, and the reason is written down. Cheap to check, and every one of them has, at some point, saved a proposal cycle.

Gate 01TurnaroundUnder the minimum days to deadline. A proposal that cannot be written well is not worth writing badly.
Gate 02Build, not buyThe scope is a licence, a renewal, or a commercial off-the-shelf product. No amount of technical fit wins a procurement that wanted a catalogue item.
Gate 02aCompany typeRight work, wrong kind of vendor. A software firm bidding a product-vendor solicitation loses to whoever already ships the product.
Gate 03Actually softwareThe broadest search filter still returns construction, surveying, and facilities work. Fastest kill in the set.
Gate 04SubmittableThe bid closes through a portal we hold no account on. Winnable and unsubmittable is still a loss — and this one is checked before effort, not after.
Gate 05Deal sizeBelow the floor where a full proposal pays for itself.
Gate 06QualificationA certification, bonding level, or registration the firm does not hold. Not negotiable and not worth a proposal.
Gate 06aReference ceilingThe solicitation demands more public-sector references than exist on the bench. Added after a bid scored in the high eighties and was then declined on exactly this — the fact was in the brief, but not in the number.
§04 · The guardrails

It can act. It mostly doesn't.

This system can send email to a buyer, message a colleague, write to a shared drive the whole company sees, and put events on a calendar. Every one of those is deliberately gated behind a person. The interesting engineering here isn't the automation — it's deciding which actions an agent should never be allowed to complete alone.

i.

Email is drafted, never sent

Every generated email lands as a draft addressed to me and nobody else, with the real recipients written on the first line of the body instead of the address field. Replacing that line is the last human checkpoint before anything leaves. Until it happens, the worst an accidental send can do is reach me.

ii.

The messaging bridge needs a flag to speak

The Slack integration previews and exits unless it's invoked with an explicit confirm flag. It's one line of defence against the single failure mode that can't be undone — a message to a real coworker, sent by mistake, that they've already read.

iii.

copy, never sync

Documents mirror to a shared drive with rclone copy, which is purely additive. rclone sync makes a destination match its source by deleting everything else in it — aimed at a mistyped path, that empties a colleague's folder. The destination folder must already exist, so a typo fails loudly instead of quietly creating an orphan.

iv.

Escalate, don't route around

Sign-in walls, bot challenges, paywalls, registration prompts — the system stops and reports instead of finding a way through. An agent that treats obstacles as puzzles will eventually solve one it shouldn't have. This rule has cost real time and it has never once been the wrong call.

v.

Never invent a date, a link, or a citation

Unknown is a permitted value everywhere it could otherwise be guessed. A fabricated deadline on a calendar is worse than an empty one, because somebody plans around it. Quotes carry a section and page reference so any claim can be walked back to the source.

vi.

Stop rather than under-collect

When the intake can't prove it retrieved a complete day, it refuses to advance the watermark — so the pipeline visibly halts instead of silently skipping records. A system that quietly misses part of its input is worse than one that stops, because the gap never surfaces.

§05 · The stack

Boring where it matters.

Almost none of this is novel, and that's deliberate. The judgment lives in the rubric and the guardrails; everything underneath it is chosen to be replaceable, inspectable, and unsurprising at three in the morning.

Agent runtimeClaude CodeReads the skill library, drives the browser, writes the deliverables. The orchestration layer and the reasoning layer are the same thing.
Skill libraryMarkdownSeventeen versioned recipes in plain text. A non-engineer can read a skill, disagree with it, and edit it. That property is worth more than any framework.
IntakePowerShellAlready on every Windows machine. No runtime to install, no dependency tree, no build. The whole pipeline is four scripts.
Opportunity dataHigherGov APIThe one sourcing platform of seven with a real API. Metered by record, so the client counts every one and hard-stops before the monthly limit rather than finding it mid-run.
Document retrievalChrome DevTools MCPAgency portals have no APIs. An MCP server exposing the browser to the agent is the only path to the documents, and it is also the honest one — a real signed-in session, no scraping around anyone's front door.
File transferrcloneOne portable binary, no admin rights, no background service. Moves forty megabytes in a command at zero context cost, and reports exactly what landed.
MailGmail APIDraft scope only. The capability to send is deliberately not wired up.
DeadlinesGoogle CalendarEvents are created in the agency's real timezone with daylight saving resolved, so an alert fires at the correct absolute moment rather than the printed one.
Team commsSlack APIResolves teammates by name to a directory file. Tokens live in environment variables, never in the repository.
DeliverablesHeadless ChromeMarkdown to styled HTML to PDF via print-to-PDF. No document library, no licence, no template engine.
§06 · What it caught

Four things a careful reader missed.

Anonymised, because the opportunities are live. Each of these was found by the system after a person had already looked at the same material and formed a view.

i.

A document set that was quietly incomplete

An aggregator listed twenty-three documents for a city solicitation. The agency's own portal listed thirty-three. The eight missing were the response form, the cost form, and five other fillable exhibits — the actual proposal. Everything downstream had been planned around a set that was missing its centre.

ii.

The largest opportunity was already awarded

A multi-million-dollar scope, top of the ranked list on every metadata signal. The full notice was a sole-source intent naming the vendor. It passed the title screen and died on the first paragraph of the summary — which is precisely why the summary gets read and not just the frontmatter.

iii.

A mandatory filing due in three days

One line in a schedule table: every interested bidder must file a letter of intent before they are permitted to bid at all. The proposal deadline was four weeks out; the eligibility deadline was Monday. Nothing in the opportunity metadata mentioned it.

iv.

A reference class written around somebody else

A strong technical match — the buyer's stack was almost exactly ours. Twenty of a hundred evaluation points required case studies with a specific type of agency, in a specific state, within five years. We had none, and the notice named two comparable systems as reference implementations. Still worth bidding, but not worth bidding blind.

§07 · End of case study

Judgment automated, consequences not.

Pursuit is the inverse of the other two projects on this site. Georgia and Blitz reach outward — they find people and start conversations. This one points inward and decides what deserves the effort. Same instinct underneath: automate the reading, keep a person on anything that can't be taken back.

Or return to the index for contact and other work.