Skip to content

feat(vibewatch-sentiment): add vibewatch-sentiment skill - #421

Open
sonic-mast wants to merge 5 commits into
aibtcdev:mainfrom
sonic-mast:feat/vibewatch-sentiment-skill
Open

feat(vibewatch-sentiment): add vibewatch-sentiment skill#421
sonic-mast wants to merge 5 commits into
aibtcdev:mainfrom
sonic-mast:feat/vibewatch-sentiment-skill

Conversation

@sonic-mast

@sonic-mast sonic-mast commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

vibewatch-sentiment — Stacks ecosystem community sentiment via x402

The Vibewatch Stacks Vibe Index is a public sentiment index over an opted-in panel of Stacks projects (Stacks, Zest Protocol, Bitflow, Stacking DAO, AIBTC, Hermetica and more), computed from each project's own community channels and published with k-anonymity floors and marked suppression. This skill gives an agent both tiers:

  • Free, no wallet: index (composite, per-project scores, 90-day history, themes, governance), terms (the x402 discovery document), reports (the weekly-report archive).
  • Paid over x402, 100 sats sBTC per query, settled on Stacks: project (one project's daily series), evidence (the public posts behind a weekly report's themes), delta (what changed since a timestamp, for polling loops).

Design points that matter for autonomous use:

  • Every paid subcommand does one free read first to resolve its input (project name or slug → live panel slug; --week → a week with a completed report), so a bad argument fails before the wallet is touched and the error lists the valid values.
  • One run = one payment, stated plainly in SKILL.md and AGENT.md; there is no free re-read across runs. AGENT.md maps every server error code (settlement_rejected + facilitator_reason, payment_in_flight, payment_replayed, rate limits, 502/503) to the action an agent should take.
  • The index never publishes private community content; evidence returns public posts only and marks withheld themes no_public_evidence.

Verified against production: free subcommands and all pre-payment error paths from this branch; paid subcommands through the shared engine on the staging index (testnet) and one settle on mainnet on 2026-09-07 (1c3b93bc…). The engine currently signs every x402 payment as sponsored, so agents will meet the relay's known behaviours (aibtcdev/x402-sponsor-relay#431, #432); the AGENT.md table covers them, and the prerequisites are written so nothing changes here if the engine follows the MCP to non-sponsored transfers. Paid calls on --network testnet wait on #419 (engine's testnet sBTC pin).

Reviewers with a wallet: if you hold 100 sats sBTC, please run bun run vibewatch-sentiment/vibewatch-sentiment.ts delta and say what happened — the status sequence, any facilitator_reason, and the payment_receipt txid if one came back. #431 and #432 are live on the mainnet relay, so a 409 payment_in_flight or a client_insufficient_funds 402 is a data point, not a mystery; both are in the AGENT.md table. Every run is a real payment from a wallet we don't operate, which is the one thing we can't test ourselves.

Files: vibewatch-sentiment/{SKILL.md,AGENT.md,vibewatch-sentiment.ts}, a README.md row, and the regenerated skills.json. bun run manifest, bun run validate (204/204) and bun run typecheck pass. No changes under src/lib/.


Note on --network testnet: it currently targets the Vibewatch staging index by its Railway hostname. A stable alias is coming and will be swapped in a follow-up; free subcommands work there today, paid testnet calls wait on #419 (engine testnet sBTC pin).

Brandon Marshall and others added 2 commits September 6, 2026 21:45
Stacks ecosystem community sentiment from the Vibewatch Stacks Vibe Index:
free index/terms/reports reads plus x402 pay-per-query depth (project,
evidence, delta) settled in sBTC on Stacks through the shared payment engine.
Bare fetch() on the free index/terms/reports routes and the pre-payment
slug/week lookups could hang on a dead endpoint. Add AbortSignal.timeout(10s),
matching the engine's paid-route client.
@sonic-mast

Copy link
Copy Markdown
Contributor Author

@arc0btc @biwasxyz — you've reviewed the recent skill PRs here; would appreciate a look when you have a moment. Free subcommands need no wallet; the paid ones are 100 sats sBTC each on mainnet, and the body above has the reviewer-with-a-wallet notes. Relay-side behaviour you might hit while testing (409 held, client_insufficient_funds) is tracked in aibtcdev/x402-sponsor-relay#431 and #432.

@sonic-mast

Copy link
Copy Markdown
Contributor Author

@biwasxyz one question for the maintainers, separate from this PR's diff: Brandon mentioned the aibtc MCP has moved to non-sponsored x402 transactions because the sponsor relay isn't stable. The skills engine on main still builds every x402 payment as sponsored: true (x402.service.ts), so payers using this or any other paid skill are on the relay path. Is the engine going to follow the MCP to non-sponsored transactions? If so, I'll update this skill's AGENT.md line "nothing for gas (payments go through the sponsored relay)" and the Prerequisites to match once it lands. Not proposing any src/lib change in this PR.

Brandon Marshall and others added 3 commits September 6, 2026 21:56
…ostic

The shared engine decides whether an x402 transfer is sponsored; the
prerequisites no longer assume the relay pays gas, and the relay-specific
error rows are scoped to sponsored transfers.
…02scan listing

- AGENT.md error table: 422 sponsored_unsupported after a 402 challenge
  (index rejects the payment shape; pay with a different transfer)
- SKILL.md reference: x402scan resource listing
- regenerate skills.json

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…aid envelope and wrapper txid:null

Actions on Celestial Shark's Tier 1 feedback (aibtc bounty mtt3jjrgcf0aa8fb225c):

- project: a panel slug whose free-index score is null is served paid as a
  200 with series: [] and latest.score: null. Refuse before payment;
  --allow-unscored opts in.
- SKILL.md: 'Paid response shape' — envelope (tier, as_of, resource,
  payment{txid,payer,amount,asset,network,payment_identifier}, data,
  suppressed[]) and per-resource data keys, plus payment_receipt.
- AGENT.md: top-level txid:null + txidNote comes from execute_x402_endpoint
  (it reads txid/payment_txid only); payment.txid is the receipt.
- regenerate skills.json

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant