Local one-shot YAML/JSON agent workflow engine + MCP toolkit (BYOK).
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 10 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
calc
-
http_get
-
json_get
-
json_merge
-
json_set
-
list_dir
-
now
-
read_file
-
run_workflow
-
write_file
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed v2.0.5 · analyzer v33 · 10h ago
skills & prompt files 1
- skill readyagentsdev-2.0.5/examples/skills/house-writing-style/SKILL.md
danger signals13
- dynamic code execution eval()/exec() readyagentsdev-2.0.5/src/readyagents/code/child.py :321
exec(compiled, ns, ns) # noqa: S102 — isolated child - dynamic code execution __import__() readyagentsdev-2.0.5/src/readyagents/doctor.py :268
__import__(name) - dynamic code execution eval()/exec() readyagentsdev-2.0.5/src/readyagents/packs/loader.py :225
exec(code, module.__dict__) - dynamic code execution __import__ sink readyagentsdev-2.0.5/tests/test_atomic_writes.py :62
real_replace = __import__("os").replace - dynamic code execution eval()/exec() readyagentsdev-2.0.5/tests/test_registry_adversarial.py :285
exec(pack.read_text(encoding="utf-8"), namespace, namespace) - suspicious endpoint 169.254.169.254 (cloud metadata) readyagentsdev-2.0.5/tests/test_a2a.py :186
fetch_agent_card("http://169.254.169.254/latest/meta-data") - suspicious endpoint 169.254.169.254 (cloud metadata) readyagentsdev-2.0.5/tests/test_a2a_adversarial.py :124
"http://169.254.169.254/", - suspicious endpoint 169.254.169.254 (cloud metadata) readyagentsdev-2.0.5/tests/test_browser.py :190
"http://169.254.169.254/latest/meta-data", - suspicious endpoint 169.254.169.254 (cloud metadata) readyagentsdev-2.0.5/tests/test_browser_adversarial.py :39
"http://169.254.169.254/latest/meta-data", - suspicious endpoint 169.254.169.254 (cloud metadata) readyagentsdev-2.0.5/tests/test_builtin_tools.py :243
"https://169.254.169.254/latest/meta-data/", - suspicious endpoint 169.254.169.254 (cloud metadata) readyagentsdev-2.0.5/tests/test_notify.py :39
"https://169.254.169.254/latest/meta-data/", - committed secret OpenAI key readyagentsdev-2.0.5/tests/test_enforce.py :215
sk-fir…(23 chars, redacted) - committed secret OpenAI key readyagentsdev-2.0.5/tests/test_evidence.py :117
sk-evi…(23 chars, redacted)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 602
filesystem 367
- fs (weak) readyagentsdev-2.0.5/examples/mcp_tasks_client.py :18
from pathlib import Path - fs (weak) readyagentsdev-2.0.5/scripts/bench_batch.py :18
from pathlib import Path - fs (weak) readyagentsdev-2.0.5/scripts/check_doc_commands.py :32
import shutil - fs (weak) readyagentsdev-2.0.5/scripts/smoke.py :8
import shutil - fs readyagentsdev-2.0.5/src/readyagents/a2a/card.py :9
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/a2a/node.py :9
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/a2a/server.py :9
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/approvals/channels.py :7
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/approvals/delegate.py :8
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/approvals/queue.py :6
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/atomic.py :7
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/audit.py :20
from pathlib import Path
show 28 more
- fs readyagentsdev-2.0.5/src/readyagents/bench/compare.py :7
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/bench/run.py :8
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/bench/suite.py :7
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/bench/synthetic.py :6
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/browser/node.py :7
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/__init__.py :7
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/a2a.py :6
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/audit.py :4
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/authoring.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/bench.py :6
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/connectors.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/core.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/env.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/feedback.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/governance.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/health.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/identity.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/knowledge.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/memory.py :6
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/models.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/operations.py :6
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/package.py :6
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/packaging.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/policy.py :3
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/prompts.py :5
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/run.py :6
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/runs.py :3
from pathlib import Path - fs readyagentsdev-2.0.5/src/readyagents/cli/serve.py :5
from pathlib import Path
327 more not shown — this panel samples each group; the count above is the real total.
shell / exec 29
- shell (weak) readyagentsdev-2.0.5/scripts/check_doc_commands.py :33
import subprocess - shell (weak) readyagentsdev-2.0.5/scripts/smoke.py :9
import subprocess - shell readyagentsdev-2.0.5/src/readyagents/approvals/channels.py :6
import subprocess - shell readyagentsdev-2.0.5/src/readyagents/code/runner.py :97
import subprocess - shell readyagentsdev-2.0.5/src/readyagents/sovereign/bundle.py :8
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_bench_additive.py :6
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_browser_additive.py :86
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_code_sandbox.py :280
os.system("echo") - shell (weak) readyagentsdev-2.0.5/tests/test_distill_additive.py :79
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_env_additive.py :79
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_feedback_additive.py :102
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_health_additive.py :6
import subprocess
show 17 more
- shell (weak) readyagentsdev-2.0.5/tests/test_import_additive.py :78
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_knowledge_additive.py :108
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_model_router_additive.py :92
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_multimodal_additive.py :92
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_optimize_additive.py :83
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_package_additive.py :84
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_registry_additive.py :78
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_sessions_additive.py :86
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_simulate_additive.py :6
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_skills_additive.py :6
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_sovereign.py :7
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_studio_additive.py :89
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_table_additive.py :6
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_triggers_additive.py :6
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_validate_errors.py :140
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_wait_additive.py :6
import subprocess - shell (weak) readyagentsdev-2.0.5/tests/test_windows_paths.py :10
import subprocess
network 43
- net (weak) readyagentsdev-2.0.5/examples/mcp_http_client.py :38
import urllib.error - net readyagentsdev-2.0.5/src/readyagents/a2a/client.py :10
from urllib.parse import urljoin, urlparse - net readyagentsdev-2.0.5/src/readyagents/approvals/app.py :14
from urllib.parse import parse_qs, urlparse - net readyagentsdev-2.0.5/src/readyagents/approvals/server.py :13
from urllib.parse import parse_qs, urlparse - net readyagentsdev-2.0.5/src/readyagents/bench/guard.py :5
import socket - net readyagentsdev-2.0.5/src/readyagents/browser/allowlist.py :6
import socket - net readyagentsdev-2.0.5/src/readyagents/browser/node.py :9
from urllib.parse import urlparse - net readyagentsdev-2.0.5/src/readyagents/connectors/conformance.py :9
import socket - net readyagentsdev-2.0.5/src/readyagents/connectors/context.py :10
from urllib.parse import urlparse - net (weak) readyagentsdev-2.0.5/src/readyagents/connectors/fixtures.py :8
from urllib.parse import urlsplit - net readyagentsdev-2.0.5/src/readyagents/connectors/rest.py :8
from urllib.parse import urljoin, urlparse - net readyagentsdev-2.0.5/src/readyagents/connectors/sdk.py :7
import socket
show 28 more
- net readyagentsdev-2.0.5/src/readyagents/doctor.py :7
import socket - net readyagentsdev-2.0.5/src/readyagents/firewall/enforce.py :8
from urllib.parse import urlparse - net readyagentsdev-2.0.5/src/readyagents/mcp/builtin.py :10
import socket - net readyagentsdev-2.0.5/src/readyagents/mcp/http.py :17
from urllib.parse import urlparse - net readyagentsdev-2.0.5/src/readyagents/mcp/probe.py :7
import urllib.error - net readyagentsdev-2.0.5/src/readyagents/memory/retrieve.py :159
import urllib.error - net readyagentsdev-2.0.5/src/readyagents/notify.py :7
from urllib.parse import urljoin - net readyagentsdev-2.0.5/src/readyagents/package/install.py :8
from urllib.parse import urlparse - net readyagentsdev-2.0.5/src/readyagents/registry/derive.py :7
from urllib.parse import urlparse - net readyagentsdev-2.0.5/src/readyagents/sessions/chat.py :13
from urllib.parse import urlparse - net readyagentsdev-2.0.5/src/readyagents/skills/install.py :12
from urllib.parse import urlparse - net readyagentsdev-2.0.5/src/readyagents/sovereign/egress.py :6
import socket - net readyagentsdev-2.0.5/src/readyagents/studio/app.py :13
from urllib.parse import parse_qs, urlparse - net readyagentsdev-2.0.5/src/readyagents/studio/server.py :13
from urllib.parse import parse_qs, urlparse - net (weak) readyagentsdev-2.0.5/tests/test_a2a.py :11
from urllib.parse import urlparse - net (weak) readyagentsdev-2.0.5/tests/test_a2a_adversarial.py :11
from urllib.parse import urlparse - net (weak) readyagentsdev-2.0.5/tests/test_approval_ui.py :4
import socket - net (weak) readyagentsdev-2.0.5/tests/test_bench_adversarial.py :101
import socket - net (weak) readyagentsdev-2.0.5/tests/test_code_sandbox.py :117
import socket - net (weak) readyagentsdev-2.0.5/tests/test_code_sandbox_adversarial.py :272
import socket - net (weak) readyagentsdev-2.0.5/tests/test_connectors_conformance.py :6
import socket - net (weak) readyagentsdev-2.0.5/tests/test_doctor.py :4
import socket - net (weak) readyagentsdev-2.0.5/tests/test_mcp_live_http.py :7
import socket - net (weak) readyagentsdev-2.0.5/tests/test_offline_replay.py :3
import socket - net (weak) readyagentsdev-2.0.5/tests/test_otel_privacy.py :19
monkeypatch.setattr("urllib.request.urlopen", _blocked) - net (weak) readyagentsdev-2.0.5/tests/test_sessions.py :301
import urllib.error - net (weak) readyagentsdev-2.0.5/tests/test_sessions_adversarial.py :38
import urllib.error - net (weak) readyagentsdev-2.0.5/tests/test_sovereign.py :6
import socket
3 more not shown — this panel samples each group; the count above is the real total.
secrets 9
- secrets readyagentsdev-2.0.5/src/readyagents/a2a/node.py :124
env = (os.environ.get("READYAGENTS_A2A_TOKEN") or "").strip() - secrets readyagentsdev-2.0.5/src/readyagents/cli/a2a.py :148
token = (os.environ.get("READYAGENTS_A2A_TOKEN") or "").strip() or None - secrets readyagentsdev-2.0.5/src/readyagents/cli/operations.py :377
secret = (os.environ.get("READYAGENTS_EVENT_SECRET") or "").strip() or None - secrets readyagentsdev-2.0.5/src/readyagents/memory/retrieve.py :148
key = (os.environ.get("OPENAI_API_KEY") or "").strip() or None - secrets (weak) readyagentsdev-2.0.5/tests/test_code_sandbox.py :101
result = {"home": os.environ.get("OPENAI_API_KEY")} - secrets (weak) readyagentsdev-2.0.5/tests/test_code_sandbox_adversarial.py :73
assert os.environ.get("OPENAI_API_KEY") == _SECRET - secrets (weak) readyagentsdev-2.0.5/tests/test_connectors_conformance.py :67
return {"token": os.environ.get("API_TOKEN")} - secrets (weak) readyagentsdev-2.0.5/tests/test_identity.py :342
seen["granted_env"] = os.environ.get("PARTNER_API_TOKEN") - secrets (weak) readyagentsdev-2.0.5/tests/test_identity_adversarial.py :412
seen["grab_env"] = os.environ.get("PARTNER_API_TOKEN")
database 8
- db readyagentsdev-2.0.5/src/readyagents/connectors/sql.py :6
import sqlite3 - db readyagentsdev-2.0.5/src/readyagents/doctor.py :8
import sqlite3 - db readyagentsdev-2.0.5/src/readyagents/memory/sqlite_store.py :6
import sqlite3 - db readyagentsdev-2.0.5/src/readyagents/run_store/migrate.py :6
import sqlite3 - db readyagentsdev-2.0.5/src/readyagents/run_store/sqlite_store.py :6
import sqlite3 - db (weak) readyagentsdev-2.0.5/tests/test_connectors.py :6
import sqlite3 - db (weak) readyagentsdev-2.0.5/tests/test_connectors_conformance.py :7
import sqlite3 - db (weak) readyagentsdev-2.0.5/tests/test_sqlite_run_store.py :3
import sqlite3
tool registrations 10
- now readyagentsdev-2.0.5/src/readyagents/mcp/server.py :244
- calc readyagentsdev-2.0.5/src/readyagents/mcp/server.py :248
- json_get readyagentsdev-2.0.5/src/readyagents/mcp/server.py :252
- json_set readyagentsdev-2.0.5/src/readyagents/mcp/server.py :261
- json_merge readyagentsdev-2.0.5/src/readyagents/mcp/server.py :270
- http_get readyagentsdev-2.0.5/src/readyagents/mcp/server.py :279
- list_dir readyagentsdev-2.0.5/src/readyagents/mcp/server.py :283
- read_file readyagentsdev-2.0.5/src/readyagents/mcp/server.py :294
- write_file readyagentsdev-2.0.5/src/readyagents/mcp/server.py :298
- run_workflow readyagentsdev-2.0.5/src/readyagents/mcp/server.py :302
declared dependencies 27
- mcp@>=1.2,<3
- pydantic@>=2.7
- pydantic-settings@>=2.2
- typer@>=0.12
- rich@>=13.7
- pyyaml@>=6.0
- python-dotenv@>=1.0
- openai@>=1.40
- anthropic@>=0.34
- google-genai@>=1.0
- boto3@>=1.34
- google-cloud-aiplatform@>=1.70
show 15 more
- opentelemetry-api@>=1.20
- opentelemetry-sdk@>=1.20
- opentelemetry-exporter-otlp-proto-http@>=1.20
- tiktoken@>=0.7
- PyJWT@>=2.8
- cryptography@>=42
- pillow@>=10.0
- pypdf@>=4.0
- pydub@>=0.25
- pandas@>=2.0
- pyarrow@>=14
- pytest@>=8.0
- ruff@>=0.6
- build@>=1.2
- jsonschema@>=4.18
transport_posture 3
- binds all interfaces (0.0.0.0) readyagentsdev-2.0.5/tests/test_mcp_http.py :321
host="0.0.0.0", - binds all interfaces (0.0.0.0) readyagentsdev-2.0.5/tests/test_sessions.py :332
make_chat_server(wf, host="0.0.0.0", port=0, token=token, settings=tmp_settings) - binds all interfaces (0.0.0.0) readyagentsdev-2.0.5/tests/test_sessions_adversarial.py :188
make_chat_server(wf, host="0.0.0.0", port=8795, settings=tmp_settings)