JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [
"ai-agents",
"claude-code",
"cli",
"codex",
"coding-agents",
"developer-tools",
"local-first",
"mcp",
"secrets-management",
"security"
],
"is_fork": false,
"size_kb": 2050,
"has_wiki": false,
"homepage": "https://switchboard-beta-nine.vercel.app",
"languages": {
"CSS": 22291,
"HTML": 27950,
"JavaScript": 285653,
"TypeScript": 1703751
},
"pushed_at": "2026-07-18T23:39:10Z",
"created_at": "2026-06-18T20:03:53Z",
"owner_type": "User",
"updated_at": "2026-07-18T23:39:12Z",
"description": "A firewall and password manager for your AI coding agents.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript",
"JavaScript"
]
},
"owner": {
"blog": null,
"name": "Wilson Kiagiri Overfield",
"type": "User",
"login": "wkoverfield",
"company": null,
"location": null,
"followers": 12,
"avatar_url": "https://avatars.githubusercontent.com/u/122052931?v=4",
"created_at": "2023-01-05T19:49:13Z",
"is_verified": null,
"public_repos": 12,
"account_age_days": 1295
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.2.2",
"kind": "patch",
"published_at": "2026-07-18T23:28:56Z"
},
{
"tag": "v0.2.1",
"kind": "patch",
"published_at": "2026-07-17T23:13:37Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2026-07-14T02:15:35Z"
}
],
"recent_commits": [
{
"oid": "4893b61b14d4ecf76768777d7e4fc4d654afb3bf",
"body": "The MCP registry caps server.json description at 100 characters; the\nconsolidation copy pushed it to 128. Drop the trailing clause so it matches\nthe npm package descriptions and validates.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Trim the registry description to the 100-character limit (#205)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-18T23:39:08Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d1e37e1b657aaf40b0125f45930d03d518e72e03",
"body": "* Release 0.2.2\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n* Publish the spawn attenuation doc to the docs MCP bundle and the site\n\nThe attenuation security doc existed in the repo but was registered in\nneither the docs-mcp bundle manifest nor the site docs manifest, so it\nshipped nowh\n[…]\nts at the file that actually governs, falling back to the\ndefault when unset.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Release 0.2.2 (#202)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-18T21:40:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3dc6b3047c5a4cefaf9bc7ac4ec348337b00bc0a",
"body": "* Add spawn-time auto-attenuation for Claude Code subagents\n\nGive each subagent spawn its own attenuated child pass automatically, so a\ndelegated worker runs under its own id, its own audit trail, a lease bound to\nthe parent, the inherited seatbelt floor and deny lists, and cascading\nrevocation, whi\n[…]\ntall/status.\nSetup's hooks step inherits the fix through the shared resolver.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add spawn-time auto-attenuation (opt-in, single-level v1) (#201)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-18T21:21:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7df7a8bb28733a705f41de1d95f39c4d6a1555c6",
"body": "* Resolve each daemon-routed call against the repo its path touches\n\nA user-scoped `switchboard mcp` entry launches with no `--cwd`, so one daemon\nserves a session that may start at `~` and work across several repos. Previously\nevery call resolved config, profiles, and pass against the session's lau\n[…]\nby argument key order (which an agent could use to\nsteer to the weaker repo).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add lazy per-call repo resolution with only-strengthen governance (#200)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-18T20:13:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "93cb7fc32dc1e2f51ddcf280d1510962a30b53d0",
"body": "* Add the ambient seatbelt: default-on catastrophe denylist with approvable retry\n\nRouted MCP calls are now checked against a small catastrophe denylist on\nevery call: with no pass bound (approvals keyed under a synthetic\n\"seatbelt\" id, 15-minute approval window) and as an un-removable floor\nunder a\n[…]\nases and must-not-trip\nnon-prod redeploy and read-only-inside-subshell cases.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add the ambient seatbelt: default-on catastrophe denylist (#199)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-18T18:18:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "60f3dc83f3a089ec343e307180d55ab6e982465b",
"body": "Co-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Release 0.2.1 (#198)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-17T21:51:55Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "afc48a007074bc4f4b8f19b02f1ffbf8537392db",
"body": "…acked rollback (#197)\n\n* Add machine-level switchboard setup with one-command rollback\n\nswitchboard setup without a preset now sets up the whole machine: scan,\nrepo import (skippable with --skip-import), a value-untouched secrets\nstep that prints the exact secrets set <ref> commands without ever\nre\n[…]\nion claim to project-scope\nclient config and describes the snapshot behavior.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add switchboard setup: one-command machine onboarding with manifest-b…",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-17T21:45:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "685bf89b48906e925caec6e881461ca0006d14a9",
"body": "… (#194)\n\n* Make install codex --scope user manage ~/.codex/config.toml\n\nswitchboard install codex --scope user previously only printed a codex\nmcp add command. It now manages the user-level Codex config the same way\nproject scope manages .codex/config.toml: dry run prints the exact TOML\nand target \n[…]\nel tests never\nread the real home directory of the machine running the suite.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Manage user-scoped Codex config and surface user-level client servers…",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-16T19:57:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5f27be6ea9f8be49bed9c74af0f8e54a09d1ca8c",
"body": "…#195)\n\nThe trust model now states the pass model in OAuth token exchange terms\n(issuer, subject, actor, attenuated scope) so the delegation semantics are\nlegible against RFC 8693, and notes why the envelope is a local lease rather\nthan a token. The existing harness-scoped mandates doc is published to the\ndocs site as Concepts > Delegation Model.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: map the pass model to RFC 8693 and publish the delegation doc (…",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-16T19:57:28Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "446fed9b372dc872a7bf13db72636aa70a92dbae",
"body": "…ge, and hero copy (#193)\n\nThe registry, npm, and llms descriptions now state that Switchboard is one\nplace for every agent's MCP servers and secrets, and the hero subcopy leads\nwith pulling existing servers into one routed place. The README headline is\nunchanged.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: describe MCP server and secret consolidation in registry, packa…",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-16T19:57:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2ff78bb352fb59ae8594551dea11014975037204",
"body": "* feat(site): restore team interest intake\n\nConnect the roadmap card to a validated Formspree endpoint and keep submission feedback inline and accessible.\n\nCo-Authored-By: OpenAI Codex <codex@openai.com>\n\n* fix(site): unify GitHub star link\n\nRemove the internal divider and reserved badge spacing so the label and count read as one navigation item.\n\nCo-Authored-By: OpenAI Codex <codex@openai.com>\n\n---------\n\nCo-authored-by: OpenAI Codex <codex@openai.com>",
"is_bot": false,
"headline": "Restore the team interest intake (#192)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-15T00:27:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "07b67f482d5724f1128d0503dd5708209e84ea95",
"body": "* feat(site): smooth docs navigation\n\nKeep the landing and docs navigation visually continuous, add native cross-document transitions, and simplify the product loop playback behavior.\n\nCo-Authored-By: OpenAI Codex <codex@openai.com>\n\n* refactor(site): tune docs navigation motion\n\nDifferentiate occas\n[…]\n\n\nDisplay a compact cached repository star count in the shared landing and docs navigation.\n\nCo-Authored-By: OpenAI Codex <codex@openai.com>\n\n---------\n\nCo-authored-by: OpenAI Codex <codex@openai.com>",
"is_bot": false,
"headline": "Smooth docs navigation and simplify the product loop (#191)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-14T23:40:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9f31252e9694f8a677dbd825ffeb925e6af7242f",
"body": "Unify the public site, generated docs, and local dashboard around one authority-focused interface. Align setup examples with the shipped import and pass flow, expose explicit local state and audit outcomes, and harden the dashboard's loopback boundary.",
"is_bot": false,
"headline": "Redesign landing page and local dashboard (#190)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-14T19:59:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ad65f035efe95774144c14edc6b9c6792fa88aea",
"body": "The repository is public. Planning, strategy, and evaluation documents were\nbeing published alongside the product documentation. Remove them and keep the\nrepo to the code plus the documentation a user or an agent actually needs.\n\nRemoved:\n- AGENTS.md\n- docs/product/{README,roadmap,mandate-strategy,e\n[…]\necurity, reference, providers, use-case,\nand demo docs are unchanged.\n\nAlso ignore .claude/ and .codex/, which hold local client configuration.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Remove internal working documents from the repo (#189)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-14T19:37:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a602360c46d2f29689e8453cc970bbb49ddd0150",
"body": "* Remove agent prompt hover preview\n\nKeep the setup prompt as a direct copy action without exposing a hover or focus tooltip.\\n\\nCo-Authored-By: OpenAI Codex <codex@openai.com>\n\n* Anchor stat sources to the pointer\n\nFollow the cursor with collision-aware source tooltips and remove redundant source labels from the stat cards.\\n\\nCo-Authored-By: OpenAI Codex <codex@openai.com>",
"is_bot": false,
"headline": "Refine landing-page hover interactions (#188)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-14T05:49:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "03b12eec3e94e37587d64cc5ad55b4937dd06397",
"body": "Resolve symlink-equivalent repository paths consistently during pass lookup and report controlled single-client installations as ready.\\n\\nCo-Authored-By: OpenAI Codex <codex@openai.com>",
"is_bot": false,
"headline": "Fix golden-path authority readiness (#187)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-14T05:49:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dbb89cae4a4f483bcee6d7012ed9865fe49fd22c",
"body": "Set strict local enforcement, ignore generated client routing files, and move the active roadmap slice to blind human validation.\\n\\nCo-Authored-By: OpenAI Codex <codex@openai.com>",
"is_bot": false,
"headline": "Close post-release authority gaps (#184)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-14T04:18:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "73f977496044363c30c6363f863be7766b5cff2c",
"body": "Co-authored-by: OpenAI Codex <codex@openai.com>",
"is_bot": false,
"headline": "Prepare Switchboard 0.2.0 (#183)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-14T01:50:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "155ce945402e76d9001994c024bef3f34df39400",
"body": "Co-authored-by: OpenAI Codex <codex@openai.com>",
"is_bot": false,
"headline": "Move stat citations into card popovers (#182)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-14T01:42:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c87f40e5dddc03e12ccbf981eb80b6a899d27c34",
"body": "The landing page says status tells you which mode you are in, but status did\nnot surface enforcement at all. Add `enforcement` to the status JSON and a\nhuman-readable line (\"Enforcement: strict (no pass means no routing)\" /\n\"Enforcement: default (no pass means configured profiles are served\nungoverned)\"), so a user in strict mode can confirm it and the claim holds.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Report the enforcement mode in switchboard status (#181)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-14T00:36:29Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "bc5b65d40b32e6fdcee387dbda2040451226ccf5",
"body": "The hash chain proved no in-place edit, insertion, deletion, or reordering\nwithin the retained file, but it could not see a tail-truncation: deleting\nthe last N entries leaves a valid prefix that verify accepted as \"Chain: OK\".\nThat defeats the whole tamper-evidence claim, since the cheapest attack \n[…]\nmoved-marker,\nand loud-fail-open cases. Updates threat model section 10 + accepted risks,\naudit-logs.md, the public roadmap, and the CHANGELOG.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Make the audit log detect tail-truncation and fail loud (#180)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-14T00:30:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f9e08fc86cd9119a1bd18918e5eae89a5f126814",
"body": "Today, when no pass is bound, the routed paths serve all configured\nprofiles with no tool policy (\"no pass, no policy\"). This adds an opt-in\ndefault-deny so that \"no pass\" can mean \"nothing moves\".\n\nSurface: a top-level `enforcement: strict` key in .switchboard.yaml, and\n`--strict` on `switchboard m\n[…]\nis rejected. Plus a router unit test and config\nschema tests. Updates threat-model 4.3 + accepted risks, the public roadmap,\nand the CHANGELOG.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add opt-in strict mode: no pass, no route (#179)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T18:35:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ea4d53af58f9bfd38db14b66c1d08172934fd6d2",
"body": "# Conflicts:\n#\tCHANGELOG.md",
"is_bot": false,
"headline": "Merge branch 'feat/storefront'",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T17:28:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90ed45c07e88dc264e10ce0120c32bd4162b3825",
"body": "# Conflicts:\n#\tCHANGELOG.md",
"is_bot": false,
"headline": "Merge branch 'feat/denial-demo-dashboard'",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T17:27:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b83e6737244ec6aa4db85baf058ef063876c6383",
"body": "# Conflicts:\n#\tCHANGELOG.md",
"is_bot": false,
"headline": "Merge branch 'feat/audit-hash-chain'",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T17:26:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9042eab746f0189429dae26dbac6759b3deed966",
"body": "Section 04: fail-open line becomes strict-mode framing (\"run in strict\nmode and no pass means nothing routes\"), and the audit item now claims\ntruncation detection alongside tampering. The threat model and\naudit-logs docs get updated in lockstep by the enforcement work.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Claim strict mode and truncation detection now that both shipped",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T17:24:28Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "83200e280e48e8f181a59cf4dcb5d7a627d055fe",
"body": "The preview still appears on hover; the label was clutter.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Drop the \"hover to preview\" hint on the prompt pill",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T17:15:37Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2fc62e67c0a2f6261e90684625d2087879fdb8d7",
"body": "- Section 01 now opens on the visceral risk a security buyer feels\n (\"Your coding agent acts with your full access\") and lets the stats\n land as structural backup, instead of leading with the market stat.\n- Cut the redundant first sentence from the topology caption.\n- Removed the top-border divider row above the loop's step columns;\n no other section uses one.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Lead section 01 with the fear; trim caption and step divider",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T17:11:09Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "29f97948dca86fbaf68658945d4231b63aab34dc",
"body": "ALLOWED and A HUMAN DECIDES sat directly on the green and gated\nstrokes and were hard to read. Nudged ALLOWED up and gave both a\npaper-colored halo so the text clears the line beneath it.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Lift the topology edge labels off their lines",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T17:07:13Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0ee51f1516c540afb921e181e602ae5b2111e4fc",
"body": "The \"Switchboard governs ... Quilt tracks what they did\" line was\nconfusing since Switchboard also tracks (the audit log). Removed it.\nAlso dropped the green \"_\" after the wordmark in the nav (landing and\ndocs); the mark carries the identity.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Drop the Quilt sibling line and the trailing wordmark underscore",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T16:59:54Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7cf6217684bba3c7896eda2a494b40cba0c8ae73",
"body": "The credential detail (chip, barcode, serial, holo strip, field\nlabels, holder row) was too much to scan in a diagram. Card now shows\nonly what matters at a glance: the mark + SWITCHBOARD, the scope it\nallows (github_ci_*), everything else denied, and expires in 4h.\nShorter card, more breathing room, still reads as a real pass.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Simplify the pass card to a one-glance read",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T16:56:37Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "735e5dfcc308a2d3c1840701bbcca68b86330bc6",
"body": "New logo: a gate glyph (two posts with a credential passing between\nthem) on a green tile - firewall and pass in one mark. It anchors the\nfavicon, the nav wordmark (landing + docs), and the topology's center\ncard.\n\nThe card is now a proper access badge: issuer lockup (mark +\nSWITCHBOARD + AGENT ACCESS PASS), HOLDER/SCOPE/EXPIRES fields, a\nsmartcard chip, a pass serial, and a barcode, instead of reading like\na bare terminal window.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add a real Switchboard mark; rebuild the pass card as a credential",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T16:52:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f14958b29e43ba860d9f2bead0a8de1c029f2898",
"body": "Internal shorthand from the launch plan; \"storefront\" reads like paid\nsoftware. It never appeared on the site itself.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Drop \"storefront\" from the changelog; it's just the landing page",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T16:44:28Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "fa8f65232b1a5e760b39a4a2719e9f4b668e10e5",
"body": "The denial was told three times (hero topology, section 01's\nwith/without panel, and the loop's step 3). Cut the with/without\npanel so section 01 is just the lede, the three stats, and sources.\n\nThe standalone \"control\" card grid mostly restated what the topology\nand pass card already show. Folded i\n[…]\n\non the security section and dropped the section. Renumbered security\n04, for-agents 05, teams 06, and removed the now-dead .vs and .limits\nCSS.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Consolidate the landing page: 7 sections to 6",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T16:21:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "87a1efbb8638a3419f91332f8e2d3b856c8d12cc",
"body": "Teams heading becomes \"Working with a team?\"; llms.txt/llms-full.txt\nsay \"subagents\" instead of \"subagent fleets.\"\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Drop \"fleet\" from public copy; it reads as VC-speak to devs",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T16:14:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "aba8847297a78929456abef24a8870bbe1cca6b2",
"body": "The \"firewall\" half owned the topology, the DENIED stamp, and the\nwith/without panel; the keychain story got three passing mentions\ndespite being half the tagline and the more checkable hook. New\nsection 03 (secrets) makes it a beat: a before/after file transform\n(.mcp.json with a live plaintext tok\n[…]\nnjected at launch, redacted\neverywhere\" so it owns the defense-in-depth technical claim without\nduplicating the new section's keychain headline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Give the password-manager half its own section",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T15:56:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bd8e28d6556b7868573190dd75ebd673c7262a7f",
"body": "From an external copy review, applied with judgment:\n\n- Topology caption no longer overclaims: \"One pass decides what your\n agents' tool calls can reach. Denied calls never leave the machine.\"\n- The WITHOUT panel drops the unverifiable \"716 more GitHub tools\" for\n the sharper, fully defensible \"ev\n[…]\nined from the brief: building --strict this sprint (real\nenforcement work, flagged as a fast-follow) and none of the protected\ncopy was touched.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Copy review pass: fix overclaims, own the fail-open posture, add arc",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T02:05:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "821c7d32c51af059f826cfa535f0c6df90a85a7b",
"body": "The topology's center card now reads as a physical credential: punched\nlanyard slot, inset double ring, HOLDER/SCOPE/EXPIRES label column\n(scope in grant green, expiry in lease yellow), EVERYTHING ELSE DENIED\nmicroline, refined barcode, and a subtle holo security strip.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Craft pass on the pass card",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T00:58:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "cae5f77d931970ee9629ec8e9ce7a689c17c9dfb",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Drop the waitlist microcopy line",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T00:47:01Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ddc118eff1e9b1f41455a203b094b8139dff8244",
"body": "None of the comparable landing pages link npm anywhere. GitHub is the\ncanonical link and the two pages cross-reference each other.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Drop npm from the footer; the install command is the npm link",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-13T00:33:48Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "79c61a5291cf95bfd240d3f2f8618001cf918cf8",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Footer credit down to MIT; the repo carries attribution",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T23:57:22Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a52fc7c1502e84bf04b528af11a768872eb16a9d",
"body": "Section 06 swaps the raise-your-hand GitHub link for a real email\ncapture: inline form (email + join button in the token system),\nFormspree POST with a honeypot field, AJAX submit that swaps to a\nconfirmation line, and a no-JS fallback that posts to Formspree's\nconfirmation page. Microcopy promises exactly one email.\n\nThe form action carries a YOUR_FORM_ID placeholder with a TODO;\ncreating the Formspree form takes two minutes and one paste.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Capture the team-tier waitlist with an inline Formspree form",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T23:55:51Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b3a003671d6a068a501b1474d0000fc723c952fe",
"body": "From a six-site teardown (paperclip.ing, executor.sh, airweave.ai,\nsuperset.sh, manufact.com, boringcomputers.com):\n\n- Section 01 now answers the ecosystem stats with the product: a\n WITHOUT/WITH panel (token reach vs the DENIED frame), the pattern\n every comparable site uses instead of leading wi\n[…]\nd/gated/\n denied audit rows), framed like the credential artifacts. Notably,\n call tracing is a \"coming soon\" on comparable sites; ours ships.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Market-pattern pass: product proof, capability framing, with/without",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T23:15:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "25144ef4e211ea8069ea7e12319351c140f31d15",
"body": "Copy pass on the landing page. Gone: \"built to be diligenced,\" \"trust\ntooling that overstates itself is worse than none,\" \"read it before\nyou trust us. Especially then,\" \"we will not claim it before it\nships,\" \"agent-side authority.\" In their place: \"What Switchboard\ndoes not do,\" \"The security work\n[…]\ne the exact same nav as the landing page (same\nwrap, widths, items, GitHub mark). Link positions verified identical\nacross pages via Playwright.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Say it plainly: rewrite abstract copy, unify docs nav with landing",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T22:49:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b1aad6fa00135b8c6b243aa358986f9429920de2",
"body": "Docs and Roadmap stay text; GitHub becomes the octocat icon top-right\n(the executor/Firecrawl pattern, minus the star count for now). npm\nleaves the nav; it lives in the install command and the footer. Same\ntreatment on the docs shell header.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Nav follows devtool convention: GitHub mark, no npm link",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T22:46:34Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "759ae476ec437da445193a315198aaa1e2a9f1d0",
"body": "Toggling humans/agents no longer reflows the hero: both modes occupy\nidentical space (46px control, measured equal container heights). The\nagents side is a \"copy the setup prompt\" pill; the full prompt shows\nin a floating popover on hover or keyboard focus and stays selectable\nwithout JS. Fixed a stacking bug where sibling entrance animations\ncreated contexts that painted the fine print and topology over the\npopover.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Collapse the agent prompt into a pill with a hover preview",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T22:44:05Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e1e4a095fcaf89ed40d2b90e6282fec3a1c404d9",
"body": "The topology is now an illustration rather than a schematic. Agent\nand provider chips carry actual logos (simple-icons paths inlined:\nClaude, OpenAI, Cursor, GitHub, Stripe) with soft depth; the center is\nthe pass rendered as a physical credential card (wordmark, pass\nnumber, scope, expiry, barcode \n[…]\ne\" chip, which\nnow wears the DENIED stamp itself.\n\nVerified via Playwright renders (the preview pane's compositor was\ndesyncing on screenshots).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Elevate the hero visual: real brand marks, credential card, motion",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T22:05:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "872a0091ba3c5c276edfb99170182162289143ee",
"body": "The looping terminal recording fought the paper system and held a\nmostly-dark rectangle above the fold. The diagram already tells the\nallow/gate/deny story in one glance; the DENIED stamp now sits on it,\nand the live demo is a caption link instead of an embed.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Drop the hero GIF; the topology diagram carries the story",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T20:43:41Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "513ba2deefd5d541cd10f2622e020530b90bf84d",
"body": "The agent side of the hero toggle is now the executor-style money\ninteraction: a prompt card you paste into Claude Code, Codex, or\nCursor that walks the agent through scan, dry-run import, import,\nclient routing, grant, and verify. The prompt carries the brand's\nsecurity posture: the agent must hand\n[…]\n. Escaped the <ref>/<duration> placeholders\nso they survive HTML parsing; verified a real click lands the full\n932-char prompt on the clipboard.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Make \"for agents\" a copyable setup prompt",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T19:40:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "957014b6bb29154a5ef06fb5b3086e86d62901de",
"body": "- A hero topology diagram (inline SVG on the token system): agents\n route through the pass; the allowed edge reaches github_ci_*, the\n gated edge pauses for a human, and the denied edge stops inside\n Switchboard, with delete_file struck out and never reached. Caption:\n one pass decides what leav\n[…]\np story into the hero.\n- A closing CTA echoing the headline before the footer.\n\nNew --gate token for approval-gated color, AA-verified on paper.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Adopt three patterns from executor.sh: topology, agent toggle, closer",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T19:24:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "44b8aae77fcf0b1037210a3cded915e70db89c31",
"body": "The scan/import/keychain detail it carried is restated in the steps\nsection; the sub now reads in one breath.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Tighten the hero subhead to category plus the sharpest claim",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T18:30:40Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0e87a05adb3972d973d460351aab0c95cd2e15bb",
"body": "Pages now emit as docs/<slug>/index.html so extension-less URLs\nresolve without a cleanUrls rewrite, and markdown links are resolved\nat build time: repo-relative .md links between docs map to their site\nURLs, anything else in the repo falls back to a GitHub blob link.\nVerified with a crawl over every emitted page: all internal links 200.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Make docs URLs and cross-links work on any static host",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T18:10:58Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "61f2ce066e7035bed31d07107ef0993b6613b813",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Regenerate the hero GIF with the setup race fixed",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T17:55:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d2371e27ece1f7a9956a15bc713f7930f5ba1d26",
"body": "The first visible frame captured the setup backlog because Show\nresumed before clear had executed. Sleep inside the Hide block fixes\nthe race.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Settle the hidden setup before capture resumes in the demo tape",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T17:52:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c558f45777d713f3db798968e6e8836e373e60de",
"body": "From-scratch redesign off a Mobbin pattern pass (Antimetal/Height/\nCursor hero bones, Firecrawl paper-and-hairline framing, Spade stat\ncards) with a design-engineering register: restraint, typography,\nmotion with purpose.\n\nThe system: warm paper and ink (General Sans + IBM Plex Mono, AA\nverified), h\n[…]\nhonoring prefers-reduced-motion; no JS on\nthe page at all. The docs shell mirrors the same tokens so /docs and\nthe landing read as one artifact.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Redesign the landing page and docs shell: credential-paper system",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T17:51:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4eb9ebc475cc3344b7910f15c173c962d2839c81",
"body": "Both are build outputs (bundle-docs.mjs and site/build.mjs); the\npublished package includes docs-bundle via its files list at pack time.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Ignore generated docs-bundle and site dist",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T17:05:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "41d8d6b40f5baccf973a8960eae19350b459ebe0",
"body": "…roadmap\n\nsite/ is a static build (one dev dependency, marked): a landing page\nwhose narrative anchors on the July 28, 2026 MCP spec revision and the\n~8.5% OAuth / ~18% scoping adoption gap (cited), a docs site rendered\nfrom the repo's own markdown, and llms.txt copies at the site root.\nThe honesty \n[…]\n/later split.\nOrg model, richer policy engine, enterprise surface, and daemon socket\nhardening are roadmap entries only, deliberately not built.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add the storefront: landing page, docs site, docs MCP server, public …",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T17:05:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5e7afcf5f3ce8d0b7ea1027ca98a6682bed6d16a",
"body": "Rendered from a local merge with the audit hash-chain branch so the\nclosing frame shows switchboard audit verify reporting Chain: OK.\nAlso strips the MCP error-code prefix from badge detail lines.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Regenerate the hero GIF from the denial-first tape",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T16:51:15Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "440d0690cc6488988b2757ec9f5f5f99a3a28273",
"body": "The tape now climaxes on an out-of-scope call getting DENIED through\nthe real MCP front door (demo-agent.mjs is a genuine MCP client), with\nan approval-gated call before it and switchboard audit verify as the\ncloser. The github-ci safety template supplies the real allow/gate/deny\npolicy; the fixture\n[…]\nstream,\npolled from the same local state files the CLI reads. No dependencies;\nall client-side rendering uses textContent, never markup strings.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Re-cut the hero demo around a live denial; add a local dashboard",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T16:44:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b9640ffbb1aa94918395884b29fda2d3500078df",
"body": "Each JSONL entry now carries prevHash (previous entry's hash, or\n\"genesis\" for the first chained entry) and hash (sha256 over the entry\nJSON without the hash field). Appends serialize through a lockfile next\nto the log, mirroring the mandate store lock, so concurrent daemon and\nCLI writers cannot fo\n[…]\nudit-logs.md,\nincluding what the chain does not detect (tail truncation, whole-file\nrewrite, never-written entries); signing stays out of scope.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Make the audit log tamper-evident with hash chaining and audit verify",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T16:28:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4e3a98abfd93af2a3a4c12cfe58c1f51ad441201",
"body": "docs/security/threat-model.md covers components, threat actors, what\nenforcement binds (routed MCP + switchboard run) vs what it cannot (raw\nshell, provider CLIs, direct MCP, browser), revocation semantics\nincluding in-flight calls, daemon socket assumptions (no SO_PEERCRED,\nstated plainly), secrets\n[…]\nog threat surface, and an\naccepted-risks list. trust-model.md becomes a short posture summary\npointing at it; README and SECURITY.md link to it.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add STRIDE threat model as the security diligence artifact",
"author_name": "Wilson Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-12T16:19:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cc0f3cb668419cb8ea66e0474aa15a349a9b70ed",
"body": "mcp-publisher publish rejected the listing (400) because the npm\npackage lacked the mcpName field the registry validates npm ownership\nwith. Quilt publishes with the same field. Add\n\"mcpName\": \"io.github.wkoverfield/switchboard\" to the cli package and\nbump so it lands on npm; server.json tracks 0.1.6.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Release 0.1.6: add mcpName for the official MCP registry (#173)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T21:12:56Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "9847b1b668d63ad705d609eb72accfac25bb04c6",
"body": "… (#172)\n\nThe official registry rejects descriptions over 100 characters (422 on\nmcp-publisher publish). Trim to a 93-char version so the listing\nvalidates.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Shorten server.json description to satisfy MCP registry (<=100 chars)…",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T21:07:51Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2b7e7cd18ae1a7d8fdc82850696a3519e610e033",
"body": "The daemon multiplexing shipped in 0.1.4 but its best capability was\ninvisible. Make it discoverable and carry the MCP registry marker to npm:\n\n- install output now tips users toward --scope user (one server for\n every repo) at the point of use.\n- README gains a short 'One install for every repo' s\n[…]\n\nThis release exists partly to publish the mcp-name marker (added on\nmain after 0.1.4) so the official MCP registry can validate npm\nownership.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Release 0.1.5: surface user-scope install + MCP registry marker (#171)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T20:57:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e38a0f5cf91614daabef582e38f1844cc8512a8b",
"body": "Sets up publishing to the official MCP registry\n(registry.modelcontextprotocol.io) as io.github.wkoverfield/switchboard,\nwhich auto-feeds Glama, PulseMCP, and Smithery. server.json points at\nthe published @switchboard-mcp/cli npm package launched as\n'switchboard mcp' (stdio); the mcp-name markers pr\n[…]\nublish so registry npm-ownership\nvalidation passes; completing the listing is a one-time\n'mcp-publisher login github && mcp-publisher publish'.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add MCP registry server.json + ownership markers (#170)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T18:08:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7623fed18cc30f1283d3aec0ff41def9347dc82e",
"body": "…169)\n\nShips the multi-repo daemon work (per-request cwd multiplexing, live\npass auto-bind by repo/branch, and install --scope user) to npm.\nVersion reads from package.json so --version stays accurate.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Release 0.1.4: daemon multiplexing, auto-bind, user-scoped install (#…",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T16:18:50Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d9fe4a0f9fbb8d13ff1d8bca0ed6f7aa22c3c511",
"body": "Bumps the npm group with 3 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) and [tsx](https://github.com/privatenumber/tsx).\n\n\nUpdates `@ty\n[…]\ne-type: version-update:semver-minor\n dependency-group: npm\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump the npm group with 3 updates (#165)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-04T16:08:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2d0fe62610305eb22bd1e9940ebb1639ab910dc2",
"body": "…(#168)\n\nswitchboard install <client> --scope user prints the one-time command\nto register a single Switchboard MCP server (claude mcp add --scope\nuser, or the codex global equivalent). The server runs with no --cwd\nand no --mandate: each agent session launches it in the project dir, so\nit resolves \n[…]\nauto-bind scopes it. Tests cover the --scope user output shape (no\n--cwd, no --mandate) and scope validation. 407 tests, lint, typecheck\ngreen.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add user-scoped install: one trusted server for every repo (Stage 3) …",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T16:07:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "47dea3496f15dbb766069568ec4da294fc23c8f2",
"body": "…167)\n\nMakes grant-per-repo auto-scope any agent, and is the piece a\n--mandate-less user-level install needs. When the daemon serves a\nrequest with no mandateId, it resolves the single active pass for that\nrepo and branch and applies its policy. Exactly-one-match only: zero\nactive passes keeps the p\n[…]\nagent saw only the\nallowed tool (1 of 14); closing the pass returned it to the full\nsurface. New daemon-runtime test covers the auto-bind path.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Auto-bind the live pass by repo/branch when no --mandate (Stage 2) (#…",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T15:59:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "293150d72259ff053c385bbbe680546dda3c3d2d",
"body": "* Multiplex the daemon: one daemon serves many repos (Stage 1)\n\nThe daemon was a per-machine singleton bound to one repo cwd; a second\nrepo collided (\"daemon is running for X; use --runtime-dir\"). That\ncontradicts the core value prop of managing MCP access across all your\nrepos. Root cause was narro\n[…]\nng repo; omitting cwd entirely still keeps the legacy single-repo\nfallback.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Multiplex the daemon: one daemon serves many repos (Stage 1) (#166)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T15:50:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f7f34b1b9106203dc6f7c8424a3ddee17b11144d",
"body": "…(#164)\n\nThe grouped npm PR (#163) bundled a safe tsx bump with TypeScript 5->6,\nESLint 9->10, and @types/node 22->26, so the whole weekly PR failed CI\nand nothing landed. Ignore those specific majors: they are breaking\ntoolchain upgrades that need a dedicated migration, and @types/node\nshould track\n[…]\n Node 22 we run in CI. Routine and minor bumps now flow\nthrough the weekly group green; lift an ignore entry when doing the\nupgrade on purpose.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Defer TS6/ESLint10 majors so the weekly dependabot group stays green …",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T06:11:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3f008dc0905de217da0b3e7bd3414cb2bf13a4aa",
"body": "* Prepare 0.1.3: ship the real README on the npm page\n\nThe published @switchboard-mcp/cli page was showing a 466-byte stub\nwith pre-carve 'mandate' vocabulary, because npm renders the package's\nown apps/cli/README.md, not the repo root README. Replace it with a\nreal package README: the tagline, the \n[…]\n lockstep.\n\n--version now reports 0.1.3; 403 tests, lint, pack smoke green.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Prepare 0.1.3: ship the real README on the npm page (#162)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T06:06:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4d71b97bf213689d01feae1b4b2488b5737ea772",
"body": "- dependabot.yml: one weekly npm group and one weekly actions group\n (patterns: *), so a small dependency set stops producing one PR per\n package. Mirrors the quilt config.\n- ci.yml: apply the three action majors dependabot proposed\n (checkout v7, setup-node v6, pnpm/action-setup v6) in one commit,\n since all three edit the same file and would otherwise conflict as\n separate merges. Supersedes PRs #155, #156, #157.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Group dependabot updates (quilt-style) and bump CI actions (#161)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T06:04:05Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7171b2be275a6346fbfa4287e13c4ac90d109dc3",
"body": "Bumps [commander](https://github.com/tj/commander.js) from 14.0.3 to 15.0.0.\n- [Release notes](https://github.com/tj/commander.js/releases)\n- [Changelog](https://github.com/tj/commander.js/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/tj/commander.js/compare/v14.0.3...v15.0.0)\n\n---\nupdate\n[…]\nirect:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump commander from 14.0.3 to 15.0.0 (#159)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-04T05:53:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f214321509e5160a5fad43fcd244a01d41b58830",
"body": "The highest-leverage launch asset: a 17s VHS-rendered terminal GIF of\nthe grant flow at the top of the README, in full color. An agent can\nreach every tool and token in the repo, then gets put on a scoped,\nexpiring pass; the PASS GRANTED badge is the hero frame.\n\nBuilt with VHS (the same toolchain a\n[…]\nnt so the\nbadge shows the real enforcing happy path. Image uses an absolute raw\nURL so it renders on the npm package page too, not just GitHub.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add hero demo GIF to the README (#160)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T05:44:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "53927c6794af79cd72cfd7c5c94271311b4bffd9",
"body": "…#154)\n\nModeled on the quilt repo's kit, tuned defensive for a security tool\nin alpha:\n\n- CONTRIBUTING.md leads with the load-bearing properties: secrets\n never surface, copy never overclaims, machine contracts stay stable,\n pass vocabulary on the human surface, local-first with no telemetry.\n As\n[…]\nin (checks required, linear\nhistory, no force push or deletion), private vulnerability reporting,\ndependabot alerts and security fixes enabled.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add contribution kit: CONTRIBUTING, SECURITY, templates, dependabot (…",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T05:05:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "67ef054449d3d125e2a45b6ea9d7782411095850",
"body": "PR #151 carved the human CLI surface from \"mandate\" to \"pass\" but the\ndaemon runtime still answered agents in the old vocabulary. Rewrite the\noutgoing tool-result prose (top-level error and mcpError.message) at the\nresponse boundary and point suggested commands at switchboard pass\nrenew/status, foll\n[…]\ners and audit log entries keep the raw core messages,\nand machine contracts (mcpError.code, mandateId fields, the --mandate\nflag) are unchanged.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Carry the pass vocabulary into daemon agent-facing errors (#153)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T04:03:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "68cdcd72c5b0ed504476b30c594ee96a1b61384a",
"body": "* Rewrite README around the pass, modeled on the best CLI READMEs\n\nStudied ripgrep, fzf, bat, atuin, mise, just, direnv, and age, and\nrebuilt the README on the skeleton they share: tagline, badges, real\nterminal proof in the first screenful, install inside the first 15%,\nquickstart with real output,\n[…]\ncan excerpt keeps the route-missing\nlines so it reads as a real transcript.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Rewrite README around the pass, modeled on the best CLI READMEs (#152)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T03:47:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "69efb22a06d4744ed0d4558b5a53cd85bcf2c3b7",
"body": "* Carve human vocabulary from mandate to pass across the CLI\n\nThe cold test's confirmed friction: users understand the grant badge's\n\"pass\" instantly but couldn't decode \"mandate\" — two words for one\nconcept. This unifies the human surface under pass, timed before npm\npublish so the rename never bec\n[…]\nard\nmandate store...\"); both now go through mandateMessageInPassVocabulary.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Carve human vocabulary from mandate to pass across the CLI (#151)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T02:03:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ca7a728a179486d756f60290291116aece959f83",
"body": "* Color the grant badge: green frame, bold denials, yellow expiry\n\nZero-dependency ANSI painting, on only for a real TTY and always off\nunder NO_COLOR / TERM=dumb, so piped and captured output stays byte-\nplain. Frame widths are measured on plain text before painting so\nescape codes can never skew a\n[…]\ny@anthropic.com>\n\n* Clearer failure when the badge bottom rule goes missing\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Color the grant badge: green frame, bold denials, yellow expiry (#150)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T00:55:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e9c2d6b0fc9585bab054cbf2d6c64e0c49d25f57",
"body": "* Show active passes first in status; nudge grant toward install\n\n- switchboard status now answers \"is a pass live right now?\" as its\n first line, human and JSON (activePasses with id, branch, role,\n lease, expiry), with human-readable time remaining.\n- switchboard grant now detects whether any ag\n[…]\ntion, not parse success), so a broken repo config can't hide a\n live pass.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Show active passes first in status; nudge grant toward install (#149)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T00:46:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "352ec43ab16f73e56f7c3b42d65b84b051354e21",
"body": "* Add switchboard grant/revoke: a scoped pass that expires\n\ngrant is the one-verb front door to the mandate machinery: it derives\nsensible defaults (all repo profiles, current branch, an 'agent' role,\na 4h lease), scopes allowed tools to exactly those profiles'\nnamespaces, creates the mandate, and r\n[…]\nex-matching a core error message, removing a cross-package string\n coupling.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add switchboard grant/revoke: a scoped pass that expires (#148)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-04T00:12:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a1a2bcc4c9356a26743604a60ff3025be2e333d7",
"body": "* Reframe CLI entry copy from jargon to plain language\n\nA cold-usability test flagged the --help one-liner ('local mandate\nlayer and MCP profile router') as 'jargon that wouldn't land cold.'\nRewrite the top-level description and the front-door command\ndescriptions (scan, import, status, doctor, inst\n[…]\nes with --write.\n- Relax the guard test to the non-brittle jargon assertions.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Reframe CLI entry copy from jargon to plain language (#147)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-03T23:53:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3206ad9ef3e8762c61dfea1a7af0d1bc56f1ba8e",
"body": "* Make secret-store failures recoverable instead of a dead end\n\nA cold-usability test got 80% through setup, then secrets set threw a\nbare \"Unsupported state or unable to authenticate data\" crypto error\nwith no path forward, and secrets doctor reported the backend healthy\nand looped back to the cras\n[…]\neck can never destroy a\nuser secret that happens to share the probe ref name.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Make secret-store failures recoverable instead of a dead end (#146)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-03T22:34:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5ec7181303ec514ac893d28e7a39d1aa456066b4",
"body": "* Broaden audit export with mandate, approval, and log evidence\n\nswitchboard audit export gains --include mandates,approvals,logs (or\nall) to append repo-scoped evidence records to the JSONL stream:\nmandate records carry the lease/actor/policy-hash evidence, approval\nrequest records carry gate conte\n[…]\nries with matched vs\nexported counts, and non-positive --log-limit rejection.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Broaden audit export with mandate, approval, and log evidence (#145)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-02T19:51:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d2b33820cacc65bd795f20f133701f6738076694",
"body": "The repo manifest now includes an additive diff block comparing the\nintended Switchboard client route against active Codex/Claude project\nconfig. Each client reports in-sync, drift, or unknown status with\ntyped findings (missing or stale Switchboard route, unparseable client\nconfig, direct routes, a\n[…]\n the CLI maps\nscan client inspections and configured acceptedRisks.directMcp into it\nand renders a Route drift section in human manifest output.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add manifest route drift diff v0 (#144)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-02T16:03:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3565b76ffb2d1cf8dfd939b39fcfad74e706b8af",
"body": "* Add mandate lease evidence v0\n\nMandates now record additive authority evidence: an optional --actor\ncreator identity on mandate create/child/renew, an authority source\n(preset, authority-map, parent, or manual), a deterministic sha256\npolicy hash over the granted profile/tool/approval policy, and \n[…]\ns across mandate JSON,\nmcpLaunch policy, workspace lease, and verbose output.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add mandate lease evidence v0 (#143)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-01T22:53:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cf19ac540c9e751fc9ed7aa1d6d957f809eb621c",
"body": null,
"is_bot": false,
"headline": "Add repo authority manifest v0 (#142)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-01T19:44:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e7f311a3e744b7728522830af0cd2d067623ef11",
"body": null,
"is_bot": false,
"headline": "Create mandates from reviewed authority maps (#141)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-01T16:31:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c1fe031d63c5234e457a7afa20c0fac1ca8c4e1",
"body": null,
"is_bot": false,
"headline": "Deepen repo authority audit v1 (#140)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-01T16:17:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56f0bbf09716169cee9d962ccdbfd496aea74ae7",
"body": null,
"is_bot": false,
"headline": "Add repo authority audit v0 (#139)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-01T15:36:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4114834aaaa67c4bcd9919fbdea62fecf11857f3",
"body": null,
"is_bot": false,
"headline": "Add authority map fresh-agent eval (#138)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-01T01:16:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "af4f5554ecf2267bf4db2949a72c52195de60d0e",
"body": null,
"is_bot": false,
"headline": "Prepare public alpha license release (#137)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-01T01:02:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ecb7fba9e30d39068fbe313370eb34fc4b734266",
"body": null,
"is_bot": false,
"headline": "Add authority map draft v0 (#136)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-07-01T00:41:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9cddf74e103e598606ad8941d67498fa70053f52",
"body": null,
"is_bot": false,
"headline": "Add opt-in live provider dogfood harnesses (#135)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-06-30T16:34:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e3423d58f1148514838ff95557680d5c13e19ab8",
"body": null,
"is_bot": false,
"headline": "Add Supabase dev authority proof (#134)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-06-30T07:50:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2a3714cbf91ebd1e40e872fd4f3a5c34c8ef8d51",
"body": "* test: deepen vercel preview authority proof\n\n* docs: clarify vercel fixture proof scope",
"is_bot": false,
"headline": "test: deepen vercel preview authority proof (#133)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-06-30T06:54:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f5d670a1b54eeaa9707b739dc7513618f15feaa",
"body": null,
"is_bot": false,
"headline": "test: add blind alpha evidence runbook (#132)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-06-30T05:56:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67833a802823d4b99dd9681d7af7f7dbdcf7e30c",
"body": null,
"is_bot": false,
"headline": "feat: polish mandate approval operator output (#131)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-06-30T04:08:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "61a570101e4fbc3699c9ddbb71c30ac00f3ec95c",
"body": null,
"is_bot": false,
"headline": "test: deepen github ci authority proof (#130)",
"author_name": "Wilson Kiagiri Overfield",
"author_login": "wkoverfield",
"committed_at": "2026-06-29T19:29:59Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 3,
"commits_last_year": 240,
"latest_release_at": "2026-07-18T23:28:56Z",
"latest_release_tag": "v0.2.2",
"releases_from_tags": false,
"days_since_last_push": 5,
"active_weeks_last_year": 6,
"days_since_latest_release": 5,
"mean_days_between_releases": 2.4
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 85,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "@switchboard-mcp/cli",
"exists": true,
"license": "MIT",
"keywords": [
"mcp",
"model-context-protocol",
"ai-agents",
"codex",
"claude-code",
"cursor",
"vscode",
"supabase",
"stripe",
"posthog",
"sentry",
"mcp-server",
"mcp-router",
"mcp-gateway",
"tool-calling",
"developer-tools"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@switchboard-mcp/cli",
"is_deprecated": false,
"latest_version": "0.2.2",
"repository_url": "https://github.com/wkoverfield/switchboard",
"versions_count": 10,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 1927,
"first_published_at": "2026-06-27T15:33:39.487000Z",
"latest_published_at": "2026-07-18T23:24:36.551000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 5
},
{
"name": "@switchboard-mcp/core",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@switchboard-mcp/core",
"is_deprecated": false,
"latest_version": "0.2.2",
"repository_url": "https://github.com/wkoverfield/switchboard",
"versions_count": 10,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 2002,
"first_published_at": "2026-06-27T15:33:35.512000Z",
"latest_published_at": "2026-07-18T23:24:33.279000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 5
},
{
"name": "@switchboard-mcp/docs-mcp",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@switchboard-mcp/docs-mcp",
"is_deprecated": false,
"latest_version": "0.2.2",
"repository_url": "https://github.com/wkoverfield/switchboard",
"versions_count": 3,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 466,
"first_published_at": "2026-07-14T02:13:57.396000Z",
"latest_published_at": "2026-07-18T23:24:38.122000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 5
},
{
"name": "@switchboard-mcp/mcp-runtime",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@switchboard-mcp/mcp-runtime",
"is_deprecated": false,
"latest_version": "0.2.2",
"repository_url": "https://github.com/wkoverfield/switchboard",
"versions_count": 10,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 1849,
"first_published_at": "2026-06-27T15:33:37.156000Z",
"latest_published_at": "2026-07-18T23:24:34.941000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 5
}
]
},
"popularity": {
"forks": 0,
"stars": 0,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [],
"complete": true,
"collected": 0,
"total_stars": 0,
"collected_at": null
},
"open_issues_and_prs": 3
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": true,
"has_dockerfile": false,
"has_mcp_signal": true,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"apps/cli/tsconfig.json",
"packages/core/tsconfig.json",
"packages/docs-mcp/tsconfig.json",
"packages/mcp-runtime/tsconfig.json",
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 410270,
"source_files_sampled": 122,
"oversized_source_files": 3,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"package.json",
"site/package.json"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [
{
"name": "@hono/node-server",
"direct": false,
"version": "1.19.14",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.9,
"advisory_ids": [
"GHSA-frvp-7c67-39w9"
],
"fixed_version": "2.0.5",
"advisory_count": 1,
"oldest_advisory_days": 2
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"moderate": 1
},
"advisory_count": 1,
"affected_count": 1,
"assessed_count": 144,
"malicious_count": 0,
"assessed_package": "npm:@switchboard-mcp/cli@0.2.2",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "@switchboard-mcp/core",
"manifest": "apps/cli/package.json",
"ecosystem": "npm",
"version_constraint": "workspace:*"
},
{
"name": "@switchboard-mcp/mcp-runtime",
"manifest": "apps/cli/package.json",
"ecosystem": "npm",
"version_constraint": "workspace:*"
},
{
"name": "commander",
"manifest": "apps/cli/package.json",
"ecosystem": "npm",
"version_constraint": "^15.0.0"
},
{
"name": "cross-keychain",
"manifest": "packages/core/package.json",
"ecosystem": "npm",
"version_constraint": "^1.1.0"
},
{
"name": "yaml",
"manifest": "packages/core/package.json",
"ecosystem": "npm",
"version_constraint": "^2.8.2"
},
{
"name": "zod",
"manifest": "packages/core/package.json",
"ecosystem": "npm",
"version_constraint": "^4.2.0"
},
{
"name": "@modelcontextprotocol/sdk",
"manifest": "packages/docs-mcp/package.json",
"ecosystem": "npm",
"version_constraint": "^1.29.0"
},
{
"name": "zod",
"manifest": "packages/docs-mcp/package.json",
"ecosystem": "npm",
"version_constraint": "^4.4.3"
},
{
"name": "@switchboard-mcp/core",
"manifest": "packages/mcp-runtime/package.json",
"ecosystem": "npm",
"version_constraint": "workspace:*"
},
{
"name": "@modelcontextprotocol/sdk",
"manifest": "packages/mcp-runtime/package.json",
"ecosystem": "npm",
"version_constraint": "^1.29.0"
},
{
"name": "zod",
"manifest": "packages/mcp-runtime/package.json",
"ecosystem": "npm",
"version_constraint": "^4.4.3"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "@modelcontextprotocol/sdk",
"direct": true,
"version": "1.29.0",
"ecosystem": "npm"
},
{
"name": "@modelcontextprotocol/sdk",
"direct": true,
"version": "^1.29.0",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": true,
"version": "15.0.0",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": true,
"version": "^15.0.0",
"ecosystem": "npm"
},
{
"name": "cross-keychain",
"direct": true,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "cross-keychain",
"direct": true,
"version": "^1.1.0",
"ecosystem": "npm"
},
{
"name": "yaml",
"direct": true,
"version": "2.9.0",
"ecosystem": "npm"
},
{
"name": "yaml",
"direct": true,
"version": "^2.8.2",
"ecosystem": "npm"
},
{
"name": "zod",
"direct": true,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "zod",
"direct": true,
"version": "^4.2.0",
"ecosystem": "npm"
},
{
"name": "zod",
"direct": true,
"version": "^4.4.3",
"ecosystem": "npm"
},
{
"name": "@emnapi/core",
"direct": false,
"version": "1.10.0",
"ecosystem": "npm"
},
{
"name": "@emnapi/runtime",
"direct": false,
"version": "1.10.0",
"ecosystem": "npm"
},
{
"name": "@emnapi/wasi-threads",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/aix-ppc64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ia32",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-loong64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-mips64el",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ppc64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-riscv64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-s390x",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/openharmony-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/sunos-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-ia32",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@eslint-community/eslint-utils",
"direct": false,
"version": "4.9.1",
"ecosystem": "npm"
},
{
"name": "@eslint-community/regexpp",
"direct": false,
"version": "4.12.2",
"ecosystem": "npm"
},
{
"name": "@eslint/config-array",
"direct": false,
"version": "0.21.2",
"ecosystem": "npm"
},
{
"name": "@eslint/config-helpers",
"direct": false,
"version": "0.4.2",
"ecosystem": "npm"
},
{
"name": "@eslint/core",
"direct": false,
"version": "0.17.0",
"ecosystem": "npm"
},
{
"name": "@eslint/eslintrc",
"direct": false,
"version": "3.3.5",
"ecosystem": "npm"
},
{
"name": "@eslint/js",
"direct": false,
"version": "9.39.4",
"ecosystem": "npm"
},
{
"name": "@eslint/object-schema",
"direct": false,
"version": "2.1.7",
"ecosystem": "npm"
},
{
"name": "@eslint/plugin-kit",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "@hono/node-server",
"direct": false,
"version": "1.19.14",
"ecosystem": "npm"
},
{
"name": "@humanfs/core",
"direct": false,
"version": "0.19.2",
"ecosystem": "npm"
},
{
"name": "@humanfs/node",
"direct": false,
"version": "0.16.8",
"ecosystem": "npm"
},
{
"name": "@humanfs/types",
"direct": false,
"version": "0.15.0",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/module-importer",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/retry",
"direct": false,
"version": "0.4.3",
"ecosystem": "npm"
},
{
"name": "@inquirer/ansi",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@inquirer/checkbox",
"direct": false,
"version": "4.3.2",
"ecosystem": "npm"
},
{
"name": "@inquirer/confirm",
"direct": false,
"version": "5.1.21",
"ecosystem": "npm"
},
{
"name": "@inquirer/core",
"direct": false,
"version": "10.3.2",
"ecosystem": "npm"
},
{
"name": "@inquirer/editor",
"direct": false,
"version": "4.2.23",
"ecosystem": "npm"
},
{
"name": "@inquirer/expand",
"direct": false,
"version": "4.0.23",
"ecosystem": "npm"
},
{
"name": "@inquirer/external-editor",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@inquirer/figures",
"direct": false,
"version": "1.0.15",
"ecosystem": "npm"
},
{
"name": "@inquirer/input",
"direct": false,
"version": "4.3.1",
"ecosystem": "npm"
},
{
"name": "@inquirer/number",
"direct": false,
"version": "3.0.23",
"ecosystem": "npm"
},
{
"name": "@inquirer/password",
"direct": false,
"version": "4.0.23",
"ecosystem": "npm"
},
{
"name": "@inquirer/prompts",
"direct": false,
"version": "7.10.1",
"ecosystem": "npm"
},
{
"name": "@inquirer/rawlist",
"direct": false,
"version": "4.1.11",
"ecosystem": "npm"
},
{
"name": "@inquirer/search",
"direct": false,
"version": "3.2.2",
"ecosystem": "npm"
},
{
"name": "@inquirer/select",
"direct": false,
"version": "4.4.2",
"ecosystem": "npm"
},
{
"name": "@inquirer/type",
"direct": false,
"version": "3.0.10",
"ecosystem": "npm"
},
{
"name": "@jridgewell/sourcemap-codec",
"direct": false,
"version": "1.5.5",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-darwin-arm64",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-darwin-x64",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-freebsd-x64",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-linux-arm-gnueabihf",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-linux-arm64-gnu",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-linux-arm64-musl",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-linux-riscv64-gnu",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-linux-x64-gnu",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-linux-x64-musl",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-win32-arm64-msvc",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-win32-ia32-msvc",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/keyring-win32-x64-msvc",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@napi-rs/wasm-runtime",
"direct": false,
"version": "1.1.6",
"ecosystem": "npm"
},
{
"name": "@oxc-project/types",
"direct": false,
"version": "0.133.0",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-android-arm64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-darwin-arm64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-darwin-x64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-freebsd-x64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm-gnueabihf",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm64-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm64-musl",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-ppc64-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-s390x-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-x64-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-x64-musl",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-openharmony-arm64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-wasm32-wasi",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-win32-arm64-msvc",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-win32-x64-msvc",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/pluginutils",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "@standard-schema/spec",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@tybys/wasm-util",
"direct": false,
"version": "0.10.3",
"ecosystem": "npm"
},
{
"name": "@types/chai",
"direct": false,
"version": "5.2.3",
"ecosystem": "npm"
},
{
"name": "@types/deep-eql",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "@types/json-schema",
"direct": false,
"version": "7.0.15",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "22.20.0",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/eslint-plugin",
"direct": false,
"version": "8.62.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/parser",
"direct": false,
"version": "8.62.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/project-service",
"direct": false,
"version": "8.62.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/scope-manager",
"direct": false,
"version": "8.62.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/tsconfig-utils",
"direct": false,
"version": "8.62.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/type-utils",
"direct": false,
"version": "8.62.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/types",
"direct": false,
"version": "8.62.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/typescript-estree",
"direct": false,
"version": "8.62.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/utils",
"direct": false,
"version": "8.62.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/visitor-keys",
"direct": false,
"version": "8.62.1",
"ecosystem": "npm"
},
{
"name": "@vitest/expect",
"direct": false,
"version": "4.1.9",
"ecosystem": "npm"
},
{
"name": "@vitest/mocker",
"direct": false,
"version": "4.1.9",
"ecosystem": "npm"
},
{
"name": "@vitest/pretty-format",
"direct": false,
"version": "4.1.9",
"ecosystem": "npm"
},
{
"name": "@vitest/runner",
"direct": false,
"version": "4.1.9",
"ecosystem": "npm"
},
{
"name": "@vitest/snapshot",
"direct": false,
"version": "4.1.9",
"ecosystem": "npm"
},
{
"name": "@vitest/spy",
"direct": false,
"version": "4.1.9",
"ecosystem": "npm"
},
{
"name": "@vitest/utils",
"direct": false,
"version": "4.1.9",
"ecosystem": "npm"
},
{
"name": "accepts",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "8.17.0",
"ecosystem": "npm"
},
{
"name": "acorn-jsx",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": false,
"version": "6.15.0",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": false,
"version": "8.20.0",
"ecosystem": "npm"
},
{
"name": "ajv-formats",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "argparse",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "assertion-error",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "body-parser",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.15",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.7",
"ecosystem": "npm"
},
{
"name": "bytes",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "call-bind-apply-helpers",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "call-bound",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "callsites",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "chai",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "chardet",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "cli-width",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "concat-map",
"direct": false,
"version": "0.0.1",
"ecosystem": "npm"
},
{
"name": "content-disposition",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "content-type",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "content-type",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "convert-source-map",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "cookie",
"direct": false,
"version": "0.7.2",
"ecosystem": "npm"
},
{
"name": "cookie-signature",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "cors",
"direct": false,
"version": "2.8.6",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "deep-is",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "depd",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "detect-libc",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "dunder-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "ee-first",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "encodeurl",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "es-define-property",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "es-errors",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "es-module-lexer",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "es-object-atoms",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "esbuild",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "escape-html",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "eslint",
"direct": false,
"version": "9.39.4",
"ecosystem": "npm"
},
{
"name": "eslint-scope",
"direct": false,
"version": "8.4.0",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "3.4.3",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "4.2.1",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "espree",
"direct": false,
"version": "10.4.0",
"ecosystem": "npm"
},
{
"name": "esquery",
"direct": false,
"version": "1.7.0",
"ecosystem": "npm"
},
{
"name": "esrecurse",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "estraverse",
"direct": false,
"version": "5.3.0",
"ecosystem": "npm"
},
{
"name": "estree-walker",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "esutils",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "etag",
"direct": false,
"version": "1.8.1",
"ecosystem": "npm"
},
{
"name": "eventsource",
"direct": false,
"version": "3.0.7",
"ecosystem": "npm"
},
{
"name": "eventsource-parser",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "expect-type",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "express",
"direct": false,
"version": "5.2.1",
"ecosystem": "npm"
},
{
"name": "express-rate-limit",
"direct": false,
"version": "8.5.2",
"ecosystem": "npm"
},
{
"name": "fast-deep-equal",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "fast-json-stable-stringify",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "fast-levenshtein",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "fast-uri",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "fdir",
"direct": false,
"version": "6.5.0",
"ecosystem": "npm"
},
{
"name": "file-entry-cache",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "finalhandler",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "flat-cache",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "flatted",
"direct": false,
"version": "3.4.2",
"ecosystem": "npm"
},
{
"name": "forwarded",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "fresh",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "function-bind",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "get-intrinsic",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "get-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "glob-parent",
"direct": false,
"version": "6.0.2",
"ecosystem": "npm"
},
{
"name": "globals",
"direct": false,
"version": "14.0.0",
"ecosystem": "npm"
},
{
"name": "gopd",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "has-symbols",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "hasown",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "hono",
"direct": false,
"version": "4.12.26",
"ecosystem": "npm"
},
{
"name": "http-errors",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "iconv-lite",
"direct": false,
"version": "0.7.2",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "7.0.5",
"ecosystem": "npm"
},
{
"name": "import-fresh",
"direct": false,
"version": "3.3.1",
"ecosystem": "npm"
},
{
"name": "imurmurhash",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "inherits",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "ip-address",
"direct": false,
"version": "10.2.0",
"ecosystem": "npm"
},
{
"name": "ipaddr.js",
"direct": false,
"version": "1.9.1",
"ecosystem": "npm"
},
{
"name": "is-extglob",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "is-fullwidth-code-point",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "is-glob",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "is-promise",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "jose",
"direct": false,
"version": "6.2.3",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "json-buffer",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "json-schema-traverse",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "json-schema-traverse",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "json-schema-typed",
"direct": false,
"version": "8.0.2",
"ecosystem": "npm"
},
{
"name": "json-stable-stringify-without-jsonify",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "keyv",
"direct": false,
"version": "4.5.4",
"ecosystem": "npm"
},
{
"name": "levn",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "lightningcss",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-android-arm64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-darwin-arm64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-darwin-x64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-freebsd-x64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm-gnueabihf",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm64-gnu",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm64-musl",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-x64-gnu",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-x64-musl",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-win32-arm64-msvc",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-win32-x64-msvc",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "lodash.merge",
"direct": false,
"version": "4.6.2",
"ecosystem": "npm"
},
{
"name": "magic-string",
"direct": false,
"version": "0.30.21",
"ecosystem": "npm"
},
{
"name": "marked",
"direct": false,
"version": "15.0.12",
"ecosystem": "npm"
},
{
"name": "marked",
"direct": false,
"version": "^15.0.4",
"ecosystem": "npm"
},
{
"name": "math-intrinsics",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "media-typer",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "meow",
"direct": false,
"version": "14.1.0",
"ecosystem": "npm"
},
{
"name": "merge-descriptors",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "mime-db",
"direct": false,
"version": "1.54.0",
"ecosystem": "npm"
},
{
"name": "mime-types",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "10.2.5",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "3.1.5",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "mute-stream",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "nanoid",
"direct": false,
"version": "3.3.15",
"ecosystem": "npm"
},
{
"name": "natural-compare",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "negotiator",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "object-assign",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "object-inspect",
"direct": false,
"version": "1.13.4",
"ecosystem": "npm"
},
{
"name": "obug",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "on-finished",
"direct": false,
"version": "2.4.1",
"ecosystem": "npm"
},
{
"name": "once",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "optionator",
"direct": false,
"version": "0.9.4",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "parent-module",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "parseurl",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-to-regexp",
"direct": false,
"version": "8.4.2",
"ecosystem": "npm"
},
{
"name": "pathe",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "picocolors",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.5",
"ecosystem": "npm"
},
{
"name": "pkce-challenge",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "postcss",
"direct": false,
"version": "8.5.16",
"ecosystem": "npm"
},
{
"name": "prelude-ls",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "proxy-addr",
"direct": false,
"version": "2.0.7",
"ecosystem": "npm"
},
{
"name": "punycode",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "qs",
"direct": false,
"version": "6.15.2",
"ecosystem": "npm"
},
{
"name": "range-parser",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "raw-body",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "require-from-string",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "rolldown",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "router",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "safer-buffer",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "7.8.5",
"ecosystem": "npm"
},
{
"name": "send",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "serve-static",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "setprototypeof",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "shebang-command",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-regex",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "side-channel",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "side-channel-list",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "side-channel-map",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "side-channel-weakmap",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "siginfo",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "signal-exit",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "source-map-js",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "stackback",
"direct": false,
"version": "0.0.2",
"ecosystem": "npm"
},
{
"name": "statuses",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "std-env",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "strip-json-comments",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "tinybench",
"direct": false,
"version": "2.9.0",
"ecosystem": "npm"
},
{
"name": "tinyexec",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.17",
"ecosystem": "npm"
},
{
"name": "tinyrainbow",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "toidentifier",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "ts-api-utils",
"direct": false,
"version": "2.5.0",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "2.8.1",
"ecosystem": "npm"
},
{
"name": "tsx",
"direct": false,
"version": "4.23.0",
"ecosystem": "npm"
},
{
"name": "tsx",
"direct": false,
"version": "^4.23.0",
"ecosystem": "npm"
},
{
"name": "type-check",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "type-is",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "5.9.3",
"ecosystem": "npm"
},
{
"name": "typescript-eslint",
"direct": false,
"version": "8.62.1",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "6.21.0",
"ecosystem": "npm"
},
{
"name": "unpipe",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "uri-js",
"direct": false,
"version": "4.4.1",
"ecosystem": "npm"
},
{
"name": "vary",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "8.0.16",
"ecosystem": "npm"
},
{
"name": "vitest",
"direct": false,
"version": "4.1.9",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "why-is-node-running",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "word-wrap",
"direct": false,
"version": "1.2.5",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "6.2.0",
"ecosystem": "npm"
},
{
"name": "wrappy",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "yocto-queue",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "yoctocolors-cjs",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "zod-to-json-schema",
"direct": false,
"version": "3.25.2",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 346,
"direct_count": 11,
"indirect_count": 335
}
},
"maintainership": {
"issues": {
"open_prs": 3,
"merged_prs": 192,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 4,
"closed_unmerged_prs": 6
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "wkoverfield",
"commits": 238,
"avatar_url": "https://avatars.githubusercontent.com/u/122052931?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml"
],
"has_docs_dir": true,
"linter_configs": [
"eslint.config.js"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"pnpm-lock.yaml"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "25 out of 25 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/25 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "project was created within the last 90 days. Please review its contents carefully",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 2,
"reason": "8 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "4893b61b14d4ecf76768777d7e4fc4d654afb3bf",
"ran_at": "2026-07-24T12:23:21Z",
"aggregate_score": 4.3,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-24T04:09:42Z",
"oldest_open_prs": [
{
"number": 196,
"created_at": "2026-07-16T19:34:35Z",
"last_comment_at": "2026-07-16T19:34:36Z",
"last_comment_author": "vercel"
},
{
"number": 203,
"created_at": "2026-07-18T21:52:43Z",
"last_comment_at": "2026-07-18T21:52:45Z",
"last_comment_author": "vercel"
},
{
"number": 204,
"created_at": "2026-07-18T21:53:48Z",
"last_comment_at": "2026-07-18T21:53:51Z",
"last_comment_author": "vercel"
}
],
"last_merged_pr_at": "2026-07-18T23:39:08Z",
"ci_last_conclusion": "FAILURE",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/wkoverfield/switchboard",
"host": "github.com",
"name": "switchboard",
"owner": "wkoverfield"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 63,
"inputs": {
"security": 52,
"vitality": 75,
"community": 43,
"governance": 54,
"engineering": 86
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 75,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"commits_last_year": 240,
"human_commit_share": 0.98,
"days_since_last_push": 5,
"active_weeks_last_year": 6
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 5 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 5
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "6/52 weeks with commits",
"points": 4.2,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 6
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "240 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 240
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 3,
"latest_release_tag": "v0.2.2",
"releases_from_tags": false,
"days_since_latest_release": 5,
"mean_days_between_releases": 2.4
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "3 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 3
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 5 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 5
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~2.4 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 2.4
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 43,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 0,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "0 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 0
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 63,
"inputs": {
"packages": [
"@switchboard-mcp/cli",
"@switchboard-mcp/core",
"@switchboard-mcp/docs-mcp",
"@switchboard-mcp/mcp-runtime"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 6244
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "6,244 downloads/month across npm",
"points": 50.6,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 6244,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 54,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 10,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"merged_prs": 192,
"open_issues": 0,
"closed_issues": 4,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 6
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 46.8,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "192/198 decided PRs merged",
"points": 37.1,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 192,
"decided": 198
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/25 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 42,
"inputs": {
"followers": 12,
"owner_type": "User",
"is_verified": null,
"owner_login": "wkoverfield",
"public_repos": 12,
"account_age_days": 1295
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "12 followers of wkoverfield",
"points": 8,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 12,
"login": "wkoverfield"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "12 public repos, account ~3 yr old",
"points": 15.2,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 12
}
},
{
"code": "account_age_years",
"params": {
"years": 3
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"@switchboard-mcp/cli",
"@switchboard-mcp/core",
"@switchboard-mcp/docs-mcp",
"@switchboard-mcp/mcp-runtime"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 5
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "4 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 4,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 5 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 5
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "10 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 10
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "excellent",
"name": "Engineering Quality",
"value": 86,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": "eslint.config.js",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "25 out of 25 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [
"ai-agents",
"claude-code",
"cli",
"codex",
"coding-agents",
"developer-tools",
"local-first",
"mcp",
"secrets-management",
"security"
],
"has_wiki": false,
"homepage": "https://switchboard-beta-nine.vercel.app",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://switchboard-beta-nine.vercel.app",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "10 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 10
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 52,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 43,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 15,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 3,
"scorecard_aggregate": 4.3
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "25 out of 25 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/25 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "8 existing vulnerabilities detected",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Matched the npm:@switchboard-mcp/cli@0.2.2 runtime dependency closure — what installing the published package pulls in — 144 packages. Reachability is not analyzed.",
"notes": [
{
"code": "advisories_scope_published",
"params": {
"package": "npm:@switchboard-mcp/cli@0.2.2",
"assessed": 144
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 88,
"inputs": {
"source": "osv",
"advisories": 1,
"affected_packages": 1,
"assessed_packages": 144,
"unassessed_packages": 0,
"affected_by_severity": "moderate 1",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "1 affected: @hono/node-server 1.19.14 (moderate 5.9)",
"points": 13.2,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 1,
"packages": "@hono/node-server 1.19.14 (moderate 5.9)"
}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory has been public longer than 90 days",
"points": 40,
"status": "met",
"details": [
{
"code": "advisories_none_stale",
"params": {
"days": 90
}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 144,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 69,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "moderate",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"has_llms_txt": true,
"legible_history_share": 0.939,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": "llms.txt present",
"points": 15,
"status": "met",
"details": [
{
"code": "llms_txt_present",
"params": {}
}
],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "92 of 98 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 92,
"sampled": 98
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 72,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"pnpm-lock.yaml"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"apps/cli/tsconfig.json",
"packages/core/tsconfig.json",
"packages/docs-mcp/tsconfig.json",
"packages/mcp-runtime/tsconfig.json",
"tsconfig.json"
],
"agent_commit_share": 0.74,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.02
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": "eslint.config.js",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "apps/cli/tsconfig.json, packages/core/tsconfig.json, packages/docs-mcp/tsconfig.json, packages/mcp-runtime/tsconfig.json, tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "apps/cli/tsconfig.json, packages/core/tsconfig.json, packages/docs-mcp/tsconfig.json, packages/mcp-runtime/tsconfig.json, tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "74 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 74,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "2 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 2,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 99,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 410270,
"source_files_sampled": 122,
"oversized_source_files": 3
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "3/122 source files over 60KB",
"points": 53.6,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 122,
"oversized": 3
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "moderate",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": true,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 20,
"status": "met",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [],
"report_type": "repository",
"generated_at": "2026-07-24T12:23:36.791019Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/wkoverfield/switchboard.svg",
"full_name": "wkoverfield/switchboard",
"license_state": "standard",
"license_spdx": "MIT"
}