kestrel-feature-observability
Lifecycle event observability for Kestrel Sovereign agents. Attaches an ObservabilityHook to the agent's hook system; every lifecycle event is logged to the agent's observability_store. Prometheus metrics emit through the SDK's shared registry, so a single /metrics scrape stays coherent across the framework + every feature package.
Installation
uv pip install kestrel-feature-observability
For real Prometheus output:
uv pip install 'kestrel-feature-observability[metrics]'
The feature is auto-discovered by Kestrel Sovereign via the kestrel_sovereign.features entry point — install it alongside kestrel-sovereign and ObservabilityFeature registers itself at startup.
Tools
| Tool | Category | Description |
|---|---|---|
observability_summary |
DATA_ACCESS | Recent metric and error counts |
observability_query |
DATA_ACCESS | Query lifecycle events by type and time window |
observability_session |
DATA_ACCESS | Per-session event timeline |
Console panels
The feature contributes two ES modules to the Console via get_ui_contributions(),
each self-registering through the host ui-ext registerPanel registry and gated
on the observability capability:
- LLM Calls (
static/llm-calls.js) — paged, filterable LLM-call table. - Fleet Timeline (
static/timeline.js) — the headline swimlane view. A left agent selector populated fromGET /agent-tree, and a right timeline of lanes (per agent) + nested sublanes — talon jobs / subagents indented under their driver via the event lineage fields (parent_agent/driven_by/parent_session_id/subagent_id). Pause/Play, time-range (1m/5m/all), and status/tool/hook color modes; live updates via SSE when the host exposes an event stream, else polling of the subtree events endpoint.
static/timeline.js keeps its grouping logic (buildLanes/nestLanes) pure and
DOM-free at import time — panel registration and rendering run only in a browser —
so the nesting logic is unit-tested with node's built-in runner
(node --test tests/timeline.nesting.test.mjs), ported from the original
kestrel-claws dashboard/tests/timeline.test.ts. This swimlane supersedes the
kestrel-claws dashboard/src/views/timeline.ts, which should be retired (removed
or stubbed to point here) in a follow-up kestrel-claws PR.
Privacy
The hook is observational — it never blocks, denies, or modifies. User-message content is not logged (only length); tool errors are truncated to 200 chars; exceptions in the hook are swallowed so they cannot affect agent operation.
Dependencies
kestrel-sovereign-sdk>=0.14.1,<1— baseFeature,tool,ToolCategory,Hook, and sharedmetricsmodule- Optional
[metrics]extra →kestrel-sovereign-sdk[metrics]→prometheus-client
No runtime dependency on kestrel-sovereign itself; the feature accesses agent.observability_store via duck typing, so it works against any host that provides one.
Development
uv pip install -e '.[test]'
uv run pytest
License
Apache-2.0
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 kestrel_feature_observability-0.4.0.tar.gz.
File metadata
- Download URL: kestrel_feature_observability-0.4.0.tar.gz
- Upload date:
- Size: 32.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b09744e95fccbdd28b94e7f62c41e49cde7d1051e57f07681875d9f460ff8599
|
|
| MD5 |
e0b7aa01351bd6db04c53ccfc9bb6d3f
|
|
| BLAKE2b-256 |
6260c9834d53e5304f29cf1a8966dfd6cbb4852e2df97289d61dd4b2e1741d84
|
Provenance
The following attestation bundles were made for kestrel_feature_observability-0.4.0.tar.gz:
Publisher:
publish.yml on KestrelSovereignAI/kestrel-feature-observability
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kestrel_feature_observability-0.4.0.tar.gz -
Subject digest:
b09744e95fccbdd28b94e7f62c41e49cde7d1051e57f07681875d9f460ff8599 - Sigstore transparency entry: 2082161259
- Sigstore integration time:
-
Permalink:
KestrelSovereignAI/kestrel-feature-observability@dd81fc6063d064c5a59b539b5344b95609072e28 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/KestrelSovereignAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@dd81fc6063d064c5a59b539b5344b95609072e28 -
Trigger Event:
push
-
Statement type:
File details
Details for the file kestrel_feature_observability-0.4.0-py3-none-any.whl.
File metadata
- Download URL: kestrel_feature_observability-0.4.0-py3-none-any.whl
- Upload date:
- Size: 37.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40cecbf3ff170a0a6d823aebb994baad0b5b2e598f26a0e4c845e1f613bb925f
|
|
| MD5 |
12d4dc1380854da20daaaece91b8be7c
|
|
| BLAKE2b-256 |
8ed279b77ee3529f73d48b5555af88a47e52f57e54dd2d4cabbcb0acd2c3bc5d
|
Provenance
The following attestation bundles were made for kestrel_feature_observability-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on KestrelSovereignAI/kestrel-feature-observability
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kestrel_feature_observability-0.4.0-py3-none-any.whl -
Subject digest:
40cecbf3ff170a0a6d823aebb994baad0b5b2e598f26a0e4c845e1f613bb925f - Sigstore transparency entry: 2082161264
- Sigstore integration time:
-
Permalink:
KestrelSovereignAI/kestrel-feature-observability@dd81fc6063d064c5a59b539b5344b95609072e28 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/KestrelSovereignAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@dd81fc6063d064c5a59b539b5344b95609072e28 -
Trigger Event:
push
-
Statement type: