Generate structured markdown documentation of a Docker environment
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 18 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
docker_audit
-
docker_capabilities
-
docker_container
-
docker_deep_health
-
docker_dr_plan
-
docker_generate
-
docker_health
-
docker_logs
-
docker_net_check
-
docker_network_inspect
-
docker_ports
-
docker_probe_connectivity
-
docker_probe_dns
-
docker_recreate
-
docker_restart
-
docker_snapshot
-
docker_start
-
docker_stop
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit dc8c4f3 · analyzer v33 · 3h ago
danger signals4
- dynamic code execution unsafe yaml.load() featurecreep-cron-roustabout-dc8c4f3/tests/test_generator.py :21
return yaml.load(StringIO(text)) - suspicious endpoint 169.254.169.254 (cloud metadata) featurecreep-cron-roustabout-dc8c4f3/tests/test_notifications.py :214
assert _validate_ntfy_url("http://169.254.169.254/latest") is False - committed secret GitHub fine-grained PAT featurecreep-cron-roustabout-dc8c4f3/tests/test_redactor.py :499
github…(36 chars, redacted) - committed secret private key featurecreep-cron-roustabout-dc8c4f3/tests/test_redactor.py :520
PEM private key block (redacted)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 104
filesystem 21
- fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/api/routes.py :890
from pathlib import Path - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/cli/main.py :12
from pathlib import Path - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/compose_gitops.py :17
from pathlib import Path - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/config.py :16
from pathlib import Path - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/diff.py :11
from pathlib import Path - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/digest_tracker.py :15
from pathlib import Path - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/dockstarter_env.py :11
from pathlib import Path - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/env_splitter.py :12
from pathlib import Path - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/file_ops.py :12
import shutil - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/gateway.py :434
from pathlib import Path - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/integrations/manager.py :45
def open(self) -> bool: - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/lockdown.py :11
from pathlib import Path
show 9 more
- fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/notifications.py :158
_no_redirect_opener.open(req, timeout=10) # noqa: S310 - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/state.py :15
from pathlib import Path - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/state_db.py :20
from pathlib import Path - fs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/supply_chain.py :16
import shutil - fs (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_file_ops.py :32
from pathlib import Path - fs (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_import_constraints.py :20
from pathlib import Path - fs (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_lockdown.py :8
from pathlib import Path - fs (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_session.py :11
from pathlib import Path - fs (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_state_db.py :12
from pathlib import Path
shell / exec 2
- shell featurecreep-cron-roustabout-dc8c4f3/src/roustabout/compose_gitops.py :14
import subprocess - shell (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_compose_gitops.py :223
import subprocess
network 15
- net featurecreep-cron-roustabout-dc8c4f3/src/roustabout/cli/http.py :1
"""HTTPBackend — calls roustabout REST API via httpx. - net featurecreep-cron-roustabout-dc8c4f3/src/roustabout/cli/main.py :658
import httpx - net featurecreep-cron-roustabout-dc8c4f3/src/roustabout/deep_health.py :14
import socket - net featurecreep-cron-roustabout-dc8c4f3/src/roustabout/exec.py :15
import requests.exceptions - net featurecreep-cron-roustabout-dc8c4f3/src/roustabout/integrations/grafana.py :7
import httpx - net featurecreep-cron-roustabout-dc8c4f3/src/roustabout/integrations/traefik.py :8
import httpx - net featurecreep-cron-roustabout-dc8c4f3/src/roustabout/integrations/uptime_kuma.py :7
import httpx - net featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :14
import httpx - net featurecreep-cron-roustabout-dc8c4f3/src/roustabout/notifications.py :13
import urllib.request - net featurecreep-cron-roustabout-dc8c4f3/src/roustabout/supply_chain.py :17
import urllib.error - net (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_exec.py :400
import requests.exceptions - net (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_integration_remote.py :4
Uses httpx.ASGITransport to wire the proxy directly to the FastAPI app
show 3 more
- net (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_integrations.py :53
@patch("roustabout.integrations.traefik.httpx.get") - net (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_mcp_proxy.py :3
All tests mock httpx.AsyncClient responses. No Docker or server required. - net (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_redactor.py :141
from urllib.parse import urlsplit
secrets 4
- secrets featurecreep-cron-roustabout-dc8c4f3/src/roustabout/api/auth.py :46
secret = os.environ.get("ROUSTABOUT_API_KEY", "") - secrets featurecreep-cron-roustabout-dc8c4f3/src/roustabout/cli/backend.py :95
api_key = os.environ.get("ROUSTABOUT_API_KEY") - secrets featurecreep-cron-roustabout-dc8c4f3/src/roustabout/cli/main.py :106
os.environ["ROUSTABOUT_API_KEY"] = api_key - secrets featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :183
api_key = os.environ.get("ROUSTABOUT_API_KEY", "")
database 3
- db featurecreep-cron-roustabout-dc8c4f3/src/roustabout/state_db.py :15
import sqlite3 - db (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_digest_tracker.py :152
import sqlite3 - db (weak) featurecreep-cron-roustabout-dc8c4f3/tests/test_import_constraints.py :318
"""Only state_db.py may import sqlite3."""
tool registrations 18
- docker_snapshot featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :71
- docker_audit featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :76
- docker_container featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :81
- docker_health featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :86
- docker_logs featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :91
- docker_dr_plan featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :96
- docker_capabilities featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :101
- docker_net_check featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :108
- docker_network_inspect featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :113
- docker_ports featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :118
- docker_probe_dns featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :125
- docker_probe_connectivity featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :130
show 6 more
- docker_deep_health featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :141
- docker_generate featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :150
- docker_start featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :157
- docker_stop featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :162
- docker_restart featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :167
- docker_recreate featurecreep-cron-roustabout-dc8c4f3/src/roustabout/mcp_proxy/server.py :172
declared dependencies 15
- mcp@==2.2.0
- click@==8.5.0
- ruamel.yaml@==0.19.1
- secretscreen@==0.6.0
- httpx@==0.28.1
- structlog@==26.1.0
- docker@==7.2.0
- fastapi@==0.141.1
- uvicorn@==0.52.4
- pytest@==9.1.1
- pytest-asyncio@==1.4.0
- pytest-mock@==3.15.1
show 3 more
- pytest-cov@==7.1.0
- ruff@==0.16.7
- mypy@==2.3.1
perm:untrusted 1
- untrusted featurecreep-cron-roustabout-dc8c4f3/src/roustabout/integrations/traefik.py :48
routers = httpx.get(f"{self.url}/api/http/routers", timeout=5).json()