ETC
ETC OS · Apollo
Research Tool
Development · Roadmap

Phase timeline

Honest view of where we are. v0 is built, the Public Data Tier (Wave 1) is integrated, and Apollo is live in production — deployed with SSO, publishing under user identity, and auto-deploying via CI/CD. Phase 2 scope is intentionally not populated with speculative content — what it includes needs to come from you. See questions at the bottom of each open phase box.

Phase timeline

✓ Done
v0 — Structural
Code & tests in place
100%
  • Scaffolding + Pydantic schemas + validators
  • 8 skills with valid SKILL.md frontmatter
  • 6 custom MCPs + 2 upstream MCPs registered
  • Workbench UI + FastAPI BFF + per-thread runner (DEC-007)
  • Runtime selector — Phases 1–4 shipped (DEC-008)
  • 254 unit tests + 1 deferred e2e passing
  • Cross-lab signal under subscription auth ($0 API cost)
  • Coordination protocol (§3.9) operational
✓ Done
Live in production
Deployed & in use
100%
  • Live at apollo-etcos.web.app · Microsoft Entra SSO
  • Opportunities publish & render from ETCOS Firestore
  • User-identity publishing via publishOpportunity Cloud Function (no admin keys)
  • Keyless CI/CD — merge → 254 tests → auto-deploy (WIF)
  • Repo on ETCorp with shared-backend safety guards
✓ Done
Public Data Tier (Wave 1)
Integrated (DEC-006)
100%
  • 6 free upstream MCPs registered in both CLIs
  • Tool Dispatch table shipped in CLAUDE.md
  • avenue-researcher Step 3.5 cascade added
  • 14 MCPs now live (8 core/custom + 6 Public Data Tier)
  • edgartools · octagon-sec · patent-connector · paper-search · gov-ca · tavily
🔭 Later
Phase 2 — Scale
Partially defined
~
  • Migration to Anthropic Managed Agents (discussed)
  • Remaining deferred MCPs (sharepoint, crm, regulatory) (planned)
  • Additional vertical specializations (extension pattern)
  • Everything else: TBD with you
✓ Phase 0 / v0 Structural — 100% · shipped 2026-05-08

Everything that's actually built

Sourced from each session's DONE-VALIDATED status report. No invention.

Session A — Scaffolding
  • pyproject.toml, .gitignore, .env.example, venv
  • CLAUDE.md + AGENTS.md (shared agent context)
  • memory/avenue-framework.json (28 avenues, 7 categories)
  • memory/scoring-rubric.json (9 dimensions)
  • orchestrator/schemas.py (Pydantic v2)
  • orchestrator/validators.py (gate enforcement)
  • orchestrator/ids.py + config.py
  • orchestrator/codex_runner.py
  • orchestrator/main.py (Typer CLI — 5 subcommands)
  • .claude/commands/*.md slash commands
  • README.md + tests/test_e2e.py scaffold
  • 65 orchestrator/skill tests passing
Session B — MCP Servers
  • mcp-servers/_shared/ utilities
  • etcos-publisher (B2) — 20 tests
  • cross-lab-reviewer (B3) — 25 tests (was 22; +3 from DEC-009 regression coverage)
  • cross-lab-reviewer v0.3.0 supports 4 providers: claude_cli, codex_cli, anthropic_api, openai (DEC-008)
  • gemini-deep-research (B3.5) — upstream registered
  • evidence-validator (B4) — 17 tests
  • etcos-reader (B5) — 14 tests
  • etc-memory (B6) — 18 tests
  • citation-validator (B7) — 19 tests
  • exa (B8) — upstream registered
  • MCP registry (.claude/settings.json + .codex/config.toml)
  • mcp-servers/README.md catalog
  • 113/113 MCP tests passing (was 110)
Session C — Skills
  • REUSE_AUDIT.md (0 adoptions, 1 fork, 7 fresh)
  • opportunity-brief v0.1.0 (generic — KEY)
  • livestock-tech-opportunity-brief v0.2.0 (specialization)
  • avenue-researcher v0.2.0 (gemini-first, exa fallback)
  • scoring-rubric-applier v0.1.0
  • cycle-planner v0.1.0
  • evidence-validator skill v0.1.0
  • backlog-intake v0.1.0
  • pipeline-review-prep v0.1.0
  • skills/README.md catalog
  • 16 symlinks (.claude/skills + .codex/skills)
✓ Post-v0 enhancements — shipped 2026-05-13 → 2026-05-15

Workbench UI + Runtime Selector

Shipped on top of the v0 structural cut. Both fully tested; merged to main.

Analyst Workbench (DEC-007)
  • FastAPI BFF + SSE live refresh (apollo/web/server.py)
  • Per-thread runner spawning Codex/Claude in isolated worktrees
  • Static workbench HTML in prototypes/ui/
  • Auto-discovers Node ≥18 for Claude CLI (works around system Node v14)
Runtime Selector — 4 phases (DEC-008 / DEC-009)
  • Phase 1 — Claude CLI runner (orchestrator/claude_runner.py, 17 tests)
  • Phase 2 — Dispatcher branches on APOLLO_ORCHESTRATOR_RUNTIME (15 tests)
  • Phase 3 — cross-lab-reviewer 4 providers + auto resolution (22 tests)
  • Phase 4 — BFF endpoints + workbench dropdowns + .apollo/runtime.json persistence (16 tests)
  • Bug-fix DEC-009 — subscription-default sentinel + is_error surfacing (3 tests)

Commits: 45ed820 · 89b4bec · 36a2a01 · 5f2ac61 · 5cd0e75 · 602c9e1 · Test count: 175 → 254 unit + 1 deferred e2e (+79 new)

✓ Deployed & live — what you need to run a real cycle locally

Running your own research cycle

The cloud site, SSO, opportunity publishing (user-identity Cloud Function) and CI/CD are live — no secrets needed to view opportunities. To run a real research cycle on the local agent, you supply your own API keys. Click each card for concrete steps.

Drop research keys in place

For local research runs. Publishing is keyless — no service-account file needed.

  • ANTHROPIC_API_KEY from console.anthropic.com (or use Claude CLI subscription auth)
  • OPENAI_API_KEY from platform.openai.com (or Codex CLI subscription auth)
  • GEMINI_API_KEY from aistudio.google.com — paid tier required (Deep Research is not on free)
  • Optional: EXA_API_KEY (free tier 1k searches/mo)
  • No Firebase key needed — publishing runs under your own @etcorp.ca identity via the publishOpportunity Cloud Function (keyless ADC fallback locally)
Run the §9 end-to-end test

One real cycle on one real avenue/vertical pair.

  • pytest tests/test_e2e.py::test_full_cycle -v
  • Verify cycles/2026-Q2-test/AR-001-*/findings.md exists and is non-empty
  • Verify opportunities/OPP-001/backlog-row.json is schema-valid
  • Verify opportunities/OPP-001/reviews/anthropic-review.md has structured output
  • Verify Firestore test collection has OPP-001 doc after publish
  • Negative test: remove APPROVED → publish exits non-zero
