Live cross-agent failure and recovery intelligence for AI agents and autonomous software.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · 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 4df64f6 · analyzer v33 · 2h ago
skills & prompt files 1
- agent-rules FailEcho-failecho-4df64f6/CLAUDE.md
danger signals1
- dynamic code execution __import__ sink FailEcho-failecho-4df64f6/tests/test_scan.py :295
lambda p: (p == "/mnt/c/Users") or __import__("os").path.exists(p))
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 144
filesystem 50
- fs FailEcho-failecho-4df64f6/app/main.py :23
from pathlib import Path - fs FailEcho-failecho-4df64f6/client/example_agent.py :9
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/examples/live_agent/agents.py :23
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/examples/live_agent/run_demo.py :35
from pathlib import Path - fs FailEcho-failecho-4df64f6/failecho_agent/__init__.py :314
with open(path, encoding="utf-8") as fh: - fs FailEcho-failecho-4df64f6/failecho_fleet/__init__.py :629
with open(self._etag_path, encoding="utf-8") as fh: - fs FailEcho-failecho-4df64f6/failecho_fleet/builder.py :212
with open(PROXY_STATS, encoding="utf-8") as fh: - fs FailEcho-failecho-4df64f6/failecho_fleet/onboard.py :392
with open(path, encoding="utf-8") as fh: - fs FailEcho-failecho-4df64f6/failecho_sandbox/__init__.py :43
import shutil - fs FailEcho-failecho-4df64f6/failecho_sandbox/__main__.py :24
"try:\n open('/usr/bin/marker', 'w').write('x'); print('WROTE')\n" - fs FailEcho-failecho-4df64f6/failecho_sandbox/canary.py :288
with open(tmp, "w", encoding="utf-8") as fh: - fs FailEcho-failecho-4df64f6/failecho_sandbox/guest_init.py :132
with open(path, "w", encoding="utf-8") as fh:
show 28 more
- fs FailEcho-failecho-4df64f6/failecho_sandbox/proxy.py :87
with open(path, encoding="utf-8") as fh: - fs FailEcho-failecho-4df64f6/failecho_scan/__init__.py :55
with open("/proc/version", encoding="utf-8", errors="ignore") as fh: - fs FailEcho-failecho-4df64f6/plugin/hooks/failecho_hook.py :56
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/scripts/build_autoreport_package.py :17
import shutil - fs (weak) FailEcho-failecho-4df64f6/scripts/build_brand_assets.py :17
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/scripts/build_relay_package.py :17
import shutil - fs (weak) FailEcho-failecho-4df64f6/scripts/migrate_canonical_services.py :18
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/scripts/prune.py :22
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/scripts/redact_logs.py :38
import pathlib - fs (weak) FailEcho-failecho-4df64f6/scripts/seed_demo.py :27
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/scripts/usage_report.py :22
import pathlib - fs (weak) FailEcho-failecho-4df64f6/tests/conftest.py :15
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/live_server.py :14
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_about_page.py :12
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_ask_vs_blind.py :10
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_autoreport.py :58
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_branding.py :10
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_claude_code_hook.py :17
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_claude_plugin.py :11
import shutil - fs (weak) FailEcho-failecho-4df64f6/tests/test_client.py :7
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_client_failecho.py :12
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_demo_page.py :10
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_deploy_config.py :10
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_error_types.py :102
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_first_party.py :11
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_fleet_recovery.py :416
doc = open(ROOT_DOC).read() - fs (weak) FailEcho-failecho-4df64f6/tests/test_frontend.py :14
from pathlib import Path - fs (weak) FailEcho-failecho-4df64f6/tests/test_mcp_bridge.py :16
from pathlib import Path
10 more not shown — this panel samples each group; the count above is the real total.
shell / exec 16
- shell FailEcho-failecho-4df64f6/failecho_sandbox/__init__.py :47
import subprocess - shell FailEcho-failecho-4df64f6/failecho_sandbox/canary.py :68
p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, - shell FailEcho-failecho-4df64f6/failecho_sandbox/guest_init.py :44
import subprocess - shell (weak) FailEcho-failecho-4df64f6/scripts/build_autoreport_package.py :18
import subprocess - shell (weak) FailEcho-failecho-4df64f6/scripts/build_relay_package.py :18
import subprocess - shell (weak) FailEcho-failecho-4df64f6/tests/conftest.py :11
import subprocess - shell (weak) FailEcho-failecho-4df64f6/tests/live_server.py :7
import subprocess - shell (weak) FailEcho-failecho-4df64f6/tests/test_ask_vs_blind.py :8
import subprocess - shell (weak) FailEcho-failecho-4df64f6/tests/test_claude_code_hook.py :13
import subprocess - shell (weak) FailEcho-failecho-4df64f6/tests/test_claude_plugin.py :12
import subprocess - shell (weak) FailEcho-failecho-4df64f6/tests/test_mcp_bridge.py :11
import subprocess - shell (weak) FailEcho-failecho-4df64f6/tests/test_no_production_reach.py :47
import subprocess
show 4 more
- shell (weak) FailEcho-failecho-4df64f6/tests/test_npm_relay.py :12
import subprocess - shell (weak) FailEcho-failecho-4df64f6/tests/test_public_surface.py :5
import subprocess - shell (weak) FailEcho-failecho-4df64f6/tests/test_sandbox.py :252
out = b.run_python("import os; os.system('id')") - shell (weak) FailEcho-failecho-4df64f6/tests/test_seed_demo.py :6
import subprocess
network 32
- net FailEcho-failecho-4df64f6/client/failecho/__init__.py :43
import urllib.error - net FailEcho-failecho-4df64f6/client/failure_network.py :42
import urllib.error - net (weak) FailEcho-failecho-4df64f6/examples/live_agent/run_demo.py :33
import urllib.error - net (weak) FailEcho-failecho-4df64f6/examples/live_agent/tool_client.py :15
import urllib.error - net FailEcho-failecho-4df64f6/failecho_agent/__init__.py :41
import urllib.error - net FailEcho-failecho-4df64f6/failecho_autoreport/__init__.py :79
import urllib.error - net FailEcho-failecho-4df64f6/failecho_autoreport/__main__.py :17
import urllib.request - net FailEcho-failecho-4df64f6/failecho_autoreport/auto.py :10
TestClient -- an httpx.Client -- into a reporter: 91 rows of test traffic - net FailEcho-failecho-4df64f6/failecho_fleet/__init__.py :37
import urllib.error - net FailEcho-failecho-4df64f6/failecho_fleet/builder.py :39
import urllib.parse - net FailEcho-failecho-4df64f6/failecho_fleet/onboard.py :63
import urllib.error - net FailEcho-failecho-4df64f6/failecho_sandbox/__init__.py :45
import socket
show 20 more
- net FailEcho-failecho-4df64f6/failecho_sandbox/__main__.py :32
"import socket\ns=socket.socket(); s.settimeout(4)\n" - net FailEcho-failecho-4df64f6/failecho_sandbox/canary.py :57
RUN_SCRIPT = """import urllib.request - net FailEcho-failecho-4df64f6/failecho_sandbox/guest_init.py :42
import socket - net FailEcho-failecho-4df64f6/plugin/hooks/failecho_hook.py :53
import urllib.error - net (weak) FailEcho-failecho-4df64f6/scripts/ask_vs_blind.py :39
import urllib.error - net (weak) FailEcho-failecho-4df64f6/scripts/check_seo.py :20
import urllib.error - net (weak) FailEcho-failecho-4df64f6/scripts/loadtest.py :23
import httpx - net (weak) FailEcho-failecho-4df64f6/scripts/scale_test.py :20
import urllib.error - net (weak) FailEcho-failecho-4df64f6/scripts/usage_report.py :23
import urllib.request - net (weak) FailEcho-failecho-4df64f6/tests/conftest.py :43
import socket as _socket # noqa: E402 - net (weak) FailEcho-failecho-4df64f6/tests/live_server.py :6
import socket - net (weak) FailEcho-failecho-4df64f6/tests/test_auto.py :68
import requests - net (weak) FailEcho-failecho-4df64f6/tests/test_autoreport.py :508
monkeypatch.setattr(mod.urllib.request, "urlopen", fake_urlopen) - net (weak) FailEcho-failecho-4df64f6/tests/test_claude_code_hook.py :16
import urllib.request - net (weak) FailEcho-failecho-4df64f6/tests/test_client.py :43
with patch("urllib.request.urlopen", _Bridge(client)): - net (weak) FailEcho-failecho-4df64f6/tests/test_client_failecho.py :75
with patch("urllib.request.urlopen", bridge): - net (weak) FailEcho-failecho-4df64f6/tests/test_fleet_recovery.py :14
import urllib.error - net (weak) FailEcho-failecho-4df64f6/tests/test_mcp_bridge.py :15
import urllib.request - net (weak) FailEcho-failecho-4df64f6/tests/test_no_production_reach.py :9
import socket - net (weak) FailEcho-failecho-4df64f6/tests/test_sandbox.py :15
import socket
secrets 6
- secrets FailEcho-failecho-4df64f6/client/failecho/__init__.py :128
self.operator_token = operator_token or os.environ.get("FAILECHO_OPERATOR_TOKEN") or None - secrets FailEcho-failecho-4df64f6/failecho_agent/__init__.py :58
OPERATOR_TOKEN = os.environ.get("FIN_FIRST_PARTY_TOKEN") or os.environ.get("FAILECHO_OPERATOR_TOKEN") - secrets FailEcho-failecho-4df64f6/failecho_autoreport/__init__.py :199
self.operator_token = operator_token or os.environ.get("FAILECHO_OPERATOR_TOKEN") or None - secrets FailEcho-failecho-4df64f6/failecho_fleet/__init__.py :79
"key": os.environ.get("GROQ_API_KEY"), "models": ["openai/gpt-oss-20b"], "daily_cap": 3000, - secrets FailEcho-failecho-4df64f6/failecho_mcp/__init__.py :212
operator_token = os.environ.get("FAILECHO_OPERATOR_TOKEN") or None - secrets FailEcho-failecho-4df64f6/plugin/hooks/failecho_hook.py :440
if os.environ.get("FAILECHO_OPERATOR_TOKEN"):
database 16
- db FailEcho-failecho-4df64f6/app/api/deps.py :8
from sqlalchemy.ext.asyncio import AsyncSession - db FailEcho-failecho-4df64f6/app/api/services.py :6
from sqlalchemy import case, false, func, select - db FailEcho-failecho-4df64f6/app/core/adoption.py :22
from sqlalchemy import func, select - db FailEcho-failecho-4df64f6/app/core/intelligence.py :22
from sqlalchemy import Select, case, func, select - db FailEcho-failecho-4df64f6/app/core/retention.py :26
from sqlalchemy import case, delete, false, func, select - db FailEcho-failecho-4df64f6/app/core/service.py :14
from sqlalchemy import func, select, union - db FailEcho-failecho-4df64f6/app/db/database.py :13
from sqlalchemy import event - db FailEcho-failecho-4df64f6/app/db/models.py :13
from sqlalchemy import Boolean, DateTime, Index, Integer, String - db FailEcho-failecho-4df64f6/app/main.py :41
from sqlalchemy import text - db FailEcho-failecho-4df64f6/failecho_fleet/__init__.py :34
import sqlite3 - db (weak) FailEcho-failecho-4df64f6/scripts/migrate_canonical_services.py :16
import sqlite3 - db (weak) FailEcho-failecho-4df64f6/scripts/prune.py :26
from sqlalchemy import text # noqa: E402
show 4 more
- db (weak) FailEcho-failecho-4df64f6/scripts/purge_demo_agent.py :20
import sqlite3 - db (weak) FailEcho-failecho-4df64f6/scripts/seed_demo.py :31
from sqlalchemy import delete, func, insert, select # noqa: E402 - db (weak) FailEcho-failecho-4df64f6/tests/conftest.py :10
import sqlite3 - db (weak) FailEcho-failecho-4df64f6/tests/test_decay_and_verification.py :200
import sqlite3
declared dependencies 9
- mcp@>=2.0
- fastapi@>=0.111
- pydantic@>=2.7
- sqlalchemy@>=2.0
- aiosqlite@>=0.20
- uvicorn@>=0.30
- opentelemetry-proto@>=1.20
- pytest@>=8.0
- httpx@>=0.27