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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.