Since SingHacks21 Sep 2026 → 13 Nov 2026

From prototype to proof in 54 days.

At SingHacks, ResearchAgent was one web page where a language model proposed each purchase and a person approved every quote. Since then it has become released software: a web app, a Mac app, an MCP server and two SDKs. Policy code buys evidence from writers within your budget, and every payment leaves a receipt on the XRP Ledger.

Facts at 484856c · generated 13 Nov 2026 · how we count · data.json

SingHacks · 19–20 SepThe prototype
The SingHacks prototype: a verified dossier page with supporting and challenging evidence
  • One web page, synthetic sources
  • A language model proposed; a person approved every quote
  • 3,828 lines of code · 38 tests on 20 Sep
Today · v1.1.1 · 11 NovReleased software
A finished development-network run: escrow created, writer published the key, the hash matches, the article decrypts
  • Web app, Mac app, MCP server, TypeScript and Python SDKs
  • Policy code pays; the writer is paid by publishing the key
  • 90,733 lines of code · 2,127 tests
Pull requests merged
347since 21 Sep
Releases
15v0.1.0 to v1.1.1
ledger transactions
61re-checked live in your browser
Blind questions bought and cited
16/20Fixture research and decision models · offline answers · XRP Ledger · 11 Nov 2026 · leading fact 7/20; 0/10 off-topic purchases
One command to a verified purchase
84.2 scold run, 90 s target
Tests in the repo
2,12738 on 20 Sep

01Every day since SingHacks

One merge at a time.

347 pull requests and 403 commits since 21 Sep 2026. The busiest day was 12 Nov, with 66 merges. Numbered marks open the stop on the rail below.

19 Sep1 Oct15 Oct1 NovToday
After SingHacksOctober · AI TinkerersNovember · finals
  1. 1SingHacks: the prototype
  2. 2First payment on the XRP Ledger
  3. 3Code decides what to buy, inside your budget
  4. 4AI Tinkerers Singapore talk
  5. 5Any agent can search and buy
  6. 6One command to a verified purchase

Pull requests merged into main per day, Singapore time. Hover or tap a day for commits. The October build has its own archive: October build log.

Show the numbers
Pull requests and commits per day
DayPRs mergedCommits
19 Sep147
20 Sep04
21 Sep01
22 Sep02
2 Oct01
4 Oct1746
5 Oct66
6 Oct45
7 Oct2635
8 Oct45
9 Oct1115
10 Oct22
11 Oct33
2 Nov66
3 Nov5460
4 Nov4040
5 Nov33
7 Nov3434
8 Nov44
10 Nov910
11 Nov5152
12 Nov6666
13 Nov77

02The release rail

Every stop has a receipt.

