Autonomous A2A micro-service backend utilities.
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Documented (README)
- !No standard license detected
- !Install pipes a remote script into a shell (curl | sh)
git clone https://github.com/Its-fortunatefolly/HubVibeTools overview
# HubVibe
**Machine-payable site compliance audits.** WCAG 2.1 A/AA, SEO, security
headers, and performance — deterministic rules against the real rendered page,
priced per call, payable by software with no account and no human in the loop.
Live: **https://hubvibe-io.com**
Every check is a deterministic rule run against the live page. Nothing here is
a language model judging whether a site looks compliant, and a check that could
not run is returned as an error, never as a passing result.
There are two ways in. Both take under a minute.
---
## 1 — Gate your CI on it: one step, nothing to install
```yaml
- uses: Its-fortunatefolly/HubVibe@v1
with:
url: https://staging.example.com
wallet-key: ${{ secrets.HUBVIBE_WALLET_KEY }}
```
That is the entire integration. Every pull request now runs the full
compliance bundle against your deployed preview and **fails the build on the
regression that caused it** — not in an audit six months later.
- Findings render in the job summary: rule, impact, nodes hit, link to the fix.
- A check that failed to *execute* is an error, never a silent pass — a green
build means the checks actually ran.
- `fail-on-error: false` keeps our outage from ever blocking your deploy;
your real regressions still gate it.
- **$0.10 per PR** for all four checks as one bundle, $0.03 for a single
check. A repo merging 100 PRs a month spends $10. No subscription, no seat
licence, no minimum.
Gate a promotion on it:
```yaml
- name: Audit staging
id: audit
uses: Its-fortunatefolly/HubVibe@v1
with:
url: https://staging.example.com
wallet-key: ${{ secrets.HUBVIBE_WALLET_KEY }}
- name: Promote to production
if: steps.audit.outputs.passed == 'true'
run: ./deploy-production.sh
```
`wallet-key` is an EVM private key funded with USDC on Base. The step reads the
402, signs, and pays for its own run — no account, no checkout, nothing to
provision first. `max-price-usd` (default `0.15`) is a hard ceiling the client
refuses to sign above, so fund the address like petty cash rather than a
treasury. It needs no ETH: x402 signs the transfer off-chain and the
facilitator pays the gas.
If you already hold a prepaid API key, pass `api-key:` instead of `wallet-key:`
and the step spends that.
## 2 — Point your agent at it: no key, no signup, pay per call
An unauthenticated call is not an error here. It is the price sheet:
```bash
curl -i -X POST https://hubvibe-io.com/audit/wcag \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}'
```
```
HTTP/1.1 402 Payment Required
WWW-Authenticate: Payment ...
{
"error": "payment_required",
"price_usd": 0.03,
"accepts": [ { "protocol": "x402", ... }, { "protocol": "mpp", ... } ],
"docs": "/.well-known/agent.json"
}
```
An agent reads the 402, signs an x402 payment (USDC on Base), retries with
`X-PAYMENT`, and gets the audit. Payment is **verified before the audit runs
and settled only after it produces a result** — a failed audit is never
charged: x402 is settled only once the audit has run (and a settlement the
facilitator refuses withholds the result and charges nothing), a prepaid key
is refunded, and an MPP credential a failed audit consumed is accepted again
on the retry.
For Python agents and swarms, the bundled tollbooth client does the whole
loop — challenge, budget check, signing, retry — with two hard spending
limits enforced *before* anything is signed:
```python
from integrations.hubvibe_tollbooth import HubVibeTollbooth
booth = HubVibeTollbooth.from_env() # HUBVIBE_WALLET_KEY or HUBVIBE_API_KEY
result = booth.audit("https://example.com") # full bundle, $0.10
result = booth.audit("https://example.com", endpoint="wcag") # $0.03
```
`accepts` lists only the payment rails that can genuinely settle on this
deployment. A rail that is not configured is omitted rather than advertised
with a null recipient, so a paying agent never builds a payment that cannot
land.
**How machines find this node without being told the URL:** every 402
carries x402 Bazaar discovery data, so the facilitator catalogs this node by
capability and price on the payment that settles through it — the spec has no
other ingestion path; the [`/mcp`](https://hubvibe-io.com/mcp) endpoint is
published in the official MCP registry as
`io.github.Its-fortunatefolly/hubvibe`;
and [`/.well-known/agent.json`](https://hubvibe-io.com/.well-known/agent.json)
is generated from the same catalog the routes charge from, so the advertised
price is the charged price by construction.
## Endpoints
| Route | Price | Checks |
|---|---|---|
| `POST /audit/wcag` | $0.03 | WCAG 2.1 A/AA via axe-core, against the rendered page |
| `POST /audit/seo` | $0.03 | Title, meta description, H1s, canonical, OpenGraph, structured data, lang |
| `POST /audit/security` | $0.03 | HTTPS, HSTS, CSP, X-Content-Type-Options, clickjacking, Referrer-Policy, CORS |
| `POST /audit/performance` | $0.03 | DOM nodes, transferred bytes, request count from one real page load |
| `POST /audit/bundle` | $0.10 | All four against one URL, billed once |
Body is `{"url": "..."}`; `wcag` and `seo` also accept raw `{"html": "..."}`.
## Paying
Three rails, all fail-closed — no valid credential means no audit runs:
- **`X-API-Key`** — prepaid key, bought with the MPP top-up rail where it is live
- **`X-PAYMENT`** — x402
- **`Authorization: Payment ...`** — MPP (Stripe Shared Payment Tokens for
fiat, or Tempo for crypto)
Which are live is deployment-specific. Read `accepts` in any 402, or
`payment.methods` in the agent manifest — both list only what actually works.
### What you are charged for
Only an audit that produced a result.
- An audit that could not run returns **502** with `billed: false` and is
never settled. x402 payments are *verified* to grant access but only
*settled* after the audit has delivered; a prepaid key debited for the
call is refunded, and a prepaid key bought by an MPP top-up is still
returned on the 502, holding everything it bought.
- A rate-limited request returns **429** with `Retry-After`, checked before any
payment is touched, so it costs nothing.
- A settled x402 payment gets a receipt: the facilitator's settle response
(transaction hash, network, payer) comes back on the 200 in the
`PAYMENT-RESPONSE` header (`X-PAYMENT-RESPONSE` for v1 clients), exactly
as the x402 spec describes. The x402 client libraries decode it; the
bundled `hubvibe_tollbooth.py` keeps it as `last_settlement`.
- One signed payment buys one audit. A replayed x402 authorization is
refused with a 402 before it reaches the facilitator.
### What this service will not fetch
Every audit loads the URL you send from inside the deployment, so the node
refuses, with a **400** and before any payment is read: addresses that are
not globally routable (loopback, private ranges, link-local, the cloud
metadata endpoint), internal hostnames, schemes other than `http`/`https`,
and names that do not resolve. Raw `html` is capped at 2 MiB. None of that
costs the caller anything.
## Discovery
Agents shouldn't have to read documentation to use this:
| | |
|---|---|
| [`/.well-known/agent.json`](https://hubvibe-io.com/.well-known/agent.json) | Full manifest — pricing, live rails, limits, per-endpoint examples |
| [`/openapi.json`](https://hubvibe-io.com/openapi.json) | OpenAPI 3.1 |
| [`/mcp.json`](https://hubvibe-io.com/mcp.json) | MCP tool definitions |
| [`/llms.txt`](https://hubvibe-io.com/llms.txt) | Plain-text summary |
| [`/docs`](https://hubvibe-io.com/docs) | Interactive reference |
## Integrations
In [`wcag-audit-engine/integrations/`](wcag-audit-engine/integrations/):
- **`mcp_server.py`** — MCP server exposing all five audits as tools, built on
the official SDK. Standalone, with its own `mcp_requirements.txt`: the `mcp`
package needs a newer Starlette than the deployed service pins for FastAPI,
so it is deliberately kept out of the service's dependency tree.
- **`langchain_tool.py`** — LangChain tool wrapper. Subscription key only; it
raises on a 402 rather than paying.
- **`hubvibe_tollbooth.py`** — the client for agents running unattended. Same
audits, but it settles the 402 itself from an EVM wallet via x402, so no
human has to go get a key. Enforces a per-call cap **and** a
process-lifetime budget, both before anything is signed — an autonomous
loop with an unbounded wallet is a drained wallet. Exposes LangChain/CrewAI
tools via `hubvibe_tools()`.
- **`github_action.yml`** — a complete, copyable workflow file. It *calls* the
published action rather than curl-ing the API: a hand-rolled HTTP step has
to re-implement the retry policy, the 4xx no-retry rule and the JSON
encoding of the target URL, and then be maintained against the API by
whoever pasted it. One file, one URL to edit, `on: push` and
`on: pull_request`.
At the repo root:
- **`action.yml`** — the composite GitHub Action, and the single copy of it.
It retries transient failures but never a 4xx (repeating a 402 on a metered
endpoint risks paying twice for one answer), renders findings into the job
summary via `scripts/render_audit_summary.py`, and can be adopted with
`fail-on-error: false` so an outage in this service cannot block someone
else's deploys.
- **`scripts/publish-action-repo.sh`** — generates the standalone repo the
Marketplace listing needs (see below).
- **`glama.json`** — listing metadata for the Glama MCP directory.
## For people, not pipelines
The machine API is the product, and per call is the only price: there are no
subscriptions or human plans (retired 2026-09-06). A person can pay the same
per-call rates through a $0.50 prepaid block where the MPP top-up rail is live.
There is deliberately **no free scan**: an audit costs a real browser page
load, so giving them away funds strangers' compute and invites abuse.
## Publishing the GitHub Action
Two separate things, with different rules:
**Direct use works today.What people ask about HubVibe
What is Its-fortunatefolly/HubVibe?
+
Its-fortunatefolly/HubVibe is tools for the Claude AI ecosystem. Autonomous A2A micro-service backend utilities. It has 2 GitHub stars and its last recorded update is dated 2026-09-12.
How do I install HubVibe?
+
You can install HubVibe by cloning the repository (https://github.com/Its-fortunatefolly/HubVibe) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is Its-fortunatefolly/HubVibe safe to use?
+
Our security agent has analyzed Its-fortunatefolly/HubVibe and assigned a Trust Score of 54/100 (tier: OK). See the full breakdown of passed checks and flags on this page.
Who maintains Its-fortunatefolly/HubVibe?
+
Its-fortunatefolly/HubVibe is maintained by Its-fortunatefolly. The last recorded GitHub activity is dated 2026-09-12, with 0 open issues.
Are there alternatives to HubVibe?
+
Yes. On ClaudeWave you can browse similar tools at /categories/tools, sorted by popularity or recent activity.
Deploy HubVibe to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/its-fortunatefolly-hubvibe)<a href="https://claudewave.com/repo/its-fortunatefolly-hubvibe"><img src="https://claudewave.com/api/badge/its-fortunatefolly-hubvibe" alt="Featured on ClaudeWave: Its-fortunatefolly/HubVibe" width="320" height="64" /></a>More Tools
A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.
An AI skill that provides design intelligence for building professional UI/UX across multiple platforms.
🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman
CLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies
The fastest, litest AI Gateway. Rust core with Python SDK. Call 100+ LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]
Use Claude Code, Codex, Pi, and OpenCode (and 6 other harnesses) for free (1.3B+ free tokens) from your terminal, app, IDE, or phone, and now from the browser with native browser sessions (multi-harness + multi-model) like OpenClaw (voice supported + ToS friendly)