github not analyzable

fxspeiser/crosscheck-agent

github

A compact MCP add-on for Claude Code that lets Claude confer with GPT, Grok, Gemini, Mistral, Groq, and DeepSeek — to reason, debate, plan, and peer-review. One config and bounded limits on rounds, tokens, and time.

maintainer
fxspeiser
license
NOASSERTION
first seen
2026-06-05
last seen
2026-06-21
releases · 30d
0
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged committed secret ×3 in fxspeiser/crosscheck-agent
  2. HIGH code analysis flagged committed secret ×3 in fxspeiser/crosscheck-agent
  3. HIGH code analysis flagged committed secret ×4 in fxspeiser/crosscheck-agent
  4. HIGH code analysis flagged committed secret ×4, dynamic code execution ×5 in fxspeiser/crosscheck-agent
  5. HIGH code analysis flagged committed secret ×7, dynamic code execution ×5 in fxspeiser/crosscheck-agent
capabilities 32 tools
transport stdio · http counts 32 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • actionability

    low

  • audit

    Post-run rubric scoring. Audits an output (from output_to_audit, or pulled from the latest transcript for session_id) against a rubric. The auditor is selected to exclude the producing_panelists so a

  • bench

    Run repo-scoped goldens (*.json in .crosscheck/goldens/) against a panel; rule-based verifiers (contains / regex_match / contains_any / contains_all / not_contains / min_length) score each provider, a

  • confer

    Ask one or more providers the same question in parallel; return every answer.

  • constraint_adherence

    high

  • coordinate

    Structured Proposer → Critic(s) → Synthesizer flow. Each role emits a JSON envelope; the synthesizer emits a validated StructuredSynthesis. Persists key claims to the SQLite claim-list with supports/a

  • covers_open_questions

    med

  • critique

    Have each panelist list the top weaknesses of a proposed answer / plan / code with severity tags (low

  • debate

    Bounded round-trip debate; the configured moderator synthesises a result. Optional structured: true makes the synthesis a JSON-schema-validated object (consensus, dissent, key claims, citations, open

  • delegate

    Cross-model handshake: route a confer or review call through one named provider, with quota tracking by session_id and by requesting provider. Refused calls return accepted: false with a structured re

  • explain

    Replay a session as a navigable tree with cost / latency / token annotations per tool call and per provider call. Reads usage_log and persisted transcripts. Returns both a structured envelope and a pr

  • factual_grounding

    high

  • fetch

    Retrieve a URL with deny-by-default allowlist (fetch.url_allowlist prefix list) and persist a sha256-keyed snapshot under .crosscheck/evidence/. Cached on repeat unless force_refresh: true. Use to gro

  • id

    severity

  • internally_consistent

    med

  • list_providers

    Discover which LLMs are currently available and which are in the active set.

  • max_dag_nodes

    / max_dag_depth — protect orchestrate from a planner that emits an unboundedly wide or deep DAG.

  • max_session_cost_usd

    cumulative dollar cap.

  • max_session_tokens

    cumulative token cap.

  • max_session_wall_seconds

    wall-clock cap.

  • no_pii_leak

    high

  • orchestrate

    Plan-then-execute across sub-agents. The moderator decomposes a goal into a DAG of subtasks (or you pass a pre-authored dag), workers run in parallel where deps allow, and a final synth pass recombine

  • pick

    Multi-criteria decision-making. Each provider scores every option on every criterion (0..1); the tool aggregates with criterion weights, returns a ranked list, and surfaces the top-K cross-provider di

  • plan

    Collaborative step-by-step planning with risks + alternatives. Honours structured: true.

  • recall

    Full-text search across persisted transcripts via SQLite FTS5. Pull prior context out of past sessions without re-running expensive panel calls. Ranks by bm25, returns windowed snippets with [[ ]] hit

  • recommend_panel

    Smart router as a tool. Returns a recommended provider lineup for a given purpose based on accumulated usage_log reliability + cost + engagement, with optional prefer_provider / avoid_provider hints.

  • review

    Peer code / proposal review across one or more LLMs. Pass untrusted_input: true when the snippet may contain prompt injections.

  • scoreboard

    Read-only snapshot: per-provider weight + wins/losses/abstains + delegations, plus totals for sessions/claims/links/delegations and (optional) the last N redacted event lines. The data the UI panel re

  • solve

    Iterative propose → verify → retry. Provider drafts a literal solution; a shell (sandboxed subprocess: timeout, RLIMIT_AS, RLIMIT_CPU, isolated tmpdir) or regex_response verifier accepts or rejects; f

  • triangulate

    Run a coordinate flow and return consensus + minority report plus per-provider weights drawn from accumulated bench / critic-ballot win-rate. The "give me one answer, but be honest about disagreement"

  • update_crosscheck

    Compares your local git HEAD against main at https://github.com/fxspeiser/crosscheck-agent. With apply: true, runs git pull --ff-only in the install directory; the server can't reload itself, so the r

  • verify

    Run a list of deterministic property checks against caller-supplied data — no LLM calls. Supports text-pattern kinds (contains, not_contains, regex_match, contains_any, contains_all, min_length), shel

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

last analysis: too-large · showing evidence from the last successful analysis (5d ago)

filesystem 22

  • fs fxspeiser-crosscheck-agent-270330c/scripts/smoke_full_stack.mjs :15 import { readFileSync, existsSync, mkdtempSync, rmSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/scripts/smoke_panel_confer.mjs :15 import { readFileSync, existsSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/scripts/smoke_panel_debate.mjs :9 import { readFileSync, existsSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/scripts/diff-output.ts :15 import { readFile } from "node:fs/promises";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/scripts/ping-tier-models.ts :32 import { readFileSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/scripts/render-usage.ts :9 import { writeFileSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/core/events.ts :24 import { appendFileSync, mkdirSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/core/node-cache.ts :18 utimesSync, writeFileSync, readdirSync, unlinkSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/core/pricing.ts :20 import { readFileSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/core/sandbox.ts :30 import { mkdtemp, rm } from "node:fs/promises";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/core/transcripts.ts :19 import { mkdirSync, writeFileSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/core/wrappers.ts :22 import { existsSync, readFileSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/entrypoints/node-stdio.ts :17 import { existsSync, mkdirSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/audit.ts :31 import { readdirSync, readFileSync, statSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/bench.ts :19 import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/config-pin.ts :16 } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/create.ts :19 // paths → fs.readFile. Truncation at _CREATE_DOC_MAX_BYTES.
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/explain.ts :11 import { readdirSync, readFileSync, statSync, existsSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/fetch.ts :29 import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/scoreboard.ts :15 import { readFileSync, existsSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/update-crosscheck.ts :22 import { existsSync, mkdirSync, writeFileSync } from "node:fs";
  • fs fxspeiser-crosscheck-agent-270330c/servers/typescript/tsup.config.ts :1 import { readFileSync } from "node:fs";

shell / exec 6

  • shell fxspeiser-crosscheck-agent-270330c/scripts/smoke_full_stack.mjs :14 import { spawn } from "node:child_process";
  • shell fxspeiser-crosscheck-agent-270330c/scripts/smoke_panel_confer.mjs :14 import { spawn } from "node:child_process";
  • shell fxspeiser-crosscheck-agent-270330c/scripts/smoke_panel_debate.mjs :8 import { spawn } from "node:child_process";
  • shell fxspeiser-crosscheck-agent-270330c/servers/typescript/src/adapters/storage/interface.ts :432 exec(sql: string, params?: readonly unknown[]): Promise<number>;
  • shell fxspeiser-crosscheck-agent-270330c/servers/typescript/src/core/sandbox.ts :29 import { spawn } from "node:child_process";
  • shell fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/update-crosscheck.ts :9 // - child_process.spawnSync for git commands (rev-parse, fetch,

network 4

  • net fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/create.ts :18 // - Documents: URL → native fetch (with cache + allowlist); local
  • net fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/fetch.ts :6 // - Uses Node's global fetch (Node 18+) for the HTTP call.
  • net fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/update-crosscheck.ts :11 // - global fetch (Node 18+) for the GitHub API call
  • net fxspeiser-crosscheck-agent-270330c/servers/typescript/src/tools/verify.ts :400 const resp = await fetch(url, {

database 1

  • db fxspeiser-crosscheck-agent-270330c/servers/typescript/src/adapters/storage/better-sqlite3.ts :14 import DatabaseCtor from "better-sqlite3";

declared dependencies 9

  • @modelcontextprotocol/sdk@^1.29.0
  • @types/better-sqlite3@^7.6.13
  • better-sqlite3@^12.10.0
  • zod@^3.25.76
  • @types/node@^22.10.0
  • tsup@^8.3.5
  • tsx@^4.22.4
  • typescript@^5.6.3
  • vitest@^4.1.8