4 milestones and 15 releases. Open a stop for what shipped, a screenshot or terminal output, and the proof: the pull request, the release notes or a ledger transaction.

  1. September · SingHacks

    1. 19–20 SepMilestoneSingHacks: the prototype

      The prototype that took us to the finals: one web page, synthetic sources, a language model proposing what to buy, and a person approving every quote.

      What shipped

      • A research desk that bought synthetic premium sources within an XRP budget and wrote a cited dossier.
      • A language model proposed each purchase and a person approved every quote before payment (manual approval was required in the event build); payment was a simulated by default, with optional development-network settlement.
      • The frozen prototype held 34 files and 970 lines of code (tag hackathon-baseline).

      Prototype tag

      The SingHacks prototype: a verified dossier page with supporting and challenging evidence
      Prototype dossier, from the hackathon-baseline tag
  2. October · AI Tinkerers build

    1. 5 OctMilestoneFirst payment on the XRP Ledger

      Writers were paid at their own development-network wallets, and the run showed the ledger entry.

      What shipped

      • Each writer gets its own development-network wallet and is paid there directly.
      • The run shows the ledger transaction instead of a simulated receipt.
      • Ledger links and receipts make each recorded payment inspectable.

      Pull request #101Wallet per writer #103

      The October app: a question box with a budget and suggested questions
      The app in early October
    2. 8 OctMilestoneCode decides what to buy, inside your budget

      Purchases moved from the language model to deterministic policy code, inside a budget set once.

      What shipped

      • A neutral search across every listed writer instead of an allowlist of sites.
      • A decision model scores each article; only policy code can make the purchase.
      • A five-second plan card confirms the plan; no pop-up interrupts each purchase.

      Checkpoint tagDesign record

      The app on 9 October with a budget picker and suggested questions
      The app on 9 October
    3. 10 OctMilestoneAI Tinkerers Singapore talk

      An on-stage demo of the October build for AI Tinkerers Singapore, a separate chapter from the finals.

      What shipped

      • The refund story on stage: a bought article breaks its promise and the money comes back.
      • The October build log, replayed from git and the coding agents' logs, is kept as an archive.
      • The talk deck and speaker notes stay on this site.

      October build logTalk slides

      The ResearchAgent demo on stage at AI Tinkerers Singapore
      On stage, 10 October
  3. November · the finals push

    1. 3 Novv0.1.0Any agent can search and buy

      What shipped

      • MCP server: search writers and buy within human-set caps, four stdio tools.
      • Nightly scorecard and a six-rule read-only hard-gate audit.
      • Builder feedback (15 findings), MIT licence, contributing and security policy.

      Release notesPR #266PR #268PR #264

      claude mcp add researchagent -e MCP_MAX_BUDGET_MINOR=200 -e MCP_DAILY_CAP_MINOR=500 -- npx -y …/releases/download/v1.1.1/researchagent-mcp-1.1.1.tgz
      Connect Claude Code (docs/mcp.md, current release line)
    2. 3 Novv0.2.0The app, done properly

      What shipped

      • Keyboard-first Run and Writers views, brand kit and exports.

      Release notesPR #295PR #293

      App home with a question box, a budget and three example questions
      App home before the v0.5.0 redesign
    3. 3 Novv0.3.0Fact menu

      What shipped

      • Signed fact menus in decisions. Live selection F1 0.235 → 0.419; wasted spend regressed 36.2% → 47.2%; the follow-up is #276.
      • Typed SDK, shared MCP client and architecture seams.
      • Startup-style README and one header across the explainers site.

      Release notesPR #304PR #294PR #298

      The decisions panel listing each article the agent considered and why
      Decisions panel with the fact menu
    4. 3 Novv0.4.0Mac app

      What shipped

      • Offline Electron app, DMG and Keychain storage; installed launch to interactive 2.088 s (single local sample).
      • Hire the agent over x402; continuous payment recovery; publish Markdown folders as paid Testnet writers.

      Release notesPR #303PR #306PR #305

      The installed Mac app showing a completed answer
      Installed Mac app, from the v0.4.0 release assets
    5. 3 Novv0.5.0The money, made clear

      What shipped

      • Shell, plan, payments, refund and net Spend UI; four allowed keyframes.
      • Wasted-purchase analysis and a frozen 140-question evaluation with confidence intervals.
      • Proof-or-refund XRPL escrow with durable buyer cancellation; tamper-evident audit trail and COMPLIANCE.md.

      Release notesPR #316PR #318PR #308

      A run in progress: the payments rail shows a purchase being made within the budget
      Buying, with spend shown against the budget
    6. 3 Novv0.6.0Answers, made clear

      What shipped

      • Answer and claims redesign; the UC3 PDF went from 50 to 4 pages.
      • Value-of-information veto in the decision policy; held-out waste 39.39% → 35.48% (target missed).
      • Scoped allowance per agent from one wallet.

      Release notesPR #323PR #324PR #319

      A finished answer with the lead finding, one refunded and one verified purchase
      Finished answer: one kept, one refunded
    7. 3 Novv0.7.0Proof you can check

      What shipped

      • npm run verify:answer checks an exported answer: 40/40 citations and 4/4 Testnet checks in the recorded run; a tampered file exits 1.
      • Payment chaos testing: 1,729 fault episodes, 431 SIGKILLs, zero double charges (fixture only).
      • Refreshed README and shared site header.

      Release notesPR #322PR #317PR #326

      PASS checks: 57 PASS, 0 FAIL, 2 SKIP
      PASS audit anchor: Validated XRPL Testnet ledger 22057921
      PASS testnet 12/12 (read-only, s.altnet)
      RESULT PASS
      Offline verifier output (Python), recorded 7 Nov
    8. 3 Novv0.8.0Any agent, one wallet

      What shipped

      • SDK v1: typed streaming asks, verification and journaled x402 payments.
      • Mac app hosts MCP over loopback HTTP with per-agent Keychain tokens and allowances, plus verify_answer and hire tools.
      • Crash-safe engine restart, notify-only update checks, separate arm64 and x64 DMGs (unsigned).

      Release notesPR #333PR #334PR #335Testnet transaction

      Settings page: connect an agent with its own capped allowance
      Connect an agent with its own allowance (Settings, captured 7 Nov)
    9. 4 Novv1.0.0-rc.1Fair exchange: the writer is paid by publishing the key

      What shipped

      • Release-candidate SDK, Python and MCP artifacts; desktop CI downloads Electron before DMG builds.
      • Key-reveal escrow on first touch and in the live Testnet product.
      • Fix Testnet reachability and first-impression money consistency.

      Release notesPR #370PR #373PR #369Testnet transaction

      A finished development-network run: escrow created, writer published the key, the hash matches, the article decrypts
      Key-reveal run on development-network (captured 7 Nov)
    10. 5 Novv1.0.0-rc.2Real development-network without cloning the repo

      What shipped

      • Zero-clone Testnet MCP and app, fixture models, fictional writers and no real value; writer onboarding and judge path.
      • TEST-SGD IOU key-reveal token escrow: three happy paths and a no-show cancellation; stand-in for RLUSD, not real RLUSD.
      • RC.2 artifacts and generated installs; completed answers poll for their validated anchor without reload (browser regression).

      Release notesPR #376PR #380PR #378

      The zero-clone development-network app with an audited budget change
      Zero-clone development-network app, budget change audited (captured 7 Nov)
    11. 7 Novv1.0.0One command to a verified purchase

      What shipped

      • Opt-in TEST-SGD key-reveal token escrow on the zero-clone MCP and app with --testnet --iou.
      • One-shot try --testnet judge path: UC3 with a S$2 cap, six numbered ledger links, --ledger verification and RESULT PASS.
      • Stranger writer onboarding: init <dir> scaffolds two commented example notes.

      Release notesPR #384PR #387PR #389Testnet transaction

      Testnet · no real value · Fixture models and fictional writers
      1. Create: testnet.xrpl.org/…/9126E19D…
      2. Finish · sha256(K) = Condition ✓: testnet.xrpl.org/…/805AA52F…
      3. Refund · writer-signed · fixture writer cooperates (a real writer could refuse): testnet.xrpl.org/…/BFAC5EF0…
      4. Re-buy create: testnet.xrpl.org/…/278087AB…
      5. Re-buy finish · sha256(K) = Condition ✓: testnet.xrpl.org/…/484A818A…
      6. Anchor: testnet.xrpl.org/…/22081E19…
      …
      RESULT PASS
      try --testnet, cold run (docs/evidence/round4-j2)
    12. 7 Novv1.0.1Answers lead with the fact you paid for

      What shipped

      • Anchored abstentions: a DONE Testnet run that buys nothing now carries the 12-drop audit anchor, so every DONE Testnet run verifies online.
      • 22 sourced XRPL explainers from a disclosed "team-authored explainer · sources cited · not an independent writer · Testnet" writer.
      • Blind judge banks: v3 held-out, dev and negatives.

      Release notesPR #403PR #407PR #398

      An answer whose first sentence is the purchased fact, with its citation
      Answer-first layout (captured 7 Nov)
    13. 8 Novv1.0.2Honest states for anchors and no-purchase runs

      What shipped

      • Anchor pending is no longer a failure.
      • Anchored no-purchase runs show "Anchored on XRPL · no purchase · ledger N" and the Export menu; simulated declines stay "not anchored (simulated)".
      • The plan modal and home subtitle state the real rule.

      Release notesPR #418PR #403

      A no-purchase run listing each article considered and why none cleared the value bar
      A no-purchase run explains each decision (captured 7 Nov, before the v1.0.2 anchor label)
    14. 11 Novv1.1.0A hosted demo for judges, and receipts that verify from it

      What shipped

      • A live sandbox with nothing to install: https://ra-front-651013803640.asia-southeast1.run.app, open 13–19 Nov 2026.
      • Receipts from the sandbox verify with the published tools.
      • It buys the right article, and fewer of them.

      Release notesPR #432PR #438PR #441

      A hosted-demo answer on XRP Ledger next to its payment card: each article paid by key reveal, every step linked to its transaction
      Hosted demo, XRP Ledger, 11 Nov
    15. 11 Novv1.1.1First-click fixes and hosted receipt verification

      What shipped

      • The first click buys one article and leads with the answer.
      • The plan you confirm is the plan that runs.
      • Every exported receipt verifies.

      Release notesPR #473PR #472

      PASS checks: 46 passed, 0 failed, 2 skipped
      PASS audit anchor: Validated XRPL Testnet ledger 22228575
      PASS testnet 11/11 (read-only, s.altnet)
      Skipped is not failed. PASS does not prove who a writer is.
      RESULT PASS
      Published v1.1.1 Python wheel checking the committed hosted export, read-only development-network, 11 Nov