Confirm Gemini Deep Research package resolves

Session B locked @alexcong/gemini-deepsearch-mcp in the registry. If npm can't find it, registry needs a one-line edit.

  • Try: npx -y @alexcong/gemini-deepsearch-mcp --help
  • If unresolved: try gemini-deepsearch-mcp (no scope)
  • Or fallback to bharatvansh/gemini-deep-research-mcp
  • Or clone & node-run as last resort
  • Update mcp-servers/GEMINI_DEEP_RESEARCH_DECISION.md with working invocation
Wire telemetry to real data

Telemetry page currently shows demo data. Build the generator script when ready.

  • Create orchestrator/scripts/build_telemetry.py
  • Walk cycles/*/research-log.json → counts & costs
  • Walk opportunities/OPP-*/backlog-row.json → tier/status/quadrant aggregations
  • Parse coordination/HANDOFFS.md for run timestamps
  • Write to apollo-cloud/data/telemetry.json
✓ v1 Wave 1 — Integrated (DEC-006) — live in both CLIs

Public Data Tier — 6 free MCPs

All upstream, all free, all stdio-installable — registered alongside Exa (B8) and gemini-deep-research (B3.5). Now live and operational, bringing the total to 14 MCPs. Original handover at coordination/WAVE_1_HANDOFF.md.

tavily

Search hedge (1k free queries/mo) — fallback when exa rate-limits.

paper-search-mcp

arXiv + PubMed + OpenAlex + Semantic Scholar + bioRxiv. Free.

patent-connector

EPO + USPTO landscape. Free open beta.

edgartools

SEC EDGAR (13 tools, no API key). Free.

octagon-sec

Agentic SEC analysis (8000+ companies, no rate limits). Free.

gov-ca-mcp

Open Government Canada (250k+ datasets). Free.

Integration complete:
  • ✓ All six MCP packages smoke-tested and registered in both CLIs
  • ✓ CLAUDE.md Tool Dispatch table maps each need → the right MCP
  • ✓ avenue-researcher Step 3.5 encodes the specialized-MCP cascade
? v1 — Remaining scope undefined

Other v1 questions — resolved & open

Wave 1 is integrated, and the production cutover (Q5) and CI (Q8) are now done — both marked ✓ below. The remaining questions still await your direction; each answered one becomes a roadmap item.

Q1
Which deferred MCPs do you want pulled forward?

The Public Data Tier (incl. EdgarTools) is already live — see Gap Analysis. Remaining candidates: etc-sharepoint, etc-crm, regulatory wrappers (you pick the 1-2 agencies).

Q2
What happens after "approved & published"?

v0 stops at "published to ETCOS." When an opportunity enters Phase 1, what does Apollo's role become? Hands off entirely? Generates a Phase 1 briefing pack? Something else?

Q3
Who else uses Apollo?

Today only you run it. Should the GM read briefs directly through Apollo's UI? Should other ETC functions (sales, engineering) submit candidates? Or is ETCOS itself the read-side UI?

Q4
Cycle cadence — manual or scheduled?

WI says monthly review with 6–10 cycles per quarter. Should Apollo auto-trigger plan-cycle quarterly? Or always Rafael-initiated? Are there event-triggered runs (e.g., regulatory mandate hits)?

✓ Q5 — Resolved
Production ETCOS cutover — done

Now live on the real etc-pinnacle-os project (shared with etcos.ca). Opportunities publish under each user's @etcorp.ca identity via the publishOpportunity Cloud Function, with shared-backend safety guards in place.

Q6
Notifications & observability — needed?

Should Apollo proactively alert you / GM / others when something important lands (Tier 1 found, gate blocked, cycle completed)? Or stay manual-only for v1?

Q7
Additional vertical specializations — order?

Livestock is the seed. The Avenue Framework lists three adjacent verticals (Precision Ag, Critical Minerals & Mining, Renewable Energy). Which should be specialized next? Defence & Public Safety (separate set of considerations)?

✓ Q8 — Resolved
CI & testing infrastructure — live

GitHub Actions runs 254 tests on every push (py3.11 + py3.12), and merges to main auto-deploy the website via keyless Workload Identity Federation.

How to use this: answer the questions you have opinions on (in plain language). Skip the ones you don't. For each answered question I'll write a formal item with todos and add it back to this phase box — at that point v1 stops being TBD and becomes a real plan.
🔭 Phase 2 — Partially defined — directional only; details TBD

What's actually been discussed for "later"

Only items grounded in our actual conversations. Nothing invented.

Managed Agents migration

Move orchestrator from local Codex CLI to Anthropic Managed Agents — durable async, sandboxed execution, dreaming.

Source: our "Managed Agents vs Agent SDK" discussion turn.

Why later: v0 architecture explicitly designed so this is a swap, not a rewrite. Every MCP supports --transport stdio|http; orchestrator binding is one file.

Cost shift: $0.08/hr session runtime + token costs no longer covered by your Codex subscription.

Decision needed: when do you want to migrate? Today's local setup is fine for solo use.

Deferred MCPs (per plan §6)

etc-sharepoint, etc-crm, regulatory wrappers — the plan put these in Phase 2 explicitly.

Source: IMPLEMENTATION_PLAN.md §6 task list — "Phase 2 — Out of v0 scope" row.

Detail: see the Gap Analysis page.

Decision needed: Q1 on the v1 questions list above will likely move some/all of these into v1 if you choose. Otherwise they stay in Phase 2.

Additional vertical specializations

Livestock pattern → applied to other ETC strategic verticals.

Source: noted in the original architecture design as the natural extension pattern.

Detail: each new vertical = a new specialization skill that inherits from opportunity-brief and adds vertical-specific guidance (subsystems, source priorities, regulatory checklist). Roughly 1 day per vertical.

Decision needed: Q7 above — which vertical(s) next, in what order?

Anything else in Phase 2?

The previous version of this page had several speculative items (notifications, observability tooling, dreaming, Genie Spaces, multi-tenant). I removed them — they were extrapolation, not your direction.

If any of those ideas resonate, tell me and I'll add them back with real scoping.

⚠️ Known issues & tech debt

From the actual session status files. Not invented.

DEC-001 superseded — clean up references
  • DEC-005 supersedes DEC-001 (Anthropic now the cross-lab default, not gpt-5)
  • Audit cross-lab-reviewer/server.py for gpt-5-specific defaults
  • Lead with Anthropic in README and CLAUDE.md; mention OpenAI as fallback
  • Reference: Session B status open question #1
Gemini Deep Research npm package name not verified
  • @alexcong/gemini-deepsearch-mcp locked in settings — may not resolve on npm
  • Try npx -y @alexcong/gemini-deepsearch-mcp --help at integration time
  • Fallbacks: drop scope, or use bharatvansh/gemini-deep-research-mcp
  • Reference: Session B status open question #2
pytest importmode decision
  • Session B initially filed a MERGE_REQUEST to add importmode = "importlib" to pyproject
  • Withdrew after fixing tests in-file
  • Worth confirming the in-file fix is the long-term solution
  • Reference: Session B handoff 2026-05-08T20:50
✓ CI — resolved

GitHub Actions now runs 254 tests on every push (py3.11 + py3.12); merges to main auto-deploy the website via keyless Workload Identity Federation. (Was v1 Q8.)