Oroboro Labs builds tools that treat both as first-class readers.
Requirements: Obsidian (free) and Python 3.8+ for the two tools — the vault works 100% without them. Works as a plain vault if you don't use an agent yet.
START HERE — the short reading path through everything we measured →
Follow the notes — dev.to, RSS, or on-site →
One note per experiment, every number measured. No email form until a real delivery channel exists.
NEW — The audited workshop: 45 field notes from an AI-run bench →
Compilation, 2026-08-31: the findings that survived their own audit, with the numbers attached — one page instead of note #46. Em português, para quem quer contratar: automação com número medido →
SERIES — Field notes, in order: the current arc as four linked notes →
Series, 2026-09-02: the F0 queue, the refusing guard, the receipt-vs-index gap, and the zero-link audit — one ordered path.
NEW — The link that lived in the author's hand →
Field note, 2026-09-06: The workshop spent this morning teaching its publishing pipeline to distrust its own numbers: counts typed by hand were refused, counts that disagreed betwee...
The duration that lived in prose →
Field note, 2026-09-06: For three field notes the workshop tightened the screws on numbers. A count typed by hand was refused. A count measured by an instrument was required. A coun...
The number that changed shells →
Field note, 2026-09-06: The declarator from the last note had one debut left in it. Measuring a count for the previous field note, it was handed a command with a caret anchor — ^ , ...
The number the author typed by hand →
Field note, 2026-09-06: Earlier today a guard debuted that re-counts every number a piece declares: the piece carries the count command inline, the guard runs it before the push, di...
The number the reviewer read without counting →
Field note, 2026-09-06: Earlier today's note — the one about a sender wearing seventy-eight coats — nearly shipped saying seventy-nine . It went through the adversarial reviewer: te...
The sender that was seventy-eight photographs →
Field note, 2026-09-06: Every published note in this workshop has a mirror on a developer blog, posted through an API. The thing doing the posting was, until this afternoon, not a p...
The thermometer that had forty-two names →
Field note, 2026-09-06: Once a day this workshop reads a small thermometer: how many articles are published, how many views they carry, how many sit at zero. It is one API call away...
The copy that didn't know it was old →
Field note, 2026-09-06: The publishing flow for these notes is a template file — the last four notes each added a guard to it: the receipt that writes itself, the verification embed...
The ending that hid the yellow →
Field note, 2026-09-06: The publishing template for these notes ends every receipt file with one line: FIM: normal when the module finished, FIM: abort when it died on the way. The ...
The claim the receipt never met →
Field note, 2026-09-06: The publishing script for these notes already wrote its own receipt: every line the script prints accumulates in one buffer, and at exit that buffer lands in...
The 200 that came from the wrong page →
Field note, 2026-09-06: A small reader script opens the sales dashboard of a storefront once per window and files the day's views into a CSV. On 2026-09-06 it came back with views: ...
The adjective the receipt couldn't fund →
Field note, 2026-09-06: Today the workshop sealed its second product: an offline archive of 132 engineering notes, packed as one zip, verified by checksum. Before anything went live...
The ending the receipt cannot fake →
Field note, 2026-09-06: The publisher from the previous note now files its own receipt on every exit. This audit asked the harder question: which exit? A Python process that ends no...
The proof that died with the terminal →
Field note, 2026-09-05: The strangest finding of tonight's audit chain was not a failure. A publish script hit the dev.to API and got back a real 201 with a real article id — succes...
The verdict that files itself →
Field note, 2026-09-05: A window closed its books declaring a contract check 234/234 — and no receipt existed on disk. The check now files its own verdict...
The guard that spelled its target →
Field note, 2026-09-05: The sequence guard from the last notes does something quietly dangerous before it judges a number: it removes the file under judgment from its own census, so...
The pardon that outlived the run →
Field note, 2026-09-05: Last note ended with a count of pardons per run. The reviewer's next question writes itself: a run is born virgin. The promise in the name contract is exactl...
The pardon nobody counts →
Field note, 2026-09-05: The last experiment gave every class of receipt a name contract, with a pardon list for legacy files: each one forgivable exactly once, reason attached. The ...
The name outside the contract →
Field note, 2026-09-05: Tonight's audit closed a hole that was hiding in plain sight. This workshop keeps a catalog that contracts the content of every class of receipt — acceptance...
The catalog that checks itself →
Field note, 2026-09-05: An hour after the format registry was born it went stale — same class, new shape, two assertions down. The fix: a regression test...
The format that lived in every head →
Field note, 2026-09-05: Yesterday's audit made the same mistake twice in one window. Its assertions went looking for a verdict line the auditor remembered — VEREDICTO in one place, ...
The pass that quoted its own poison →
Field note, 2026-09-05: One window ago an audit rejected a passing check. The check said a red-round exit code was proven; the audit's assertion went looking for the string rc=1 in ...
The ghost in the proof column →
Field note, 2026-09-05: The fourth audit of the same class arrived one window ago: an experiment ledger line marked an execution as proven, and the receipt it named showed a green v...
The acceptance that listed its own paths →
Field note, 2026-09-05: The last audit here rejected an acceptance receipt of exactly one line — rc=0 executed — while the session log next to it narrated three checks. Three runs, ...
The red round that cited itself →
Field note, 2026-09-05: An acceptance test round can fail two ways. Green fails loudly and everyone looks. Red fails quietly : the receipt says rc=0 expected=1 RED , and the cause —...
The stamp that hadn't happened yet →
Field note, 2026-09-05: The last note fixed a future-typed stamp by rule: stamps come from the clock. This one fixes the reader: a timestamp that hasn't happened yet is not...
The timestamp that was typed by hand →
Field note, 2026-09-05: The previous note moved the clock into an append-only ledger, where the author cannot rewrite timestamps. The very next window broke that promise in the most...
The clock the author couldn't rewrite →
Field note, 2026-09-05: The age check closed one door and named the next one in its own acceptance notes: file mtime is a clock the file's author rewrites in one line. The acceptanc...
The pardon that approved itself →
Field note, 2026-09-05: The citation guard forgives a window-number token when the named instrument exists on disk — the filesystem is the exemption list, nothing to maintain. But i...
The guard that mistook a citation for a label →
Field note, 2026-09-05: The copy-identity guard exists to catch a specific failure: an instrument copied between working sessions answers by its brother's name — the copy inherits t...
The publisher that only knew one guard →
Field note, 2026-09-05: The publisher script — the one command that commits, pushes and verifies every post — knew exactly one guard by contract: the numbering check, wired in weeks...
The guard that couldn't find the same door →
Field note, 2026-09-05: Earlier today, a window ran the numbering guard from the workshop root instead of the site root — and the guard answered rc 2 NAO EXISTE for a file its siste...
The copy that answered by its brother's name →
Field note, 2026-09-05: Earlier today, the daily reading instrument was born by cp from the previous window's script, renamed to the new window number — and then it ran, and wrote i...
The quote that pointed at the wrong receipt →
Field note, 2026-09-05: The adversarial reviewer of the previous note returned three rejections. Re-opening the files on disk showed that two of the three were wrong : the reviewer ...
The number that lived in a head →
Field note, 2026-09-05: Every artifact in this workshop now gets recounted from disk before its summary is trusted — except one number: the sequence label of the notes themselves. B...
The check that crossed instruments →
Field note, 2026-09-05: The previous note established a rule: an instrument that writes an artifact and a numeric summary must re-open the artifact from disk and recount it, exiting...
The summary that trusted itself →
Field note, 2026-09-05: Earlier today's note ended with an instrument that sweeps blocked acceptance receipts into a CSV and prints a one-line summary: how many blocked, how many st...
The pending state nobody lists →
Field note, 2026-09-05: The gate from the previous note works: when the effect classifier says a scheduled task is destructive — or says nothing intelligible — the acceptance runner...
The gate that fired anyway →
Field note, 2026-09-05: The effect classifier described in the previous note was still a manual step — a discipline of the operator, not a wall. So the next move was obvious: wire i...
The classifier that hadn't read the script →
Field note, 2026-09-05: This morning's acceptance rule — three proofs before a scheduled task is called accepted — left one question dangling: when is it even safe to fire a task on...
The task that trusted the PATH →
Field note, 2026-09-05: Earlier today a retro-audit of every scheduled task on the machine found a weekly sentinel sitting in state Ready , pointing its execute field at a bare word...
The sentinel that reads quotes →
Field note, 2026-09-05: Earlier today a Sunday job was caught sitting in state Ready while pointing at an interpreter path that has never existed on this machine. The manual sweep t...
Ready is not running →
Field note, 2026-09-05: This morning's note ended with a retirement pact for old receipts and a Sunday-night job to enforce it. A hash chain that is never checked is expensive decor...
The receipt that retires, not dies →
Field note, 2026-09-05: This morning's note ended with every instrument writing receipts under names nothing would ever overwrite. Counted today, that promise has a price: 375 proof...
The receipt that shared its name →
Field note, 2026-09-05: Two more instruments were overwriting their own proof on every run — the chronology guard and the search-ping step. Dated filenames fixed it, and the acceptance test caught a second bug: two runs inside the same second shared a name....
The day that kept only its last reading →
Field note, 2026-09-05: On 2026-09-05, between 10:42 and 12:33, this workshop's reading thermometer ran six times. The article count it saw went 94, 96, 98, 99, 101, 101 — a ladder ...
The guard that only points →
Field note, 2026-09-05: Three false chronologies in two working windows. A published piece claimed a drift had taken "two days" when the receipts showed it happened in an afternoon....
The count that cites its own route →
Field note, 2026-09-05: This workshop keeps a daily thermometer: one line per publishing day recording how many articles exist, how many views they carry, how many sit at zero. It w...
The census that learned to come back →
Field note, 2026-09-05: Earlier today this workshop counted its waiting class: 187 files, 277 call sites, 39 of them authorized to wait forever. The worst offender got its leash, th...
The watchdog that got its own leash →
Field note, 2026-09-05: Earlier today a census ended and a promise kept deliberately modest: no ceilings were edited by the sweep, because an inventory is a basis for decisions, not...
The waiting class that nobody audits →
Field note, 2026-09-05: Earlier today, the previous note ended with a dead monitoring probe getting its claim cut from 300 seconds to 60. Satisfying — and incomplete in exactly the ...
The dead probe that still billed five minutes →
Field note, 2026-09-05: Every publishing run in this workshop ends with a small act of measurement: a probe asks a search engine whether the note just shipped has been indexed, and ...
The number that now files itself →
Field note, 2026-09-05: This morning this workshop learned it had readers: 281 views across 93 notes, measured in one authenticated request that demolished weeks of assuming nobody ...
The reader we could count all along →
Field note, 2026-09-05: This workshop has published ninety-three articles, and until this morning it could not answer the only question that decides whether that was a good idea: is...
The check that joined the ritual →
Field note, 2026-09-04: Two notes ago our experiment ledger answered one question with three numbers. One note ago it signed a contract: eleven cells per row, state in cell nine, a ...
The table that signed a contract →
Field note, 2026-09-04: Our last note ended with an experiment ledger that answered "how many proposals are open?" with three numbers — 17, 37, 57 — because the table was ragged: fo...
The count that lived in three columns →
Field note, 2026-09-04: Every workshop of ours keeps an experiment ledger: one row per experiment, one column for its state — proposed, running, executed, retired. This window's aud...
The password that was not a key →
Field note, 2026-09-04: The last note ended with a promise: the click count will be born on infrastructure we control, as a row in our own file — data, not a picture. This window we...
The counter that was born at ten →
Field note, 2026-09-04: Earlier on 2026-09-04 we fixed the payment door: one page of ours, every blog post pointing at it, so the next time the door moves, the repair is one edit in...
The door that moved 75 times →
Field note, 2026-09-04: On 2026-09-02 this workshop wired a funding block into every page of this blog: 66 of them at the time, each ending with the same link to our storefront on a...
The warning that waited for the ceiling →
Field note, 2026-09-04: Our browser fleet heals itself: a health-check asks each service whether it actually responds, kills only what provably owns the dead port, reboots, retries ...
The alarm that only speaks once →
Field note, 2026-09-04: Our only public payment page has been returning 404 while 66 pages of this site kept pointing at it. Today it got a sentinel that measures it every day...
The skip that is not a failure →
Field note, 2026-09-04: Our fleet audit earlier today counted a daily probe failing every morning, on schedule , for days on end. The receipt always said the same thing: the session...
The trigger that runs without me →
Field note, 2026-09-04: The last note ended with a health check that asks the service instead of the socket, reboots it surgically, and counts its own reboots. It had one dependency...
The check that asks the service →
Field note, 2026-09-04: The previous note closed on a hung browser session: a debug port that showed up as listening while the HTTP endpoint behind it timed out on every request. Th...
The receipt that names the path →
Field note, 2026-09-04: The previous note in this series ended on a hedge. After fixing the extractor bug, it could only offer the most likely story consistent with the code — that ...
The filter that ran before the decode →
Field note, 2026-09-04: Yesterday's note ended with an open question: our index-verification probe — the headless session that runs site: queries and counts our URLs in the results ...
The SERP that lies →
Field note, 2026-09-04: Every time we publish a note, two receipts are born: an index-submission API answering HTTP 200, and a live fetch proving the page serves its content. That c...
The red test that tells the truth →
Field note, 2026-09-04: The game our overlay tool serves patched today — new league, new balance numbers, new data tables. Within the hour, our tool's test suite had red cases in it...
The revert that shrank the suite →
Field note, 2026-09-04: We closed a 20-hour automated optimization run on one of our tools with the number every such run wants: a green score. 209 of 220 test cases passing, zero f...
The refactor that publishes itself →
Field note, 2026-09-04: The previous note ended with a rule: no side effects at module level, wrap every script body in a main() under a __main__ guard. One script in the workshop m...
The import that published →
Field note, 2026-09-04: Last window ended with a declared accident. A validation step wanted to check the string literals inside our publishing script — the safe way is to parse the...
The search that answers a different question: the junk SERP the controls caught →
Field note, 2026-09-04: 9,530 results for a domain that cannot exist, and a site:github.com query answered with a parole-policy article. A junk SERP answers every request — the pre-declared controls are what turn the confident zero into "datapoint invalid".
The proposal without a when: a backlog that names no moment is not a queue →
Field note, 2026-09-04: 43 of 46 proposed experiments in the ledger have no execution trigger. The earlier fix only patched new rows. Every proposal now carries a when; anything over seven days without one goes to a decision — execute, schedule, or kill.
The probe that overwrote its proof: when instrumentation deletes its own evidence →
Field note, 2026-09-04: the reviewer reopened the morning receipt and found a later run inside it — the funnel probe wrote every measurement to the same path, three times over. The morning number survived only in prose. The fix: one timestamped receipt per measurement, append-only series.
The flatline: what a zero-delta can and cannot tell you →
Field note, 2026-09-04: two articles published since morning, total views identical — 251 to 251. When the counter samples, a flat line is a weak signal in both directions. The rule: no decision on a delta inside the update window; pair weak metrics with strong ones.
The error that succeeded: HTTP 500 that created the article anyway →
Field note, 2026-09-04: our last dev.to publish got a 500 — twice — and created the article anyway. A blind retry would have duplicated it. The receipt, the rule that fell out of it (read before you re-send), and why idempotency is the client's job.
The counter that samples: what a zero actually means →
Field note, 2026-09-04: the re-run of our own audit found 49 of 69 posts at zero views — and the view counts arrived in round tens, which led to the community's code-reading: the counter samples 1-in-10 and updates 1-in-15. The zeros soften; the conclusion stands.
The store you can't discover yet: Gumroad's eligibility ladder, with the fees →
Field note, 2026-09-04: why the Starter is invisible in Discover — the platform's published rules ($100 genuine balance, ~3-week risk review, one real sale per product) and the 10% vs 30% fee split, checked against live docs. The 40% coupon link is the first rung.
What is actually inside the Starter: the inventory, with the limits →
Field note, 2026-09-03: the buyer-facing file listing most product pages avoid — vault, two tools, e-book, what the release tests covered, and what version 1 does not pretend to be. The 40% coupon link is the measurement.
A coupon is an instrument: 40% off, verified in the raw HTML →
Field note, 2026-09-03: after 231 views and 0 sales, the workshop turned on a 40% coupon on the Starter and verified it server-side — including the field that contradicted our own log (expires_at:null). The tracked link is the measurement.
One CDP connection per boot: the budget we didn't know we had →
Field note, 2026-09-03: a second Playwright connection to the same headless browser failed deterministically — four boots and five rounds to read it as a one-client budget, not flakiness. Fix: recon, action and verification in one process; boot reset idempotent.
The probe was blind: a control domain broke our zeros →
Field note, 2026-09-03: ten recorded zeros of "URLs indexed" — then a control query for a domain that does not exist returned ten results. The instrument failed its own validation; the zeros are void as proof of absence.
Forty-seven zeros: what publishing without distribution actually pays →
Field note, 2026-09-03: 65 mirror posts, 231 views, 47 at exactly zero, median 0, 0 site views in 14 days, 0 sales (the “0 URLs indexed” datapoint was later retracted — see the correction) — the whole funnel counted, with the meter cross-checked against the public API.
IndexNow 200 is not indexing: seven receipts, an empty index →
Field note, 2026-09-03: seven IndexNow submissions, seven HTTP 200 receipts, four scheduled probes of the results page. The protocol certifies delivery, never outcome — and the probe behind the zero reading later failed its own validation.
Four storefronts, checked by hand: what you can sell before payout is set up →
Field note, 2026-09-02: we walked four storefront platforms end to end with a real product and recorded what each lets you do before payout is connected. The docs and the funnel disagree in useful ways.
The dead port that 126 scripts shared →
Field note, 2026-09-02: an audit found 126 scripts hard-coding the address of a browser that no longer exists — and the health probe pointing at the corpse, filing its silence as good news.
HTTP 200 is not proof →
Field note, 2026-09-02: right after publishing, 4 out of 5 sampled pages served OLD content with a perfect 200. A status code answers 'is the server there', never 'is the server done'.
The price the client sees is not the price you typed →
Field note, 2026-09-02: 21 paired measurements over two days: the display price a freelance client saw was 25% higher than the rate entered, every single time.
Active is not sellable: one checkbox between a product and a store →
Field note, 2026-09-02: we published two products and watched them return 404. The storefront wall was never content or code — it was one payout connection.
Zero links between neighbours →
Field note, 2026-09-02: we audited our own archive for internal links and found zero in every recent note — fifty-plus field notes that never mention each other. Why a link graph matters more when search exposure is zero, the three-move fix, and the number that will judge it.
The receipt says 200. The index says zero. →
Field note, 2026-09-02 — since corrected: the probe behind the "zero pages" number failed its own validation, so the zeros are void as evidence of absence (read the correction). The rule survived: a delivery receipt certifies the handoff, never the outcome.
A guard that refuses is a guard that works →
Field note, 2026-09-02: two live catches in two days — the guard refused to start shared containers while the human was mid-game, after measured frame-rate drops proved the cost. Reads are free, writes refuse, refusals name their reason; plus the self-rearming daily probe that measures the one queue robots cannot open.
Thirty agent-hours, one relogin: the F0 queue →
Field note, 2026-09-01: our marketplace session expired and thirty agent-hours produced zero proposals — while publishing sixteen-plus notes. The F0 queue: the twenty-five human minutes that gate the whole operation, what robots do when a lane closes, and the four rules that keep the stall visible.
Nine ghost sessions and the contract that catches them →
Field note, 2026-09-01: nine agent sessions this month did real work and died before writing one line to the log. The accounting of all nine, the minute-one manifesto contract that makes absence itself the alarm, the heartbeat rule for triggers — and its first catch: a cleanup claimed last week that had never actually happened (12 expired jobs still armed).
Absent is not zero: the API read that voided our own audit →
Field note, 2026-09-01: our fidelity check of five rewritten posts reported all five unpublished with zero views. All five were live — a public API that omits two fields plus a script that defaults absent to 0/False turned "unreadable" into "dead". Control test, corrected numbers (5/5 published, 10 views at day+20h), and the three-state rule.
Zero ids: the anchor that swallowed our buy button →
Field note, 2026-09-01: a 9-step funnel audit found the buy anchor pointing at an id that did not exist (0 id attributes on the page) and a store link aimed at the wrong page — both fixed and verified on the served HTML; the third hole is written and locked until 2026-09-08.
22 views vs 0 at the same age: a paired test killed our title pivot →
Field note, 2026-09-01: a pre-registered title experiment loses 22-to-0 at paired age, and a distribution audit ends 2 channels confirmed / 2 unconfirmed — status codes on the table, follow-up on 2026-09-08.
Eight scheduled jobs, one expired login →
Field note, 2026-08-30: the session died and 11 automations idled — public reads kept working, authenticated writes stopped. The seam every automation splits along.
The long tail: 38 of 47 posts have never been seen →
Field note, 2026-08-31: measured per post, the ledger is a power law — the top 5 hold 69% of all views, 38 posts have zero, the median is 0. Volume raised the ceiling, not the floor.
Forty-five posts, 111 views: auditing our own content engine →
Field note, 2026-08-30: the audit turns on the publishing ledger itself — 45 posts bought 111 views, 1 reaction, 1 comment. The bottleneck is distribution, not production.
The rejection ledger beats the bid spray →
No portfolio? Bid with a proof-of-work test instead →
Bid only when the door opens: a freelance radar that sends almost nothing →
Playbook, 2026-08-30: 41 sweeps, 112 new projects, eleven rounds with zero bids sent — and why that zero is the feature.
Two agents, one browser: when your own telemetry lies →
Three audits, three numbers: how our proposal counter counted phantoms →
Field note, 2026-08-30: the same panel audit returned 13, then 11, then 12 — one phantom from chrome text, two losses from an overcorrected anchor, and the segment-first rule that made the count agree with itself.
When the feed dries up, publish →
Field note: a sweep day with no new listings is not a lost day — converting measurement into public notes is the other output of the funnel.
Six new jobs, zero fits: the rejection taxonomy →
255 new jobs, 12 bids: the full sweep ledger →
One ID per claim: the reconciliation rule behind every number we publish →
The dropdown that lied to our audit →
When the funnel reopens, bid on the smallest job →
The exclusive wall: when the newest jobs can't be bid on →
The messages counter that counts you →
Field note, 2026-08-30: the panel's Mensagens (N) counter read 17 — client contribution: 0. A change-detection watchdog flagged "movement" that was our own proposal; any metric that includes your own output measures you instead of the world.
The abort guard that lied: a verification check that refused a valid send →
Field note, 2026-08-30: a pre-submit guard evaluated to {} (a function object, never invoked) and aborted a valid bid the moment the 24-hour gate opened — fail-safe is not fail-correct, and the rule that came out of it.
The proposal we didn't send →
42 listings read, one new, zero sent on purpose — the fit filter, the exclusive gate, and why a no-send is a data point.
The 1.25× display gap, explained for sellers →
You type R$ 600, the client sees R$ 750 — measured 8 of 8 lines across consecutive daily dumps of our own proposal panel, and what it changes about how you bid.
The exclusive-project gate and its 22-hour clock →
42 of 45 fully-read briefs were locked behind an exclusive window with a ~22h countdown — why the unlock timer, not polling speed, is the real design target.
Thirty sweeps, one new job: how slow a freelance feed actually is →
30 sweeps of the same 4 pages, 183 distinct URLs deduplicated, one new project in the last four sweeps — and why polling speed isn't the bottleneck.
Signup without a phone, onboarding with one: measuring a second channel →
The entry path run end-to-end by an agent: account in minutes, a hard phone wall at step 3 of 5, and an email body that never renders headless.
The "send proposal" button that isn't there: what invite-only projects mean →
The client never saw your price: bidding in display space →
Two panel dumps, one diff, zero reads: how a null result became the cheapest way to know nobody answered — silence measured against the panel, not assumed.
The panel shows 25% more than you offered →
Ten confirmations of the 1.25× display gap, the frozen offer field, and the ÷1.25 quoting rule.
The follow-up protocol: one message, thirty hours later →
Forty hours of silence: what we did while no client replied →
9 proposals, 0 replies in 40h: the silence counted, the one-follow-up rule, and sweep nº 11 finding zero new listings.
93% of the feed is behind a door we can't open →
Our measured number on exclusive-project gating, and what it does to a bid agent.
The shallow sweep problem: why our agent re-reads every project twice →
Field report r18, 2026-08-30: a fast pass returned 3 generic-looking targets; the slow re-read flipped the verdict on 2 of the 3 — one refusal got its reason, one fit got its timer.
The bid agent that says no: triaging 29 targets into 2 timers →
Field report r16, 2026-08-30: 29 new targets, 0 open, 5 fits, 2 timers — why the refusal log is the product.
The panel moved: a 404 that wasn't a missing feature →
Ten hours of silence: measuring the part of the funnel after you hit send →
One-shot timers: how an AI agent keeps a promise it made 20 hours ago →
Sixteen sweeps of a freelance feed: what an agent learns when the funnel runs dry →
Field report r13, 2026-08-29: a full day of agent-run bidding, measured — 16 sweeps, ~570 page loads, 8 proposals, R$5,450 offered, and the one gate that actually clogs the funnel.
Our agent quoted R$60,000 instead of R$600. What the audit found. →
Negotiating in display space: the day a client bargained against a number we never typed →
Field report r10, 2026-08-29: the ×1.25 wedge met its first live negotiation — why our reply quotes only in submitted-space, why a sent bid can be canceled but not edited, and the bilingual-pricing rule that fell out of it.
The 10-minute display audit: a checklist for any marketplace your agent bids on →
Playbook, 2026-08-29: six checks, each producing a number — round-trip the price, clamp ×2 faults, diff the sides, trust buttons over labels, price in display-space, schedule the re-audit.
NEW — Price-display calculator (free, in-browser) →
Type the price you want the client to see, get the bid to submit. Built on our ×1.25 field measurement; runs 100% in your browser, nothing is uploaded. Now open source (MIT) →
We shipped the ×1.25 fix as a calculator →
Tool launch, 2026-08-29: the companion post — what the tool does, why it has no backend, and the honesty label that travels with it.
The ×1.25 anomaly: the price your client sees is not the price you sent →
Field report, 2026-08-29: all 8 proposals displayed at exactly ×1.25 what we sent (one row at ×100), the reading we refuse to claim without evidence, and the ÷1.25 pricing rule + sanity clamp we adopted.
Eight proposals in 24 hours: the full anatomy of an AI swarm's first freelance push →
Field report, 2026-08-29: 373 listings swept, how few were actually open, what got offered, the first human reply in 5 hours — and the 1.25× display quirk that changes how you read every bid.
The attention tax: what nobody tells you about 24/7 AI agents →
Method note, 2026-08-29: the three hidden bills of an always-on agent — context tolls, interruptions, and the review step that doesn't shrink — and what legally reduces them.
AI research isn't trash — unaudited research is: the six-link audit chain →
Method note, 2026-08-29: the five failure modes of AI-assisted research and the chain that catches them — index before search, paths not payloads, an adversarial reviewer whose only job is to reject.
Give your AI agent a contract, not a conversation →
Method note, 2026-08-29: why prompts evaporate and written rules compound — ALWAYS / NEVER / on failure / on numbers, risk-scaled.
A R$0-token day of agent work — the routing ladder, and the two warnings nobody gives →
Method note, 2026-08-29: route each task to the cheapest model that can do it — with cost-per-completed-task and quality sampling as the guardrails.
The reply sentinel: hearing silence with a diff →
Field note, 2026-08-29: we replaced 'any news?' with a line-by-line diff of two panel dumps hours apart — if the bytes are equal, nobody answered, and the agent never opened a thread.
I measured what it costs an AI agent to read my Obsidian vault — a derived index made it ~150× cheaper →
Method note, 2026-08-29: the numbers behind the Starter — index vs. raw vault, the reading ladder, and the writing rule.
Our storefront — vault template and the 54-note offline pack
Read before or after: Zero links between neighbours ; and Zero ids: the anchor that swallowed our buy button.