03Then and now

What changed, capability by capability.

Each row starts at the SingHacks prototype and ends at what ships today, with the pull request that first delivered it.

Capabilities at SingHacks and now
CapabilityAt SingHacksNowFirst shipped
01PaymentA simulated by default; development-network optionalEach writer paid at its own development-network wallet, one charge per intent5 Octreleased in v0.1.0#101 #103
02Who decides to buyA language model proposed; a person approved every quotePolicy code buys within the budget you set, after one plan confirmation; a decision model only scores8 OctCheckpoint tag
03AgentsOne web pageAn MCP server any agent can reach by URL, an x402 paid endpoint and TypeScript and Python SDKs3 Novreleased in v0.1.0#266 #333 #523 #538
04RefundsNoneAn opt-in holdback returns a share of the price without the writer; the rest pays on key reveal; no-show refunds use EscrowCancel after the deadline3 Novreleased in v0.5.0#308 #540
05Mac appNoneAn installable Mac app with keys in the Keychain (unsigned)3 Novreleased in v0.4.0#303
06ProofCitations checked inside the appAn offline verifier anyone can run, a protocol model, simulated crash schedules, and a large batch of real purchases each re-read from a public node3 Novreleased in v0.7.0#322 #530 #533
07WritersTeam-run onlyAnyone can publish a folder of notes, or a note from a phone through moderation, as a paid writer3 Novreleased in v0.3.0#300 #389 #532
08Fair exchangePay first, then readKey-reveal escrow: the writer is paid only by publishing the key4 Novreleased in v1.0.0-rc.1#369
09Stablecoin pathXRP onlyToken escrow in TEST-SGD, our stand-in: official RLUSD issuers have escrow locking off, so RLUSD cannot be escrowed yet4 Novreleased in v1.0.0-rc.2#381 #384 #525
10Audit trailNoneValidated answer anchors are recorded on the ledger, even when nothing is bought; pending or unavailable anchors are labelled4 Novreleased in v1.0.0-rc.1#366 #403
11First tryClone, install, add a model keyOne npx command ends in RESULT PASS with six ledger links7 Novreleased in v1.0.0#387
12SourcesSynthetic sources onlyThe real XRPL and x402 documentation, plus ledger reports signed to a validated ledger12 Nov#527 #536 #537

