pypi Python analyzed 2.0.5

readyagentsdev

v2.0.5
pypi

Local one-shot YAML/JSON agent workflow engine + MCP toolkit (BYOK).

maintainer
ReadyAgents contributors
licence
Apache-2.0
first seen
2026-09-09
last seen
2026-09-18
releases · 30d
48
short id

Drift inferred · capture-to-capture

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

capabilities 10 tools
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
skills & danger signals pypi-sdist
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)
code evidence v2.0.5 · pypi-sdist
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)