Skip to content
View ek33450505's full-sized avatar

Highlights

  • Pro

Block or report ek33450505

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
ek33450505/README.md

Edward Kubiak

Open-source developer — I build developer tools (agent infrastructure, guardrails) and open data platforms.

Columbus, Ohio · edwardkubiak.com

By day I architect and maintain production EdTech at META Solutions for Ohio school districts. Nights and weekends I build open-source infrastructure and data projects.

Focus: multi-agent systems, developer tools, and open-source infrastructure.


What I work on

Multi-agent systems fail in predictable ways: routing is opaque, memory bleeds across agents, policy is aspirational, and observability stops at the tool call. I build CAST to close those gaps — a local-first control plane for Claude Code — and a family of standalone, zero-LLM guardrails that fell out of building it. I also build Compute Atlas, an open, source-cited census of U.S. grid-scale compute infrastructure. More at castframework.dev.

CAST ecosystem metrics card — version, agents, tests, db tables, commands, skills, packages (exact counts in the CAST section below)

One control plane. Two observability surfaces. A family of deterministic, zero-LLM guardrails — all local-first, all recorded to a single SQLite execution log. Nothing leaves your machine, and nothing calls a model to grade itself.

Projects at a glance

Project What it does Stack
CAST Local-first multi-agent control plane for Claude Code Bash · Python · SQLite
Compute Atlas 🗺️ Open, source-cited census of U.S. data centers, mining sites, and dedicated power Next.js 16 · Postgres · MapLibre
claude-code-dashboard Web observability UI — 21+ views, live SSE streaming React 19 · Express 5
cast-desktop Native macOS observability app + embedded terminal Tauri 2 · Rust
attest Zero-LLM gate: verifies a subagent's DONE vs the git delta Python
looptrip Zero-LLM detector for multi-agent loop pathologies Python · PyPI
misfire Turns the rules your agents ignore into enforcement hooks Python · PyPI

Deep-dives below — click any project to expand.


CAST

claude-agent-team

CAST License: MIT Tests Agents

A local-first control plane for Claude Code. Multi-agent systems need observability, persistence, and unforgeable policy — CAST ships all three by construction, hung off Claude Code's own lifecycle hooks and recorded in a SQLite database that two surfaces read from.

flowchart LR
  SS["SessionStart"] --> R["router"]
  PT["PreToolUse"] --> G["policy gate"]
  SUB["SubagentStop"] --> T["telemetry"]
  R --> DB[("cast.db")]
  G --> DB
  T --> DB
  DB --> WEB["claude-code-dashboard · web"]
  DB --> NAT["cast-desktop · native"]
Loading
  • Hook-driven dispatch over polling. Routing, telemetry, and policy hang off lifecycle events (SessionStart, PreToolUse, SubagentStop, Stop) — no daemon, no background loop, no missed events.
  • Local-first SQLite everywhere. Agent runs, routing decisions, memory, and quality gates all live in ~/.claude/cast.db, replicated off the blast radius via Litestream — the database survives a full ~/.claude wipe.
  • Per-agent memory, not shared context. Each agent keeps scoped memory; isolation by default, coordination only when asked for.
  • Hard-blocking policy gates. Force-pushes, raw git commit, destructive shell ops — refused at the hook seam, not left to agent discipline.
  • Every override is on the record. Each escape hatch writes an ack_events row with the reason, so an absent row means the hatch was never used — not that the recorder failed.

27 specialist agents · 3323 BATS tests · 42 tables in cast.db · 21 commands · 18 skills · 9 Homebrew packages. Counts auto-refresh from the flagship's canonical stats — never hand-edited.

v10.0.0 — "Make the Gates Tell the Truth": what a release looks like when you audit your own guardrails

49 merged PRs, 423 files, +48,879/−3,259 — with one theme, arrived at the hard way:

A gate that has never failed is indistinguishable from a gate that cannot fail.

