π§© Skill Trail
August 23, 2026 Β· View on GitHub
ζ―ζ’εθ¦ε¦ε―¦ζ¨εΊγθ§ΈηΌδΊδ»ιΊΌγζεη¨δΊδ»ιΊΌγγ εΊζΌεΌζζ₯θͺηιεθ¦ζθ½/ε·₯ε ·εΎ½η« ,ιΆζ¨‘εθͺε ±γ
β οΈ ** superseded by
@bryan-cmf/dsh-skill-ledger** β this plugin's per-reply badges live on there (dual-seat, deliverables-safe), with the alternative-skill hint and the Skills tab. This repo is archived as the design-history record.
A DeepSeek Harness (DSH) plugin that renders a compact trail under every assistant reply: which skills were triggered (π§ ) and which tools were actually used (β) or failed (β).
$ π§© ζθ½θ»θ·‘ [π§ \text{ak}-\text{hk}-\text{stock}-\text{dd} β] [\text{read} \times 3 β] [\text{bash} \times 2 β] [\text{web\_search} β] $
Why it is truthful
The badges are not produced by the model. A skillTrail session-projection
unit (Host) folds each session's committed log β every tool/call event
becomes a triggered entry; the paired tool/result (matched by callId)
settles it as ok / err. The Client reads the finished value through
useProjection('skillTrail') and renders it in the zero-risk
conversation.chat.turnTail slot.
- β Structural β the platform records, nobody self-reports
- β Replayable β projection folds are pure; persisted cache + cold-start backfill come from the DSH projection subsystem for free
- β Per-turn β each reply shows exactly its own turn's trail
- β
Skill-aware β
skilltool calls render as π§ with the resolved skill name
Install
The package ships a Host half (lib/index.js) and a browser Client half
(lib/client.js, window.__ModuleLoader__ closure-factory format).
Path A β Host composition (always-on, every session & preset)
Add to the profile's package.json:
"dsh": { "profile": { "bundles": ["@bryan-cmf/dsh-skill-trail"] } }
then install and restart DSH. The projection unit is registered process-wide; the client half renders in every conversation.
Path B β Agent preset
Add one row to your preset's agent.cordis.yml (a consumer-only row β it
publishes no service, so it sits loose; no isolate realm needed):
- id: skill-trail
name: '@bryan-cmf/dsh-skill-trail'
Path C β Dynamic experiment
Inside a session, @bryan-cmf/dsh-skill-trail can also be run through the
dynamic Cordis flow; prefer A or B for anything standing.
Requirements
- DSH
>= 0.1.0-rc.6(@deepseek-ai/dsh-session-projectionmounted in the host composition β it is part of the shippeddsh-basebundle) - Browser UI needs the
conversation.chat.turnTailslot (shipped chat view)
Configuration
| Key | Default | Meaning |
|---|---|---|
maxTurns | 500 | Turns retained per session; oldest pruned first |
maxCallsPerTurn | 50 | Triggered-entry cap per turn (wire-payload guard) |
Projection value
useProjection('skillTrail') β Record<turn, { triggered, used, failed }>
{
"12": {
"triggered": [{ "name": "skill", "skill": "ak-hk-stock-dd", "status": "ok", "callId": "call_1" }],
"used": { "skill": 1, "read": 3, "bash": 2 },
"failed": ["web_search"]
}
}
Development
pnpm install
pnpm build # tsc declarations β lib/types + tsdown β lib/{index,client}.js
License
MIT