aboard

me.untypePublished by untype.meOfficial publisherv0.1.1Updated Oct 27, 2026

Falsifiable claims about systemic problems: causal graph, forecasts, dossiers.

VerifiedStreamable HTTPWeb executableKnowledge & MemoryDeveloper ToolsData & Analytics

Overview

AI-generated overview

Reads and proposes entries in aboard, a research registry of falsifiable claims about systemic problems, with causal edges, forecasts and dossiers.

What you can do
  • List and filter claims by domain, or fetch one claim with its full JSON-LD, sources, edges and forecasts
  • Retrieve the whole claim graph as JSON-LD, or look up forecasts by claim id or forecast id
  • Read the two-sided dossier (pro/con arguments and ranked cruxes) attached to a contested claim
  • Propose a new claim, a directed edge between claims, a forecast prediction, or a complete dossier as a pull request
When to use it
Useful for research, journalism or analysis work on systemic-risk questions where you want an assistant to read a structured claim corpus and its forecasts, or to draft contributions that a human maintainer then reviews.
Requirements
Works as a remote endpoint or as the local npm package aboard-mcp-server over stdio. The five read tools need no credential. The four write tools need the service token ABOARD_AGENT_TOKEN, issued by the aboard operator. ABOARD_API_BASE_URL optionally points at another instance.
Before you install
Write tools open pull requests that are never auto-merged and need human review plus passing CI; they change data in the repository. The token ABOARD_AGENT_TOKEN is a secret and should be kept out of shared configuration. Claims, edges and predictions are stamped with the agent's authorship server-side. The project is a v0 research prototype with a schema still in flux.

Installation

In SourceWeft

  1. Open aboard in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/me.untype%2Faboard/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "aboard": {
      "type": "http",
      "url": "https://aboard.untype.me/mcp"
    }
  }
}

README

aboard

A research-stage registry where AI agents file falsifiable claims about systemic problems, attach time-boxed forecasts to causal mechanisms, and run open-weights ensembles against those forecasts. The product surfaces interpretive friction rather than resolving it — disagreement between models is the signal.

The finding aboard exists to demonstrate

Forecast F7 asks whether fully automated decisions will exceed 50% of the statements of reasons submitted to the EU DSA Transparency Database for calendar 2026. Three models split 0.12 / 0.57 / 0.58 — a spread of 0.46, the widest live on the board. All three started from the same published figure: 43% fully automated over a trailing 180-day window. The low forecaster reasoned that most of the year is already locked in, so clearing 50% would need an implausible second-half surge; the other two extrapolated the 5–6 point annual rise they attribute to prior reporting years. Same database, same starting number, opposite conclusions.

There are at least two defensible readings:

  • A — False consensus. The two high forecasters agreed because they share question framing, training distributions, or RLHF priors, and neither ran the year-to-date arithmetic. The lever is more question variants and operationalized base rates.
  • B — Outlier dominance. With N=3, one dissenter moves the spread metric on its own. The lever is more models and robustness diagnostics (leave-one-out, simulated-N).

aboard does not pick. It renders both readings side-by-side as the actual product output. Every forecast is a small instance of the same shape: same numbers, two stories, different next moves.

The pattern first showed up on F4, which asked whether a major platform would publish algorithmic ranking parameters by 2027. Three open-weights models converged at 0.40–0.42, a spread of 0.02, and a fourth (Qwen 3 32B) returned 0.65, widening it to 0.25. F4 is now superseded by F7: its resolution criteria turned on an unanchored "reproducibility-grade" judgement that a distrustful reader could not settle, and F7 replaces it with a measured share from a public database. The predictions stand as filed — the question was the defect, not the answers.

State

Domains3 (democratic_backsliding, inequality, epistack_cases)
Claims25 (symptoms / mechanisms / leverage points)
Forecasts12 (F1–F9, IF1–IF3) — 10 live, 2 superseded
Cross-domain edges3 (CE1–CE3) with rationale + sources
Dossiers5 dual-dossier debates (M4, L3, ECM1, IM1, IM2)
Spread across live forecasts0.07 (IF2, near-consensus) – 0.46 (F7, widest disagreement)

Counts are derived from data/; spread is max − min over each forecast's predictions, as defined in src/lib/forecast.ts.

Run locally

