github Python analyzed d778cfa

adanb13/cirdan

github

AI infrastructure cartographer and operations daemon — Graphify for live infrastructure. Fingerprints, graphs, and watches Docker/Kubernetes/AWS/IaC for AI agents via CLI + MCP.

maintainer
adanb13
licence
Apache-2.0
first seen
2026-06-11
last seen
2026-06-16
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 6 tools
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
skills & danger signals github-tarball
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

danger signals1

code evidence vv0.8.7 · github-tarball
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")