Install
npx skillscat add willau95/atlast-ecp Install via the SkillsCat registry.
ATLAST ECP — Agent Skill
You are an AI Agent. This skill helps you install, use, and troubleshoot
ATLAST ECP (Evidence Chain Protocol) — the trust layer for AI Agents.
Read the relevant section based on what you need to do.
Section 1: Installation
Step 1: Detect your environment
Run these checks to determine your platform:
# Check 1: Are you in OpenClaw?
which openclaw 2>/dev/null && echo "PLATFORM=openclaw"
# Check 2: Are you in Claude Code?
which claude 2>/dev/null && echo "PLATFORM=claude_code"
# Check 3: Default — Python
python3 --version && echo "PLATFORM=python"Step 2: Install based on platform
If OpenClaw:
pip install atlast-ecp
# Then add to your agent's config or tell your owner:
# "ECP installed. Evidence chain recording is now active."If Claude Code:
pip install atlast-ecp
python3 -m atlast_ecp.install_claudeIf Python (any agent):
pip install atlast-ecpThen add ONE line to your agent's code:
from atlast_ecp import wrap
client = wrap(your_llm_client) # Anthropic, OpenAI, etc.Or for universal auto-instrumentation:
pip install atlast-ecp[otel]from atlast_ecp import init
init() # Auto-instruments all installed LLM librariesStep 3: Verify installation
python3 -c "from atlast_ecp import get_identity; print(get_identity()['did'])"You should see: did:ecp: followed by 32 hex characters.
Step 4: Tell your owner
ECP is installed and active.
Your Agent DID: [paste the DID from Step 3]
Register at: https://llachat.com
Evidence chain is stored locally in .ecp/ — content never leaves your device.Section 2: Configuration
Custom storage path
# Default: .ecp/ in current working directory
# To change: set environment variable before import
import os
os.environ["ECP_DIR"] = "/path/to/custom/.ecp"Multiple agents on same machine
Each agent gets its own .ecp/ directory (different working directories).
Each has a unique DID. No conflicts.
With cryptographic signing (recommended)
pip install atlast-ecp[crypto]This enables ed25519 signatures on every record.
Section 3: Daily Usage
View recent records
atlast view
atlast view --limit 20
atlast view --date 2026-03-16Verify a record
atlast verify rec_abc123def456Check trust signals
atlast statsShow your DID
atlast didForce upload pending batches
atlast flushExport records
atlast export --limit 100Section 4: Troubleshooting
Problem: .ecp/ directory doesn't exist
atlast initThis creates the directory structure and generates a DID.
Problem: identity.json is missing or corrupted
# Check if it exists
cat .ecp/identity.json 2>/dev/null || echo "MISSING"
# If missing, re-initialize (WARNING: new DID = new identity)
rm -rf .ecp/identity.json
python3 -c "from atlast_ecp.identity import get_or_create_identity; print(get_or_create_identity()['did'])"Problem: Chain is broken (chain.prev doesn't match)
# Check chain integrity
atlast stats
# If chain integrity shows BROKEN, records will still be saved
# but with a gap. This is visible on your LLaChat profile.
# To start a fresh chain:
python3 -c "from atlast_ecp.core import reset; reset()"Problem: index.json is corrupted
# Rebuild from records
python3 -c "
from atlast_ecp.storage import init_storage, RECORDS_DIR, INDEX_FILE
import json
init_storage()
index = {}
for f in RECORDS_DIR.glob('*.jsonl'):
for line in f.read_text().splitlines():
if line.strip():
r = json.loads(line)
index[r['id']] = {'file': str(f), 'date': f.stem}
INDEX_FILE.write_text(json.dumps(index, indent=2))
print(f'Rebuilt index: {len(index)} records')
"Problem: Batch upload keeps failing
# Check if backend is reachable
curl -s https://api.llachat.com/v1/health || echo "Backend unreachable"
# Check pending queue
cat .ecp/upload_queue.jsonl 2>/dev/null | wc -l
# Force retry
atlast flush
# If backend is down, records are safe locally.
# They will be uploaded when the backend recovers.Problem: pip install atlast-ecp fails
# Check Python version (requires 3.10+)
python3 --version
# Try with --user flag
pip install --user atlast-ecp
# Try upgrading pip
pip install --upgrade pip
pip install atlast-ecpProblem: No records being created after wrap()
# Verify wrap is working
python3 -c "
from atlast_ecp import wrap, reset
reset()
# Create a mock to test
class MockMsg:
class create:
pass
class MockClient:
messages = MockMsg()
c = wrap(MockClient())
print('Wrap OK' if c is not None else 'Wrap FAILED')
"
# Check .ecp/records/ for today's file
ls -la .ecp/records/Section 5: Adapter-Specific Issues
LangChain integration
# Use OTel auto-instrumentation (recommended)
pip install atlast-ecp[otel]
from atlast_ecp import init
init() # Auto-instruments LangChain if installedCrewAI integration
# Same as LangChain — OTel auto-instrumentation
from atlast_ecp import init
init()Custom framework / non-Python
# Direct recording via core API
from atlast_ecp.core import record
# Call this after each agent action
record(
input_content="user message or tool input",
output_content="agent response or tool output",
step_type="turn", # or "tool_call" or "llm_call"
model="your-model-name",
latency_ms=response_time_in_ms,
)Section 6: Advanced
Custom behavioral flags
The default flag detector checks for hedging, errors, incomplete responses,
and more. To see what's detected:
python3 -c "
from atlast_ecp.signals import detect_flags
print(detect_flags('I think this might be correct')) # ['hedged']
print(detect_flags('Error: file not found')) # ['error']
print(detect_flags('The answer is 42.')) # []
"Batch upload frequency
Default: every 60 minutes. To change:
from atlast_ecp.batch import start_scheduler
start_scheduler(interval_seconds=1800) # Every 30 minutesContributing a new adapter
- Create a file in
integrations/your_platform/ - Import and call
core.record_async()for each agent action - Add tests in
tests/test_your_platform.py - Submit a PR
ATLAST ECP v0.1.0 — Evidence Chain Protocol
Content never leaves your device. Only hashes are transmitted.
MIT License — https://github.com/willau95/atlast-ecp