04The numbers, honestly

Small charts, real denominators.

Every chart names its source file. Development and blind measurements are never mixed, and nothing was rerun until it passed.

The first run got faster

Measured with an empty npm cache. Each row is on its own scale.

MCP server starts

56.5 → 6.3 s −89%

Testnet app ready

134.0 → 27.0 s −80%

Download size

21.4 → 3.4 MB −84%

release candidate 2 today

Source: round4-j2

Show the numbers
First-run timings
MeasureBeforeNow
MCP server starts56.5 s6.29 s
Testnet app ready134.0 s26.98 s
Download size21.4 MB3.42 MB

Questions bought and cited

Development banks guided the work; the blind bank is the number we report. Off-topic purchases: 0/10.

v1 · development

16/20

v3 · development

7/20

v4 · blind held-out

7/20

v5 · blind held-out

16/20

Fixture research and decision models · offline answers · XRP Ledger · 11 Nov 2026 · leading fact 7/20.

development blind held-out not run yet

Source: v5-heldout

Show the numbers
Judge banks
BankBought and citedSource
v1 · development16/20r5-p0/summary.json
v3 · development7/20p1-threshold/sweep-summary.json
v4 · blind held-out7/20v4-heldout/README.md
v5 · blind held-out16/20v5-heldout/README.md

Tests written in the repo

From 38 on 20 Sep to 2,127 today, counted the same way at every checkpoint. 1,369 ran in the fast check on 7 Nov.

7 Sep20 Sep8 Oct3 Nov7 Nov8 Nov13 Nov

Static count of test declarations at each tag (definition) · executed count

Show the numbers
Tests per checkpoint
CheckpointTypeScriptPythonTotal
7 Sep · prototype808
20 Sep · SingHacks38038
8 Oct · October3020302
3 Nov · v0.1.04680468
7 Nov · v1.0.089221913
8 Nov · v1.0.2987211008
13 Nov · today2093342127

Code in the repo

3,828 lines on 20 Sep, 90,733 today. Tests and tooling included; evidence files and generated JSON are not.

