Agent-agnostic context engine that gives AI coding agents continuous memory across sessions, tools, and machines.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 24 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
ask
-
axon_capture
-
axon_capture_event
-
axon_export_now
-
axon_get_context
-
axon_handoff
-
axon_health
-
axon_mark_done
-
axon_record_lesson
-
axon_record_outcome
-
axon_search
-
axon_search_lessons
-
axon_session_end
-
axon_session_start
-
axon_validation_stats
-
get_adrs
-
get_dependencies
-
get_graph_context
-
get_graph_neighbors
-
get_graph_path
-
get_session_memory
-
restore_context
-
save_adr
-
search_code
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit cb7dd56 · analyzer v33 · 2h ago
skills & prompt files 1
- agent-rules sammyjdev-axon-cb7dd56/CLAUDE.md
danger signals8
- dynamic code execution eval()/exec() sammyjdev-axon-cb7dd56/tests/http/test_activity_dashboard_xss.py :262
eval(PAGE_JS); - suspicious endpoint 169.254.169.254 (cloud metadata) sammyjdev-axon-cb7dd56/tests/expansion/test_transport_ssrf.py :24
await UrllibSourceTransport().fetch("http://169.254.169.254/latest/meta-data/") - suspicious endpoint 93.184.216.34 sammyjdev-axon-cb7dd56/tests/expansion/test_url_safety.py :26
check_url_safety("http://93.184.216.34/") - suspicious endpoint 169.254.169.254 (cloud metadata) sammyjdev-axon-cb7dd56/tests/expansion/test_url_safety.py :34
"http://169.254.169.254/", - suspicious endpoint 100.100.100.200 (cloud metadata) sammyjdev-axon-cb7dd56/tests/expansion/test_url_safety.py :39
"http://100.100.100.200/", # CGNAT / Shared Address Space, RFC 6598 - suspicious endpoint 192.0.0.8 sammyjdev-axon-cb7dd56/tests/expansion/test_url_safety_special_use.py :11
"http://192.0.0.8/", # IETF protocol assignment (used for NAT64/DNS64 discovery) - suspicious endpoint 192.0.0.170 sammyjdev-axon-cb7dd56/tests/expansion/test_url_safety_special_use.py :12
"http://192.0.0.170/", # NAT64 well-known prefix address, same /24 - suspicious endpoint 192.88.99.2 sammyjdev-axon-cb7dd56/tests/expansion/test_url_safety_special_use.py :23
"http://192.88.99.2/", # 6to4 relay anycast (RFC 7526), is_global=True on 3.11
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 699
filesystem 284
- fs (weak) sammyjdev-axon-cb7dd56/benchmarks/phase0_gpu.py :13
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/benchmarks/phase0_gpu_diag.py :7
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/benchmarks/phase0_heavy.py :14
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/benchmarks/phase0_probe.py :17
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/benchmarks/visualize.py :12
from pathlib import Path - fs sammyjdev-axon-cb7dd56/conftest.py :2
from pathlib import Path - fs sammyjdev-axon-cb7dd56/contrib/claude-code/axon-search-first.py :22
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/doc/scripts/checks/ci_status.py :4
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/doc/scripts/checks/coupling.py :4
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/doc/scripts/checks/drift.py :3
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/doc/scripts/checks/versioning.py :4
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/doc/scripts/health-check.py :6
from pathlib import Path
show 28 more
- fs (weak) sammyjdev-axon-cb7dd56/doc/tests/test_health_check.py :4
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/analysis/delivery_baseline.py :46
with open(path, errors="replace") as fh: - fs (weak) sammyjdev-axon-cb7dd56/scripts/analyze_retrieval_telemetry.py :41
recs = [json.loads(line) for line in open(path, encoding="utf-8") if line.strip()] - fs (weak) sammyjdev-axon-cb7dd56/scripts/build_ablation_index.py :8
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/check_onboarding_drift.py :21
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/eval_exact_terms.py :14
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/eval_nl_code_recall.py :18
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/eval_pack_quality.py :31
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/export_recall_savings_snapshot.py :15
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/gen_pack_quality_fixture.py :21
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/index_once.py :9
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/populate_recall_baseline.py :18
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/purge_test_artifacts.py :21
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/recall_savings_report.py :6
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/recall_usage_report.py :9
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/rekey_embeddings_project.py :26
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/rekey_sessions.py :21
from pathlib import Path - fs (weak) sammyjdev-axon-cb7dd56/scripts/run_adr_model_grid.py :18
from pathlib import Path - fs sammyjdev-axon-cb7dd56/src/axon/__main__.py :20
from pathlib import Path - fs sammyjdev-axon-cb7dd56/src/axon/activity/adapters/claude_code.py :4
from pathlib import Path - fs sammyjdev-axon-cb7dd56/src/axon/activity/adapters/codex.py :4
from pathlib import Path - fs sammyjdev-axon-cb7dd56/src/axon/activity/agy_runner.py :9
from pathlib import Path - fs sammyjdev-axon-cb7dd56/src/axon/activity/models.py :5
from pathlib import Path - fs sammyjdev-axon-cb7dd56/src/axon/activity/spool.py :6
from pathlib import Path - fs sammyjdev-axon-cb7dd56/src/axon/adr/audit.py :17
from pathlib import Path - fs sammyjdev-axon-cb7dd56/src/axon/adr/commit_context.py :12
from pathlib import Path - fs sammyjdev-axon-cb7dd56/src/axon/adr/draft_pool.py :17
from pathlib import Path - fs sammyjdev-axon-cb7dd56/src/axon/adr/gates/__init__.py :16
from pathlib import Path
244 more not shown — this panel samples each group; the count above is the real total.
shell / exec 75
- shell (weak) sammyjdev-axon-cb7dd56/benchmarks/phase0_probe.py :14
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/doc/scripts/checks/ci_status.py :3
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/scripts/run_adr_model_grid.py :16
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/__main__.py :16
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/activity/agy_runner.py :5
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/adr/commit_context.py :10
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/adr/gates/l1.py :22
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/adr/inference.py :23
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/cli/pb.py :8
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/cli/setup.py :3
import subprocess as _sp - shell sammyjdev-axon-cb7dd56/src/axon/code/diff_symbols.py :11
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/config/platform.py :2
import subprocess
show 28 more
- shell sammyjdev-axon-cb7dd56/src/axon/context/rtk.py :5
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/core/repo_identity.py :6
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/doctor/checks/capture_path.py :17
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/doctor/checks/install_branch.py :3
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/hooks/git_event.py :16
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1102
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/repo/file_walk.py :4
import subprocess - shell sammyjdev-axon-cb7dd56/src/axon/triggers/scope_detector.py :14
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/activity/test_agy_adapter.py :2
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/activity/test_claude_code_adapter.py :2
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/activity/test_codex_adapter.py :2
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/adr/gates/test_l1.py :5
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/adr/test_adr_provenance.py :7
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/adr/test_infer_commit_signal_gate.py :5
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/adr/test_inference.py :5
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_embedder_lazy_import.py :19
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_hook_spool.py :36
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_pb_cli.py :5
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_rekey_repo_cli.py :6
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_search_strategy_lazy_import.py :4
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_search_strategy_profile_parity.py :5
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_seed_lessons_shutdown.py :25
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_session_memory_repo_key.py :14
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_session_memory_repo_key_gaps.py :16
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_session_note_repo_key.py :12
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_spool_not_committable.py :29
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_spool_quarantine_ignore.py :25
import subprocess - shell (weak) sammyjdev-axon-cb7dd56/tests/cli/test_spool_recover_ignore.py :28
import subprocess
35 more not shown — this panel samples each group; the count above is the real total.
network 11
- net (weak) sammyjdev-axon-cb7dd56/scripts/pg_redact.py :5
import urllib.parse - net sammyjdev-axon-cb7dd56/src/axon/context/rtk_bootstrap.py :17
import urllib.request - net sammyjdev-axon-cb7dd56/src/axon/embedder/providers.py :51
import httpx - net sammyjdev-axon-cb7dd56/src/axon/expansion/extractors.py :11
from urllib.parse import urljoin - net sammyjdev-axon-cb7dd56/src/axon/expansion/transport.py :5
from urllib.request import Request - net sammyjdev-axon-cb7dd56/src/axon/expansion/url_safety.py :6
import socket - net sammyjdev-axon-cb7dd56/src/axon/router/engine.py :97
import httpx - net (weak) sammyjdev-axon-cb7dd56/tests/expansion/test_guarded_opener_proxy.py :3
from urllib.request import ProxyHandler - net (weak) sammyjdev-axon-cb7dd56/tests/expansion/test_origin_header_scoping.py :15
from urllib.request import Request - net (weak) sammyjdev-axon-cb7dd56/tests/expansion/test_url_safety.py :3
import socket - net (weak) sammyjdev-axon-cb7dd56/tests/expansion/test_url_safety_pinning.py :4
import socket
secrets 2
- secrets sammyjdev-axon-cb7dd56/src/axon/__main__.py :201
token = os.environ.get("AXON_HTTP_TOKEN", "") - secrets sammyjdev-axon-cb7dd56/src/axon/http/app.py :135
expected = os.environ.get("AXON_HTTP_TOKEN", "")
database 54
- db (weak) sammyjdev-axon-cb7dd56/scripts/analysis/lesson_replay.py :30
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/scripts/gen_pack_quality_fixture.py :67
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/scripts/purge_test_artifacts.py :23
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/scripts/rekey_embeddings_project.py :29
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/scripts/rekey_sessions.py :23
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/activity/repository.py :4
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/activity/service.py :6
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/doctor/checks/index_composition.py :12
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/store/failure_store.py :14
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/store/lessons.py :30
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/store/outcome_store.py :11
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/store/pg_decision_repository.py :13
import asyncpg
show 28 more
- db sammyjdev-axon-cb7dd56/src/axon/store/pg_file_cache.py :12
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/store/pg_graph_repository.py :13
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/store/pg_migrations.py :20
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/store/pg_session_repository.py :10
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/store/pg_symbol_deps.py :15
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/store/pg_vector_store.py :7
import asyncpg - db sammyjdev-axon-cb7dd56/src/axon/store/session_store.py :314
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/activity/test_provenance.py :4
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/activity/test_repository.py :3
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/activity/test_service.py :3
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/cli/test_activity_commands.py :18
import asyncpg # noqa: E402 - db (weak) sammyjdev-axon-cb7dd56/tests/cli/test_session_note_repo_key.py :15
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/conftest.py :202
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/embedder/fixtures/python/adr_manager.py :3
import sqlite3 - db (weak) sammyjdev-axon-cb7dd56/tests/embedder/fixtures/python/graph_service.py :13
import redis - db (weak) sammyjdev-axon-cb7dd56/tests/embedder/fixtures/python/session_store.py :1
import sqlite3 - db (weak) sammyjdev-axon-cb7dd56/tests/http/test_activity_api.py :29
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/integration/test_activity_history_restore.py :5
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/mcp/test_repo_resolution.py :13
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/mcp/test_search_code_project_scope.py :19
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/observability/test_traced_tool_failure_persists.py :20
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/scripts/test_purge_test_artifacts.py :490
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/scripts/test_rekey_embeddings_project.py :20
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/scripts/test_rekey_sessions.py :18
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/store/test_adr_provenance_column.py :8
import asyncpg # noqa: E402 - db (weak) sammyjdev-axon-cb7dd56/tests/store/test_graph_listing.py :7
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/store/test_graph_methods.py :33
import asyncpg - db (weak) sammyjdev-axon-cb7dd56/tests/store/test_lesson_catalog_does_not_credit.py :18
import asyncpg
14 more not shown — this panel samples each group; the count above is the real total.
tool registrations 24
- search_code sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :663
- get_session_memory sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :711
- get_dependencies sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :752
- get_adrs sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :777
- save_adr sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :811
- ask sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :845
- get_graph_neighbors sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1026
- get_graph_path sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1042
- get_graph_context sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1054
- restore_context sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1078
- axon_session_start sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1164
- axon_session_end sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1207
show 12 more
- axon_capture_event sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1229
- axon_record_outcome sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1270
- axon_record_lesson sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1302
- axon_search_lessons sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1340
- axon_get_context sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1375
- axon_capture sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1385
- axon_search sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1413
- axon_handoff sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1428
- axon_export_now sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1493
- axon_mark_done sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1502
- axon_validation_stats sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1513
- axon_health sammyjdev-axon-cb7dd56/src/axon/mcp/server.py :1547
declared dependencies 32
- mcp@>=2.0.0,<3
- defusedxml@>=0.7.1,<1.0
- fastembed@>=0.4.0,<1.0
- watchdog@>=4.0.0,<7
- tree-sitter@>=0.23.0,<1.0
- tree-sitter-java@>=0.23.0,<1.0
- tree-sitter-python@>=0.23.0,<1.0
- tree-sitter-typescript@>=0.23.0,<1.0
- litellm@>=1.40.0,<2
- typer@>=0.12.0,<1.0
- click@>=8.2,<9
- ollama@>=0.2.0,<1.0
show 20 more
- python-dotenv@>=1.0.0,<2
- pydantic@>=2.0,<3
- structlog@>=24.0,<27
- pyyaml@>=6.0,<7
- asyncpg@>=0.29,<1.0
- pgvector@>=0.3,<1.0
- pymupdf@>=1.24.0,<2
- fastapi@>=0.111.0,<1.0
- uvicorn@>=0.29.0,<1.0
- boto3@>=1.34
- pytest@>=8.0.0
- pytest-asyncio@>=0.23.0
- pytest-cov@>=5.0.0
- ruff@>=0.4.0
- pre-commit@>=3.5.0
- testcontainers@>=4.0.0
- hypothesis@>=6.0
- httpx@>=0.27.0
- pip-audit@>=2.7.0
- matplotlib@>=3.8