Nearly every item in the release came from asking of an existing check: what does its output look like when the thing it guards did not happen? — and finding the answer was "identical to success."

  • The destructive-op guard was registered in the hook-contract gate but never actually executed by it.
  • The session-end prune had been failing on every run for months, swallowed behind a || true.
  • A cast doctor honesty check compared two timestamp formats that can never match, so it could never fire.
  • The review gate could be satisfied by a review of a different artifact entirely — six defects, one Critical. Subagent self-review is now structurally impossible.
  • The git guard scanned only the first line of a Bash command; quoting and global options each defeated the whole module. Thirteen previously unguarded destructive git ops are now covered, each measured before a pattern was written.
  • 63% of every recorded protocol violation turned out to be a well-formed handoff, and cast verify-chain reported tamper for 244 of 929 links — none of which was tamper.

Tests went 2,353 → 3,320 across 204 → 239 files, and the new ones are mutation-tested: reverted against the bug they guard and confirmed RED first, because an assertion that never fails is the same defect one level up. Two of this release's own tests were caught that way and would otherwise have shipped green and empty.

📄 Full changelog

# Claude Code plugin (recommended)
/plugin marketplace add ek33450505/claude-agent-team
/plugin install cast && /plugin enable cast@cast
# or: brew tap ek33450505/cast && brew install cast

Observability — two surfaces, one data layer

Everything CAST records lands in cast.db. Read it on the web, or natively — same data, two delivery models.

claude-code-dashboard ✨ — web observability UI for CAST (21+ views, live SSE)

claude-code-dashboard · React 19 · TypeScript · Vite 6 · Express 5 · better-sqlite3 · Tailwind v4

A browser dashboard for everything CAST records. Reads ~/.claude/ directly and streams live session data over SSE — which agents fired, what they cost, whether the guards are holding. 21+ lazy-loaded views spanning sessions, analytics, agent reliability, hook health, incidents, quality gates, a memory browser, plans, the dispatch log, token spend, and a database explorer. No accounts, no telemetry, nothing leaves your machine.

git clone https://github.com/ek33450505/claude-code-dashboard
cd claude-code-dashboard && npm install && npm run dev
cast-desktop — native macOS observability app with an embedded terminal

cast-desktop · Tauri 2 · Rust · TypeScript

The same cast.db, packaged as a self-contained native app — no Node, no server to run. An embedded PTY terminal with persistent pane-to-session binding, an inline CodeMirror editor that dispatches agents on selection, 11 dashboard views over 40+ read-only loopback routes, and live per-session cost streaming ($/min plus a 4-hour projection). Keyboard-first, with a command palette and a native macOS menu bar.

brew tap ek33450505/cast && brew install --cask cast-desktop

Guardrails & detectors

Three standalone, deterministic, zero-LLM tools for Claude Code. None calls a model — so none adds tokens or can hallucinate its own verdict. They grade the act against ground truth on disk.

attest — catches a subagent's false DONE against the real git delta

attest · Python 3 (stdlib-only) · MIT

"DONE" is a claim, not proof. Grade the act, not the output.

A subagent reports Status: DONE after a Write that returned success but never landed on disk — a silent write-failure behind a confident claim. attest snapshots the git tree on SubagentStart, recomputes the delta on SubagentStop, and checks whether the files it claimed to change actually changed. If a claimed file never landed, it (opt-in) blocks the completion so the same agent is forced to fix it. Fail-open on every doubt; verified end-to-end against real Claude Code with captured payloads committed to the repo.

/plugin marketplace add https://github.com/ek33450505/attest
# or: brew tap ek33450505/attest && brew install attest
looptrip — trips multi-agent loops at iteration 2, not on the invoice

looptrip · Python 3 · Apache-2.0 · PyPI

Catch the loop at iteration 2 — not on the invoice.

The failure mode that quietly burns money: agents loop — the same subagent dispatched again and again with no progress between repeats (duplicate-work, ping-pong / livelock, deadlock, non-termination), and you find out on the bill. looptrip watches a run as a stream of normalized events and trips at the second dispatch. An observer, never a gate. Works over OpenTelemetry GenAI spans or a CAST cast.db — no new instrumentation. On two real recorded runaway sessions, tripping at iteration 2 would have averted $792.96 of duplicate-work spend (looptrip proof reproduces it).

