ExecWeave
English | 繁體中文 | 简体中文 | 日本語 | 한국어
See what AI agents actually do on your machine.
ExecWeave is an open-source, local-first observability project that turns AI-agent activity into an interactive execution graph while keeping observed evidence separate from inference.
Event is ground truth. The graph is a materialized view.
Install
ExecWeave v0.6.0 is packaged as a standard Python wheel/sdist. The repository is PyPI-ready; until the first Trusted Publisher release is made, install the package directly from GitHub:
python -m pip install "execweave @ git+https://github.com/Irish-kw/ExecWeave.git@main"
For development:
git clone https://github.com/Irish-kw/ExecWeave.git
cd ExecWeave
python -m pip install -e ".[dev]"
Once the first PyPI release is published, installation becomes:
python -m pip install execweave
Watch any command live:
execweave live --open -- claude
Or build the full artifact pipeline:
execweave record --open -- python my_agent.py
Performance and footprint
ExecWeave includes a reproducible package-level overhead benchmark that is run from an installed wheel. The reference plot follows the same trade-off style commonly used for model quality/cost comparisons:
- X-axis: additional peak process-tree RSS, low → high.
- Y-axis: runtime overhead, low → high.
- Bubble area: median artifact size per run.
- Preferred region: lower-left.
Reference environment: GitHub Actions Ubuntu runner, Intel Xeon Platinum 8573C, 4 logical CPUs, Python 3.12.14, n=7.
| Profile | Median wall time | Runtime overhead | Additional peak RSS | Median artifacts/run |
|---|---|---|---|---|
| ExecWeave OFF | 236.221 ms | 0.0% | 0.0 MB | 0 KB |
| Portable ON | 391.580 ms | 65.768% | 27.852 MB | 741.355 KB |
| Strace ON | 1226.076 ms | 419.038% | 37.653 MB | 572.838 KB |
The same build produced an approximately 113 KB wheel and 198 KB sdist. The installed ExecWeave distribution footprint was about 849 KB, excluding Python and dependency footprints.
This is a deliberately short, file/process-heavy reference microbenchmark, not a universal workload claim. Percentage overhead is amplified because the uninstrumented baseline is only a few hundred milliseconds. Re-run execweave-overhead on the target host and representative workload before making capacity decisions.
execweave-overhead \
--iterations 7 \
--strace auto \
--output-json benchmark-results.json \
--output-svg benchmark-overhead.svg
Raw reference data and methodology: docs/benchmarks/.
Evidence layers
ExecWeave intentionally models four different layers instead of flattening them into one trace:
Agent / IDE semantic evidence
↓
Inference gateway / routing evidence
↓
Model runtime / inference-server evidence
↓
OS runtime evidence: process / file / network
A relationship is only causal when the underlying telemetry supports that claim.
Agent / IDE integrations
Claude Code
execweave-claude-hook --print-config
execweave-claude-record --open -- claude
OpenAI Codex
execweave-codex-hook --print-config
execweave-codex-record --open -- codex
Gemini CLI
execweave-gemini-hook --print-config
execweave-gemini-record --open -- gemini
Cursor
execweave-cursor-hook --print-config
execweave-cursor-record --open -- cursor
Cursor provides a stable tool_use_id, allowing exact logical tool-call identity across its pre/post hooks.
OpenCode
execweave-opencode-plugin --install
execweave-opencode-record --open -- opencode
The project-local OpenCode plugin uses exact sessionID + callID identity and deliberately does not forward tool output.
Provider-integrated runs preserve runtime, semantic, and correlated artifacts separately. Tool → Process bridges remain conservative derived evidence:
inferred: true
causal: false
Ambiguity produces no edge.
Inference gateway integrations
OpenRouter and LiteLLM Proxy are modeled as inference_gateway, not as local model runtimes.
execweave-inference-gateway event \
--gateway litellm \
--requested-model assistant \
--resolved-model azure/gpt-5 \
--provider-name Azure \
--deployment-id deployment-west \
--sidecar gateway.jsonl
ExecWeave keeps requested model, resolved model, routed provider, and deployment identity distinct. Provider/deployment edges are only emitted when authoritative metadata is supplied; they are never inferred from a model-name prefix.
When the caller has an explicit shared identity across Gateway and Model Runtime observations, the two request nodes can be linked without collapsing layers:
execweave-inference-link \
--gateway litellm \
--gateway-request-id gw-123 \
--runtime vllm \
--runtime-request-id rt-456 \
--shared-request-id trace-789 \
--sidecar inference.jsonl
SAME_INFERENCE_REQUEST is exact identity evidence, not causal evidence:
identity_exact: true
inferred: false
causal: false
The raw shared request ID is not persisted; only a SHA-256-derived identity hash is stored.
Model runtime integrations
Current model-runtime integrations are Ollama, llama.cpp, vLLM, and LM Studio.
execweave-model-runtime event --runtime ollama --sidecar model-runtime.jsonl
execweave-model-runtime event --runtime llamacpp --sidecar model-runtime.jsonl
execweave-model-runtime event --runtime vllm --sidecar model-runtime.jsonl
execweave-model-runtime event --runtime lmstudio --sidecar model-runtime.jsonl
OpenAI-compatible runtimes share response/usage and model-catalog parsing while retaining runtime-specific evidence semantics. Prompt, generated, and reasoning content are not stored. Sensitive local model paths are redacted; llama.cpp keeps stricter GGUF-path redaction.
LM Studio model-catalog visibility is represented as ADVERTISES_MODEL, not as proof that model weights are loaded in memory.
Runtime evidence
The portable collector runs on Linux, macOS, and Windows. Linux also has a syscall-backed strace reference backend.
execweave doctor
execweave run --backend portable -- your-command
execweave run --backend strace -- your-command
Portable filesystem watching is session-correlated rather than process-causal, and short-lived processes can be missed between polling intervals. The Linux strace path captures process-attributed syscall evidence after the command exits.
Future native collectors remain planned for Linux eBPF, Windows ETW, and macOS Endpoint Security.
Layered artifacts
A provider-integrated run can produce:
.execweave/runs/<run-id>/
├── events.jsonl
├── graph.json
├── viewer.html
├── semantic.jsonl
├── events.semantic.jsonl
├── graph.semantic.json
├── viewer.semantic.html
├── events.correlated.jsonl
├── graph.correlated.json
└── viewer.correlated.html
Raw evidence is never rewritten by the derived correlation layer.
Interactive Viewer
The standalone Viewer is local and self-contained. Current baseline includes pan/zoom, draggable nodes, node/edge inspection, node-type/relation/causal filters, observed only, search, evidence-sequence replay, progressive cluster expansion, focused neighborhoods, Saved Views, explicit edge semantics, and Correlation Summary.
Graph operations
execweave graph-summary run.graph.json
execweave graph-filter run.graph.json --output causal.graph.json --causal-only
execweave graph-focus run.graph.json NODE_ID --hops 2 --output focused.graph.json
execweave path run.graph.json SOURCE TARGET --causal-only
execweave graph-condense run.graph.json --output compact.graph.json --threshold 8 --keep-expansion
Security analysis
execweave analyze run.graph.json --output analysis.json
Security findings remain explicit about evidence limits. A possible sensitive-file → network path does not imply byte-level exfiltration:
{
"data_flow_proven": false,
"exfiltration_proven": false
}
Current status
ExecWeave is currently v0.6.0 and under active development.
The baseline includes runtime collection, graph materialization/querying, standalone/live Viewer, Claude/Codex/Gemini/Cursor/OpenCode semantic integrations, conservative Tool → Process correlation, OpenRouter/LiteLLM gateway metadata, Ollama/llama.cpp/vLLM/LM Studio runtime metadata, exact Gateway ↔ Model Runtime request identity, PyPI-ready wheel/sdist packaging, reproducible overhead benchmarking, and cross-platform CI on Python 3.10/3.12.
Privacy
ExecWeave is local-first. Runtime events, semantic sidecars, graphs, reports, and Viewers remain local by default. File contents and raw read/write byte buffers are not intentionally captured. Native adapters also avoid prompts/transcripts/tool output by default, but commands, paths, endpoint metadata, identifiers, and model metadata can still be sensitive.
Review artifacts before sharing them.
Documentation
Phase 1 — Runtime CollectionPhase 2 — Execution GraphLive GraphSemantic TelemetryClaude Code HooksOpenAI Codex HooksGemini CLI HooksCursor HooksOpenCode PluginInference Gateway / OpenRouter / LiteLLMModel Runtime / Ollama / llama.cpp / vLLM / LM StudioPerformance BenchmarksSecurity Analysis
Contributing
Contributions are welcome, especially around native OS collectors, additional Agent/IDE adapters, inference gateways, model runtimes, entity/correlation methods, privacy/redaction, graph UX, and performance evaluation.
License
See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file execweave-0.6.0.tar.gz.
File metadata
- Download URL: execweave-0.6.0.tar.gz
- Upload date:
- Size: 207.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e108aa7d572e0e652f0255d02a6bd610dc72ac4c8e0ff3f5e0a515bd776cc23
|
|
| MD5 |
f06290525b9147173d271f9838f73876
|
|
| BLAKE2b-256 |
49840946bf67d60567dbc28044977a5ae860f8ca7a3ed5e5ce4e5218d4eb5a53
|
Provenance
The following attestation bundles were made for execweave-0.6.0.tar.gz:
Publisher:
publish.yml on Irish-kw/ExecWeave
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
execweave-0.6.0.tar.gz -
Subject digest:
7e108aa7d572e0e652f0255d02a6bd610dc72ac4c8e0ff3f5e0a515bd776cc23 - Sigstore transparency entry: 2587232526
- Sigstore integration time:
-
Permalink:
Irish-kw/ExecWeave@2d37eb59b65e4640710ad288ca4c8350d7738353 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/Irish-kw
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2d37eb59b65e4640710ad288ca4c8350d7738353 -
Trigger Event:
release
-
Statement type:
File details
Details for the file execweave-0.6.0-py3-none-any.whl.
File metadata
- Download URL: execweave-0.6.0-py3-none-any.whl
- Upload date:
- Size: 116.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b92cf79e47d746e30aee7dcab698aa73b489ff4fd5ed7e0ff6799dba18a58a65
|
|
| MD5 |
e77890d22106425a59f8ad6410d5d3a3
|
|
| BLAKE2b-256 |
560cefc9077a6f0d4d419e5f5f36fe3a74af26e7a233ea30a671eba773852178
|
Provenance
The following attestation bundles were made for execweave-0.6.0-py3-none-any.whl:
Publisher:
publish.yml on Irish-kw/ExecWeave
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
execweave-0.6.0-py3-none-any.whl -
Subject digest:
b92cf79e47d746e30aee7dcab698aa73b489ff4fd5ed7e0ff6799dba18a58a65 - Sigstore transparency entry: 2587232676
- Sigstore integration time:
-
Permalink:
Irish-kw/ExecWeave@2d37eb59b65e4640710ad288ca4c8350d7738353 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/Irish-kw
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2d37eb59b65e4640710ad288ca4c8350d7738353 -
Trigger Event:
release
-
Statement type: