A research institution you run with one sentence — from RFP to verified results, a human in the loop at every gate.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 10 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
cambium_agents
-
cambium_dispatch
-
cambium_doctor
-
cambium_fidelity
-
cambium_grade
-
cambium_graph
-
cambium_plan
-
cambium_provision
-
cambium_recall
-
cambium_validate
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit e9edd48 · analyzer v33 · 2w ago
skills & prompt files 40
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/00-orchestrator.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/01-scout-prior-art.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/02-scout-methods.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/03-scout-landscape.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/04-lab-theory.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/05-lab-methods.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/06-lab-domain.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/07-verify-rigor.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/08-verify-methodology.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/09-verify-evidence.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/10-verify-domain.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/11-exec-experiments.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/12-exec-ablation.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/13-document-office.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/14-record-keeper.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/15-librarian.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/16-janitor.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/17-teaching-assistant.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/18-research-assistant.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/19-office-manager.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/20-data-steward.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/21-integrity-officer.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/22-figures.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/23-outreach.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/24-rfp-analyst.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/25-principal-investigator.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/26-ideation-facilitator.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/27-proposal-writer.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/28-faculty-expert.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/29-reporting-officer.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/30-deck-builder.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/31-collaborator-scout.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/32-partnership-liaison.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/33-program-manager.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/34-lab-statistics.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/35-exec-iteration.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/36-research-engineer.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/37-referee.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/38-idea-tournament.md
- agent-rules pkjaslam-Cambium_AI-e9edd48/.claude/agents/39-rfp-radar.md
danger signals1
- dynamic code execution eval()/exec() pkjaslam-Cambium_AI-e9edd48/tests/test_tool_budget.py :18
exec(compile(ast.Module(body=[fn], type_ignores=[]), DOCTOR, "exec"), ns)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 291
filesystem 206
- fs pkjaslam-Cambium_AI-e9edd48/assets/gen/gen_architecture.py :27
cards = {a["name"] for a in json.load(open(os.path.join(ROOT, "agent_cards.json")))["agents"]} - fs pkjaslam-Cambium_AI-e9edd48/assets/gen/gen_audience.py :90
open(os.path.join(ROOT,"assets","audience.svg"),"w").write("\n".join(s)) - fs pkjaslam-Cambium_AI-e9edd48/assets/gen/gen_demo_gif.py :13
N = json.load(open(os.path.join(ROOT, "agent_cards.json")))["count"] - fs pkjaslam-Cambium_AI-e9edd48/assets/gen/gen_hero.py :96
open(os.path.join(ROOT,"assets","hero.svg"),"w").write("\n".join(s)) - fs pkjaslam-Cambium_AI-e9edd48/assets/gen/gen_lifecycle.py :94
open(os.path.join(ROOT,"assets","lifecycle.svg"),"w").write("\n".join(s)) - fs pkjaslam-Cambium_AI-e9edd48/assets/gen/gen_responsible_ai.py :102
open(os.path.join(ROOT,"assets","responsible-ai.svg"),"w").write("\n".join(s)) - fs pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/analyze.py :53
with open(results, encoding="utf-8") as f: - fs pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/analyze_stage2.py :44
d = json.load(open(p, encoding="utf-8")) - fs pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/blind.py :48
tasks = {json.load(open(p, encoding="utf-8"))["task_id"]: json.load(open(p, encoding="utf-8")) - fs pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/judge_stage1.py :116
task = json.load(open(p, encoding="utf-8")) - fs pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/run_arm.py :86
sysf = os.path.join(td, "sys.txt"); open(sysf, "w", encoding="utf-8").write(system) - fs pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/run_study.py :81
with open(path, encoding="utf-8") as f:
show 28 more
- fs pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/tasks/gen_tasks.py :78
d = json.load(open(p, encoding="utf-8")) - fs pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/verify_pipeline.py :52
packet = json.load(open(pkt_path, encoding="utf-8")) - fs pkjaslam-Cambium_AI-e9edd48/governance/validate.py :45
rows = list(csv.DictReader(open(LEDGER, newline="", encoding="utf-8"))) - fs pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :34
return json.load(open(p, encoding="utf-8")) if os.path.exists(p) else {"agents": [], "count": 0} - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_academy_build.py :6
return json.load(open(os.path.join(ROOT, "academy", "courses.json"), encoding="utf-8")) - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_accessibility.py :44
f = tempfile.mktemp(suffix=".json"); json.dump(_STATE, open(f, "w")); return f - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_agent_scaffold.py :7
import pathlib - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_ai_disclosure.py :29
with open(os.path.join(gov, "GATES.md"), "w", encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_ai_disclosure_json.py :16
with open(os.path.join(root, "governance", "GATES.md"), "w", encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_api_stability.py :5
import pathlib - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_archive_project.py :70
os.remove(out / "projects" / "alpha" / "data.txt") - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_authorship_matrix.py :17
with open(path, "w", encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_board_e2e.py :18
import shutil - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_board_pro.py :16
f = tempfile.mktemp(suffix=".json"); json.dump(STATE, open(f, "w")) - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_budget_narrative_match.py :27
with open(path, "w", encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_budget_review.py :176
with open(path, "w", encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_checklist_builder.py :27
with open(path, "w", encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_compliance_matrix.py :111
with open(path, "w", encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_concept_graph.py :26
from pathlib import Path - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_contract_check.py :65
with open(server_path, "w", encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_cost_share_ledger.py :177
with open(out_path, encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_cost_telemetry.py :13
rows=list(csv.reader(open(p))) - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_countersign.py :25
with open(path, "w", encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_coverage_map.py :25
with open(path, "w", encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_deadline_radar.py :7
import pathlib - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_deterministic_checks.py :33
assert "deterministic" in open(out, encoding="utf-8").read() - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_effort_cert.py :106
with open(ledger, newline="", encoding="utf-8") as fh: - fs (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_enforce_all.py :15
json.dump({"gate": gate, "approver": "Jaslam", "ts": ts}, open(os.path.join(d, gate + ".json"), "w"))
166 more not shown — this panel samples each group; the count above is the real total.
shell / exec 75
- shell pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/run_arm.py :70
r = subprocess.run(cmd, input=stdin, capture_output=True, text=True, - shell pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/run_pilot.py :23
r = subprocess.run([PY] + args, cwd=_HERE) - shell pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/verify_pipeline.py :45
rc = subprocess.run([sys.executable, os.path.join(_HERE, "blind.py")], capture_output=True, text=True) - shell pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :17
r = subprocess.run([sys.executable, rel, *args], cwd=REPO, capture_output=True, text=True) - shell (weak) pkjaslam-Cambium_AI-e9edd48/scripts/precheck.py :20
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_agent_scaffold.py :8
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_api_stability.py :6
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_archive_project.py :8
return subprocess.run([sys.executable, os.path.join(ROOT, "tools", "archive_project.py"), *args], - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_audit_bundle.py :10
return subprocess.run([sys.executable, os.path.join(ROOT, "tools", "audit_bundle.py"), *args], - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_award_calendar.py :7
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_board_e2e.py :19
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_board_pro.py :43
r = subprocess.run([sys.executable, os.path.join(ROOT, "tools", "gen_board_pro.py"),
show 28 more
- shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_budget_narrative_match.py :10
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_checklist_builder.py :10
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_cite_export.py :6
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_common_forms_check.py :6
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_control_map.py :10
return subprocess.run([sys.executable, os.path.join(ROOT, "tools", "control_map.py"), *args], - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_cost_report.py :12
return subprocess.run([sys.executable, os.path.join(ROOT, "tools", "cost_report.py"), *args], - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_course_pack.py :3
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_deadline_radar.py :8
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_effort_reconciler.py :6
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_enforce_all.py :9
return subprocess.run([sys.executable, os.path.join(ROOT, "tools", tool), *a], - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_enforcement_study.py :15
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_env_doctor.py :9
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_flashcards.py :8
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_flashcards_export.py :10
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_framework.py :10
return subprocess.run([sys.executable, rel, *args], cwd=ROOT, capture_output=True, text=True) - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_funder_freshness.py :17
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_gate_and_audit.py :4
def run(tool,*a): return subprocess.run([sys.executable,os.path.join(ROOT,"tools",tool),*a],capture_output=True,text=True) - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_gate_lock.py :4
def run(*a): return subprocess.run([sys.executable, os.path.join(ROOT, "tools", "gate_lock.py"), *a], capture_output=True, text=True) - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_gate_simulator.py :3
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_gen_dashboard.py :38
import subprocess, sys, time - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_gen_readme.py :11
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_glossary_builder.py :3
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_glossary_gen.py :8
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_handoff.py :2
import subprocess, sys, json, pathlib - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_inline_board.py :74
r = subprocess.run([sys.executable, os.path.join(ROOT, "tools", "gen_inline_board.py"), - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_intake_guard.py :7
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_learning_delivery.py :8
import subprocess - shell (weak) pkjaslam-Cambium_AI-e9edd48/tests/test_new_agent.py :8
import subprocess
35 more not shown — this panel samples each group; the count above is the real total.
network 6
- net pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/run_arm.py :17
import argparse, glob, json, os, shutil, subprocess, sys, tempfile, time, urllib.request - net pkjaslam-Cambium_AI-e9edd48/tools/cambium_run.py :136
import urllib.request, json as J - net pkjaslam-Cambium_AI-e9edd48/tools/deterministic_checks.py :21
import argparse, json, os, sys, urllib.request - net pkjaslam-Cambium_AI-e9edd48/tools/paper_search.py :26
import sys, json, urllib.request, urllib.parse, re - net pkjaslam-Cambium_AI-e9edd48/tools/retraction_check.py :55
import urllib.error - net pkjaslam-Cambium_AI-e9edd48/tools/url_health.py :92
import urllib.request, urllib.error, urllib.parse
secrets 4
- secrets pkjaslam-Cambium_AI-e9edd48/evals/enforcement_study/run_arm.py :125
key = os.environ.get("ANTHROPIC_API_KEY") - secrets pkjaslam-Cambium_AI-e9edd48/tools/cambium_run.py :160
key = os.environ.get("ANTHROPIC_API_KEY") - secrets pkjaslam-Cambium_AI-e9edd48/web/server/app.py :46
return {"ok": True, "mode": "live" if (os.environ.get("CAMBIUM_LIVE") == "1" and os.environ.get("ANTHROPIC_API_KEY")) else "simulation", - secrets pkjaslam-Cambium_AI-e9edd48/web/server/engine.py :90
if os.environ.get("CAMBIUM_LIVE") == "1" and os.environ.get("ANTHROPIC_API_KEY"):
tool registrations 10
- cambium_plan pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :20
- cambium_provision pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :25
- cambium_agents pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :30
- cambium_doctor pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :36
- cambium_grade pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :41
- cambium_validate pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :46
- cambium_dispatch pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :56
- cambium_fidelity pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :61
- cambium_recall pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :66
- cambium_graph pkjaslam-Cambium_AI-e9edd48/mcp_server/cambium_mcp/server.py :71
declared dependencies 7
- fastapi@>=0.110
- uvicorn@>=0.29
- pydantic@>=2.0
- websockets@>=12.0
- pytest@>=7.0
- pytest-asyncio@>=0.21
- httpx@>=0.27