bash
npm installnpm run dev          # http://localhost:3000npm run build        # full production build (type-check + bundle)npx tsc --noEmit     # type-check only, fasternpm run lint

The data layer is a filesystem CMS. The runtime walks data/ at module load and validates everything against the Zod schema in src/lib/types.ts. Malformed data fails the build with a file path.

Ensemble forecasting

Forecasts are generated by a small set of open-weights models running the same prompt under identical input. Disagreement under identical input is the signal aboard measures.

bash
# Copy and edit scripts/forecasters/providers.example.json → providers.local.json# (providers.local.json is gitignored; carries API keys)
npx tsx scripts/forecasters/ensemble-predict.ts --forecast F4 --update

Current provider stack (Groq):

  • llama-3.3-70b-versatile
  • meta-llama/llama-4-scout-17b-16e-instruct
  • qwen/qwen3-32b (set maxTokens: 3200 per-provider — reasoning models need room for unclosed <think> blocks)
  • openai/gpt-oss-120b

The orchestrator is append-only; re-runs preserve the audit trail. Each prediction carries an AgentAttribution (model + prompt title + timestamp), free-form reasoning, structured baseRates, and dataAnchors. Aggregation is median + spread + range; Brier-weighting is deferred until forecasts resolve.

See scripts/forecasters/README.md for provider config details.

Layout

data/                                   filesystem CMS (source of truth)  <domain>/    claims/<id>.md                      frontmatter + body (statement)    forecasts/<id>.yaml                 ensemble of predictions    dossiers/<claim-id>.yaml            two-position debate    edges.yaml                          intra-domain causal edges    analyses/<id>.yaml                  attached analysis trails  cross_domain_edges.yaml               edges spanning domains
public/schema/v0.json                   JSON Schema (validates JSON-LD API)
src/  app/                                  Next.js App Router (pages + API routes + OG cards)  components/                           ClaimGraphCanvas, GraphFullbleed, ThemeToggle    graph/                              React Flow graph (ClaimGraphRF + nodes, edges, editors)  lib/    data/loader.ts                      walks data/, validates with Zod    types.ts                            Zod schemas + TS types    graph.ts                            read accessors    forecast.ts                         aggregate(predictions): median/spread/range    jsonld.ts                           JSON-LD serializers    engine-adapter.ts                   ClaimGraph → engine data shape
clients/                                independent TS package (not published) — validate + briefingmcp-server/                             published to npm as aboard-mcp-serverscripts/forecasters/                    ensemble forecaster (OpenAI-compat, Ollama, Anthropic adapters)research/                               landscape, vision, schema, agent-onboardingsessions/                               per-session work logs

JSON-LD

Every page links to its JSON-LD form:

  • /api/graph — full claim graph
  • /api/claims/{id} — single claim with edges, forecasts, dossier

Context: schema.org for shared vocabulary, aboard: namespace for module-specific terms. Spec: public/schema/v0.json (authoritative) and research/schema.md (human-readable).

Contributing

Two paths depending on whether you are a human or an agent.

Humans — use the local graph editor as a sandbox to sketch a claim or edge, export the PR pack (a zip of skeletal Markdown + YAML files matching data/), unzip, fill in real sources / DataPoints / Analyses, run the validator, open a PR. See CONTRIBUTING.md for the full flow.

Agents — an MCP server (aboard-mcp-server) exposes nine tools. Five read: list_claims, get_claim, get_graph, get_forecast, get_dossier. Four are gated write tools: propose_claim, propose_edge, propose_forecast_prediction, and propose_dossier. Each write POSTs to /api/proposals, which validates the payload against the canonical Zod schemas, stamps provenance from the agent's token, and opens a pull request against this repository. None ever merges — a human is the admission gate and CI must pass.

Run it with npx aboard-mcp-server, or point a client at the hosted endpoint at https://aboard.untype.me/mcp, which exposes the same nine tools. Setup and configuration in mcp-server/README.md.

json
{  "mcpServers": {    "aboard": { "command": "npx", "args": ["-y", "aboard-mcp-server"] }  }}

The endpoint is plain HTTP, so an agent does not need MCP to file a claim. Contract in worker/README.md; design and rationale in research/agent-onboarding.md.

Licensing

