Zero-touch runtime telemetry for DSH: every session auto-writes task, model tier, tools, failures, duration, status into a human-readable journal with a stats section (pure observer — no tools, no LLM calls, no injection).
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Cavan-Ou/dsh-observation-journal
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Zero-touch runtime telemetry for DeepSeek Harness: every session writes its own report card.
简体中文版见 README.zh.md
A pure observer plugin (zero tools registered, zero LLM calls, zero agent involvement). When a session ends, it writes the run's facts — task, model tier, tools, failures, duration, status — into a human-readable journal with an auto-updated stats section.
Why it exists
Failures have a recorder (dsh-fail-logger). Successes and run facts didn't. This is the sibling: what happened — not how to solve it, not what to remember. No tools, no injection, no retrieval. The harness writes passively; humans and projects read.
What it is not (boundaries, stated plainly):
| Plugin | Records | Injects back into agent? | Consumption |
|---|---|---|---|
| this | run facts (telemetry) | never | human/project file |
| dsh-task-planner | solutions ("how to solve") | yes (recall) | agent planning |
| dsh-mneme / dsh-memento / dsh-memory | agent memories | yes (retrieval) | agent context |
| dsh-fail-logger | failures | via skill | agent skill loading |
60-second verification
dsh plugin --profile headless add <repo-or-pkg> # or copy the repo as a local bundle
dsh --profile headless "run any small task"
cat ~/.dsh/observations.md # a journal row + stats section appeared
What the output looks like
The journal is the UI. A marker section that survives manual edits, plus an auto-stats block:
<!-- OBS-JOURNAL:BEGIN -->
| time | sid | task | model | dur | turns | tools | calls | fail | status |
|---|---|---|---|---|---|---|---|---|---|
| 2026-08-14T21:42 | abe96e0f | 阅读 specs/s11-1.md 任务书 | deepseek-v4-pro(max) | 1242 | 1 | read:80,bash:12,edit:9,todo_write:4 | 106 | 0 | completed |
| 2026-08-15T03:04 | 9c1f3a | run any small task | deepseek-v4-flash(max) | 25 | 1 | bash:4,grep:2,glob:1 | 7 | 0 | completed |
<!-- OBS-JOURNAL:END -->
<!-- OBS-JOURNAL:STATS -->
- sessions: 2
- failure rate: 0.0%(0/113)
- top tools: read:80,bash:12,edit:9,todo_write:4,grep:2
- avg duration (s) by model: deepseek-v4-flash(max): 25, deepseek-v4-pro(max): 1242
<!-- OBS-JOURNAL:STATS:END -->
raw sidecar (obsFile + '.jsonl', append-only): full fidelity — todo planning trace (≤5), complete tool counts, failed tools, full model id, full task description, normalized task_hash. This is the v2 material for LLM insight; it is TTL-decoupled from the card.
Config (all optional, patch config: field)
| key | default | description |
|---|---|---|
obsFile |
$DSH_HOME/observations.md |
journal path (point it at a project-level file) |
maxRows |
200 |
card keeps last N rows (raw sidecar unaffected) |
marker |
OBS-JOURNAL |
section marker id, [A-Za-z0-9-] |
redact |
[] |
extra redaction regexes (stacked on the built-in secret table) |
flushMs |
300 |
trailing debounce after turn/end |
Env: OBS_FILE overrides obsFile; OBS_REPLAY=<session.jsonl> replays real events (test/CI mode).
Reliability
- 10-column card rows: one row per session — no lossy merging
- Task title escapes
|and newlines; secrets redacted (same table as fail-logger) - Cross-process write lock + stale lock reclaim; dispose fallback flushes sessions with no turn/end
- Tested against real session logs: 14/14 replay tests on 5 real .zstd fixtures (incl. a 2000+ event Pro long-synthesis session), field-by-field cross-checked against independent recomputation; 21-session full replay verified human sections byte-identical
Development
node --check lib/index.js
node --test tests/test.mjs # needs python3 + zstandard
License
MIT
Links
More in this category
strukto-ai/mirage#dsh★ 3416
Swaps the filesystem and bash providers for a mirage virtual workspace: file tools and shell commands run over mounted resources (RAM, S3, Redis, Slack, Gmail, Notion, Postgres) instead of the host disk, with per-mount read/write/exec modes, per-command sandbox routing (monty, pyodide, quickjs in process; docker, e2b, daytona remote), and installed CLIs (git, gh, slack, linear, ntn, gws, or one you register) as head words in the virtual terminal.
hust-open-atom-club/oh-dsh★ 171
Community distribution: TUI, desktop, and Web UI as one bundle with layered installation.
Jayden-X-L/forkprobe★ 65
Compare multiple skills on the same task and pick the winner.
vlln/plugin-registry★ 37
Ecosystem infrastructure: a thin browser console for managing official repository plugins (zero patches) plus a make-dsh-plugin skill for guided plugin development.
forrestchang/dsh-multica-runtime★ 32
Run the dsh runtime on Multica.
DietCokewithSugar/dsh-user-experience★ 18
Finds potential UX issues in your project: automatically reviews React/TypeScript code, pinpoints each problem, and gives concrete suggestions.