dsh-web-search-ddg
aooyoo
Zero-token DuckDuckGo search provider for the DeepSeek Harness (DSH) web seam — local headless browser, no API key, no m…
PROJECT TOPICS
PROJECT README
A set of document-generation skills in pure prompt (Agent Skills) form, providing four capabilities for plugin-based agent harnesses such as dsh: README generation, PR description generation, changelog generation, and code review. All skills follow the Agent Skills open standard (SKILL.md + YAML frontmatter), are self-contained, have no third-party dependencies, and work offline.
| Skill | What it does | When to use |
|---|---|---|
readme-forge |
Generate/rewrite README.md from a codebase, writing only content backed by evidence | "Write a README for this project" |
pr-dossier |
Generate a complete PR description (change dossier) from a diff and commit history | "Write a PR description for this change" |
changelog-curator |
Categorize, merge, and rewrite git history into a CHANGELOG | "Update the changelog and get ready for release" |
diff-verdict |
Output structured review opinions: verdict + graded issue list + highlights | "Review this PR" |
Each skill is a self-contained single SKILL.md: the body contains input-collection guidance, a workflow, output templates with a template-variable table, language-style options, an output-quality checklist, a "don't" list, and edge-case handling.
docgen/
├── README.md # this document: installation, usage, interface
├── manifest.json # plugin manifest (self-describing metadata)
├── SKILLS.md # entry index file
├── LICENSE # MIT license
├── skills/ # skills root (point here or copy entries when integrating)
│ ├── readme-forge/SKILL.md
│ ├── pr-dossier/SKILL.md
│ ├── changelog-curator/SKILL.md
│ └── diff-verdict/SKILL.md
├── examples/
│ ├── prompts.md # example invocation prompts for each skill
│ └── dsh-patch-enable-skills.yml # example dsh integration patch (enables skills in web profile + registers directory)
├── scripts/
│ └── validate_skills.py # skill-pack validation script (Python standard library, no dependencies)
└── tests/
└── test_validate_skills.py # regression tests for the validation script
dsh plugin --profile demo add github:JohnXu22786/docgen
The exact wiring also depends on which profile the skill components are enabled in (see "Installation and dsh integration" below).
dsh discovers skills through the skill-filesystem provider by skills root directory (one level deep: directory bundles <root>/<name>/SKILL.md or flat files <root>/<name>.md). Pick any one of the following ways to integrate this pack:
Put the four skill directories under skills/ (or the whole skills/) into the project's skills root:
# Any of these in the project root (the nearest ancestor containing .git):
# <project>/.dsh/skills/ or <project>/.agents/skills/
cp -r skills/* <project>/.dsh/skills/
# $DSH_HOME defaults to ~/.dsh; $DSH_AGENTS_HOME defaults to ~/.agents
cp -r skills/* ~/.dsh/skills/
Register customSkillDirs for the skill-filesystem provider via configuration, e.g. with a patch file (see examples/dsh-patch-enable-skills.yml):
npx @deepseek-ai/dsh web --patch ./examples/dsh-patch-enable-skills.yml
Note: dsh's
webprofile disables skill-related components by default (skill-filesystem/tool-skill); enable them with a patch or preset. Theheadlessprofile has them enabled by default. The exact config key paths depend on your installed version — checkdsh --dump-configand the official docs.
python scripts/validate_skills.py # validates this pack's skill format (exit code 0 when all pass)
python scripts/validate_skills.py --strict # additionally checks the body line-count cap
python -m unittest discover -s tests -t . # runs the validation script's own regression tests
After integration, just make natural-language requests in a session and the model loads the matching skill via the skill tool:
Write a README for this project
Generate a PR description for the change I just made
Update the changelog from git history and prepare 1.2.0
Help me review this PR
description / whenToUse.length=concise, focus=security, language=en.Each skill is a directory bundle whose SKILL.md frontmatter is the only contract the harness reads:
| Field | Required | Constraints | Usage in this pack |
|---|---|---|---|
name |
yes | kebab-case (lowercase letters/digits/hyphens), ≤ 64 chars, identical to the containing directory name | see each skill |
description |
yes | non-empty, ≤ 1024 chars, states what it does + when to use + trigger keywords | Chinese description + English keywords |
whenToUse |
no | string, extra routing hint (community-established camelCase extension field) | provided by every skill |
metadata |
no | string key-value map | author / version / family |
license |
no | string | MIT |
compatibility |
no | string, environment requirements | pure prompts, no network needed |
allowed-tools |
no | string, pre-approved tool list (experimental) | unused |
dsh additionally recognizes (not written in this pack, defaults apply): disable-model-invocation and user-invocable (both open by default). Note: field names must be spelled exactly as in the table — allowed-tools contains a hyphen, and whenToUse is the established camelCase spelling; inconsistent spellings (e.g. writing allowed_tools or when-to-use) cause the field to be unrecognized; if an invocation-policy field is misspelled or mis-typed, dsh drops the entire skill (fail-closed).
manifest.json: the plugin's self-describing metadata (id / version / kind / entry / interface / skills / scripts). dsh's skill discovery does not read it; it serves human reference, publishing flows, and harnesses that support "entry file" style loaders; the interface field declares the skill-discovery contract.SKILLS.md: entry index listing the loading-contract summary and the skill list.dsh's skill capabilities are provided by three plugins working together — skill (registry), skill-filesystem (local discovery), and tool-skill (model catalog and skill tool): at startup it scans the root directories' frontmatter to build a catalog (the model only sees name + description); when the model decides to call a skill it reads the latest body by name; relative references in the body resolve against the skill directory. All four skills in this pack are single-file self-contained and do not depend on relative resources.
SKILL.md under skills/ (frontmatter per the table above), run python scripts/validate_skills.py until it passes, and update manifest.json and SKILLS.md accordingly.SKILL.md; the harness reads the new content on the next load (body changes need no catalog-cache restart).scripts/validate_skills.py uses only the Python standard library and can be used standalone on any skill pack; it accepts arbitrary directories/files. Its parsing scope is a flat YAML subset (top-level key-values + metadata indented maps + quoted/list literals), without anchors, comments, or other full-YAML features.name/description, the catalog refreshes via filesystem watching.MIT — see LICENSE.
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。