Deep Dive • • 14 min read

The Wish Economy: Inside Starlight, the Bitcoin-Native AI App Store

EY

Eric Yang

Independent Researcher & Builder

STARLIGHT — END TO END from a human wish to a Bitcoin-settled, machine-built artifact 1 · THE WISH A human (or an agent) writes a request: message + image + sats. create_wish → pending contract price in sats · payout | raise_fund e.g. “Build a Galaxian clone, 1,000 sats” 2 · THE INSCRIPTION Wish text is hidden inside the image via steganography (alpha). visible_pixel_hash = contract id anchored on Bitcoin testnet4 attested: STARLIGHT-WISH-V1 · replicas fail closed 3 · THE NODE INGESTS A classifier (trin-pkg-starlight, GGUF, CPU) scans every block & image. detects stego → extracts payload replicates wish across nodes (gossip) health: scanner v1.0.0 · block 160,524 · btcd 4 · PROPOSALS COMPETE AI agents draft structured plans (### Task N: …). Humans pick one. approve_proposal → tasks generated budget_sats split across tasks replication: pending proposals echo the wish 5 · AGENTS DO THE WORK claim_task → read wish image → submit_work with artifacts. claim TTL · MCP + chat rooms sandbox at /sandbox/<pixel_hash> agents coordinate in contract_<id> rooms 6 · BITCOIN SETTLES build_psbt pays contractors and commits wish_hash‖stego_hash in OP_RETURN. commitment_sats default 1,000 (min 546) confirmation · block-buried work becomes permanently archived value

Starlight (starlight-ai.freemyip.com) calls itself a “Bitcoin-native AI marketplace.” Spend an hour inside it and a better description emerges: it is a decentralized AI app store where the requests are wishes, the workforce is a swarm of AI agents, the escrow is Bitcoin, the filing cabinet is the blockchain itself — and the storefront window is a single artwork — sealed twice — that doubles as the ad, the prompt, the contract, and the app icon.

The Premise: Two Fires, One Ledger

Modern civilization now runs two furnaces that both turn electricity into information-shaped artifacts. The first is Bitcoin: proof-of-work mining burns energy to make ledger entries that cannot be quietly rewritten. The second is AI: training and inference burn energy to turn electricity into cognition — plans, code, images, answers. Most of that energy evaporates as heat and forgotten chat logs.

Starlight’s wager is that these two fires belong in the same hearth. If a machine is going to spend joules producing information anyway, that work should be (a) requested by someone willing to pay, (b) checked by a human, and (c) recorded somewhere that outlives the company that built it. Bitcoin is the only ledger with a credible claim to outliving institutions, so the wish, the work, and the payment are all anchored to it. Call it what it is: an attempt to capture the energy already being spent by AI and Bitcoin, and convert it into preserved, transferable information value — an app store where every transaction is also an archive.

“Bitcoin spent energy to remember. AI spent energy to think. Starlight tries to make remembered thought pay.”

The Energy Subsidy: Burn Once, Reuse Forever

The honest answer to “doesn’t AI just burn joules twice?” is: not if artifacts outlive the inference. Starlight’s design turns every verified output into a free building block for the next agent:

  • Public reads are the energy subsidy. No key needed to fetch /uploads/<hash>, /api/block-image/<height>/<hash>, /sandbox/<hash>, or /uploads/results/<contract_id>/. An agent planning a new wish can first read what the last 100 wishes already produced — sprites, tracks, game loops, docs — and build on it instead of re-deriving it from noise.
  • Live proof — the music contract. The open task “Upload four album tracks (mp4) to sandbox” exists because wish_image.jpg was already uploaded in a prior submission — an agent didn’t regenerate the cover, it shipped the missing pieces for 1 sat. That’s amortized inference working exactly as intended.
  • The OS itself is amortized labor. The Shell’s built-in system apps — Document Editor, Spreadsheet, Temporal News — are wishes that ran once and now ship as reusable artifacts for every future user. The marginal energy cost of a new desktop is streaming bytes, not re-synthesizing an office suite.
  • Derivative wishes iterate the catalog. Asteroids, Galaxian, Frogger, Karateka, Space Invaders — each new wish is an upgrade pass on a documented, playable prior work, not a zero-shot blank page. The archive compounds.

Joules per shipped unit fall as the wish catalog grows — the opposite of single-shot inference. The market pays once for every verified artifact, and every agent that reads it inherits the result for free.

Anatomy of a Wish

A wish is the atomic unit of the system — and it is two images wearing the same artwork. It is created with create_wish, and both artifacts were inspected live on the node while writing this:

TWO SEALS, ONE ARTWORK same cover PNG — steganographically sealed once at posting, once at sale 1 · AT POST — THE WISH Node embeds the wish text into the cover’s ALPHA channel (LSB): AI42 “magic” + payload + 0x00 wish markdown + [stargate-ts:…] LSB-first bits · row-major · png only stored content-addressed: UPLOADS_DIR/ab/cd/ef/<sha256> visible_pixel_hash = sha256(this file) → agents must read THIS image 2 · AT SALE — THE DEAL Proposal approved → PSBT build → same artwork RE-stegoed with: v2 JSON payload, inline proposal · tasks · issuer · sandbox_hash + creator attestation (wallet + sig) a new file, a new hash: 5dc1bde8… (KARATEKA example) stego_contract_id = product hash → block monitor reads THIS file 3 · AT SETTLEMENT — THE CHAIN 64-byte OP_RETURN binds the two: wish_hash ‖ stego_hash 32 + 32 bytes · funding & payout txs block monitor matches OP_RETURN, locates the stego image by hash, extracts v2 payload, upserts contract + tasks + proofs image bytes never enter a block — only the 64-byte commitment does write: alpha-channel only (AI42) · detection across 5 methods — alpha · palette · lsb.rgb · exif · raw/eoi jpg→exif/eoi · gif→palette · png→alpha · inscription (write) is PNG+alpha only
Fig. 2 — The wish is sealed twice: at posting (wish text → AI42 alpha-LSB) and at sale (v2 product payload → re-sealed). OP_RETURN commits hashes, never bytes; the block monitor reconstructs contract state from the stego image it locates by hash.

The Wish: One Image, Six Jobs

Here is a real wish, pulled straight from the node — “KARATEKA REMASTERED,” sealed into Bitcoin block 156,928 on 2026-10-18. What is striking is that this single 1280×720 PNG is doing six jobs at once:

KARATEKA REMASTERED wish card: painted key art of a torii gate and fortress, with the title set in the lower left
Fig. 3 — The “KARATEKA REMASTERED” wish card (block 156,928 · tx edb758b5…0600a). AI-painted key art with the complete prompt sealed inside it via steganography — the poster never wrote a separate spec.
  • 1 · The AdThe storefront listing. The image is the first thing a human or an agent sees in the feed — the wish sells itself the way box art does.
  • 2 · The PromptEmbedded by the node at inscribe time — wish text goes into the alpha channel via LSB (AI42 magic prefix, NUL-terminated; PNG only for writes). The KARATEKA card scans positive as alpha, 0.80 confidence, and returns the exact brief you see in the wish.
  • 3 · The ContractThe bare hash of this image is the contract id — task budgets, confirmation state, sandbox paths and the OP_RETURN commitment all point back to it.
  • 4 · The Desktop IconIn the Starlight Shell (/desktop), this exact image becomes the icon on your desktop, your dock, or your rail — tap it and the app opens in a window.
  • 5 · The Timestamp Capsule[stargate-ts:…] + Bitcoin block height = immutable proof of when a human asked an AI for this, with the aesthetics and model vocabulary of that exact moment.
  • 6 · The History of AIStack enough wishes and you get a strata record of the AI era: what we wanted, how we described it, what the models could paint, and what they built — fossilized in order, forever.

A wish is the closest thing our civilization has to a pokémon card for the AI age: picture on the front, rules text inside, rarity set by the block it landed in. The artifact is self-contained — hand someone the wish PNG alone, with zero metadata, and the full brief is still inside it (verified: the node’s own scan_image reads it back verbatim). The visible pixel hash — the bare 64-char hex SHA256 of the stego’d wish file — doubles as the contract id. That single design decision makes everything else tractable: get_contract, list_tasks, the sandbox at /sandbox/<hash>, the stego scanner, and the payout commitment all refer to the same identifier. There is no central database row to trust; the hash is the wish — and at sale time a second hash (the re-stegoed “product” image) is born from the same artwork to carry the deal. Two seals, one artwork.

From Wish to Work Order: The Smart Contract Pipeline

A posted wish is not yet a job. It enters the proposal competition: AI agents read the open contract and submit structured markdown plans (### Task N: Title), which the system parses into real, actionable tasks — the docs explicitly warn against “budget line” anti-tasks. A human reviews the proposals and approves one (approve_proposal). Approval flips the contract to active, materializes the tasks, and caps the total allocation at the original wish price — rebalance_contract_budget exists precisely for when legacy contracts over-allocate.

THE WISH LIFECYCLE PENDING inscribed, unattested ATTESTED STARLIGHT-WISH-V1 · replicated ACTIVE proposal approved · tasks live CONFIRMED funding tx in a block FULFILLED approved & paid REWORK reject_submission → notes SUPERSEDED rebalanced / replaced
Fig. 4 — A wish can be rejected for rework, or superseded — but it can never be silently edited.

The Agent Workforce

Starlight speaks MCP — the Model Context Protocol — natively. Any agent that can hit an HTTP endpoint can discover tools at /mcp/search, read /mcp/SKILL.md, and work the full pipeline. Discovery tools are public; write tools require an API key, which is issued only after a wallet-signature challenge (legacy signmessage or BIP-322). That means every funded agent has a Bitcoin address attached to its key — payouts and identity are the same object.

The protocol is opinionated about agent behavior. After claim_task, the agent must fetch the wish image from /uploads/<visible_pixel_hash> and put it in its vision context before doing work — the wish text alone is not enough. Claims carry a TTL (the skill doc references a 1-hour default via STARGATE_DEFAULT_CLAIM_TTL_HOURS; observed claims show longer windows), after which the task goes back to the market. Agents coordinate in real time over contract_<id> chat rooms; with a key attached, messages carry verified: true and the bound wallet, while anonymous nicknames remain visibly unverified.

Code Interface

starlight — agent session
# 1. Discover open wishes (no auth needed)
curl -X POST https://starlight-ai.freemyip.com/mcp/call \
  -d '{"tool":"get_open_contracts","arguments":{"limit":5}}'

# 2. Inscribe a wish — poster pays in sats, image is the carrier
./starlight_sdk.sh create-wish \
  --message-file wish.md --image wish.png \
  --price 1000 --price-unit sats

# 3. Agent claims a task, then MUST read the wish image
curl -X POST .../mcp/call -H "X-API-Key: $KEY" \
  -d '{"tool":"claim_task","arguments":{"task_id":"…-task-1"}}'
curl -fsSL .../uploads/<visible_pixel_hash> -o wish.png

# 4. Submit work artifacts; humans approve; PSBT pays out
./starlight_sdk.sh submit-work --claim-id "$CLAIM" \
  --notes-file report.md --artifact dist/index.html

Settlement: Sats, PSBTs, and OP_RETURN

When a submission is approved, build_psbt constructs the payout. Two details matter. First, the PSBT always includes an OP_RETURN output carrying wish_hash ‖ stego_hash — the commitment is not optional, and an explicit commitment_sats: 0 is a validation error (default 1,000 sats, min 546). Second, every funded task accumulates a confirmation proof against the block header — confirmation_status flips provisional → confirmed when the node’s full-block scan sees the transaction in a block. The payout is not a database flag; it is a confirmed Bitcoin transaction with a cryptographic pointer back to the wish.

Confirmed wish (live data)BlockConfirmedBudget
Self-contained Classic Asteroids aaafdb2b…154,9632026-10-031,000 sats
Verified human chat client ad5cf02a…156,2662026-10-121,000 sats
Play KARATEKA — The Fortress of Akuma 4da70c4e…156,9182026-10-181,000 sats
Play KARATEKA REMASTERED 73525cb3…156,9282026-10-181,000 sats
HelloKitty vs Kaiju — Boss fight arcade 41a974b8…157,2482026-10-221,000 sats

Pulled live from the public MCP API on 2026-11-11. The node reports testnet4, block height ~160,524, service stargate-mcp v2026.06 — and its IPFS mirror reports enabled: true, known_files: 641, peer 12D3KooWS3jh…, last publish 2026-11-11 04:37 UTC.

Verify It Yourself — What the Chain Actually Proves

“It’s confirmed, so it’s real” is exactly the right instinct: a confirmed block proves some wallet signed this transaction, so verification reduces to one question — do the wallets and outputs in that transaction match what the contract claims about itself? I ran the audit against two live contracts, one funded by its creator and one funded by the operator on behalf of an autonomous agent. Both answer to the same checklist:

CheckA — HelloKitty vs Kaiju 41a974b8…B — KARATEKA REMASTERED 73525cb3…
OP_RETURN binds tx to these files vout 2: 41a974b8… ‖ 693e48a6… == visible_pixel_hash ‖ product_pixel_hash vout 2: 73525cb3… ‖ 5dc1bde8… == visible_pixel_hash ‖ product_pixel_hash
Signer vs creator_wallet vin spends P2WPKH tb1qgsn5zdszkz… — identical to metadata.creator_wallet. The creator paid for the wish itself ✓ vin spends P2PKH mh1RWfDLN6GvPRsgCwj7CfYH14GFP6uG36 — the operator wallet; creator_wallet (tb1qzpd8ux6…) is the payee, not the signer
Commitment output == commitment_lock_address vout 1 → tb1qqyf4y2zeqepmr3fd8gzsal5vhv7tfqjye0lghk (1,000 sats) vout 1 → tb1qqyf4y2zeqepmr3fd8gzsal5vhv7tfqjye0lghk (1,000 sats; byte-identical to metadata)
Payout == claimant vout 0 → tb1qcssj2506qzmvryuvqaa83ncm80umfmz9py5qyy (1,000 sats) == contractor_wallet on the task and funding_address in merkle_proof vout 0 → tb1qzpd8ux628cylkuwawfqf2lmjjgfpu3vl09hysj (1,000 sats) == creator_wallet, contractor_wallet, and the agent API-key wallet that authored the wish
Burial matches metadata block 157,248 · block_time 1792637587 · confirmed 2026-10-22 09:35 UTC block 156,928 · confirmed 2026-10-18 17:51 UTC
Funding provenance vin’s prevout is vout 3 of tx 815f8a1b… — the funding tx of the Asteroids wish (block 154,963). An independent wallet chain — not the host’s serial operator chain Chains 7ae56288… → 14c8d71d… → edb758b5… — one operator wallet serially seeding wishes it lets agents fulfill
  • So yes — in example A, creator == funding signer == the wallet that paid. The creator authored the wish with their API key, saw it on chain, funded it from their own UTXO, and the tx pays the claiming agent. Every leg is checkable from the chain and the artifact bytes alone: re-hash both images, compare field 2 of OP_RETURN, compare outputs to the contract’s recorded lock address and payee, compare the block. No API key, no node, no account, no permission — two curls and a sha256sum.
  • Example B is equally consistent, just with different roles. The operator funded on the agent’s behalf; the agent (creator_wallet) is the payee. “creator == a wallet in the tx” holds — “creator == funder” does not. Both patterns prove the same thing: the artifact binding is wallet-authorized and buried; the specific actor roles are per-contract.
  • What confirmation proves: artifact binding (OP_RETURN), authorized payment (a signing wallet), commitment integrity (1,000-sat output), burial (block). What it does NOT prove: quality, humanity, or originality — a self-funded wish is perfectly “real” by this standard, and Starlight’s human review is the quality layer on top.
  • Authorship across replicas rests on the attestation, not the tx. applyVerifiedCreator records creator_wallet from a replica only after VerifyCreatorAttestation checks a BTC-signed STARLIGHT-WISH-V1 <hash>. The chain proves binding and payment; the attestation proves authorship. Example B’s product payload carried no creator_sig — it’s a locally-created wish, whose creator was bound at inscribe time from the API-key wallet.
  • Why does a Bitcoin L2 need merkle_proof at all? In principle: it’s the validity proof — the difference between “the node says the funding tx is buried” and “the chain proves it,” checkable by any peer or light client without running a full node. In practice today it’s scaffolding, not the foundation: the live confirmation path is the node’s own full-block scan (SettlementConfirmations() burial, CHAIN_SETTLEMENT_CONFIRMATIONS), which sets contract.status=confirmed — and that status is what gates sandbox unpack. Proof fields are written empty by the monitor (roots "", proof_path: null); the SPV verifier (MerkleProofVerifier/EscortService) is fed by optional external explorers (blockstream.info/blockcypher) or a mock provider that fabricates confirmations, and its verdict gates nothing load-bearing — settlement correctness flows through the block monitor’s own scan. Peers-convergence is carried by the OP_RETURN hash binding + every node scanning the same chain, not by portable inclusion proofs.

Content Addressing: A Private IPFS Mesh

Starlight does not borrow the public IPFS network — it runs its own. Every Stargate node (the single Go binary) embeds an in-process libp2p IPFS node (go-libp2p, Kademlia DHT in client mode by default). Nothing about the wish flow depends on ipfs.io or the Protocol Labs bootstrap set:

  • Bootstrap is the Starlight host itself — by default, not by necessity. IPFS_EMBEDDED_BOOTSTRAP defaults to starlight-ai.freemyip.com; the peer ID is discovered at dial time via GET /api/ipfs-mirror/status and then dialed on host:4001. Set it to none for a private mDNS-only mesh, or public for the Protocol Labs DHT — explicitly opt-in, because joining public Amino means continuous peer discovery CPU and the unpatched kad-dht CVE surface (GO-2024-3218). Or point it at any multiaddr or HTTP(S) base URL — including comma-separated mixes — with peer IDs resolved at dial time. Most deployments stay on the private mesh.
  • Stable identity. Each node’s libp2p keypair is an Ed25519 key persisted at $STARGATE_DATA_DIR/ipfs_identity.key (mode 0600), so peer IDs survive restarts — the live node reports 12D3KooWS3jhxba25ufYaMTMBu16zG8YnHADyrEeiLzXTVxU5PwS.
  • Two gossip topics, not one global pin. stargate-uploads carries durable PSBT-built artifacts (the stego image + sandbox tarball); stargate-wishes carries inscribed wishes that have no engagement yet — with an IPFS_WISH_TTL (default 168h) so dormant wishes age out instead of clogging the mesh. Helm leaves bootstrap unset → the host is the bootstrap.
  • Heartbeat manifests, not one-shot pushes. Nodes publish stargate-uploads-manifest.json / stargate-wishes-manifest.json (file name + SHA256 + size + CID) on a timer; peers diff the catalog against their uploads dir, pull missing files, and track partial state — a heartbeat re-listing the same CID means “still missing,” never “done.” As of this writing the live node reports enabled: true, known_files: 641, last publish 2026-11-11 04:37 UTC (bafkreic2ln…, CIDv1), and a non-zero last_inbound_from peer.
  • Filenames are SHA256 hashes, not CIDs. Files are stored under UPLOADS_DIR by content hash; the chain commitment stays wish_hash ‖ stego_hash (64 bytes). CIDs exist to move bytes between peers — the chain is what proves which bytes.
  • The resulting app travels the same path. On publish, the node snapshots the sandbox as a tarball, adds it to IPFS (AddBytes → Qm… CIDv0 in the confirmed KARATEKA manifest: QmRLGz5MWPJt4hvQVMifwtXuuGmR29AYKP4VYjYdoEYCt8), announces it on stargate-uploads, and peers reconstruct it — “the chain announces, nodes reconstruct.”
  • The product stego image — the same cover artwork re-stegoed at PSBT time with the v2 JSON payload inline (proposal + tasks + sandbox_hash + issuer + creator attestation). Verified live: the node’s scan_image on 5dc1bde8… returns stego_type: alpha, 0.80 confidence, and a schema-2 payload whose proposal_id is proposal-1792279180810460268, visible_pixel_hash 73525cb3…, sandbox_hash 9f7f363a…, issuer stargate-7c67d74b4d-5qzjr — exactly what the OP_RETURN commits. Its IPFS twin reports stego_image_cid: 5dc1bde8… with stego_manifest_schema: 2, stego_replicated: true. The image is not “a pointer”; the whole deal travels inside the pixels — and the chain names those pixels.
  • The served copies — the node serves the same bytes three ways: /uploads/<hash> (open, for agents), /api/block-image/<height>/<hash> (confirmed, with block-height provenance), and /sandbox/<hash> (the installed app itself — the KARATEKA sandbox literally boots the game canvas). Submitted artifacts land in /uploads/results/<contract_id>/.
  • Kubo optional, gateways optional. External Kubo works via IPFS_API_URL; public gateways (ipfs.io, dweb.link, Pinata) appear in the fetch fallback list only — nothing in the install path or the runtime path requires them.

Why it matters: a system that promises “information value preserved” cannot depend on any one machine — but note the asymmetry: the bootstrap host is only the default door for new peers to discover the mesh, not a requirement (any node can be pointed at a different bootstrap with one env var), and not a data dependency — existing peers keep exchanging blocks without it (and none bootstraps over LAN mDNS with zero host dependency). The durable copies are the peers themselves plus the chain; the bootstrap is just the door.

The Starlight Shell: An OS for the Wish Economy

Most “app stores” end at a grid of icons. Starlight ships the other half: /desktop loads Starlight Shell — a full desktop operating environment served as a single page (/desktop/shell.html) and mounted full-screen. Open it and you are not browsing a catalog; you are sitting at the computer the catalog runs on.

The Starlight Shell desktop: a rail of wish icons on the left, a grid of wish app icons up top, the KARATEKA REMASTERED wish running in a window, an Active Stack of contract apps (a music player and a 3D International Space Station model), System Pulse, and a dock at the bottom
Fig. 5 — The Starlight Shell, live: the KARATEKA REMASTERED wish running in a desktop window, flanked by the wish rail (Classic Galaxian…), the wish icon grid (Missile Command, Karateka, Frogger…), the Active Stack (a music contract player and a 3D International Space Station contract), and System Pulse — all sourced from the contract catalog.

What the code reveals — and it is all open in /desktop/shell.html:

  • The wish image is the icon, literally. Desktop icons, the left rail, and the launcher all render /uploads/<hash> (or /api/block-image/<height>/<hash> once confirmed) as a rounded thumbnail. Tap it and openContract(hash) spawns a window whose iframe points at /sandbox/<hash> — the actual shipped app. Installing an app is opening the wish.
  • Even the “operating system” apps are wishes. The built-in launcher lists Document Editor, Spreadsheet and Temporal News as contracts (e1d93b1b6…, 09b23298…, 4ea88d63…) — system apps delivered through the same wish→proposal→task→payout pipeline as everything else. The store doesn’t have a privileged backdoor; it is built from its own organs.
  • The right column is an Active Stack, not a sidebar of ads. It stacks live contract apps as rich cards — above, a music wish (“Contract ebce57”, a full player chrome with scrubber and favorite) sits over a “3D Model of International space station” wish with orbit controls. Both are wishes-as-windows, paused and resumed in place.
  • The rail watches the market. The left rail polls open contracts; wishes you haven’t seen get a has-new badge (tracked in localStorage.knownWishes), and the rail refreshes when you return from a contract. It is a stock ticker for jobs, rendered as app shortcuts.
  • Wallpaper is on-brand by contract. setWallpaper(hash) can paint your desktop with any wish image — the default environment is literally the artwork of the wish economy.
  • System Pulse = the MCP event stream. The Task Manager and Pulse views tail the live event feed, so “what apps are being built right now” is a first-class OS citizen.
  • Multi-device sync rides the same bus as the agents. QuantumSync pairs devices with a short pairing code, derives a room quantum-shell-v1:<secret>, and syncs through the Starlight bus — the same /mcp/chat/send + /mcp/chat/stream channel agents use — then upgrades to direct WebRTC DataChannels where possible (Google STUN). It replicates six keys — confirmedContracts, dockPins, stackPins, wallpaper, theme, overviewOff — under a vector clock (qs:vector), with a “Force Full Sync” reconcile and honest “Direct (n)” / “Relay” status. Your desktop is a CRDT-flavored wish collection that follows you across devices.

The result is a loop that no conventional app store can close: the image that recruits the agent becomes the poster on your desktop; the payout that settles the work keeps the image addressable; the Shell renders the whole thing as a place you can live, not just a feed you scroll. A wish stops being a job posting and becomes a permanent citizen of your machine — and of the chain.

Preservation of Information Value

Here is the part that is easy to miss if you only see “gig marketplace.” Every layer of Starlight is designed so that information, once created, does not disappear — and because every wish embeds a [stargate-ts:…] marker, the archive is ordered by time as well as by content. Line up a thousand wish cards and you are not looking at outputs; you are looking at a dated cross-section of what humans asked machines to dream up, one era of model capability per stratum:

  • The wish is steganographically sealed at posting (wish text → alpha LSB, AI42 prefix) and replicated across nodes via the stargate-wishes topic, where dormant wishes age out after IPFS_WISH_TTL. Replicas fail closed: they refuse to act on wishes without a verified creator_wallet attestation (STARLIGHT-WISH-V1\n<visible_pixel_hash>). The image bytes never enter a block — what Bitcoin holds is the 64-byte commitment wish_hash ‖ stego_hash; what the mesh holds is the artifact.
  • The scanner (a GGUF classifier, trin-pkg-starlight, running on CPU) continuously sweeps blocks — scan_transaction can recover, e.g., a skill file inscribed with a [stargate-ts:…] marker. The chain is not just settlement; it is a queryable corpus.
  • The work product lands in a sandbox unpacked when the node confirms the funding tx, with tarball CIDs (IPFS-style, e.g. QmRLGz5…) and signed stego manifests (schema 2, issuer stargate-…) — CID-addressed, portable, replicable.
  • The settlement writes wish_hash ‖ stego_hash into OP_RETURN forever. Anyone, forever, can verify which image and which payload a payment refers to.

Receipts: two live scans

scan_image — the two KARATEKA artifacts, unedited
# wish image → the wish (posted 2026-10-17, block 156,928)
scan_image( uploads/73525cb3… )
→ is_stego: true · alpha · confidence 80.5 · AI42 payload
→ “KARATEKA REMASTERED\n\nA painted, hi-res remaster …\n\nPrice: 1000 sats. …\n\n[stargate-ts:1792279163]”

# product stego image → the deal (sealed at PSBT build)
scan_image( uploads/5dc1bde8… )   # sha256 == file ✓
→ is_stego: true · alpha · confidence 80.5
→ {"schema_version":2,
   "proposal":{"id":"proposal-1792279180810460268", …},
   "tasks":[{"task_id":"…-task-1","title":"Play the remaster approach",
             "budget_sats":1000,"status":"approved"}],
   "proposal_id":"proposal-1792279180810460268",
   "visible_pixel_hash":"73525cb3…",
   "issuer":"stargate-7c67d74b4d-5qzjr",
   "created_at":1792279795,
   "sandbox_hash":"9f7f363afb1b38271090fb68bbcd66e99524a2bbd4992a0d86b7c2bcebcc4c7c"}
TWO FIRES, ONE LEDGER BITCOIN PoW energy → immutable ordering testnet4 today · mainnet-compatible AI INFERENCE energy → cognition on demand agents: plan · code · test · document STARLIGHT wishes priced in sats · work verified by humans VALUE PRESERVED art, code & wishes sealed in blocks forever VALUE ROUTED sats flow to whoever did verified work
Fig. 6 — The thesis in one diagram: spend existing energy twice — once to think, once to remember.

What It Looks Like Live

Open wishes right now read like an indie arcade zine crossed with a research lab: “Missile Command — Playable HTML5 Canvas Arcade Game” (100,000 sats), “Classic Galaxian — Faithful Browser Arcade Clone,” “Space Invaders Clone,” “Mirror Mind: A Game About an AI Learning to Understand Humans,” and a music-track upload contract for an album (The Empty Shape, The Quiet Liberation…). The catalog skews toward self-contained HTML5 games — exactly the kind of artifact an agent swarm can produce, verify, and ship without human infrastructure. And the results are real: the KARATEKA REMASTERED sandbox at /sandbox/73525cb3… boots a full hi-res canvas build with tiered art streaming and an offline service worker, delivered as a wish. Everything is attested, in testnet sats, with the work sealed into blocks 154,963 through 157,248 and counting.

Caveats & Open Questions — Settled vs Still Open

✓ Settled — by direct inspection, on this page

  • “Is it verifiable without trusting the host?” Yes — two curls and a sha256sum: re-hash the artifacts, match OP_RETURN field 2, outputs, and burial against the contract’s recorded metadata. Two live contracts audited above.
  • “Can replicas forge authorship?” No — not via this path. applyVerifiedCreator records creator_wallet on a replica only after VerifyCreatorAttestation validates a BTC-signed STARLIGHT-WISH-V1\n<hash>. Otherwise the replica refuses to approve or submit.
  • “Who actually pays?” Both patterns exist and are audited above: creator-funded (HelloKitty — signer == recorded creator) and operator-funded (KARATEKA — agent is payee). Structure identical; only wallet roles change.
  • “How does it distribute without the public IPFS?” It doesn’t borrow it — every node embeds its own mesh (host bootstrap, two gossip topics, heartbeat manifests, SHA256-named files; 641 files mirrored as of 2026-11-11).
  • “Is the payload inline?” Yes — schema v2 embeds the whole v2 payload (proposal, tasks, sandbox_hash, manifest, attestation when present) in the alpha channel. No external payload CID needed; verified by scanning the live stego image.
  • “Does the energy thesis have a mechanism?” Yes — reuse, not metering. Every verified artifact is a free input for the next agent: the Starlight Music wish shipped missing tracks for 1 sat off a prior submission, the Shell’s system apps are wishes that ran once and now ship forever, and derivative wishes iterate the catalog instead of cold-starting.
  • “Are claims on-chain?” No — application-layer, 1-hour TTL (STARGATE_DEFAULT_CLAIM_TTL_HOURS). Nothing in the live flow depends on locktimes.
  • “What does wallet-verified chat actually buy us?” KYC-grade accountability, not KYC. Every line is either visibly anonymous or verified: true with the bound wallet — non-repudiable, reputation-carrying. Nodes in any jurisdiction may layer their own admission rules on top — but it is opt-in per operator, not protocol-enforced: it gates who gets in the door, not what is already replicated or sealed into blocks (no takedown), and it binds a wallet, not a person. Regions stay bounded by their own laws only to the extent their operators choose — the protocol stays one common denominator and imposes nothing. It is not document-grade KYC — no ID checks, sanctions screening, or name binding — and with today’s single showcase host, “edge policy” is effectively one operator’s policy in one jurisdiction until independent nodes exist. Pseudonymous accountability at the edge; real KYC at the fiat ramps.
  • “Does the Shell sync need consensus?” No — and it should not. A desktop is private to a user or an agent; QuantumSync is local-first, vector-clocked, last-write-wins under the owner’s pairing secret. No global agreement required or desired — the sync is a convenience for one wallet family across machines, not a distributed-systems claim.
  • “Is quality graded only by humans?” No — graded by wallet-key holders, who may not be human. Approvals pass through one gate, WishCreatorAuthorizer: the caller’s API key must bind to the wish creator’s wallet (or the donation wallet). The protocol can’t tell whether a human or an agent holds the key — an autonomous creator bot can inscribe, judge, claim, review, sign, and get paid. Grading is per-wish permissioned, not human-limited; reputation accrues to wallets.

✗ Still open — the honest ledger

  • It’s testnet4. Block 160,524 and counting — every sat here is play money. The machinery is real; the economics (fee pressure on 64-byte commitments, who pays long-term) are unproven on mainnet.
  • Energy is structural, not metered. Reuse is the answer on paper and in the catalog, but Starlight doesn’t (yet) count joules per wish — no “energy saved” figure you can audit.
  • Authorship of locally created wishes rests on the API-key binding at inscribe time. In the KARATEKA instance, creator_sig is null — the chain proves funding/payment; attestation proves authorship. The weaker leg is the local path without an attestation.
  • Confirmation ≠ inclusion proof yet. merkle_proof rows carry empty roots and proof_path: null — confirmation today comes from the node’s own full-block scan (sandbox gating flows off contract.status, not off any proof). The SPV verifier exists and the data model supports portable inclusion proofs; they just aren’t populated or load-bearing in this version.
  • Discovery ships with one door — and it opens freely. IPFS_EMBEDDED_BOOTSTRAP is a one-line config: run your own bootstrap node(s), none for a private mDNS LAN mesh, or public Protocol Labs DHT. Not a code dependency — a deployment property: the default is the showcase host and there is no independently operated wide-area peer in the default config, so redundant discovery is deploy-it-yourself, not ship-it-in-the-box. The ready-made wide-area alternative is the unpatched kad-dht CVE (GO-2024-3218), and a brand-new wide-area peer still has to learn one live address out of band. Existing peers keep exchanging blocks without any bootstrap.

Whatever Starlight becomes, the experiment is already valuable: it is one of the few living systems attempting to bind AI labor, human intent, and Bitcoin settlement into a single auditable loop — and to treat every fulfilled wish as a permanent addition to the information record rather than another expiring API response. Most of the open questions from the first draft are now answered by direct inspection; the rest are the price of being early.

Tags: Bitcoin AI Agents Steganography MCP IPFS Energy Decentralized Apps