agentmetry 0.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. agentmetry/__init__.py +12 -0
  2. agentmetry/api/__init__.py +0 -0
  3. agentmetry/api/main.py +232 -0
  4. agentmetry/api/routes/__init__.py +0 -0
  5. agentmetry/api/routes/audit.py +396 -0
  6. agentmetry/api/websocket.py +53 -0
  7. agentmetry/api/ws_bridge.py +34 -0
  8. agentmetry/cli/__init__.py +941 -0
  9. agentmetry/cli/__main__.py +5 -0
  10. agentmetry/core/__init__.py +0 -0
  11. agentmetry/core/audit/__init__.py +1 -0
  12. agentmetry/core/audit/adapters/__init__.py +0 -0
  13. agentmetry/core/audit/adapters/agt.py +304 -0
  14. agentmetry/core/audit/adapters/cloudevents.py +159 -0
  15. agentmetry/core/audit/adapters/ecs.py +103 -0
  16. agentmetry/core/audit/adapters/splunk.py +40 -0
  17. agentmetry/core/audit/alerts.py +56 -0
  18. agentmetry/core/audit/canonical.py +150 -0
  19. agentmetry/core/audit/compliance_digest.py +299 -0
  20. agentmetry/core/audit/detection/__init__.py +9 -0
  21. agentmetry/core/audit/detection/benchmark.py +194 -0
  22. agentmetry/core/audit/detection/corpus/attack_approval_denied_then_executed.jsonl +3 -0
  23. agentmetry/core/audit/detection/corpus/attack_arbitrary_host_stage_execute.jsonl +3 -0
  24. agentmetry/core/audit/detection/corpus/attack_autonomous_unapproved_write.jsonl +3 -0
  25. agentmetry/core/audit/detection/corpus/attack_credential_exfil.jsonl +2 -0
  26. agentmetry/core/audit/detection/corpus/attack_credential_then_cloud_api.jsonl +2 -0
  27. agentmetry/core/audit/detection/corpus/attack_destructive_delete_burst.jsonl +6 -0
  28. agentmetry/core/audit/detection/corpus/attack_discovery_then_collect.jsonl +5 -0
  29. agentmetry/core/audit/detection/corpus/attack_dotfile_then_git_push.jsonl +2 -0
  30. agentmetry/core/audit/detection/corpus/attack_encoded_command_download.jsonl +1 -0
  31. agentmetry/core/audit/detection/corpus/attack_env_credential_exfil.jsonl +3 -0
  32. agentmetry/core/audit/detection/corpus/attack_hashed_only_no_command.jsonl +2 -0
  33. agentmetry/core/audit/detection/corpus/attack_interpreter_egress.jsonl +2 -0
  34. agentmetry/core/audit/detection/corpus/attack_pr_merged_without_review.jsonl +2 -0
  35. agentmetry/core/audit/detection/corpus/attack_proc_substitution_cradle.jsonl +2 -0
  36. agentmetry/core/audit/detection/corpus/attack_remote_pipe_to_shell.jsonl +1 -0
  37. agentmetry/core/audit/detection/corpus/attack_remote_staging_then_execute.jsonl +2 -0
  38. agentmetry/core/audit/detection/corpus/attack_session_tool_burst.jsonl +42 -0
  39. agentmetry/core/audit/detection/corpus/attack_single_command_exfil.jsonl +2 -0
  40. agentmetry/core/audit/detection/corpus/attack_ssh_directory_exfil.jsonl +3 -0
  41. agentmetry/core/audit/detection/corpus/attack_subagent_swarm.jsonl +6 -0
  42. agentmetry/core/audit/detection/corpus/attack_timestamp_collision.jsonl +2 -0
  43. agentmetry/core/audit/detection/corpus/attack_untrusted_input_then_action.jsonl +3 -0
  44. agentmetry/core/audit/detection/corpus/benign_authoring_merge_fixtures.jsonl +3 -0
  45. agentmetry/core/audit/detection/corpus/benign_autonomous_after_approval.jsonl +4 -0
  46. agentmetry/core/audit/detection/corpus/benign_build_artifact_cleanup.jsonl +5 -0
  47. agentmetry/core/audit/detection/corpus/benign_ci_artifact_download.jsonl +3 -0
  48. agentmetry/core/audit/detection/corpus/benign_database_migration.jsonl +5 -0
  49. agentmetry/core/audit/detection/corpus/benign_dependency_install_and_build.jsonl +5 -0
  50. agentmetry/core/audit/detection/corpus/benign_download_release_archive.jsonl +4 -0
  51. agentmetry/core/audit/detection/corpus/benign_fetch_data_then_run_repo_script.jsonl +3 -0
  52. agentmetry/core/audit/detection/corpus/benign_fetch_dataset_then_analyse.jsonl +3 -0
  53. agentmetry/core/audit/detection/corpus/benign_fetch_lockfile_then_install.jsonl +3 -0
  54. agentmetry/core/audit/detection/corpus/benign_git_review_and_push.jsonl +6 -0
  55. agentmetry/core/audit/detection/corpus/benign_human_driven_deletes.jsonl +6 -0
  56. agentmetry/core/audit/detection/corpus/benign_local_api_probing.jsonl +5 -0
  57. agentmetry/core/audit/detection/corpus/benign_long_but_calm_session.jsonl +30 -0
  58. agentmetry/core/audit/detection/corpus/benign_loopback_is_not_egress.jsonl +2 -0
  59. agentmetry/core/audit/detection/corpus/benign_loopback_pipe_to_interpreter.jsonl +3 -0
  60. agentmetry/core/audit/detection/corpus/benign_ordinary_development.jsonl +5 -0
  61. agentmetry/core/audit/detection/corpus/benign_package_manager_after_fetch.jsonl +2 -0
  62. agentmetry/core/audit/detection/corpus/benign_reading_config_that_is_not_secret.jsonl +5 -0
  63. agentmetry/core/audit/detection/corpus/benign_remote_api_call_no_credentials.jsonl +4 -0
  64. agentmetry/core/audit/detection/corpus/benign_research_then_docs.jsonl +5 -0
  65. agentmetry/core/audit/detection/corpus/benign_reversed_order_is_not_exfil.jsonl +2 -0
  66. agentmetry/core/audit/detection/corpus/benign_test_and_fix_loop.jsonl +6 -0
  67. agentmetry/core/audit/detection/corpus/benign_writing_about_credentials.jsonl +6 -0
  68. agentmetry/core/audit/detection/corpus/corpus.yaml +443 -0
  69. agentmetry/core/audit/detection/disposition.py +651 -0
  70. agentmetry/core/audit/detection/engine.py +78 -0
  71. agentmetry/core/audit/detection/live.py +127 -0
  72. agentmetry/core/audit/detection/live_store.py +355 -0
  73. agentmetry/core/audit/detection/models.py +53 -0
  74. agentmetry/core/audit/detection/rules.py +1314 -0
  75. agentmetry/core/audit/detection/traits.py +648 -0
  76. agentmetry/core/audit/detection/yaml_config.py +91 -0
  77. agentmetry/core/audit/detection/yaml_rules.py +83 -0
  78. agentmetry/core/audit/dlp/__init__.py +4 -0
  79. agentmetry/core/audit/dlp/loader.py +29 -0
  80. agentmetry/core/audit/dlp/models.py +29 -0
  81. agentmetry/core/audit/dlp/scanner.py +96 -0
  82. agentmetry/core/audit/dogfood.py +398 -0
  83. agentmetry/core/audit/evidence_pack.py +500 -0
  84. agentmetry/core/audit/external.py +213 -0
  85. agentmetry/core/audit/hashing.py +21 -0
  86. agentmetry/core/audit/hook_bootstrap.py +451 -0
  87. agentmetry/core/audit/identity.py +39 -0
  88. agentmetry/core/audit/ingest.py +242 -0
  89. agentmetry/core/audit/migrate.py +73 -0
  90. agentmetry/core/audit/mitre.py +244 -0
  91. agentmetry/core/audit/policy.py +99 -0
  92. agentmetry/core/audit/redaction.py +50 -0
  93. agentmetry/core/audit/replay.py +54 -0
  94. agentmetry/core/audit/run_context.py +129 -0
  95. agentmetry/core/audit/sinks.py +235 -0
  96. agentmetry/core/audit/spool.py +394 -0
  97. agentmetry/core/audit/tool_policy/__init__.py +4 -0
  98. agentmetry/core/audit/tool_policy/evaluator.py +198 -0
  99. agentmetry/core/audit/tool_policy/loader.py +44 -0
  100. agentmetry/core/audit/tool_policy/models.py +25 -0
  101. agentmetry/core/audit/trail_chain.py +300 -0
  102. agentmetry/core/audit/trail_db.py +491 -0
  103. agentmetry/core/audit/trail_merkle.py +332 -0
  104. agentmetry/core/auth.py +54 -0
  105. agentmetry/core/bus/__init__.py +5 -0
  106. agentmetry/core/bus/audit_exporter.py +107 -0
  107. agentmetry/core/bus/bridges.py +26 -0
  108. agentmetry/core/bus/bus.py +102 -0
  109. agentmetry/core/bus/events.py +50 -0
  110. agentmetry/core/bus/outbox.py +124 -0
  111. agentmetry/core/config.py +177 -0
  112. agentmetry/core/diagnostics/__init__.py +0 -0
  113. agentmetry/core/diagnostics/autostart.py +563 -0
  114. agentmetry/core/diagnostics/doctor.py +535 -0
  115. agentmetry/core/diagnostics/driver_paths.py +156 -0
  116. agentmetry/core/diagnostics/env_file.py +45 -0
  117. agentmetry/core/drivers/__init__.py +4 -0
  118. agentmetry/core/drivers/host.py +263 -0
  119. agentmetry/core/drivers/permissions.py +37 -0
  120. agentmetry/core/drivers/spec.py +118 -0
  121. agentmetry/core/extensions.py +107 -0
  122. agentmetry/core/health.py +26 -0
  123. agentmetry/core/version.py +13 -0
  124. agentmetry/policies/detection/manifest.yaml +43 -0
  125. agentmetry/policies/dlp/manifest.yaml +161 -0
  126. agentmetry/policies/opa/agent_rules.rego +33 -0
  127. agentmetry/policies/tool/manifest.yaml +117 -0
  128. agentmetry-0.4.0.dist-info/METADATA +86 -0
  129. agentmetry-0.4.0.dist-info/RECORD +131 -0
  130. agentmetry-0.4.0.dist-info/WHEEL +4 -0
  131. agentmetry-0.4.0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,161 @@
