The AI that writes the code doesn't get to certify it. A different vendor does.
Drift inferred · capture-to-capture
- HIGH code analysis flagged committed secret ×3, dynamic code execution ×3 in mark-hubers/rondo
- HIGH code analysis flagged dynamic code execution in mark-hubers/rondo
transport stdio counts 17 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
rondo_audit_summary
-
rondo_benchmark
-
rondo_chain
-
rondo_cost
-
rondo_diff
-
rondo_dispatch_info
-
rondo_explain
-
rondo_history
-
rondo_metrics
-
rondo_multi_review
-
rondo_retry
-
rondo_review_file
-
rondo_run
-
rondo_schedule_create
-
rondo_spool_consume
-
rondo_summarize
-
rondo_templates
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 8a54d35 · analyzer v33 · 2w ago
skills & prompt files 1
- agent-rules mark-hubers-rondo-8a54d35/CLAUDE.md
danger signals7
- dynamic code execution __import__ sink mark-hubers-rondo-8a54d35/rounds/db_bootstrap_validation.py :43
env={**__import__("os").environ, "PGPASSWORD": DB_PASS}, - dynamic code execution __import__ sink mark-hubers-rondo-8a54d35/tests/cloud/test_cloud_full.py :341
env = {**__import__("os").environ, "HOME": str(fake_home)} - dynamic code execution eval()/exec() mark-hubers-rondo-8a54d35/tests/unit/test_mutate.py :69
exec(compile(mod.read_text(encoding="utf-8"), str(mod), "exec"), ns) # noqa: S102 - dynamic code execution __import__ sink mark-hubers-rondo-8a54d35/tests/unit/test_providers.py :396
env={k: v for k, v in __import__("os").environ.items() if k != "CLAUDECODE"}, - committed secret Anthropic key mark-hubers-rondo-8a54d35/tests/unit/test_audit.py :629
sk-ant…(49 chars, redacted) - committed secret Anthropic key mark-hubers-rondo-8a54d35/tests/unit/test_doctor.py :102
sk-ant…(33 chars, redacted) - committed secret private key mark-hubers-rondo-8a54d35/tests/unit/test_sanitize.py :63
PEM private key block (redacted)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 304
filesystem 137
- fs (weak) mark-hubers-rondo-8a54d35/examples/SHOWCASE.py :23
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/adversarial_redteam.py :35
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/claude_step_driver.py :38
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/code_refine_pipeline.py :39
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/conductor_if_else.py :46
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/config_template_override.py :16
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/controlled_review_loop.py :43
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/cross_ai_verify.py :37
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/error_recovery_patterns.py :17
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/lie_trap_loop.py :42
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/live_recovery_loop.py :42
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/option_c_04_find_fix_verify_round.py :13
from pathlib import Path
show 28 more
- fs (weak) mark-hubers-rondo-8a54d35/examples/api/option_c_05_replay_compare.py :13
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/provider_scoring.py :14
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/resilience_tour.py :38
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/verified_step.py :28
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/api/yaml_round_loader.py :12
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/generate_index.py :15
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/pipelines/subject/csv_report.py :14
for line in open(path): - fs (weak) mark-hubers-rondo-8a54d35/examples/rounds/demo_pipeline.py :21
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/rounds/phases_overnight.py :12
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/rounds/review_demo.py :9
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/rounds/round_doc_sweep.py :10
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/rounds/round_file_check.py :5
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/rounds/round_lint_fix.py :12
import shutil - fs (weak) mark-hubers-rondo-8a54d35/examples/rounds/round_multi_task.py :5
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/examples/rounds/round_test_generator.py :9
from pathlib import Path - fs mark-hubers-rondo-8a54d35/rounds/db_bootstrap_validation.py :18
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/scripts/audit_traceability.py :36
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/scripts/build_corpus_fixtures.py :29
from pathlib import Path - fs (weak) mark-hubers-rondo-8a54d35/scripts/traceability.py :19
from pathlib import Path - fs mark-hubers-rondo-8a54d35/src/rondo/_version.py :25
from pathlib import Path - fs mark-hubers-rondo-8a54d35/src/rondo/adapters/auth.py :18
import shutil - fs mark-hubers-rondo-8a54d35/src/rondo/ai_help.py :19
from pathlib import Path - fs mark-hubers-rondo-8a54d35/src/rondo/audit.py :37
from pathlib import Path - fs mark-hubers-rondo-8a54d35/src/rondo/cli_commands/dispatch.py :161
from pathlib import Path as _Path # pylint: disable=import-outside-toplevel - fs mark-hubers-rondo-8a54d35/src/rondo/cli_commands/infra.py :15
from pathlib import Path - fs mark-hubers-rondo-8a54d35/src/rondo/cli_commands/observe.py :15
from pathlib import Path - fs mark-hubers-rondo-8a54d35/src/rondo/cli_commands/review.py :14
from pathlib import Path - fs mark-hubers-rondo-8a54d35/src/rondo/config.py :21
from pathlib import Path
97 more not shown — this panel samples each group; the count above is the real total.
shell / exec 32
- shell (weak) mark-hubers-rondo-8a54d35/examples/api/claude_step_driver.py :35
import subprocess # nosec B404 -- re-runs the BUILT test suite, fixed argv - shell (weak) mark-hubers-rondo-8a54d35/examples/api/code_refine_pipeline.py :37
import subprocess # nosec B404 -- runs pytest on the generated tests, fixed argv - shell (weak) mark-hubers-rondo-8a54d35/examples/api/conductor_if_else.py :43
import subprocess # nosec B404 -- re-runs the BUILT test suite, fixed argv - shell (weak) mark-hubers-rondo-8a54d35/examples/api/lint_fix_verify_loop.py :16
* It does not edit files or run pylint. Wire ``subprocess.run(["pylint", ...])`` (or your - shell (weak) mark-hubers-rondo-8a54d35/examples/api/live_recovery_loop.py :39
import subprocess # nosec B404 -- re-runs the BUILT test suite, fixed argv - shell (weak) mark-hubers-rondo-8a54d35/examples/api/option_c_05_replay_compare.py :11
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/examples/rounds/phases_overnight.py :19
# -- In production, this would run: subprocess.run(["pytest", "--tb=short"]) - shell (weak) mark-hubers-rondo-8a54d35/examples/rounds/round_code_review.py :9
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/examples/rounds/round_lint_fix.py :13
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/examples/rounds/round_refactor_audit.py :9
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/examples/rounds/round_security_audit.py :19
import subprocess - shell mark-hubers-rondo-8a54d35/rounds/db_bootstrap_validation.py :16
import subprocess
show 20 more
- shell (weak) mark-hubers-rondo-8a54d35/scripts/audit_traceability.py :33
import subprocess # nosec B404 — required for git/pytest integration - shell mark-hubers-rondo-8a54d35/src/rondo/adapters/auth.py :19
import subprocess - shell mark-hubers-rondo-8a54d35/src/rondo/dispatch.py :23
import subprocess - shell mark-hubers-rondo-8a54d35/src/rondo/hooks.py :16
import subprocess - shell mark-hubers-rondo-8a54d35/src/rondo/mutate.py :29
import subprocess # nosec B404 -- project policy: subprocess is core (pyproject skips B404) - shell mark-hubers-rondo-8a54d35/src/rondo/notify.py :16
import subprocess - shell mark-hubers-rondo-8a54d35/src/rondo/runner.py :19
import subprocess - shell mark-hubers-rondo-8a54d35/src/rondo/verify.py :26
import subprocess # nosec B404 -- verify cmds are locally-authored argv lists, shell=False - shell (weak) mark-hubers-rondo-8a54d35/tests/chaos/test_chaos.py :36
"""OSError from subprocess → TaskResult with error status, not exception.""" - shell (weak) mark-hubers-rondo-8a54d35/tests/cloud/test_cloud_full.py :336
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/tests/e2e/test_integration_e2e.py :16
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/tests/integration/test_integration_multiprocess.py :23
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/tests/integration/test_stress_real_dispatch.py :28
import subprocess # nosec B404 - shell (weak) mark-hubers-rondo-8a54d35/tests/unit/test_auth.py :108
import subprocess as sp - shell (weak) mark-hubers-rondo-8a54d35/tests/unit/test_cross_process_singleflight_cursor.py :34
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/tests/unit/test_mutate.py :122
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/tests/unit/test_providers.py :386
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/tests/unit/test_reconcile_audit_flock_cursor.py :38
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/tests/unit/test_spikes.py :14
import subprocess - shell (weak) mark-hubers-rondo-8a54d35/tests/unit/test_xproc_lock_bounded_cursor.py :41
import subprocess
network 18
- net (weak) mark-hubers-rondo-8a54d35/examples/SHOWCASE.py :259
"Assess this code safety: def x(url): return exec(requests.get(url).text)" - net (weak) mark-hubers-rondo-8a54d35/examples/api/confidence_escalation.py :25
CODE = "def fetch(url): return exec(requests.get(url).text) # noqa: S102" - net (weak) mark-hubers-rondo-8a54d35/examples/api/resilience_tour.py :37
import urllib.error - net mark-hubers-rondo-8a54d35/src/rondo/adapters/anthropic_api.py :38
import urllib.error - net mark-hubers-rondo-8a54d35/src/rondo/adapters/chat_completions.py :23
import urllib.error - net mark-hubers-rondo-8a54d35/src/rondo/adapters/gemini.py :22
import urllib.error - net mark-hubers-rondo-8a54d35/src/rondo/adapters/http_skeleton.py :41
import urllib.error - net mark-hubers-rondo-8a54d35/src/rondo/adapters/ollama.py :14
import urllib.error - net mark-hubers-rondo-8a54d35/src/rondo/model_registry.py :26
import urllib.request - net mark-hubers-rondo-8a54d35/src/rondo/retry.py :30
import urllib.error - net (weak) mark-hubers-rondo-8a54d35/tests/integration/test_api_examples.py :17
import urllib.error - net (weak) mark-hubers-rondo-8a54d35/tests/pat/test_pipeline_reliability.py :189
import urllib.error
show 6 more
- net (weak) mark-hubers-rondo-8a54d35/tests/unit/test_anthropic_health_cursor.py :31
import urllib.error - net (weak) mark-hubers-rondo-8a54d35/tests/unit/test_gemini_thinking_cost_cursor.py :31
with urllib.request.urlopen patched — no live HTTP. - net (weak) mark-hubers-rondo-8a54d35/tests/unit/test_http_skeleton_catch_widening_cursor.py :38
import urllib.error - net (weak) mark-hubers-rondo-8a54d35/tests/unit/test_ollama_reliability_cursor.py :38
import urllib.error - net (weak) mark-hubers-rondo-8a54d35/tests/unit/test_providers.py :454
import urllib.error - net (weak) mark-hubers-rondo-8a54d35/tests/unit/test_retry.py :19
import urllib.error
secrets 1
- secrets mark-hubers-rondo-8a54d35/src/rondo/preflight.py :178
key = os.environ.get("ANTHROPIC_API_KEY", "")
database 1
- db (weak) mark-hubers-rondo-8a54d35/tests/conventions/test_conventions.py :912
matches = re.findall(r"^\s*import sqlite3|^\s*from sqlite3", content, re.MULTILINE)
tool registrations 17
- rondo_metrics mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :91
- rondo_audit_summary mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :119
- rondo_dispatch_info mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :126
- rondo_run mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :133
- rondo_history mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :192
- rondo_cost mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :199
- rondo_schedule_create mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :213
- rondo_explain mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :222
- rondo_benchmark mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :231
- rondo_review_file mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :238
- rondo_multi_review mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :245
- rondo_chain mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :279
show 5 more
- rondo_templates mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :293
- rondo_summarize mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :300
- rondo_diff mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :307
- rondo_retry mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :314
- rondo_spool_consume mark-hubers-rondo-8a54d35/src/rondo/mcp_server.py :330
declared dependencies 9
- mcp@>=1.0
- PyYAML@>=6.0
- pytest@>=9.0
- pytest-xdist@>=3.8
- hypothesis@>=6.155
- ruff@==0.15.5
- mypy@>=1.19
- pylint@>=4.0
- bandit@>=1.8
perm:untrusted 2
- untrusted (weak) mark-hubers-rondo-8a54d35/examples/SHOWCASE.py :259
"Assess this code safety: def x(url): return exec(requests.get(url).text)" - untrusted (weak) mark-hubers-rondo-8a54d35/examples/api/confidence_escalation.py :25
CODE = "def fetch(url): return exec(requests.get(url).text) # noqa: S102"