pip install looptrip
# or: brew tap ek33450505/looptrip && brew install looptrip
misfire — measures which of your prose rules agents actually ignore, then enforces only those

misfire · Python 3 (stdlib-only) · Apache-2.0 · PyPI

Prose rules are hopes. misfire ranks the ones your agents ignore — and converts only those to hooks.

Most agent guardrails are written up front and hoped to hold. misfire works backward from evidence: it reads your CLAUDE.md, .claude/rules/*.md, and your own run history, then ranks which machine-checkable prose rules your agents demonstrably ignore — by observed violation rate, with confidence thresholds and a minimum-support floor. For the violated, convertible subset only, it scaffolds a deterministic PreToolUse/PostToolUse hook for you to review — leaving safety and judgment rules as prose. An observer and recommender, never a gate: it never auto-applies a change and never writes settings.json. The ranking is byte-reproducible against a committed fixture with no database (misfire rank reproduces it).

pip install misfire
# or: brew tap ek33450505/misfire && brew install misfire

The CAST ecosystem

Beyond the flagship, CAST has spun off a constellation of small, single-purpose tools — a read-only MCP server over the execution record, signed hash-chained session receipts, telemetry-driven dispatch prediction, persistent agent memory, a standalone install health check, a clock, and a cross-session journaling layer. Each ships independently; each installs via Homebrew.

9 Homebrew-installable packages — the full table

Core Framework

Repo Description Latest Install
claude-agent-team Local-first multi-agent control plane — specialist agents, quality gates, hook enforcement, and the tamper-evident cast.db execution record. brew tap ek33450505/cast && brew install cast

Observability

Repo Description Latest Install
claude-code-dashboard React observability UI — sessions, agent analytics, hook health, memory browser, SQLite explorer. Clone from GitHub
cast-desktop Tauri 2 native app — embedded PTY terminal, command palette, 11 dashboard views. brew tap ek33450505/cast && brew install --cask cast-desktop

Standalone Packages

Repo Description Latest Install
cast-mcp Read-only MCP server over the Claude Code execution record (cast.db) — dispatch decisions, incidents, cost, sessions, and full-text search as 5 MCP tools + 5 resources. stdlib-only, strictly read-only. brew tap ek33450505/cast-mcp && brew install cast-mcp
cast-ledger Signed, hash-chained, tamper-evident session receipts for Claude Code — SHA-256-stamped audit receipts from cast.db with --verify, plus an optional provenance hash-chain across sessions. brew tap ek33450505/cast-ledger && brew install cast-ledger
cast-predict Telemetry-driven dispatch prediction for Claude Code — reads cast.db to predict a task's likely cost, suggest agents, and surface related past incidents before you run it. brew tap ek33450505/cast-predict && brew install cast-predict
cast-memory Persistent agent memory for Claude Code — FTS5 full-text search, weighted relevance, temporal validity, Ollama embeddings, and weekly consolidation over cast.db. brew tap ek33450505/cast-memory && brew install cast-memory
cast-doctor Standalone read-only health check for any Claude Code install — validates hooks, MCP config, agent frontmatter, cast.db core schema, and stale memories without the full CAST framework. brew tap ek33450505/cast-doctor && brew install cast-doctor
cast-time Gives Claude Code a clock — injects local time, timezone, and a semantic time-of-day bucket at every SessionStart. brew tap ek33450505/cast-time && brew install cast-time
cast-claudes_journal Three-hook journaling for Claude Code (Stop/SessionStart/UserPromptSubmit) — maintains Claude's perspective and working memory across sessions as Obsidian-compatible markdown in ~/Documents/Claude/. brew tap ek33450505/homebrew-claudes-journal && brew install claudes-journal

Compute Atlas

compute-atlas · live at compute-atlas.com

facilities states release code: MIT data: CC BY 4.0

There is no national registry of data centers. This is an attempt at one — with a public source behind every record.

Compute Atlas is an open, provenance-first census of U.S. grid-scale compute infrastructure: hyperscale and AI/ML campuses, crypto-mining operations, and the dedicated power generation built or contracted to supply them — tracked from proposed and permitted through under construction and operational. Coverage spans all 50 states, and every record links at least one public source (permit filings, SEC filings, utility interconnection queues, company announcements, subsidy disclosures) with a label, a source kind, and a retrieval date. Intended audience: journalists, researchers, local officials, and residents.

The discipline is the product.

  • A source for every record, or the record does not exist.
  • Honest confidence — every facility is marked confirmed / reported / rumored, and compute records carry a separate AI classification (confirmed / likely / mixed_use). Uncertainty is surfaced, not hidden.
  • Numbers only when firm — ranges, ceilings, and modeled projections go in a record's notes, never into a numeric field. Statutory eligibility for an incentive is never recorded as a confirmed award.
  • Human approval is the core invariant. A scheduled discovery pipeline proposes candidates and mechanically verifies each cited URL against the claim it supports (using a local model on the maintainer's machine, never in the deployed app) — but nothing becomes a live facility without a human review step.

What you can do with it

Surface
🗺️ Interactive map MapLibre, with water and geology overlays, siting-context datums, and a radius tool
📊 Sortable table & dossiers Per-facility pages with full source lists and status history
Power Dedicated generation tracked as a first-class facility type, with capacity roll-ups
🏛️ Civic footprint Energy, water, subsidies, jobs, and community impact — public but scattered across county records and water-authority filings
🚫 Opposition Defeated projects and local-opposition cancellations, tracked as a dimension
👥 Stakeholders Named people with a documented stake in specific facilities
📚 Learn Cited prose explainers, not just statistics
🔌 Public API CORS-open, no auth, CDN-cached, X-License: CC-BY-4.0/api/facilities, /api/search, /api/stats, /api/schema
📦 Bulk data The entire dataset published as a CC BY 4.0 JSON snapshot anyone can download, fork, and cite

Under the hood. Next.js 16 (App Router, RSC, ISR) · React 19 · TypeScript + Zod (runtime-validated records with JSON Schema export) · Neon Postgres + Drizzle ORM as the authoritative store · MapLibre GL · Tailwind v4 + shadcn/ui · Vitest + Playwright in CI. data/facilities.json is a generated export, never hand-edited — every data wave runs DB-first through a dry-run-by-default sync that writes facility history and busts cache tags.

Dual-licensed: MIT for the code, CC BY 4.0 for the data.


Stack

Bash · Python · TypeScript · React 19 · Next.js 16 · Express 5 · SQLite · Postgres · BATS · Vitest · Playwright · Tauri 2 · GitHub Actions · Homebrew. macOS first, Linux supported. Anthropic API + Claude Code Agent SDK.


Building in public · edwardkubiak.com

Pinned Loading

  1. compute-atlas compute-atlas Public

    Compute Atlas is an open, source-cited dataset of data centers, crypto-mining sites, and the dedicated power generation built to supply them across the United States.

    TypeScript 5 2

  2. claude-agent-team claude-agent-team Public

    Local-first governance layer for Claude Code, built entirely on its native primitives — hooks, subagents, skills, MCP. Turns every session into a queryable, local SQLite record, then reads it back …

    Shell 8 1

  3. claude-code-dashboard claude-code-dashboard Public

    CAST observability UI — React 19 + Express dashboard for cast.db session analytics, agent runs, and hooks

    TypeScript 3 1

  4. misfire misfire Public

    misfire — a trace-grounded auditor that finds which CLAUDE.md rules your agents actually ignore and turns the ones that matter into deterministic hooks.

    Python

  5. attest attest Public

    DONE is a claim, not proof — a zero-LLM Claude Code hook that verifies a subagent's DONE against the real git delta and, opt-in, blocks the ones that never landed.

    Python 1

  6. looptrip looptrip Public

    looptrip — coordination-pathology detector + handoff attribution for multi-agent LLM runs; OSS lib + OTel SpanProcessor

    Python