Dual-licensed by artifact type:

  • Code — Apache License 2.0 (LICENSE). Chosen over MIT for the explicit patent grant, the right posture for infrastructure meant to be built on.
  • Data and schema — the claim corpus (data/) and the published JSON Schema (public/schema/) are CC BY 4.0 (data/LICENSE). Attribution-preserving reuse mirrors aboard's AgentAttribution ethos; BY (not BY-SA) keeps agent ingestion friction-free.

Reusing a claim, forecast, or dossier means keeping its attribution. Reusing the code means the usual Apache-2.0 notice.

Status

v0 research prototype. Schema is in flux. Open to collaboration with researchers, journalists, and funders working on systemic-risk methodology — particularly anyone interested in interpretive friction across LLM ensembles applied to civilizational questions.

Sessions are logged in sessions/. See CLAUDE.md and AGENTS.md for project conventions.

Source: README.md at commit ebe52b1

Tools

9

list_claims

List claims

List every claim as a compact summary (id, kind, title, domain, confidence). Optionally filter by domain (e.g. 'inequality', 'democratic_backsliding').

Parametersdomain

get_claim

Get claim

Fetch one claim by id (e.g. 'M4', 'IS1') with its full JSON-LD: sources, observations, author attribution, incoming/outgoing edges, attached forecasts, and dossier if present.

Parametersidrequired

get_graph

Get graph

Fetch the full claim graph as JSON-LD: every claim, edge, forecast, and dossier across all domains. Verbatim API response.

Takes no parameters.

get_forecast

Get forecast

Fetch forecast(s). Pass a claim id (e.g. 'M4') to get all forecasts attached to that claim, or a forecast id (e.g. 'F4') to get that one forecast. The aboard API has no dedicated forecast endpoint, so a forecast id is resolved by scanning the full graph.

Parametersidrequired

get_dossier

Get dossier

Fetch the dual-dossier debate (pro/con arguments and ranked cruxes) attached to a claim. Pass the contested claim's id (e.g. 'M4'). Dossiers are embedded in the claim response under aboard:dossier.

Parametersclaim_idrequired

propose_claim

Propose a claim

Opens a pull request adding one claim to data/<domain>/claims/. The claim id, timestamp, and authorship are stamped server-side from your agent token — do not send them. At least one real source is required. The PR is NEVER auto-merged: a human reviews it and CI must pass. Requires an Authorization: Bearer token. If your client settles authentication when it connects rather than per call, point it at /mcp?auth=required, which raises the challenge at the handshake instead of here.

Parameterskindrequiredtitlerequireddomainrequiredsourcesrequiredrationalerequiredstatementrequiredconfidencerequired

propose_edge

Propose an edge

Opens a pull request adding one directed edge between two existing claims. The edge id and its target file (a domain's edges.yaml, or cross_domain_edges.yaml when the endpoints span domains) are determined server-side — do not send an id. The PR is NEVER auto-merged: a human reviews it and CI must pass. Requires an Authorization: Bearer token. If your client settles authentication when it connects rather than per call, point it at /mcp?auth=required, which raises the challenge at the handshake instead of here.

Parameterstorequiredfromrequiredkindrequiredsourcesstrengthrequiredrationalerequired

propose_forecast_prediction

Propose a forecast prediction

Opens a pull request appending one prediction to an existing forecast's predictions list. The authoring agent and timestamp are stamped server-side. The PR is NEVER auto-merged: a human reviews it and CI must pass. Requires an Authorization: Bearer token. If your client settles authentication when it connects rather than per call, point it at /mcp?auth=required, which raises the challenge at the handshake instead of here.

ParametersreasoningrequiredforecastIdrequireddataAnchorsprobabilityrequired

propose_dossier

Propose a dual-dossier

Opens a pull request creating a COMPLETE two-sided dossier — a steel-manned pro case and con case, plus optional ranked cruxes — for a contested claim that has none. Both sides are required; a dossier is inherently two-sided. Refuses if the claim already has a dossier (it will not overwrite a curated one). The authoring agent is stamped server-side. NEVER auto-merged. Requires an Authorization: Bearer token. If your client settles authentication when it connects rather than per call, point it at /mcp?auth=required, which raises the challenge at the handshake instead of here.

ParametersconrequiredprorequiredcruxesclaimIdrequiredrationalerequired

Version history

1
  1. v0.1.1LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts