DSH Hub

YuanyuanMa03/dsh-funnel

dsh-funnel

BundleWorkflow0 GitHub stars· updated 2026-08-15

Curate tool output before it enters the model's context — keep error/warning lines and head/tail, spill the full text with a pointer. ~24x smaller model view, measured. For DeepSeek Harness.

Install

npx @deepseek-ai/dsh plugin --profile web add github:YuanyuanMa03/dsh-funnel

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

dsh-funnel DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/dsh-funnel.svg)](https://dshhub.dev/plugins/dsh-funnel)

Paste this into your README. The star count updates with every catalog sync.

From the README

Excerpt from YuanyuanMa03/dsh-funnel, cleaned of badges and images.

dsh-funnel

English | 中文

Curate tool output before it enters the model's context — keep the lines that matter, spill the rest to disk with a pointer. Faster turns, smaller context, sharper attention, for every tool.

The problem

Every tool result is appended to the conversation and re-sent on every subsequent model request. A npm test run that prints 500 lines rides along for the rest of the session: you pay for it on each turn, it fills the context window, and it buries the one AssertionError the model actually needs.

The existing layers don't cover this:

LayerWhat existsWhat it doesn't do
Capture (executor)64 MB spill protects the process from OOMnothing about what the model sees
Execution (bash only)maxOutputBytes byte-cap, head truncationshell tools only; blind cut, no error lines kept
Compaction timeofficial tool-result-pruner rewrites over-budget results on the surfacefires only when compacting; blind head/tail; model can't read the original back
Ingestion — every result, immediately← dsh-funnel

Compaction-time pruning cleans up after the budget is already blown; dsh-funnel keeps it from being blown. They compose.

What you get

  1. Install and forget. One command, zero configuration. The plugin covers every tool that returns text — bash, file reads, web fetch, search — and results under the threshold pass through byte-identical, so you never notice it until it saves you.

  2. A ~24× smaller model view, measured. In a real headless session, a 2001-line (8,893-byte) bash result reached the model as 370 characters: head, tail, and every error/warning line kept:

    - [2001 lines of raw output]
    + [dsh-funnel] output curated: 2001 lines → 40 kept (head 15, tail 25, 0 pattern-matched). Full output: .dsh-funnel/2026-08-15T09-21-56-548Z-bash-1.log
    + 1 … 15
    + [dsh-funnel] … 1959 similar lines omitted …
    + 1977 … 2000
    

    Every later turn in the session pays for 370 characters instead of 8,893 — the saving compounds each request.

  3. Nothing is lost, and the model recovers on its own. The full text spills to .dsh-funnel/ and the notice carries the path. In testing, the model missed a middle line in the curated view, searched the spill file itself, and answered correctly — curation is pagination, not deletion. The spool doubles as an audit trail of what the agent actually saw.

  4. Long tasks hold up better. Smaller context means cheaper turns, later compaction, and less attention dilution — the agent stays sharp deeper into a session instead of degrading as junk accumulates.

  5. Tune it to your workflow. Threshold, kept lines, keyword patterns (add your project's own failure markers), per-tool aggressiveness, spill on/off.

Boundaries: error results are never touched (they are short and load-bearing); this complements compaction rather than replacing it.

How it works

dsh-funnel wraps the tools/execute extension point (the seam the official timeout guard uses) and curates the canonical value of successful results: the registry re-projects model-facing content from value, so the curated view is exactly what the model sees and what the session log records. Long string fields inside value — stdout, stderr, fetched pages, file contents — are replaced in place; error results are never touched.

Install

dsh plugin add github:YuanyuanMa03/dsh-funnel

Related plugins