Append a single skill-execution event to the per-skill `experience/patterns.jsonl` file. Runs every time a leaf skill is used. Append-only — runtime AI never reads this file directly; only the compacted `experience.md` digest. Fast tier, no LLM required.
Installs into .claude/skills of the current project.
Are you the author of Experience Capture?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/0xmariowu-experience-capture)
---
name: autosearch:experience-capture
description: Append a single skill-execution event to the per-skill `experience/patterns.jsonl` file. Runs every time a leaf skill is used. Append-only — runtime AI never reads this file directly; only the compacted `experience.md` digest. Fast tier, no LLM required.
version: 0.1.0
layer: meta
domains: [meta, self-adaptive]
scenarios: [skill-outcome-tracking, experience-capture]
trigger_keywords: [capture experience, log skill run, record outcome]
model_tier: Fast
auth_required: false
cost: free
experience_digest: experience.md
---
# experience-capture — Per-Skill Event Writer
Appends one line of JSON per skill execution to `<skill_dir>/experience/patterns.jsonl`.
## Why This Skill Exists
Each autosearch leaf skill is treated as a small project that grows over time. Every time the runtime AI calls a skill, this capture skill logs **what the call looked like and whether it worked**, so the companion `experience-compact` skill can later promote recurring winning patterns into `experience.md`.
Three independent files per leaf skill:
```
autosearch/skills/channels/<skill>/
SKILL.md # static, versioned via git
experience.md # compacted digest (≤120 lines, read by runtime before calling skill)
experience/
patterns.jsonl # append-only raw events, grows, archived monthly
archive/YYYY-MM.jsonl # monthly-rotated archives
```
## Event Schema
One JSON object per line:
```json
{
"ts": "2026-04-22T08:15:00+08:00",
"session_id": "<session-id or null>",
"skill": "search-xiaohongshu",
"group": "channels-chinese-ugc",
"task_domain": "product-research",
"query_type": "recent-user-opinion",
"input_shape": "brand + feature + 近30天",
"method": "tikhub:xhs_search",
"environment": {"auth": "paid", "locale": "zh-CN"},
"outcome": "success",
"metrics": {
"yield": 18,
"relevant": 9,
"unique_sources": 7,
"latency_ms": 4200,
"cost_usd": 0.02,
"user_feedback": "accepted"
},
"winning_pattern": "品牌词 + 痛点词 + 近30天 比 '评测' 召回更准",
"failure_mode": null,
"good_query": "某品牌 某功能 翻车 2026",
"bad_query": null,
"evidence_refs": [],
"promote_candidate": true,
"notes": "适合和 search-douyin 交叉验证"
}
```
## Invocation Pattern
The runtime AI calls this skill after executing any leaf channel / fetch / transcription skill:
```python
capture_event({
"skill": "search-xiaohongshu",
"task_domain": "product-research",
"outcome": "success", # or "failure" or "partial"
"metrics": {...},
"good_query": "...",
"notes": "..."
})
```
The skill implementation (runtime AI uses Bash or direct file append):
1. Open `autosearch/skills/channels/<skill>/experience/patterns.jsonl` (create dir if missing).
2. Append one JSON line with `ts` set to current ISO-8601 time.
3. Close file. No compaction, no LLM call.
Latency target: < 50 ms, no network.
## When NOT to Capture
- User cancelled the skill mid-execution before results came in — too noisy.
- Skill threw an unhandled exception / segfault — exceptional, not a pattern.
- Runtime AI is running in a "dry run" / exploratory mode.
Captures are cheap; err on the side of capturing. `experience-compact` filters noise.
## Privacy Rules
- **Do not capture PII** (user names, emails, private URLs). `input_shape` should describe the *shape* of the query, not the exact terms the user typed. `good_query` / `bad_query` should be sanitized templates ("品牌 + 痛点 + 近30天") unless the exact string is demonstrably non-sensitive.
- **Do not capture cookies or API keys** in the `environment` field. Only record whether auth was paid / free / cookie-based.
- **Evidence refs** should point to deterministic IDs (URLs, patterns.jsonl offsets), never user-identifiable fields.
## Rotation
When `experience/patterns.jsonl` exceeds 1 MB, rotate:
```
experience/patterns.jsonl → experience/archive/YYYY-MM.jsonl
experience/patterns.jsonl (fresh) → ready for next session
```
This rotation is the `experience-compact` skill's job, not this capture skill's. Capture always appends to the live file.
## Relationship to Other Skills
- Writes to → `<leaf>/experience/patterns.jsonl`.
- Read by → `experience-compact` skill (promote rules into `experience.md`).
- Does NOT feed → runtime AI directly. Only `experience.md` is runtime-visible.
# Quality Bar
- Evidence items have non-empty title and url.
- No crash on empty or malformed API response.
- Source channel field matches the channel name.