Codex-first portfolio governance

One central board. Many repos. Zero webhook dependency to start.

Run a scheduled Codex or Claude task, reconcile GitHub activity through `gh`, append only what is new, and catch work that never made it into the board.

$ node scripts/reconcile.mjs --config config/sources.local.json
{ "runId": "run-2026-08-05T12:00:00.000Z", "newEventCount": 28, "newExceptionCount": 2 }

$ node scripts/render-report.mjs
{ "projects": 4, "open_exceptions": 2, "notable_events": 12 }

A public-safe template, not someone else’s operations.

The repository ships with example configs, prompts, schemas, scripts, a static landing page, and opinionated docs. Real portfolio data stays local.

Scheduled task. CLI scan. Reconciliation. Report.

No public ingest endpoint, no webhook signing, no mandatory database. Start with a repeatable task loop and add complexity only when latency becomes a real problem.

01

Source registry

Map repos, Projects, owners and exception rules through local JSON config.

02

Reconcile with `gh`

Collect repo events, commits, issues, PRs and Project items using GitHub CLI and GraphQL.

03

Append-only journal

Persist only new normalized events. Re-run safely with event IDs and dedupe keys.

04

Exception queue

Flag unregistered work with evidence, severity and a next step.

Approved capabilities rendered from a sanitized registry.

Governance without platform drag.

  • Open source by default
  • Low infrastructure overhead
  • Local-first data handling
  • Human review before automation expansion

Intentional constraints in v0.

  • No automatic write-back into source repos
  • No external alerting loop yet
  • No webhook ingestion in the first phase
  • Heuristics need calibration per portfolio