looptail
Record every AI decision as a signed, append-only trail. Every loop leaves a tail.
pip install looptail
import looptail
looptail.init(app="support-agent")
@looptail.trail
def handle_ticket(ticket):
...
# report an outcome signal when you learn how it went
looptail.outcome(looptail.last_event_id(), csat=5)
Every call becomes a hash-chained, Ed25519-signed loop event appended to
.looptail/support-agent.jsonl. Nothing is edited in place; any modification,
deletion, or reorder of past records is detectable:
npx @looptail/cli verify --app support-agent
✔ 2 loop events
✔ chain intact · signatures valid
Or from Python: looptail.verify_trail().
The whole loop, CLI-first
looptail-evals run --rubric rubrics/refund-policy.json --app support-agent
looptail-issues cluster --app support-agent
looptail-improve propose --app support-agent --issue refund-policy/v1/criterion-0 \
--prompt-file prompts/support.txt
looptail-improve replay --app support-agent --proposal prop_... \
--cases regression.jsonl --runner myapp.replay:run --rubric rubrics/refund-policy.json
looptail-improve approve --app support-agent --proposal prop_... --apply
Evaluators score recorded events against your rubrics with an LLM judge
(pip install "looptail[anthropic]" or [openai]); failing verdicts cluster
into tracked issues; the improve loop drafts a patch, replays your regression
set, and gates approval on a passing replay. Every step lands in the trail as
a signed event. Guide: looptail.ai/docs/improve.
How it works
- A signing key is created on first use at
~/.looptail/signing-key(override withLOOPTAIL_SIGNING_KEY, hex seed). - Events follow the open trail format — spec/trail-format.md — and are verifiable by any implementation, including the JS CLI.
- The local trail is the source of truth. With an API key
(
looptail.init(app=..., api_key=...)orLOOPTAIL_API_KEY), events also sync to the hosted Tail (private beta); sync is best-effort and never blocks or crashes your app.
Read the trust model in the spec before relying on local trails as evidence: self-signed trails are tamper-evident; hosted anchoring (v0.2) makes them stronger.
Docs: looptail.ai/docs · License: Apache-2.0
Metadata
Release files for looptail 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| looptail-0.2.3.tar.gz | 27.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| looptail-0.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 55.3 kB
Release files / looptail-0.2.3.tar.gz
| Download URL | looptail-0.2.3.tar.gz |
|---|---|
| Size | 27.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b82c86e4ae265ca6d77331abc922fbd6fe136e76b9939f2507a66b2d6122faf9
|
|
BLAKE2b-256 checksum How to use checksums |
9c77d3d98ca4f08115a278452e342d091e8ccbe04d326a5f096b39c0e87b6d5d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.15
|
Release files / looptail-0.2.3-py3-none-any.whl
| Download URL | looptail-0.2.3-py3-none-any.whl |
|---|---|
| Size | 27.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f4f13916d58eb940d2eb802b3621e59f0333885e3c98803a91bf6d3d76e9dcf6
|
|
BLAKE2b-256 checksum How to use checksums |
5c4854fb034fa4177022f0e1b21ab02e46c993981ff2ed8e7cc90360a369c1c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.15
|