AI infrastructure cartographer and operations daemon — Graphify for live infrastructure. Fingerprints, graphs, and watches Docker/Kubernetes/AWS/IaC for AI agents via CLI + MCP.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http
verified
reported
listed in the official MCP registry counts 6 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
explain_incident
-
get_audit
-
get_logs
-
get_recent_errors
-
get_state
-
list_incidents
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit d778cfa · analyzer v33 · 2w ago
skills & prompt files 1
- agent-rules adanb13-cirdan-d778cfa/AGENTS.md
danger signals1
- committed secret Slack app token adanb13-cirdan-d778cfa/tests/test_config_slack.py :88
xapp-1…(21 chars, redacted)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 228
filesystem 83
- fs adanb13-cirdan-d778cfa/cirdan/access/context.py :12
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/adapters/base.py :9
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/agents/api_agent.py :19
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/agents/cli_agent.py :20
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/agents/installer.py :12
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/agents/providers.py :58
import shutil - fs adanb13-cirdan-d778cfa/cirdan/api/setup.py :30
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/audit.py :7
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/cli/main.py :31
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/cli/setup_flow.py :14
import shutil - fs adanb13-cirdan-d778cfa/cirdan/cli/slack_cmd.py :11
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/config.py :10
from pathlib import Path
show 28 more
- fs adanb13-cirdan-d778cfa/cirdan/daemon/lock.py :13
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/engine.py :35
# Original requested path when open() fell back to the system scope. - fs adanb13-cirdan-d778cfa/cirdan/graph/store.py :13
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/incidents/responder.py :20
import shutil - fs adanb13-cirdan-d778cfa/cirdan/incidents/store.py :6
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/integrations/github.py :22
import shutil - fs adanb13-cirdan-d778cfa/cirdan/integrations/github_app.py :128
with open(gh.private_key_path, encoding="utf-8") as fh: - fs adanb13-cirdan-d778cfa/cirdan/readiness.py :31
import shutil - fs adanb13-cirdan-d778cfa/cirdan/registry.py :152
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/repair/attempts.py :14
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/repair/change_surface.py :22
from pathlib import Path, PurePosixPath - fs adanb13-cirdan-d778cfa/cirdan/repair/completeness.py :17
from pathlib import Path, PurePosixPath - fs adanb13-cirdan-d778cfa/cirdan/repair/compose_runner.py :27
import shutil - fs adanb13-cirdan-d778cfa/cirdan/repair/git_security.py :17
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/repair/integrity.py :17
import shutil - fs adanb13-cirdan-d778cfa/cirdan/repair/k8s_runner.py :31
import shutil - fs adanb13-cirdan-d778cfa/cirdan/repair/regression_proof.py :20
import shutil - fs adanb13-cirdan-d778cfa/cirdan/repair/resolve.py :20
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/repair/safe_reports.py :17
import shutil - fs adanb13-cirdan-d778cfa/cirdan/repair/specialists.py :847
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/repair/testsuite.py :20
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/repair/workspace.py :19
import shutil - fs adanb13-cirdan-d778cfa/cirdan/review/api.py :4
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/secrets/store.py :20
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/ui/render.py :5
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/ui/theme.py :12
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/update_check.py :13
from pathlib import Path - fs adanb13-cirdan-d778cfa/cirdan/util.py :9
import shutil
43 more not shown — this panel samples each group; the count above is the real total.
shell / exec 7
- shell adanb13-cirdan-d778cfa/cirdan/agents/providers.py :254
import subprocess - shell adanb13-cirdan-d778cfa/cirdan/cli/setup_flow.py :15
import subprocess - shell adanb13-cirdan-d778cfa/cirdan/util.py :10
import subprocess - shell adanb13-cirdan-d778cfa/demo/src/cirdan_demo/credentials.py :9
import subprocess - shell (weak) adanb13-cirdan-d778cfa/scripts/diag_tothread.py :31
import subprocess - shell (weak) adanb13-cirdan-d778cfa/tests/test_setup_flow.py :630
import subprocess - shell (weak) adanb13-cirdan-d778cfa/tests/test_setup_services.py :177
import subprocess
network 37
- net adanb13-cirdan-d778cfa/cirdan/access/context.py :14
import httpx - net adanb13-cirdan-d778cfa/cirdan/adapters/docker.py :10
import socket - net adanb13-cirdan-d778cfa/cirdan/adapters/loki.py :9
import httpx - net adanb13-cirdan-d778cfa/cirdan/adapters/prometheus.py :5
import httpx - net adanb13-cirdan-d778cfa/cirdan/adapters/tempo.py :9
import httpx - net adanb13-cirdan-d778cfa/cirdan/api/http.py :324
from urllib.parse import parse_qs - net adanb13-cirdan-d778cfa/cirdan/api/setup.py :31
from urllib.parse import quote, urlparse - net adanb13-cirdan-d778cfa/cirdan/cli/main.py :895
import socket - net adanb13-cirdan-d778cfa/cirdan/config.py :12
from urllib.parse import urlsplit - net adanb13-cirdan-d778cfa/cirdan/incidents/responder.py :28
import httpx - net adanb13-cirdan-d778cfa/cirdan/ingest/grafana.py :18
from urllib.parse import quote - net adanb13-cirdan-d778cfa/cirdan/ingest/slack_events.py :217
import httpx
show 25 more
- net adanb13-cirdan-d778cfa/cirdan/integrations/github.py :28
import httpx - net adanb13-cirdan-d778cfa/cirdan/integrations/github_app.py :23
from urllib.parse import urlsplit - net adanb13-cirdan-d778cfa/cirdan/notify/slack.py :10
import httpx - net adanb13-cirdan-d778cfa/cirdan/registry.py :23
from urllib.parse import urlsplit - net adanb13-cirdan-d778cfa/cirdan/review/api.py :5
from urllib.parse import quote - net adanb13-cirdan-d778cfa/cirdan/update_check.py :40
import httpx - net adanb13-cirdan-d778cfa/demo/src/cirdan_demo/credentials.py :12
from urllib.parse import urlsplit, urlunsplit - net adanb13-cirdan-d778cfa/demo/src/cirdan_demo/intake.py :4
from urllib.parse import urlsplit - net adanb13-cirdan-d778cfa/demo/src/cirdan_demo/worker.py :697
from urllib.parse import urlsplit - net (weak) adanb13-cirdan-d778cfa/demo/tests/helpers.py :5
import httpx - net (weak) adanb13-cirdan-d778cfa/demo/tests/test_public_routes.py :62
from urllib.parse import parse_qs, urlsplit - net (weak) adanb13-cirdan-d778cfa/tests/test_api.py :11
import httpx - net (weak) adanb13-cirdan-d778cfa/tests/test_github_app.py :12
import httpx - net (weak) adanb13-cirdan-d778cfa/tests/test_github_webhook.py :114
import httpx - net (weak) adanb13-cirdan-d778cfa/tests/test_ingest_grafana.py :5
from urllib.parse import parse_qs, urlparse - net (weak) adanb13-cirdan-d778cfa/tests/test_notify_slack.py :37
"""Capture every outbound httpx.post the notify path makes.""" - net (weak) adanb13-cirdan-d778cfa/tests/test_review_console.py :3
import httpx - net (weak) adanb13-cirdan-d778cfa/tests/test_setup_safety.py :29
import httpx - net (weak) adanb13-cirdan-d778cfa/tests/test_setup_services.py :29
import httpx - net (weak) adanb13-cirdan-d778cfa/tests/test_setup_slack.py :29
import httpx - net (weak) adanb13-cirdan-d778cfa/tests/test_setup_verification.py :26
import httpx - net (weak) adanb13-cirdan-d778cfa/tests/test_slack_events.py :329
import httpx - net (weak) adanb13-cirdan-d778cfa/tests/test_slack_interactions.py :11
from urllib.parse import urlencode - net (weak) adanb13-cirdan-d778cfa/tests/test_slack_issue_intake.py :126
import httpx - net (weak) adanb13-cirdan-d778cfa/tests/test_telemetry_adapters.py :106
raise mod.httpx.HTTPError("down")
secrets 3
- secrets adanb13-cirdan-d778cfa/cirdan/api/setup.py :461
"source": "env" if os.environ.get("CIRDAN_INGEST_TOKEN") - secrets adanb13-cirdan-d778cfa/cirdan/secrets/masterkey.py :50
import keyring # lazy: optional dependency - secrets adanb13-cirdan-d778cfa/demo/src/cirdan_demo/settings.py :30
session_secret: str = os.getenv("CIRDAN_DEMO_SESSION_SECRET", "")
database 3
- db adanb13-cirdan-d778cfa/cirdan/graph/store.py :11
import sqlite3 - db adanb13-cirdan-d778cfa/demo/src/cirdan_demo/store.py :4
import sqlite3 - db (weak) adanb13-cirdan-d778cfa/scripts/diag_tothread.py :30
import sqlite3
tool registrations 6
- list_incidents adanb13-cirdan-d778cfa/cirdan/mcp/server.py :87
- explain_incident adanb13-cirdan-d778cfa/cirdan/mcp/server.py :94
- get_recent_errors adanb13-cirdan-d778cfa/cirdan/mcp/server.py :102
- get_logs adanb13-cirdan-d778cfa/cirdan/mcp/server.py :112
- get_state adanb13-cirdan-d778cfa/cirdan/mcp/server.py :126
- get_audit adanb13-cirdan-d778cfa/cirdan/mcp/server.py :137
declared dependencies 18
- mcp@>=1.2
- typer@>=0.12
- pydantic@>=2.5
- pyyaml@>=6.0
- jinja2@>=3.1
- rich@>=13.0
- httpx@>=0.27
- slack_sdk@>=3.27
- fastapi@>=0.110
- uvicorn@>=0.29
- httpx2@>=2.4.0
- anthropic@>=0.92,<1
show 6 more
- openai@>=1.66
- pyjwt@>=2.8
- cryptography@>=41
- keyring@>=24
- pytest@>=8.0
- pytest-asyncio@>=0.23
transport_posture 2
- binds all interfaces (0.0.0.0) adanb13-cirdan-d778cfa/tests/test_ingest_grafana.py :531
assert _auth_err(eng, {}, host="0.0.0.0")[0] == 401 # missing - network-listening, binds all interfaces, no auth detected adanb13-cirdan-d778cfa/tests/test_slack_events.py :448
err = validate_slack_ingest_startup(_config(), http_enabled=True, host="0.0.0.0")