7 Sep20 Sep8 Oct3 Nov7 Nov8 Nov13 Nov

Nonblank lines in tracked TypeScript, JavaScript, Python and shell files (definition)

Show the numbers
Lines of code per checkpoint
CheckpointLines
7 Sep · prototype970
20 Sep · SingHacks3,828
8 Oct · October12,837
3 Nov · v0.1.020,738
7 Nov · v1.0.050,752
8 Nov · v1.0.252,836
13 Nov · today90,733

Every ledger transaction

61 transactions across 3 days. Each square opens the transaction on the public XRP Ledger explorer.

3 Nov4 Nov7 Nov
Payment
Refund
Escrow locked
Key published
Escrow returned
Writer credential
Answer anchor

Source: the ledger page, which re-checks every hash live · transactions.json

05Misses we kept

The failures stay on the page.

A progress page that only shows wins is marketing. These are measurements that missed a target, regressed, or replaced a better-looking number of our own. Each links to the evidence.

  1. MissedTwo of four cold first-try runs overran 90 seconds2 of 4 cold runs over 90 s: 73.8 s pass · 90.2 s timed out · stopped at the 90 s deadline · 84.2 s pass

    What we did Kept the timeouts beside the passes; the 90 s limit stayed unchanged.

    Evidence

  2. MeasuredMost v4 blind held-out questions did not end in a purchasev4: 13 of 20 held-out questions ended without a cited purchase; the key fact led the answer in 2 of 20

    What we did Reported the blind number instead of the dev bank, then froze and ran a new blind bank (v5, 11 Nov).

    Evidence

  3. SupersededWe replaced our own better-looking numberv2 held-out 8/20 → blind v4 7/20

    What we did The v2 held-out score was written after the team notes; a blind v4 bank replaced it everywhere.

    Evidence

  4. MissedThe loaded-host soak failed its loop-delay gateLoop delay p99 64.4 ms against a 50 ms limit on a busy host; 25.8 ms when quiet

    What we did Kept the failure; a quiet-host rerun passed all five gates. No threshold changed.

    Evidence

  5. MissedFirst stablecoin-escrow start was slow122.9 s cold against a 100 s target; 21.5 s warm

    What we did Show provisioning progress in the app; the target stays.

    Evidence

  6. MissedNo buy threshold met the waste ceiling0 of 6 thresholds met the 18.75% waste ceiling

    What we did Kept the default 0.20 and recorded that no value passes every constraint.

    Evidence

  7. RegressedSigned fact menus raised wasted spendWasted spend 36.2% → 47.2% (v0.3.0)

    What we did Shipped the better selection, logged the regression and opened a follow-up.

    Evidence

06Builder feedback

What building on XRPL taught us.

Every friction point with XRPL, x402 and the development network goes into a dated log with evidence, a workaround and the mainnet impact.

  1. 15submissions to XRPL and x402 docs (4–5 Sep)
  2. 35findings logged while building
  3. 7ranked for Ripple, each with a repro
  4. 8upstream issue drafts ready
  5. 0filed upstream so far

Read the ranked feedback · Upstream drafts

07Next, and what we don't claim

Where the line is today.

—Method

How we count

Counts are dated and query-defined: facts at 484856c (13 Nov 2026). SingHacks ran 19–20 Sep 2026; the prototype was frozen earlier as tag hackathon-baseline (commit 935532f, 7 Sep), and the closest snapshot to the event's end is e16435a (20 Sep). Both are shown rather than picking one.

Metric definitions
MetricValueDefinition
PRs merged347gh pr list --state merged --base main, merged on or after 21 Sep 2026 (SGT), merge commit reachable from 484856c2
Commits403git rev-list --count e16435a3..484856c2 (after the last commit before 21 Sep 2026)
Releases15gh release list, published, tag reachable from the counted commit (prereleases included)
Testnet transactions61rows in site/ledger/transactions.json; the ledger page re-checks each one live
Held-out16/20v5 blind bank, bought and cited, run once on 11 Nov (docs/evidence/v5-heldout)
Tests in the repo2,127static count of it()/test() declarations in *.test.* / *.spec.* files plus Python def test_ (not executions)
Lines of code90,733physical nonblank lines in tracked TS/JS/Python/Shell files, tests and tooling included

Rebuilt with npm run site:progress from git, GitHub, CHANGELOG.md, docs/SFF-PUSH.md (latest entry 12 Nov) and the evidence files linked above. Generated 13 Nov 2026, 10:41 SGT. Missing data stops the build instead of showing a stale number.