Spec-driven multi-agent orchestration with verification and budget enforcement. Your taste is the product.
Drift inferred · capture-to-capture
- HIGH code analysis flagged committed secret in blakeaber/rooben
- HIGH code analysis flagged dynamic code execution in blakeaber/rooben
- HIGH code analysis flagged committed secret in blakeaber/rooben
- HIGH code analysis flagged committed secret in blakeaber/rooben
transport stdio · http counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 66de376 · analyzer v33 · 1w ago
skills & prompt files 2
- agent-rules blakeaber-rooben-66de376/AGENTS.md
- agent-rules blakeaber-rooben-66de376/CLAUDE.md
danger signals3
- dynamic code execution __import__ sink blakeaber-rooben-66de376/src/rooben/extensions/loader.py :162
lambda m: __import__("os").environ.get(m.group(1), ""), - committed secret Anthropic key blakeaber-rooben-66de376/src/rooben/_demo_orchestration.py :952
sk-ant…(38 chars, redacted) - committed secret private key blakeaber-rooben-66de376/tests/test_integration_artifacts.py :604
PEM private key block (redacted)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 325
filesystem 99
- fs (weak) blakeaber-rooben-66de376/scripts/ensure_schema.py :15
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/_demo_orchestration.py :26
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/agents/integrations.py :21
import shutil - fs blakeaber-rooben-66de376/src/rooben/cli.py :7
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/context/builder.py :7
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/context/codebase_index.py :8
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/dashboard/app.py :8
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/dashboard/credentials.py :5
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/dashboard/routes/credentials.py :136
import shutil as _shutil - fs blakeaber-rooben-66de376/src/rooben/dashboard/routes/extensions_api.py :138
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/dashboard/routes/hub.py :363
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/dashboard/routes/integrations.py :6
from pathlib import Path
show 28 more
- fs blakeaber-rooben-66de376/src/rooben/dashboard/routes/refine.py :8
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/dashboard/routes/waitlist.py :8
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/dashboard/routes/workflows.py :7
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/dashboard/routes/workspace.py :6
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/dashboard/server.py :7
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/dashboard/workflow_launcher.py :8
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/extensions/installer.py :6
import shutil - fs blakeaber-rooben-66de376/src/rooben/extensions/loader.py :6
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/extensions/manifest.py :78
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/orchestrator.py :845
from pathlib import Path - fs (weak) blakeaber-rooben-66de376/src/rooben/spec/loader.py :6
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/state/filesystem.py :6
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/verification/test_runner.py :8
from pathlib import Path - fs blakeaber-rooben-66de376/src/rooben/workspace/local.py :8
import shutil - fs (weak) blakeaber-rooben-66de376/tests/e2e/browser.py :90
def open(self, path: str, *, wait_ms: int = 2000) -> str: - fs (weak) blakeaber-rooben-66de376/tests/e2e/conftest.py :5
import shutil - fs (weak) blakeaber-rooben-66de376/tests/e2e/helpers.py :12
"""Set localStorage to skip SetupWizard. Call after browser.open().""" - fs (weak) blakeaber-rooben-66de376/tests/e2e/test_a2a_protocol.py :14
browser.open("/") - fs (weak) blakeaber-rooben-66de376/tests/e2e/test_agent_performance.py :14
browser.open("/agents") - fs (weak) blakeaber-rooben-66de376/tests/e2e/test_branding.py :17
browser.open("/") - fs (weak) blakeaber-rooben-66de376/tests/e2e/test_cost_analytics.py :14
browser.open("/cost") - fs (weak) blakeaber-rooben-66de376/tests/e2e/test_cross_flow_journeys.py :13
browser.open("/") - fs (weak) blakeaber-rooben-66de376/tests/e2e/test_cross_page_flows.py :9
browser.open("/integrations") - fs (weak) blakeaber-rooben-66de376/tests/e2e/test_dashboard_home.py :16
browser.open("/") - fs (weak) blakeaber-rooben-66de376/tests/e2e/test_error_handling.py :30
browser.open("/") - fs (weak) blakeaber-rooben-66de376/tests/e2e/test_evaluator_journey.py :43
browser.open("/") - fs (weak) blakeaber-rooben-66de376/tests/e2e/test_guided_workflow.py :17
browser.open("/workflows/new") - fs (weak) blakeaber-rooben-66de376/tests/e2e/test_hints.py :27
browser.open("/")
59 more not shown — this panel samples each group; the count above is the real total.
shell / exec 4
- shell blakeaber-rooben-66de376/src/rooben/dashboard/server.py :5
import subprocess - shell (weak) blakeaber-rooben-66de376/tests/e2e/browser.py :7
import subprocess - shell (weak) blakeaber-rooben-66de376/tests/test_docker_compose_smoke.py :19
import subprocess - shell (weak) blakeaber-rooben-66de376/tests/test_readme_quickstart.py :24
import subprocess
network 10
- net blakeaber-rooben-66de376/src/rooben/agents/http_agent.py :7
import httpx - net blakeaber-rooben-66de376/src/rooben/cli_api.py :7
import httpx - net blakeaber-rooben-66de376/src/rooben/dashboard/routes/credentials.py :224
import httpx - net blakeaber-rooben-66de376/src/rooben/dashboard/routes/integrations.py :322
import httpx - net blakeaber-rooben-66de376/src/rooben/planning/provider.py :89
import httpx - net (weak) blakeaber-rooben-66de376/tests/e2e/conftest.py :37
import urllib.request - net (weak) blakeaber-rooben-66de376/tests/e2e/test_p14_a2a.py :6
import urllib.request - net (weak) blakeaber-rooben-66de376/tests/test_docker_compose_smoke.py :23
import httpx - net (weak) blakeaber-rooben-66de376/tests/validate_core_differentiators.py :214
content="Use httpx.AsyncClient as context manager for testing FastAPI async endpoints. pytest-asyncio fixtures simplify setup.", - net (weak) blakeaber-rooben-66de376/tests/validate_live_e2e.py :399
"""Start FastAPI app and hit endpoints via httpx."""
secrets 6
- secrets (weak) blakeaber-rooben-66de376/tests/experiments/run_spawn_pipeline_experiment.py :421
api_key = os.environ.get("ANTHROPIC_API_KEY") - secrets (weak) blakeaber-rooben-66de376/tests/test_job_matcher_orchestration.py :262
api_key = os.environ.get("ANTHROPIC_API_KEY") - secrets (weak) blakeaber-rooben-66de376/tests/test_live_e2e.py :28
not os.environ.get("ANTHROPIC_API_KEY"), - secrets (weak) blakeaber-rooben-66de376/tests/test_p11_config.py :33
os.environ["ROOBEN_CREDENTIAL_KEY"] = "" - secrets (weak) blakeaber-rooben-66de376/tests/test_security.py :83
os.environ["ANTHROPIC_API_KEY"] = "test-key-12345678901234567890" - secrets (weak) blakeaber-rooben-66de376/tests/validate_live_e2e.py :54
return bool(os.environ.get("ANTHROPIC_API_KEY"))
database 15
- db (weak) blakeaber-rooben-66de376/scripts/ensure_schema.py :38
import asyncpg # noqa: F811 - db blakeaber-rooben-66de376/src/rooben/dashboard/app.py :16
import asyncpg - db blakeaber-rooben-66de376/src/rooben/dashboard/deps.py :8
import asyncpg - db blakeaber-rooben-66de376/src/rooben/dashboard/queries/agents.py :7
import asyncpg - db blakeaber-rooben-66de376/src/rooben/dashboard/queries/community.py :9
import asyncpg - db blakeaber-rooben-66de376/src/rooben/dashboard/queries/credentials.py :5
import asyncpg - db blakeaber-rooben-66de376/src/rooben/dashboard/queries/dashboard_summary.py :5
import asyncpg - db blakeaber-rooben-66de376/src/rooben/dashboard/queries/goals.py :7
import asyncpg - db blakeaber-rooben-66de376/src/rooben/dashboard/queries/outcomes.py :5
import asyncpg - db blakeaber-rooben-66de376/src/rooben/dashboard/queries/presets.py :7
import asyncpg - db blakeaber-rooben-66de376/src/rooben/dashboard/queries/roles.py :5
import asyncpg - db blakeaber-rooben-66de376/src/rooben/dashboard/queries/tasks.py :7
import asyncpg
show 3 more
- db blakeaber-rooben-66de376/src/rooben/dashboard/queries/user_preferences.py :7
import asyncpg - db blakeaber-rooben-66de376/src/rooben/dashboard/queries/workflows.py :8
import asyncpg - db (weak) blakeaber-rooben-66de376/tests/validate_live_e2e.py :402
import asyncpg
declared dependencies 21
- mcp@>=1.0,<1.20
- pydantic@>=2.0,<3
- pyyaml@>=6.0
- anthropic@>=0.40
- httpx@>=0.27
- click@>=8.0
- structlog@>=24.0
- tenacity@>=9.0
- python-dotenv@>=1.0
- openai@>=1.0
- boto3@>=1.35
- fastapi@>=0.115
show 9 more
- uvicorn@>=0.34
- sse-starlette@>=2.0
- cryptography@>=43.0
- asyncpg@>=0.29
- pytest@>=8.0
- pytest-asyncio@>=0.24
- pytest-timeout@>=2.3
- rooben@*
- ruff@>=0.8