1
+ version: "1.0"
2
+ rules:
3
+ - id: "aws_access_key"
4
+ name: "AWS Access Key ID"
5
+ description: "Detects standard AWS access key IDs"
6
+ pattern: "(?i)\\b((?:AKIA|ABIA|ACCA|ASIA)[0-9A-Z]{16})\\b"
7
+ category: "credentials"
8
+ severity: "critical"
9
+
10
+ # The 40-char token class alone is useless: every git commit SHA is a 40-char
11
+ # [a-f0-9] string, so a bare pattern turned `git checkout <sha>` into a
12
+ # critical match — and in block mode, a denied tool call. Anchor on the
13
+ # assignment instead, the shape gitleaks uses.
14
+ #
15
+ # NOTE the absence of \b around the key name: `_` is a word character, so
16
+ # `\bsecret` never matches inside `AWS_SECRET_ACCESS_KEY` and a boundary-based
17
+ # pattern silently matches nothing at all.
18
+ #
19
+ # The \\? before each quote is required, not defensive: scanner.py matches
20
+ # against json.dumps(arguments), so a quoted value like
21
+ # `aws_secret_access_key: "AKIA…"` arrives as `\"AKIA…\"`. Same escaping trap
22
+ # as invisible_unicode_instructions below.
23
+ - id: "aws_secret_key"
24
+ name: "AWS Secret Access Key"
25
+ description: "AWS secret access key assignment (bare 40-char tokens like git SHAs excluded)"
26
+ pattern: "(?i)(?:aws)?[_\\-]?secret[_\\-]?access[_\\-]?key\\\\?[\"']?\\s*[=:]\\s*\\\\?[\"']?([a-zA-Z0-9+/]{40})"
27
+ category: "credentials"
28
+ severity: "critical"
29
+
30
+ - id: "github_pat"
31
+ name: "GitHub Personal Access Token"
32
+ description: "Detects GitHub PATs (ghp, gho, ghu, ghs, ghb)"
33
+ pattern: "(?i)\\b(gh[pousb]_[a-zA-Z0-9]{36})\\b"
34
+ category: "credentials"
35
+ severity: "critical"
36
+
37
+ - id: "huggingface_token"
38
+ name: "Hugging Face Access Token"
39
+ description: "Detects Hugging Face user and org access tokens (hf_…)"
40
+ pattern: "(?i)\\bhf_[a-zA-Z0-9]{34,}\\b"
41
+ category: "credentials"
42
+ severity: "critical"
43
+
44
+ - id: "tencent_secret_id"
45
+ name: "Tencent Cloud SecretId"
46
+ description: "Detects Tencent Cloud API SecretId (AKID prefix)"
47
+ pattern: "(?i)\\bAKID[A-Za-z0-9]{32}\\b"
48
+ category: "credentials"
49
+ severity: "critical"
50
+
51
+ - id: "dashscope_api_token"
52
+ name: "DashScope API Token"
53
+ description: "Detects bare Alibaba DashScope API tokens (sk- + 32 hex chars)"
54
+ pattern: "(?i)\\bsk-[a-f0-9]{32}\\b"
55
+ category: "credentials"
56
+ severity: "critical"
57
+
58
+ - id: "chinese_provider_api_key_assignment"
59
+ name: "Chinese AI Provider API Key Assignment"
60
+ description: "Assignment to Moonshot, DashScope, DeepSeek, Zhipu, or MiniMax API keys"
61
+ pattern: "(?i)\\b(MOONSHOT|DASHSCOPE|DEEPSEEK|ZHIPU|MINIMAX|QWEN|DOUBAO)[_\\s-]*API[_\\s-]*KEY[\"']?\\s*[=:]\\s*\\S+"
62
+ category: "credentials"
63
+ severity: "critical"
64
+
65
+ - id: "slack_token"
66
+ name: "Slack Token"
67
+ description: "Detects Slack bot/user/app tokens"
68
+ pattern: "(?i)\\b(xox[pbo]-[a-zA-Z0-9-]{10,})\\b"
69
+ category: "credentials"
70
+ severity: "critical"
71
+
72
+ - id: "bearer_token"
73
+ name: "Authorization Bearer Token"
74
+ description: "Detects Bearer tokens in Authorization headers"
75
+ pattern: "(?i)bearer\\s+[a-z0-9._~+/-]{20,}=*"
76
+ category: "credentials"
77
+ severity: "critical"
78
+
79
+ - id: "private_key"
80
+ name: "Private Key Block"
81
+ description: "Detects PEM private key material (RSA/EC/OpenSSH/PGP)"
82
+ pattern: "-----BEGIN (?:RSA |EC |OPENSSH |PGP |DSA )?PRIVATE KEY-----"
83
+ category: "credentials"
84
+ severity: "critical"
85
+
86
+ - id: "us_ssn"
87
+ name: "US Social Security Number"
88
+ description: "Detects standard US SSN format"
89
+ pattern: "\\b(?!000|666|9\\d{2})\\d{3}-(?!00)\\d{2}-(?!0000)\\d{4}\\b"
90
+ category: "pii"
91
+ severity: "high"
92
+
93
+ # Rules File Backdoor (Pillar Security, Mar 2025): instructions hidden in
94
+ # zero-width joiners / bidi overrides inside .cursor/rules, CLAUDE.md or an
95
+ # MCP tool description. Invisible in review, but the model obeys them.
96
+ #
97
+ # Both halves of this pattern are required. scanner.py matches against
98
+ # json.dumps(arguments), which defaults to ensure_ascii=True, so a real U+200B
99
+ # arrives as the six ASCII characters ​. The raw-character classes alone
100
+ # would compile, ship, and never fire. See test_dlp_invisible_unicode.py.
101
+ - id: "invisible_unicode_instructions"
102
+ name: "Invisible Unicode Instructions"
103
+ description: "Zero-width, bidi-override or Unicode-Tags characters used to hide agent instructions"
104
+ pattern: "[\\u200b\\u200c\\u200d\\u200e\\u200f\\u202a\\u202b\\u202c\\u202d\\u202e\\u2060\\u2061\\u2062\\u2063\\u2064\\ufeff]|[\\U000e0000-\\U000e007f]|\\\\u(?:200[b-f]|202[a-e]|206[0-4]|feff)|\\\\udb40\\\\udc[0-7][0-9a-f]"
105
+ category: "prompt_injection"
106
+ severity: "critical"
107
+
108
+ # Nx "s1ngularity" campaign (Aug 2025): harvested secrets were double-base64
109
+ # encoded into results.b64 and pushed to public s1ngularity-repository repos
110
+ # on the victim's own GitHub account.
111
+ - id: "s1ngularity_exfil_ioc"
112
+ name: "s1ngularity Exfiltration IOC"
113
+ description: "Known artifact names from the Nx s1ngularity credential-theft campaign"
114
+ pattern: "(?i)s1ngularity-repository|\\bresults\\.b64\\b"
115
+ category: "exfiltration"
116
+ severity: "critical"
117
+
118
+ # Thailand Ministry of Finance intrusion (Hunt.io, July 2026). Hermes writes
119
+ # results to /hermes-results/ with predictable filenames; Hunt.io found 575
120
+ # such directories exposed on the public internet, which is how the campaign
121
+ # was discovered. An agent output directory in a tool argument is worth a
122
+ # record: operators do not know their agent is writing there.
123
+ - id: "agent_result_dump_dir"
124
+ name: "Agent Result Dump Directory"
125
+ description: "Known autonomous-agent output directories (Hermes and similar)"
126
+ pattern: "(?i)[\\\\/](hermes-results|agent-results|openhands-results|\\.hermes)[\\\\/]"
127
+ category: "exfiltration"
128
+ severity: "high"
129
+
130
+ - id: "double_base64_encode"
131
+ name: "Double Base64 Encoding"
132
+ description: "Encode-twice pipeline used to defeat single-pass secret scanners"
133
+ pattern: "(?i)\\b(base64|b64encode)\\b[^|;&]*\\|[^|;&]*\\b(base64|b64encode)\\b"
134
+ category: "exfiltration"
135
+ severity: "high"
136
+
137
+ # Markdown image exfil (Johann Rehberger / CamoLeak class): agent embeds harvested
138
+ # data in an image URL query string. Log by default; block only on pre-hooks with
139
+ # AGENTMETRY_DLP_MODE=block. Browser-side CamoLeak egress is out of scope.
140
+ - id: "markdown_image_exfil"
141
+ name: "Markdown Image Exfiltration"
142
+ description: "Markdown image URL with long encoded query parameter (data exfil channel)"
143
+ pattern: "(?i)!\\[[^\\]]*\\]\\(\\s*https?://[^)\\s]*[?&][^)\\s]*=[A-Za-z0-9+/=_%\\-]{32,}"
144
+ category: "exfiltration"
145
+ severity: "critical"
146
+
147
+ - id: "image_proxy_exfil_host"
148
+ name: "Image Proxy Exfil Host"
149
+ description: "Signed image-proxy hosts used in CamoLeak-style character-by-character exfil"
150
+ pattern: "(?i)https?://[^\\s\"')]*\\b(camo\\.githubusercontent\\.com|\\.blob\\.core\\.windows\\.net)\\b"
151
+ category: "exfiltration"
152
+ severity: "high"
153
+
154
+ # CVE-2025-59536 / CVE-2026-21852 env override half: repo-controlled config redirects
155
+ # API traffic or injects runtime hooks. Complements block_agent_exec_config_write.
156
+ - id: "agent_env_override"
157
+ name: "Agent Environment Override"
158
+ description: "Assignment to agent-critical env vars (API base URL, proxy, NODE_OPTIONS, etc.)"
159
+ pattern: "(?i)\\b(ANTHROPIC_BASE_URL|ANTHROPIC_AUTH_TOKEN|OPENAI_BASE_URL|OPENAI_API_BASE|GEMINI_BASE_URL|MOONSHOT_API_KEY|DASHSCOPE_API_KEY|DEEPSEEK_API_KEY|ZHIPUAI_API_KEY|MINIMAX_API_KEY|QWEN_API_KEY|HTTP_PROXY|HTTPS_PROXY|NODE_OPTIONS|PYTHONSTARTUP|LD_PRELOAD)[\"']?\\s*[=:]"
160
+ category: "execution_hijack"
161
+ severity: "critical"
@@ -0,0 +1,33 @@
1
+ # DRAFT. NOT EVALUATED.
2
+ #
3
+ # Agentmetry does not run OPA today. This file is the target for the
4
+ # policy-as-code work listed under "Exploring" in ROADMAP.md. The rules
5
+ # actually applied at runtime are the small built-in set in
6
+ # apps/orchestrator/core/audit/policy.py, which is off by default.
7
+ #
8
+ # Nothing here affects behaviour. Do not read it as a shipped feature.
9
+
10
+ package agentmetry.authz
11
+
12
+ import future.keywords.in
13
+
14
+ default allow = false
15
+
16
+ # By default, we allow execution unless a tool is explicitly restricted
17
+ allow {
18
+ not is_restricted_tool
19
+ }
20
+
21
+ # Example restricted tools
22
+ restricted_tools := {"kubectl.exec", "aws.iam.delete_user", "shell.rm"}
23
+
24
+ is_restricted_tool {
25
+ input.tool.qualified in restricted_tools
26
+ }
27
+
28
+ # Even restricted tools can be allowed if they carry a successful human approval
29
+ allow {
30
+ is_restricted_tool
31
+ input.action.type == "approval_response"
32
+ input.action.outcome == "success"
33
+ }
@@ -0,0 +1,117 @@
1
+ version: "1.0"
2
+ # default: allow — deny rules block; default: deny — only allow rules pass
3
+ default: allow
4
+ rules:
5
+ - id: block_shell_rm
6
+ action: deny
7
+ description: Block recursive delete via shell tools
8
+ tools:
9
+ - "Bash"
10
+ - "Shell"
11
+ - "shell.run"
12
+ - "cursor.Shell"
13
+ - "powershell"
14
+ - "antigravity.run_command"
15
+ - "*.run_command"
16
+ command_pattern: "(?i)\\brm\\s+-rf\\b"
17
+
18
+ - id: block_kubectl_exec
19
+ action: deny
20
+ description: Block kubectl exec into running pods
21
+ tools:
22
+ - "kubectl.exec"
23
+ - "*kubectl*exec*"
24
+
25
+ - id: block_iam_delete
26
+ action: deny
27
+ description: Block IAM user deletion
28
+ tools:
29
+ - "aws.iam.delete_user"
30
+ - "*delete_user*"
31
+
32
+ - id: block_mcp_git_push
33
+ action: deny
34
+ description: Block direct git push via MCP without review
35
+ tools:
36
+ - "mcp__github__push"
37
+ - "*github*push*"
38
+
39
+ # Nx "s1ngularity" (Aug 2025): malicious postinstall invoked locally installed
40
+ # agent CLIs with guardrails off and prompted THEM to enumerate secrets. A tool
41
+ # call spawning an agent CLI in non-interactive mode has no benign analogue.
42
+ #
43
+ # The leading negative lookahead exempts Agentmetry's own documented Kimi
44
+ # print-mode ingest (`kimi -p "…" | python scripts/agentmetry_ingest.py kimi
45
+ # stream-json`), which otherwise trips this rule in block mode and denies the
46
+ # capture pipeline the operator installed on purpose.
47
+ - id: block_agent_cli_weaponization
48
+ action: deny
49
+ description: Tool call spawning an agent CLI with guardrails disabled
50
+ tools:
51
+ - "Bash"
52
+ - "Shell"
53
+ - "shell.run"
54
+ - "cursor.Shell"
55
+ - "powershell"
56
+ - "antigravity.run_command"
57
+ - "*.run_command"
58
+ command_pattern: '(?i)^(?!.*agentmetry_ingest).*\b(claude|gemini|codex|cursor-agent|kimi|qwen|deepseek|hermes|openhands|aider|goose|opencode)\b[^|;&\n]*?(--dangerously-skip-permissions|--yolo|--auto|--allowedTools|\s-p\s|--print\b|--prompt\b)'
59
+
60
+ # Thailand Ministry of Finance intrusion (Hunt.io, July 2026): the operator ran
61
+ # Nous Research's Hermes assistant unattended with YOLO mode on, via its own
62
+ # documented command-line flag, and let it sweep for privilege escalation.
63
+ # These flags disable the human gate on ANY binary, so this rule deliberately
64
+ # does not enumerate agent names — a new agent CLI ships every month, and the
65
+ # flag is the behaviour worth denying, not the vendor.
66
+ - id: block_unattended_agent_flags
67
+ action: deny
68
+ description: Any command disabling the human approval gate (YOLO / auto-approve)
69
+ tools:
70
+ - "Bash"
71
+ - "Shell"
72
+ - "shell.run"
73
+ - "cursor.Shell"
74
+ - "powershell"
75
+ - "antigravity.run_command"
76
+ - "*.run_command"
77
+ command_pattern: '(?i)^(?!.*agentmetry_ingest).*(--yolo\b|--dangerously-skip-permissions\b|--auto-approve\b|--unattended\b|--no-confirm\b|--skip-permissions\b)'
78
+
79
+ # Agent execution config is attacker-controlled in an untrusted repo
80
+ # (CVE-2025-59536 / CVE-2026-21852). These files grant code execution: hooks,
81
+ # MCP server definitions, env overrides. Deliberately excludes CLAUDE.md and
82
+ # .cursor/rules — agents edit those legitimately, and the real threat there is
83
+ # hidden Unicode, which the invisible_unicode_instructions DLP rule catches.
84
+ - id: block_agent_exec_config_write
85
+ action: deny
86
+ description: Block writes to agent execution config (hooks, MCP servers, env)
87
+ tools:
88
+ - "Write"
89
+ - "Edit"
90
+ - "edit_file"
91
+ - "write"
92
+ - "str_replace_editor"
93
+ - "*.write_file"
94
+ - "*.edit_file"
95
+ command_pattern: '(?i)(^|[\\/])(\.claude[\\/]settings(\.local)?\.json|\.mcp\.json|\.claude[\\/]hooks?[\\/]|\.qwen[\\/]settings|\.qoder[\\/]settings|\.codebuddy[\\/]settings|\.kimi-code[\\/]config\.toml)'
96
+
97
+ # Git hook persistence: agent plants .git/hooks/* or repoints core.hooksPath.
98
+ # Deny only on pre-hooks when AGENTMETRY_TOOL_POLICY_MODE=block.
99
+ - id: block_git_hook_persistence
100
+ action: deny
101
+ description: Block agent writes to git hooks or core.hooksPath repointing
102
+ tools:
103
+ - "Write"
104
+ - "Edit"
105
+ - "edit_file"
106
+ - "write"
107
+ - "str_replace_editor"
108
+ - "*.write_file"
109
+ - "*.edit_file"
110
+ - "Bash"
111
+ - "Shell"
112
+ - "shell.run"
113
+ - "cursor.Shell"
114
+ - "powershell"
115
+ - "antigravity.run_command"
116
+ - "*.run_command"
117
+ command_pattern: '(?i)(^|[\\/])\.git[\\/]hooks[\\/](pre-commit|post-commit|pre-push|post-merge|post-checkout|prepare-commit-msg)|\bcore\.hooksPath\b'
@@ -0,0 +1,86 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentmetry
3
+ Version: 0.4.0
4
+ Summary: Local-first flight recorder for AI coding agents: hash-chained audit trail, MITRE-mapped sequence detection, DLP
5
+ Project-URL: Homepage, https://agentmetry.ai
6
+ Project-URL: Source, https://github.com/blitzcrieg1/agentmetry
7
+ Project-URL: Issues, https://github.com/blitzcrieg1/agentmetry/issues
8
+ Project-URL: Changelog, https://github.com/blitzcrieg1/agentmetry/blob/master/CHANGELOG.md
9
+ Author: Ioannis L.
10
+ License: Apache-2.0
11
+ Keywords: agentic-ai,ai-agents,ai-security,audit-log,claude-code,cursor,devsecops,dlp,local-first,mitre-attack,siem
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: System Administrators
15
+ Classifier: License :: OSI Approved :: Apache Software License
16
+ Classifier: Operating System :: Microsoft :: Windows
17
+ Classifier: Operating System :: POSIX :: Linux
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Topic :: Security
22
+ Classifier: Topic :: System :: Logging
23
+ Classifier: Topic :: System :: Monitoring
24
+ Requires-Python: >=3.11
25
+ Requires-Dist: aiosqlite>=0.20.0
26
+ Requires-Dist: fastapi>=0.115.0
27
+ Requires-Dist: httpx>=0.28.0
28
+ Requires-Dist: mcp>=1.2
29
+ Requires-Dist: pydantic-settings>=2.6.0
30
+ Requires-Dist: pydantic>=2.9.0
31
+ Requires-Dist: pyyaml>=6.0
32
+ Requires-Dist: sqlalchemy>=2.0.0
33
+ Requires-Dist: tzdata; sys_platform == 'win32'
34
+ Requires-Dist: uvicorn[standard]>=0.32.0
35
+ Requires-Dist: websockets>=14.0
36
+ Provides-Extra: dev
37
+ Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
38
+ Requires-Dist: pytest>=8.0; extra == 'dev'
39
+ Requires-Dist: ruff==0.16.0; extra == 'dev'
40
+ Description-Content-Type: text/markdown
41
+
42
+ # Agentmetry
43
+
44
+ A local-first flight recorder for AI coding agents.
45
+
46
+ Agentmetry hooks the tool lifecycle of Claude Code, Cursor, Codex and Antigravity,
47
+ writes every tool call, approval and denial to a hash-chained JSONL trail on your
48
+ machine, and runs sequence detection over the session. A credential read followed
49
+ by network egress becomes one finding rather than two unremarkable log lines.
50
+
51
+ Everything runs locally. There are no cloud calls and no telemetry. Forwarding to
52
+ Elastic ECS, Splunk HEC or a webhook exists and is off unless you configure it.
53
+
54
+ ```bash
55
+ pip install agentmetry
56
+ agentmetry doctor
57
+ ```
58
+
59
+ ## Check the detection claims yourself
60
+
61
+ The corpus ships inside the package, so this works from a clean install:
62
+
63
+ ```bash
64
+ agentmetry benchmark
65
+ ```
66
+
67
+ It replays recorded sessions through the real rule engine and exits non-zero on
68
+ any missed rule or any false positive. The benign half is the number that
69
+ matters: any tool can fire on an attack, and a feed that cries wolf gets muted.
70
+
71
+ ## What it does not do
72
+
73
+ - **It is not a CASB.** It records the agents you wire in. An unmanaged browser
74
+ assistant is invisible to it.
75
+ - **It is a recorder, not a sandbox.** The only enforcement path is pre-execution
76
+ DLP blocking in the hook.
77
+ - **The DLP is regex, not ML.** A starting pack you extend in YAML.
78
+ - **It is a public alpha.** Integration surfaces may still change.
79
+
80
+ Full documentation, the event schema, and the SIEM integration guides are in the
81
+ repository.
82
+
83
+ - Source and issues: https://github.com/blitzcrieg1/agentmetry
84
+ - Website: https://agentmetry.ai
85
+
86
+ Apache-2.0.
@@ -0,0 +1,131 @@
1
+ agentmetry/__init__.py,sha256=xLhCd6Ya7pDX51cZt_RKlH3If_7w-Oo15jxq-6EQEG4,522
2
+ agentmetry/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ agentmetry/api/main.py,sha256=IQVC53eBm85Bu3YiTL2kznfWcHerOnTbv38BVxtSyxA,8066
4
+ agentmetry/api/websocket.py,sha256=zUwbvL2hUFt1Rt6vnM0_7p3Uzn3OyTJ8RCTSMpIriJk,1732
5
+ agentmetry/api/ws_bridge.py,sha256=qzeXmeZFi-MZReGd1Tu-h1yKHJroie0NRgPMlfIl3MU,1133
6
+ agentmetry/api/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ agentmetry/api/routes/audit.py,sha256=sMgByOmDBlbW1CY07WeR9dzncFgHakXACCnZk4TKBwM,14977
8
+ agentmetry/cli/__init__.py,sha256=Z1_akQU5KF099rW0F8QT6hpXAngK_th6GZlj_8qQCYA,35086
9
+ agentmetry/cli/__main__.py,sha256=k-ms8P3S4OgEl7ohfyAs_k6wa-Cc5YMnGrIenaBRmCM,62
10
+ agentmetry/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ agentmetry/core/auth.py,sha256=aboEGR-pALuSdraJ9jWubqZM8Nx3Q4--DnebzEkCEiI,1752
12
+ agentmetry/core/config.py,sha256=z9-vJnfYd33eXyOsHGUJN7yBZIlCx897yO7wiX9fXds,6340
13
+ agentmetry/core/extensions.py,sha256=P8jBUiH4OvNjMpRiDfAy2TKerFG6jvwpReGbq_oE6v0,3099
14
+ agentmetry/core/health.py,sha256=9LIVfaIWjkKxoffLkCCwQbtoZNUpibsWnCs8ajbZ7iM,744
15
+ agentmetry/core/version.py,sha256=1SjhWt4Pjf2kfHvsh9y6Tci0gPG9nFi_qPGyRLAliic,494
16
+ agentmetry/core/audit/__init__.py,sha256=XXBWMKueKw9VqhHIGzNExbPAzOtQD3eqJBJrjJHXeW4,90
17
+ agentmetry/core/audit/alerts.py,sha256=MFi8geKY9aqjZ1PbbHW8qM8iUHVhHNn4_Cqa5jGN7To,1796
18
+ agentmetry/core/audit/canonical.py,sha256=Dnc_ZYm0r3RXlQ8P6Le-1KfXb0mRHNQfCGJ0XZPbETA,5009
19
+ agentmetry/core/audit/compliance_digest.py,sha256=a0eBxQ8_AVrABVKGya1Llno_6nm4CpvLGNjYDamOcC4,11521
20
+ agentmetry/core/audit/dogfood.py,sha256=n2S9E-oHs-tE6bIrg16Gw21HnzTJvGtQcuO-yAvUBmg,14575
21
+ agentmetry/core/audit/evidence_pack.py,sha256=hfYRIOgCyLfz5qKVXGcOZaImRF3Io6dRRQAAXM0tDuk,20027
22
+ agentmetry/core/audit/external.py,sha256=Ii4ruWSwL9MYKgbdO08bVXkEvMoZubU3iPon6C1dDnM,8820
23
+ agentmetry/core/audit/hashing.py,sha256=o50q9dM285B2sPYiRi6wDHXTYM5OeRKC-1ZRs4DrJmI,531
24
+ agentmetry/core/audit/hook_bootstrap.py,sha256=5wL6dbtZ11ZHzrIgduwy4WwN5DEgBIg699tohp_HHms,14512
25
+ agentmetry/core/audit/identity.py,sha256=wn3FIOiReC5ueNx_58Nj8aB1qTIDyLLMTPGdhua2O_Q,1148
26
+ agentmetry/core/audit/ingest.py,sha256=Ld2VVCsYbw4F2TQl3bFF0a1a-_PsYes-xZlZqACzHn8,9449
27
+ agentmetry/core/audit/migrate.py,sha256=hLUG-K_8Yfyz38QFlDe5Nd1SlTDh81R_oTVWQyftH50,2461
28
+ agentmetry/core/audit/mitre.py,sha256=IBg7RJT47R-KdSSf3mOlw0NtKU9qkljJ1UW95qDQIeY,10436
29
+ agentmetry/core/audit/policy.py,sha256=KIWvZbYcX9-tmgFEWp3uEsXzVDStOtd7LmDCnlD6XcA,3773
30
+ agentmetry/core/audit/redaction.py,sha256=T1v-y_UiuRzBSpTE-0ALhLDmgVnmoL8Vr5lTAEglBaI,1981
31
+ agentmetry/core/audit/replay.py,sha256=P_uipLjZkzQue9HwvUxcPU_ced7oubcjNjTfYYXWzR8,1871
32
+ agentmetry/core/audit/run_context.py,sha256=eoDBLkqht0Ypb-B3NA0N5qORGsVB0EsKGjguVFTviDU,4313
33
+ agentmetry/core/audit/sinks.py,sha256=QpwjO89acH1qFv2I9Fqp1qJwthhbuo08ArhR2WNI1zM,7649
34
+ agentmetry/core/audit/spool.py,sha256=EMPdOUC6uv8Dw4-Z4sx7YNtIU7YIi4a8eooVKUjZL04,14409
35
+ agentmetry/core/audit/trail_chain.py,sha256=_OtFc4v6zU6VzXZQfliJIgt3q4-uyKbgj8qmU8wS4Uc,10578
36
+ agentmetry/core/audit/trail_db.py,sha256=NI86EpMJrWiO2xtKHQfuwvG3P8UXpq6wnojfoTT1l7g,18711
37
+ agentmetry/core/audit/trail_merkle.py,sha256=TaqMaiiSjV17QgDF4dI4WlbX49ycZ6nbuzLZppIN0c4,12677
38
+ agentmetry/core/audit/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ agentmetry/core/audit/adapters/agt.py,sha256=aAQGk13GsNtp9QJoxWwDLBf0qyN88dcwqHQa721fcAw,12185
40
+ agentmetry/core/audit/adapters/cloudevents.py,sha256=4nSkKVMhkuG-4aExopw2vGdkM57nlHAcNtMsSvXUT9I,7050
41
+ agentmetry/core/audit/adapters/ecs.py,sha256=1gg0bcx5P0dWUzWQqCrnei6FPIKizmAdH8NbWYQ4hNc,3570
42
+ agentmetry/core/audit/adapters/splunk.py,sha256=C149VE4-OGrvN9p280ZSr8-rv3zHp1afM1bsskvYIow,1168
43
+ agentmetry/core/audit/detection/__init__.py,sha256=xZimpbKLuTtCJl4AiXtiI9h5OZnfxiKAJdLJaLlZSRo,252
44
+ agentmetry/core/audit/detection/benchmark.py,sha256=CvZ3KryfDuV2KXYlC0VfeWG32zaR_0F5TEuxla1dRIE,6880
45
+ agentmetry/core/audit/detection/disposition.py,sha256=QmqpeMwpJqZtlyHetl0yKTYKDvmCyM4nLWJr5gmrDZM,23890
46
+ agentmetry/core/audit/detection/engine.py,sha256=HSzPoPZnb6jH6oiXHj_7u0dyWKbndzVk5gpiojlzVLA,3001
47
+ agentmetry/core/audit/detection/live.py,sha256=8C2lz-CiHrYSyo8CHdutCi9QVuJkh4ltN_dLWUXp9LY,5093
48
+ agentmetry/core/audit/detection/live_store.py,sha256=Cj3NuQxcm0sCrtI0RDMp1CmGtAT0UpJQ_YEYGlXU4rE,12967
49
+ agentmetry/core/audit/detection/models.py,sha256=LbDSwj2zfgYj-HrUviiDz_AfbGGBLB8wtHlksOrZWeU,1792
50
+ agentmetry/core/audit/detection/rules.py,sha256=xlmaIOSfroFA0NUOF2lcOIK3Ox6QnuZ3h0e7Bs9vm5g,54565
51
+ agentmetry/core/audit/detection/traits.py,sha256=RPfub8S-Nf-aEwVHXF4B5pCQ3wAC3AFk7xV3vqXhVnI,27758
52
+ agentmetry/core/audit/detection/yaml_config.py,sha256=dpo4_q6cwZvKPqxxa2T1fEI2zSS_s9sWBJKc9VstOV0,2731
53
+ agentmetry/core/audit/detection/yaml_rules.py,sha256=TxYhbBcHkDsGnzeC4hhE7i-otpiS5LDoijzVfN-bVNk,3194
54
+ agentmetry/core/audit/detection/corpus/attack_approval_denied_then_executed.jsonl,sha256=Yw_-_pHwnaYXxy02VJhaNJwSFvJ6oWESBQ4vXs2fR8U,2265
55
+ agentmetry/core/audit/detection/corpus/attack_arbitrary_host_stage_execute.jsonl,sha256=utu666a1HTcFY6boOlDNrgXZofIjNZDmlWjLXnlCHuk,3507
56
+ agentmetry/core/audit/detection/corpus/attack_autonomous_unapproved_write.jsonl,sha256=_FFO6bNpfb7LMi8OFoWgakaeKroQGV-LqQFOnxV7t4A,3315
57
+ agentmetry/core/audit/detection/corpus/attack_credential_exfil.jsonl,sha256=QX85qCeGqhfFNh2bW9kSU4f14EPKszy_b6AVy-PqEQg,2245
58
+ agentmetry/core/audit/detection/corpus/attack_credential_then_cloud_api.jsonl,sha256=-aBZyNvbstrErfgASjOx0uCSZMfCQTQWK9d4dMqZG8A,2228
59
+ agentmetry/core/audit/detection/corpus/attack_destructive_delete_burst.jsonl,sha256=8pNP1KAtzLk7j9gWcNMiv900sA0s1PZLw3qZONCVt4E,5484
60
+ agentmetry/core/audit/detection/corpus/attack_discovery_then_collect.jsonl,sha256=nEdDwyy-av4zK1kba4IBOIl1Ic3HMGkZNWJotAFHON8,4394
61
+ agentmetry/core/audit/detection/corpus/attack_dotfile_then_git_push.jsonl,sha256=DOFWWFbmDuuvpwL0YJ5tUf6G8FHzVedZNxLSa5YYaWk,2248
62
+ agentmetry/core/audit/detection/corpus/attack_encoded_command_download.jsonl,sha256=W4_w71d-2iAXrFwQLwuQ2Y8iNL8xoaA96VByUuWoAD0,1199
63
+ agentmetry/core/audit/detection/corpus/attack_env_credential_exfil.jsonl,sha256=Lqk7FvDI6j7oRKuX3Lc5x8pADW6IGeltYAAvAA9lrDc,3450
64
+ agentmetry/core/audit/detection/corpus/attack_hashed_only_no_command.jsonl,sha256=1BfWZ6MtJbNI6rM1bEz1dhnqSaGOOFwuMCN2GTqxLqo,2162
65
+ agentmetry/core/audit/detection/corpus/attack_interpreter_egress.jsonl,sha256=FNclDpeBL2O6XIkaCIF14R4h8deNXpdZw7UvFBECkvg,2524
66
+ agentmetry/core/audit/detection/corpus/attack_pr_merged_without_review.jsonl,sha256=lh5sIkQaNmjR2SuEn0eHcYHmu2i7lTDu37UejBgecxM,1603
67
+ agentmetry/core/audit/detection/corpus/attack_proc_substitution_cradle.jsonl,sha256=g9r0CE15e1lvstrxrOKH915LXqbgndKk3gUQb2cZKRY,2372
68
+ agentmetry/core/audit/detection/corpus/attack_remote_pipe_to_shell.jsonl,sha256=WUbC7w4nFdjrldvaa9tar-ADsYhl6r6d-FicOYSv6v8,717
69
+ agentmetry/core/audit/detection/corpus/attack_remote_staging_then_execute.jsonl,sha256=kve42FbuISrMZ4VVNapo1nI0sH-izyW8Oyodww2flVc,2333
70
+ agentmetry/core/audit/detection/corpus/attack_session_tool_burst.jsonl,sha256=P7CktYQMKHxxtnpq-Bg3LsM6Bn5D7uYsBVHshCqhM44,47818
71
+ agentmetry/core/audit/detection/corpus/attack_single_command_exfil.jsonl,sha256=scuLqTJV9ipTWk6mHvNsKkY3_AmcQxWFAzSEs7_ss3A,2395
72
+ agentmetry/core/audit/detection/corpus/attack_ssh_directory_exfil.jsonl,sha256=7WHI31bUTJdkkXaTwii3xm_R3TkAoJcyvzKrYBNMW4E,3368
73
+ agentmetry/core/audit/detection/corpus/attack_subagent_swarm.jsonl,sha256=aAzRh0PFK3KfydIb7kjAMsVsD5LEn6NXds5yDvLL5l0,5916
74
+ agentmetry/core/audit/detection/corpus/attack_timestamp_collision.jsonl,sha256=nRdSHqde-WW-qrlj4qyOwJkAAdlzzBBSEyDUpPk48b8,2228
75
+ agentmetry/core/audit/detection/corpus/attack_untrusted_input_then_action.jsonl,sha256=Rq30lg0C7kaBK0Gryka4Ia6m9w84t5QEg7SQuSnQu8A,3391
76
+ agentmetry/core/audit/detection/corpus/benign_authoring_merge_fixtures.jsonl,sha256=v_YBrSBc_JLIFsBvt0QkjUTiqR5p40mE2dGzAUxqTyA,2102
77
+ agentmetry/core/audit/detection/corpus/benign_autonomous_after_approval.jsonl,sha256=05EoK-O7_a-dOgPYdWoSej1C0tP9MFOmXKl5SC7hkB0,4405
78
+ agentmetry/core/audit/detection/corpus/benign_build_artifact_cleanup.jsonl,sha256=N4u5ggX12Jj14tGLw11eznxFrbdWGaNeoU2oCiZy3zY,5631
79
+ agentmetry/core/audit/detection/corpus/benign_ci_artifact_download.jsonl,sha256=gY2fEeERNf223WxTZB4m-KRFkjDulECgoP9-EQ-rUrk,3523
80
+ agentmetry/core/audit/detection/corpus/benign_database_migration.jsonl,sha256=o2_pwUXyzWErePwUDpTJ2OmShnZkCJrYIyzDqv1aXHU,5600
81
+ agentmetry/core/audit/detection/corpus/benign_dependency_install_and_build.jsonl,sha256=CaSq9A-Gde254MATxp4J-_kbiEkvzwNpayRkl5TwOIw,5543
82
+ agentmetry/core/audit/detection/corpus/benign_download_release_archive.jsonl,sha256=RJDyFepSPD-KHhpUgxwEtH0vyrb6q_pEU4-eS2WkRTc,4608
83
+ agentmetry/core/audit/detection/corpus/benign_fetch_data_then_run_repo_script.jsonl,sha256=muO2NHA9L1kPqUrl6mDqTvSH6Diay4OHi73-5jT4BXs,3536
84
+ agentmetry/core/audit/detection/corpus/benign_fetch_dataset_then_analyse.jsonl,sha256=fJnIqE5wFh0hR5wNFpF8jxSPYY-cgKcet8grORuHp-Q,3557
85
+ agentmetry/core/audit/detection/corpus/benign_fetch_lockfile_then_install.jsonl,sha256=Cl6-VAkq-6KF2hfRqvJR8Yf8LA4SoYwTLv3VyGm6He0,3537
86
+ agentmetry/core/audit/detection/corpus/benign_git_review_and_push.jsonl,sha256=tKZI1Nxtl9Clos7bg15oCkWqjbTKaFzyCPTlSUzBVv4,6700
87
+ agentmetry/core/audit/detection/corpus/benign_human_driven_deletes.jsonl,sha256=YGdLRu-u-huJRxMrixMRJRFK36i1fFPcUzPv2aTWIcM,5466
88
+ agentmetry/core/audit/detection/corpus/benign_local_api_probing.jsonl,sha256=q8QPWZCDzBQzBHCHyOXX75ADnNDID_a-pF4xnP0DOTY,5735
89
+ agentmetry/core/audit/detection/corpus/benign_long_but_calm_session.jsonl,sha256=fJ3nnZYYJ8DFk0w7nogXiTVbeZrO6k_g3KGhuMU-NFo,33100
90
+ agentmetry/core/audit/detection/corpus/benign_loopback_is_not_egress.jsonl,sha256=i2GEMRsNnPPEpjQMRQo_IC5H_u7Tq1pyD4Nnzd625S0,2235
91
+ agentmetry/core/audit/detection/corpus/benign_loopback_pipe_to_interpreter.jsonl,sha256=APSYDx9wnlkDbEP_depTGiP1pIiL40FpJteMSqv4GGs,2175
92
+ agentmetry/core/audit/detection/corpus/benign_ordinary_development.jsonl,sha256=qbenllAXLNnRrK5luTGji8xQP0QWDtso3v1x-uARFGo,5493
93
+ agentmetry/core/audit/detection/corpus/benign_package_manager_after_fetch.jsonl,sha256=DnoySN3hBXTu7GGnQ1hFLF6JXPlB079lipccY8e519A,2339
94
+ agentmetry/core/audit/detection/corpus/benign_reading_config_that_is_not_secret.jsonl,sha256=dwWFvBjAP688NnPCPxZGV9gNM3dmLd0E83PZixMezz4,5545
95
+ agentmetry/core/audit/detection/corpus/benign_remote_api_call_no_credentials.jsonl,sha256=AKm5pHjIusaiAz76J0dL21Q3lw8Hy8Y-v-3YNvVg2Nw,4670
96
+ agentmetry/core/audit/detection/corpus/benign_research_then_docs.jsonl,sha256=vuP14u5a948eluU_n_pSS3EEuycnBIubyx-cpxFGj-0,5531
97
+ agentmetry/core/audit/detection/corpus/benign_reversed_order_is_not_exfil.jsonl,sha256=_RxE95KdnY63AQQiPoV9631hIV1tkMAceb_EayotQWA,2213
98
+ agentmetry/core/audit/detection/corpus/benign_test_and_fix_loop.jsonl,sha256=g3ubJL5XU5lzRoaAG5qbphtLVL0VXF7cmM-zrn7KD4g,6651
99
+ agentmetry/core/audit/detection/corpus/benign_writing_about_credentials.jsonl,sha256=KM8-u00gpHEmIjsLQLcE-LAYO3EzGnOQtL5uxYHRqZ0,7049
100
+ agentmetry/core/audit/detection/corpus/corpus.yaml,sha256=2SE8Hfl6PLtTBWzUygVoXLqICeqIec55VlTVwur3q38,20666
101
+ agentmetry/core/audit/dlp/__init__.py,sha256=iaCwDEZWhOuN2MLIlmZs2trSyE0KVy6_-7SfeLHkTuo,135
102
+ agentmetry/core/audit/dlp/loader.py,sha256=Bnz-MBRz1yXEV66s_7-Py7LdzHMZz-1bWiXePTcTbKA,798
103
+ agentmetry/core/audit/dlp/models.py,sha256=qnxC6Syt9THPCmLNRmL-N-WBhFMdN7OqnD8L6mqeX-E,619
104
+ agentmetry/core/audit/dlp/scanner.py,sha256=bBmVkdVKjQ5NQj-9ERaC-SQMb_WYGP7pFAnmKSdDIZs,2854
105
+ agentmetry/core/audit/tool_policy/__init__.py,sha256=CO9D0LJDSfqHANAVCQia1bMiQdx8fwW1wbC_UHDDw28,215
106
+ agentmetry/core/audit/tool_policy/evaluator.py,sha256=meTtfLSIZRl5gGAKmpCXdRoC7zI2GRFuovaj8UoWp8k,6445
107
+ agentmetry/core/audit/tool_policy/loader.py,sha256=nCwwECZtjl0NU_ho6VT7gq09z8vpRtlqOTyc_0mW2FA,1458
108
+ agentmetry/core/audit/tool_policy/models.py,sha256=8SSMtASp1XIQtyvmVzxZzTKkyIeUQ_FeZ23PPhpOdS0,490
109
+ agentmetry/core/bus/__init__.py,sha256=WLq9wAVmqMa8MVZquYQNyUDgmGkOfi58LAihL5UWs0E,236
110
+ agentmetry/core/bus/audit_exporter.py,sha256=hwTtfI0oAgC8DrhvI_TEXUSM-TsCYwrB6V5k3bT_e64,4008
111
+ agentmetry/core/bus/bridges.py,sha256=CalA23hwDVMpHGGLtlfViQReFnX1yZFIfR6YH0FZMxg,824
112
+ agentmetry/core/bus/bus.py,sha256=GgtCkU0oaYrKLslvO5gRTm5m1FlvZn7frYbnF8mQYX8,2941
113
+ agentmetry/core/bus/events.py,sha256=8OG_UjmDu5mMtCqahfAo7X5qqOEzxlCLcXMT9xLJxzM,1287
114
+ agentmetry/core/bus/outbox.py,sha256=oOMBYh7JziH3FisVirojkSablR1_7gw3PbPaeT7GOV0,4217
115
+ agentmetry/core/diagnostics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
+ agentmetry/core/diagnostics/autostart.py,sha256=xqcLsbjVW5uNtn_OxiFVlEVbmCID5dkEwgzpAzvzwAE,21696
117
+ agentmetry/core/diagnostics/doctor.py,sha256=X4k2iI_NIPWx3cOmvcEBjLAlL8K7cy6MqvGjHSBRabU,20081
118
+ agentmetry/core/diagnostics/driver_paths.py,sha256=S13whT4gJISyMAUlu_dNv-OohRXr3MEqvp-zvF8Roj0,5166
119
+ agentmetry/core/diagnostics/env_file.py,sha256=LKWhjPsZWYlLMH3sxaauLIiqxl9enGr59ioJ0876RDk,1390
120
+ agentmetry/core/drivers/__init__.py,sha256=fLJQvsJNPTkFW-XLiwdWa3uREkdje6dfHUaRZZ9wG54,169
121
+ agentmetry/core/drivers/host.py,sha256=fb2qI6JVtA7m6ILEPa9vq81-IfI5Q2RqKXUkZWqt4xc,9487
122
+ agentmetry/core/drivers/permissions.py,sha256=tjEWAJug4mNJJ74frqK_PpvObJEI0cPNTBf3xHzYeh4,1218
123
+ agentmetry/core/drivers/spec.py,sha256=qeKYhMx8L_C8SbF6aZkL3iC7NH5XIrbLfldYZ41lYWA,3859
124
+ agentmetry/policies/detection/manifest.yaml,sha256=i_SDP4YafKzEauP2flZHGZHxVgzWnLVqH4bU2YI1oBM,1463
125
+ agentmetry/policies/dlp/manifest.yaml,sha256=BVhp0DTlPZsp8ki0F9wZmrKKzJo5ZoZEhnmAQz1h6OA,7568
126
+ agentmetry/policies/opa/agent_rules.rego,sha256=IN5AVs1mhSKLdmRRjI5Pq4HkkcMcI44CDnBpiHXT7Jc,920
127
+ agentmetry/policies/tool/manifest.yaml,sha256=OLgCfku_jh7y01E1yyWZv8-OCwkJ0TGiPpcV1-Jl9vU,4530
128
+ agentmetry-0.4.0.dist-info/METADATA,sha256=H-rw2DphlasBpiW7WjMrypvop-cP1juvpi8ZwTbpUBk,3338
129
+ agentmetry-0.4.0.dist-info/WHEEL,sha256=lCkmxWfQsSc9CfIClYeavTdQeEX2toPqufh9gI35EQA,87
130
+ agentmetry-0.4.0.dist-info/entry_points.txt,sha256=M1I1gSrdBbQnx2roV6XLIHjNCL1hyZdkP33bj5mJIo4,51
131
+ agentmetry-0.4.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.31.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ agentmetry = agentmetry.cli:main