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.
- agentmetry/__init__.py +12 -0
- agentmetry/api/__init__.py +0 -0
- agentmetry/api/main.py +232 -0
- agentmetry/api/routes/__init__.py +0 -0
- agentmetry/api/routes/audit.py +396 -0
- agentmetry/api/websocket.py +53 -0
- agentmetry/api/ws_bridge.py +34 -0
- agentmetry/cli/__init__.py +941 -0
- agentmetry/cli/__main__.py +5 -0
- agentmetry/core/__init__.py +0 -0
- agentmetry/core/audit/__init__.py +1 -0
- agentmetry/core/audit/adapters/__init__.py +0 -0
- agentmetry/core/audit/adapters/agt.py +304 -0
- agentmetry/core/audit/adapters/cloudevents.py +159 -0
- agentmetry/core/audit/adapters/ecs.py +103 -0
- agentmetry/core/audit/adapters/splunk.py +40 -0
- agentmetry/core/audit/alerts.py +56 -0
- agentmetry/core/audit/canonical.py +150 -0
- agentmetry/core/audit/compliance_digest.py +299 -0
- agentmetry/core/audit/detection/__init__.py +9 -0
- agentmetry/core/audit/detection/benchmark.py +194 -0
- agentmetry/core/audit/detection/corpus/attack_approval_denied_then_executed.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/attack_arbitrary_host_stage_execute.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/attack_autonomous_unapproved_write.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/attack_credential_exfil.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/attack_credential_then_cloud_api.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/attack_destructive_delete_burst.jsonl +6 -0
- agentmetry/core/audit/detection/corpus/attack_discovery_then_collect.jsonl +5 -0
- agentmetry/core/audit/detection/corpus/attack_dotfile_then_git_push.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/attack_encoded_command_download.jsonl +1 -0
- agentmetry/core/audit/detection/corpus/attack_env_credential_exfil.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/attack_hashed_only_no_command.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/attack_interpreter_egress.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/attack_pr_merged_without_review.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/attack_proc_substitution_cradle.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/attack_remote_pipe_to_shell.jsonl +1 -0
- agentmetry/core/audit/detection/corpus/attack_remote_staging_then_execute.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/attack_session_tool_burst.jsonl +42 -0
- agentmetry/core/audit/detection/corpus/attack_single_command_exfil.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/attack_ssh_directory_exfil.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/attack_subagent_swarm.jsonl +6 -0
- agentmetry/core/audit/detection/corpus/attack_timestamp_collision.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/attack_untrusted_input_then_action.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/benign_authoring_merge_fixtures.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/benign_autonomous_after_approval.jsonl +4 -0
- agentmetry/core/audit/detection/corpus/benign_build_artifact_cleanup.jsonl +5 -0
- agentmetry/core/audit/detection/corpus/benign_ci_artifact_download.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/benign_database_migration.jsonl +5 -0
- agentmetry/core/audit/detection/corpus/benign_dependency_install_and_build.jsonl +5 -0
- agentmetry/core/audit/detection/corpus/benign_download_release_archive.jsonl +4 -0
- agentmetry/core/audit/detection/corpus/benign_fetch_data_then_run_repo_script.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/benign_fetch_dataset_then_analyse.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/benign_fetch_lockfile_then_install.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/benign_git_review_and_push.jsonl +6 -0
- agentmetry/core/audit/detection/corpus/benign_human_driven_deletes.jsonl +6 -0
- agentmetry/core/audit/detection/corpus/benign_local_api_probing.jsonl +5 -0
- agentmetry/core/audit/detection/corpus/benign_long_but_calm_session.jsonl +30 -0
- agentmetry/core/audit/detection/corpus/benign_loopback_is_not_egress.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/benign_loopback_pipe_to_interpreter.jsonl +3 -0
- agentmetry/core/audit/detection/corpus/benign_ordinary_development.jsonl +5 -0
- agentmetry/core/audit/detection/corpus/benign_package_manager_after_fetch.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/benign_reading_config_that_is_not_secret.jsonl +5 -0
- agentmetry/core/audit/detection/corpus/benign_remote_api_call_no_credentials.jsonl +4 -0
- agentmetry/core/audit/detection/corpus/benign_research_then_docs.jsonl +5 -0
- agentmetry/core/audit/detection/corpus/benign_reversed_order_is_not_exfil.jsonl +2 -0
- agentmetry/core/audit/detection/corpus/benign_test_and_fix_loop.jsonl +6 -0
- agentmetry/core/audit/detection/corpus/benign_writing_about_credentials.jsonl +6 -0
- agentmetry/core/audit/detection/corpus/corpus.yaml +443 -0
- agentmetry/core/audit/detection/disposition.py +651 -0
- agentmetry/core/audit/detection/engine.py +78 -0
- agentmetry/core/audit/detection/live.py +127 -0
- agentmetry/core/audit/detection/live_store.py +355 -0
- agentmetry/core/audit/detection/models.py +53 -0
- agentmetry/core/audit/detection/rules.py +1314 -0
- agentmetry/core/audit/detection/traits.py +648 -0
- agentmetry/core/audit/detection/yaml_config.py +91 -0
- agentmetry/core/audit/detection/yaml_rules.py +83 -0
- agentmetry/core/audit/dlp/__init__.py +4 -0
- agentmetry/core/audit/dlp/loader.py +29 -0
- agentmetry/core/audit/dlp/models.py +29 -0
- agentmetry/core/audit/dlp/scanner.py +96 -0
- agentmetry/core/audit/dogfood.py +398 -0
- agentmetry/core/audit/evidence_pack.py +500 -0
- agentmetry/core/audit/external.py +213 -0
- agentmetry/core/audit/hashing.py +21 -0
- agentmetry/core/audit/hook_bootstrap.py +451 -0
- agentmetry/core/audit/identity.py +39 -0
- agentmetry/core/audit/ingest.py +242 -0
- agentmetry/core/audit/migrate.py +73 -0
- agentmetry/core/audit/mitre.py +244 -0
- agentmetry/core/audit/policy.py +99 -0
- agentmetry/core/audit/redaction.py +50 -0
- agentmetry/core/audit/replay.py +54 -0
- agentmetry/core/audit/run_context.py +129 -0
- agentmetry/core/audit/sinks.py +235 -0
- agentmetry/core/audit/spool.py +394 -0
- agentmetry/core/audit/tool_policy/__init__.py +4 -0
- agentmetry/core/audit/tool_policy/evaluator.py +198 -0
- agentmetry/core/audit/tool_policy/loader.py +44 -0
- agentmetry/core/audit/tool_policy/models.py +25 -0
- agentmetry/core/audit/trail_chain.py +300 -0
- agentmetry/core/audit/trail_db.py +491 -0
- agentmetry/core/audit/trail_merkle.py +332 -0
- agentmetry/core/auth.py +54 -0
- agentmetry/core/bus/__init__.py +5 -0
- agentmetry/core/bus/audit_exporter.py +107 -0
- agentmetry/core/bus/bridges.py +26 -0
- agentmetry/core/bus/bus.py +102 -0
- agentmetry/core/bus/events.py +50 -0
- agentmetry/core/bus/outbox.py +124 -0
- agentmetry/core/config.py +177 -0
- agentmetry/core/diagnostics/__init__.py +0 -0
- agentmetry/core/diagnostics/autostart.py +563 -0
- agentmetry/core/diagnostics/doctor.py +535 -0
- agentmetry/core/diagnostics/driver_paths.py +156 -0
- agentmetry/core/diagnostics/env_file.py +45 -0
- agentmetry/core/drivers/__init__.py +4 -0
- agentmetry/core/drivers/host.py +263 -0
- agentmetry/core/drivers/permissions.py +37 -0
- agentmetry/core/drivers/spec.py +118 -0
- agentmetry/core/extensions.py +107 -0
- agentmetry/core/health.py +26 -0
- agentmetry/core/version.py +13 -0
- agentmetry/policies/detection/manifest.yaml +43 -0
- agentmetry/policies/dlp/manifest.yaml +161 -0
- agentmetry/policies/opa/agent_rules.rego +33 -0
- agentmetry/policies/tool/manifest.yaml +117 -0
- agentmetry-0.4.0.dist-info/METADATA +86 -0
- agentmetry-0.4.0.dist-info/RECORD +131 -0
- agentmetry-0.4.0.dist-info/WHEEL +4 -0
- 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,,
|