A community-driven registry for the Claude Code ecosystem. Not affiliated with Anthropic.
Are you the author? Sign in to claim
Turn any web page into traceable, citable evidence for AI agents.

Ask a claim. Get page-grounded evidence, verdicts, and citations.
touch-browser is an evidence verification layer for AI agents. It does more than fetch a page or convert HTML to Markdown. It opens a page, compiles a structured snapshot, and tells you whether the current page supports a claim, contradicts it, or still needs more browsing.
Use it when you need:
Evidence-first, not fact-final:
touch-browser helps an AI collect page-local evidence and trace where it came fromBefore the first browser-backed run, check the local runtime:
touch-browser doctor
doctor verifies the installed executable, runtime resources, data root, Node runtime, Playwright Chromium, MCP bridge entrypoint, and semantic model readiness. If it reports attention-required, repair those local dependencies before judging browser behavior.
After installing, run one command to see the product difference from a raw fetch:
touch-browser quick https://www.iana.org/help/example-domains \
--claim "As described in RFC 2606 and RFC 6761, a number of domains such as example.com and example.org are maintained for documentation purposes."
Decision path for the output:
verdict.reviewRecommended.primarySupportSnippet when you need one evidence line.verdictExplanation when the verdict is not obvious.citation.url and citation.retrievedAt when handing evidence to another system.Expected shape:
{
"verdict": "evidence-supported",
"confidenceBand": "high",
"reviewRecommended": false,
"primarySupportSnippet": {
"snippet": "..."
},
"citation": {
"url": "https://www.iana.org/help/example-domains",
"retrievedAt": "..."
}
}
The important signal is not that the page was fetched. It is that the claim was routed into a verdict, a confidence band, a reusable snippet, and a source citation.
MCP hosts do not expose the quick CLI command directly. For MCP, use the same idea as a tool loop: tb_session_create -> tb_open -> tb_extract.
extract ReturnsAbbreviated claimOutcome shape from the current extractor:
{
"statement": "The Starter plan costs $29 per month.",
"verdict": "evidence-supported",
"confidenceBand": "high",
"reviewRecommended": false,
"supportSnippets": [
{
"blockId": "b4",
"stableRef": "rmain:table:plan-monthly-price-snapshots-starter-29-10-000-t",
"snippet": "Starter | $29 | 10,000"
}
],
"verdictExplanation": "Matched direct support in 3 page block(s). Review the attached snippets before reusing the claim."
}
The extractor returns four verdicts:
evidence-supported: the current page surfaced usable supportcontradicted: the current page surfaced conflicting evidenceinsufficient-evidence: the current page did not provide enough direct supportneeds-more-browsing: the current page is not specific enough yet, so the next step is another pageconfidenceBand, reviewRecommended, supportSnippets, verdictExplanation, and matchSignals are there so an agent can decide what to do next without blindly trusting the first match.
claimOutcomeFirst-time users should ignore most fields at first and use this order:
verdict.reviewRecommended is true, do not reuse the claim without a human or second-pass verifier.primarySupportSnippet.verdictExplanation.nextActionHint.Use matchSignals only when you are debugging or comparing evidence quality. It is not the first field to read.
claimOutcomes is the per-call decision log for every submitted claim. evidenceSupportedClaims, contradictedClaims, insufficientEvidenceClaims, and needsMoreBrowsingClaims are status-grouped views of the same extraction result. session-synthesize aggregates those grouped views across opened tabs in a session.
Primary local-host MCP path:
@nangman-infra/touch-browser-mcpRecommended host config:
{
"mcpServers": {
"touch-browser": {
"command": "npx",
"args": ["-y", "@nangman-infra/touch-browser-mcp"]
}
}
}
On first launch, the package downloads the matching standalone runtime bundle from GitHub Releases, verifies the published .sha256, installs it under ~/.touch-browser/npm-mcp/versions/, and then starts touch-browser mcp.
Use this package when you want a local MCP host such as Claude Desktop, Cursor, or Codex to attach without a separate manual runtime install.
Tagged v* pushes now build standalone macOS and Linux bundles in the Standalone Release workflow. Each bundle includes:
bin/touch-browserruntime/touch-browser-binBrowser actions keep the Playwright adapter as the zero-config compatibility default. For new CLI deployments, the main recommended browser engine is the Rust CDP path. Enable it with:
TOUCH_BROWSER_BROWSER_ADAPTER=cdp-rust touch-browser open <target> --browser --session-file /tmp/tb.json
pnpm run fixtures:browser-adapter-parity
The CDP adapter reports browser-backed captures as sourceType: "cdp-rust",
reuses persistent browser context directories, applies the search identity
profile for search-result captures, and is covered by parity fixtures plus CLI
E2E validation for follow, click, type, submit, pagination, expand, iframe,
shadow DOM, SPA updates, download clicks, persistent-session actions, and
cross-origin nested shadow interactions. It still requires Chrome or Chromium.
Set TOUCH_BROWSER_CDP_BROWSER=/absolute/path/to/chrome when it is not
installed in a standard location.
The slim bundle profile is now the default release profile. It includes Playwright Chromium for zero-config browser actions, skips semantic model caches, and downloads semantic/NLI models lazily on first use. This keeps the installed browser path usable on first run while still reducing model-cache weight:
pnpm run build:standalone-bundle -- local-dev
Use the full profile only when an offline bundle must also include warm model caches:
pnpm run build:standalone-bundle:full -- local-dev
When a tagged release is published, download the matching tarball from GitHub Releases, unpack it, and run:
./touch-browser-<version>-<platform>-<arch>/install.sh
touch-browser telemetry-summary
touch-browser update --check
To build the same portable bundle locally:
pnpm install --frozen-lockfile
pnpm run build:standalone-bundle -- v0.1.0-rc1
# Then install the bundled command into PATH
./dist/standalone/touch-browser-v0.1.0-rc1-<platform>-<arch>/install.sh
touch-browser telemetry-summary
touch-browser update --check
The standalone path is still the official CLI, operations, offline, and fallback install path:
install.shtouch-browser command for every CLI and serve operationThe installer now performs a managed install:
~/.touch-browser/install/versions/<bundle-name>~/.touch-browser/install/current~/.touch-browser/install/current/bin/touch-browsertouch-browser update swaps current to a newly verified release bundletouch-browser uninstall --purge-all --yes removes the managed install and all stored dataThis is the command-only proof path that matches the installed user experience:
touch-browser open https://www.iana.org/help/example-domains --browser --session-file /tmp/tb-first-run.json
touch-browser session-read --session-file /tmp/tb-first-run.json --main-only
touch-browser session-extract --session-file /tmp/tb-first-run.json \
--claim "As described in RFC 2606 and RFC 6761, a number of domains such as example.com and example.org are maintained for documentation purposes."
touch-browser session-synthesize --session-file /tmp/tb-first-run.json --format markdown
touch-browser session-close --session-file /tmp/tb-first-run.json
Installed search now keeps an engine-level persistent trust profile by default:
~/.touch-browser/browser-search/profiles/google-default~/.touch-browser/browser-search/profiles/brave-default~/.touch-browser/browser-search/<engine>.profile-state.jsonPrerequisites: rustup, Node.js 18+, pnpm.
bash scripts/bootstrap-local.sh
cargo build --release -p touch-browser-cli
pnpm run build:standalone-bundle -- local-dev
./dist/standalone/touch-browser-local-dev-<platform>-<arch>/install.sh
Source checkout is a contributor workflow. Release and operations docs still assume the installed touch-browser command from the standalone bundle.
bootstrap-local.sh installs the default semantic models under:
~/.touch-browser/models/evidence/embedding~/.touch-browser/models/evidence/nliUse TOUCH_BROWSER_EVIDENCE_EMBEDDING_MODEL_PATH or TOUCH_BROWSER_EVIDENCE_NLI_MODEL_PATH only when you need to override those default locations.
touch-browser is not trying to replace every crawler or browser tool. Its job starts after page acquisition.
| Need | Markdown-only fetch | touch-browser |
|---|---|---|
| Read the page | yes | yes |
| Keep source-linked block refs | partial | yes |
| Judge whether the page supports a claim | no | yes |
| Return contradiction and unresolved states | no | yes |
| Give support snippets and verdict explanations | no | yes |
| Tell the agent to escalate instead of answering | no | yes |
These are the latest local benchmark rerun signals from 2026-05-05, not a promise about every future public page:
| Benchmark | Current generated signal |
|---|---|
| Public web benchmark | 4/4 task-proof claims evidence-supported on IANA and RFC Editor pages |
| Real-user research benchmark | average supported claim rate 1.00 across 3 MCP-driven public-doc scenarios |
| Adversarial benchmark | verified exact verdict accuracy 1.00, raw exact verdict accuracy 0.80, unsafe auto-answer count 0 |
| Citation metrics | classification, citation, unsupported-claim, and support-ref precision/recall 1.00 across 34 fixtures |
| Tool comparison benchmark | extract false-positive rate 0.17 vs markdown-baseline false-positive rate 0.33 on plausible negative claims |
| Evidence-grounded web research benchmark | current seed 61 claim/fixture units with status seed-validated, target corpus 1000 claims |
See benchmarks/README.md for the benchmark map and generated report locations.
Primary surface:
extract: verify claims against the current page and return structured claim outcomesSupporting read surfaces:
read-view: readable Markdown for a human reviewer or verifier modelcompact-view: low-token semantic state for agent loopssearch: structured discovery before opening candidate pagesSafety and audit surfaces:
policy: classify pages and actions as allow, review, or blocksession-synthesize: turn a multi-page session into JSON or Markdown with citationsserve: expose the runtime over stdio JSON-RPC for MCP or agent integrationRecommended MCP setup for local hosts:
{
"mcpServers": {
"touch-browser": {
"command": "npx",
"args": ["-y", "@nangman-infra/touch-browser-mcp"]
}
}
}
The MCP package is intentionally narrower than the full CLI:
tb_search -> tb_search_open_top -> tb_read_view -> tb_extracttb_session_create accepts an optional caller-provided sessionId for external correlationtb_open needs target for stateless use; with sessionId, it can omit target to reopen the active tab URLtb_read_view, tb_extract, and tb_policy can omit target when sessionId points at an opened active tabtb_extract always needs claimstb_session_synthesize needs sessionId and at least one opened tabnotifications/progress when the host provides _meta.progressTokentb_cancel can reset the daemon; use MCP notifications/cancelled for an in-flight requestengine is not exposed over MCPheaded is not exposed over MCPAlternative MCP bridge setup for an installed standalone command:
{
"mcpServers": {
"touch-browser": {
"command": "touch-browser",
"args": ["mcp"]
}
}
}
The bridge starts touch-browser serve underneath and exposes tools like tb_search, tb_search_open_top, tb_open, tb_read_view, tb_extract, tb_tab_open, and tb_session_synthesize.
Repository checkout integration asset:
{
"mcpServers": {
"touch-browser": {
"command": "node",
"args": ["integrations/mcp/bridge/index.mjs"]
}
}
}
The standalone bundle ships touch-browser mcp and touch-browser serve. The checked-in Node launcher remains a repository integration asset for repo checkouts or container images.
By default the bridge prefers an explicit TOUCH_BROWSER_SERVE_COMMAND, then an explicit binary path, then an installed or packaged touch-browser binary, then repo-local target/{release,debug} binaries. If none are available, it fails fast with an install/build instruction instead of dropping back to cargo run.
Use TOUCH_BROWSER_SERVE_COMMAND if you want to force a specific built binary or wrapper command.
Query / URL / fixture / browser tab
-> browser-first search result parsing
-> Acquisition
-> Observation compiler
-> read-view / compact-view
-> extract (evidence + citations + optional verifier)
-> policy
-> session synthesis / replay
-> CLI / JSON-RPC serve / MCP
This repository now uses MPL-2.0.
MPL-2.0Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
English-first Korean equity intelligence MCP — DART filings, foreign-holder 5%-rule flows, activist filings, KRX news. F
Unity MCP acts as a bridge between AI assistants and your Unity Editor. Give your LLM tools to manage assets, control sc