Skip to content

Add DeepSeek Harness (DSH) integration - #4336

Open
AnInteger wants to merge 1 commit into
github:mainfrom
AnInteger:feat/4334-add-dsh-integration
Open

Add DeepSeek Harness (DSH) integration#4336
AnInteger wants to merge 1 commit into
github:mainfrom
AnInteger:feat/4334-add-dsh-integration

Conversation

@AnInteger

Copy link
Copy Markdown

Adds a skills-based integration for DeepSeek Harness (DSH) — the agent runtime behind the dsh CLI and its Web GUI. Closes #4334.

How DSH consumes Spec Kit

DSH discovers skills one level deep from .dsh/skills (its native project root, highest provider rank) and .agents/skills, using speckit-<name>/SKILL.md directory bundles with name/description frontmatter — the same agentskills.io layout SkillsIntegration already scaffolds. Users invoke skills through the /-trigger input (e.g. /speckit-specify <feature description>); the harness injects the rendered skill content into the turn. Project AGENTS.md guidance is loaded natively by DSH, so no context-file handling is needed in the integration.

What changed

Area Change
src/specify_cli/integrations/dsh/ New SkillsIntegration subclass: installs to .dsh/skills/, slash-style invocations, CLI dispatch via dsh --profile headless "<prompt>", multi_install_safe (isolated .dsh/ root coexists with other agents)
src/specify_cli/integrations/__init__.py Registration (import + _register(), alphabetical)
src/specify_cli/_invocation_style.py dsh added to ALWAYS_SLASH_AGENTS so init output and hook messages render /speckit-<command>
src/specify_cli/commands/init.py Next-steps hint for dsh skills mode
integrations/catalog.json Catalog entry (keeps TestCatalogParity green)
.github/ISSUE_TEMPLATE/* Supported-agent lists/dropdowns (kept in sync per test_issue_template_agent_lists_match_runtime_integrations)
docs/reference/integrations.md Docs table row
tests/integrations/test_integration_dsh.py 40 tests: inherited SkillsIntegrationTests suite, build_exec_args regression, DSH-discovery compatibility invariants (kebab-case names, name+description frontmatter, one-level-deep bundles), multi-install isolation, hook invocation rendering

No templates/commands/*.md files are touched, so no existing command behavior changes.

Test selection reasoning

Changed file Affects Test Why
src/specify_cli/integrations/dsh/__init__.py specify init --integration dsh T1 New integration subpackage — scaffolding path
src/specify_cli/integrations/__init__.py specify init / integration install T1 Registry registration wires the new key
src/specify_cli/_invocation_style.py init next-steps display, hook invocation rendering T1 dsh added to ALWAYS_SLASH_AGENTS
src/specify_cli/commands/init.py specify init output T1 New next-steps hint
catalog / issue templates / docs / tests none (metadata/docs/tests) No runtime behavior

Manual test results

Agent: DeepSeek Harness (dsh CLI v0.1.1-rc.2, headless profile) | OS/Shell: Linux (WSL2) / bash

Command tested Notes
specify init --integration dsh --script sh (T1) PASS — 10 skills installed to .dsh/skills/speckit-<name>/SKILL.md; next-steps panel shows the dsh web hint and /speckit-<command> usage; integration list shows dsh (CLI required: yes, multi-install safe: yes); integration uninstall dsh removed all 10 tracked files cleanly
/speckit-constitution (T2) PASS — executed by a real DSH agent via dsh --profile headless "/speckit-constitution …"; the skill loaded through the /-token gesture boundary; the agent created .specify/memory/constitution.md with a sync impact report and self-validated; exit 0
/speckit-specify (T3) PASS — executed by a real DSH agent; create-new-feature.sh ran and created specs/001-markdown-notes-cli/; generated spec.md (user stories with priorities, Given/When/Then acceptance scenarios, 11 functional requirements) and checklists/requirements.md; the agent ran the requirements checklist and reported all items passing; exit 0

Additional evidence:

  • DSH provider smoke test — instantiated the real @deepseek-ai/dsh-skill-filesystem FileSystemSkillProvider against a scaffolded project: all 10 speckit-* skills discovered from the project-dsh root with invocation: {modelInvocable: true, userInvocable: true}; full skill bodies loadable through provider.get().
  • Automated tests.venv/bin/python -m pytest tests -q: 7231 passed / 156 skipped. The 25 failures are pre-existing PowerShell-encoding environment failures, reproduced identically on a clean main checkout of this machine (verified via git stash), unrelated to this change.

AI disclosure

This PR was implemented with AI assistance (DeepSeek Harness, model: glm-5.3) under human supervision: the integration approach and each design decision (target directory, multi-install safety, CLI dispatch, invocation style) were presented for review and approved by the filer before submission, and all changes and manual test evidence were personally reviewed and re-verified. The commit carries an Assisted-by: trailer to the same effect.

Add a skills-based integration for DeepSeek Harness (DSH), the agent
runtime behind the dsh CLI and Web GUI.

DSH discovers project skills one level deep from .dsh/skills (its
native root, provider rank 100) and .agents/skills (rank 200), using
speckit-<name>/SKILL.md directory bundles with name/description
frontmatter — the same agentskills.io layout SkillsIntegration already
scaffolds. Users invoke skills via the '/'-trigger input in the DSH
Web GUI (/speckit-specify <description>); the harness injects the
rendered <skill_content> into the turn. Project AGENTS.md guidance is
loaded natively by DSH, so no context-file handling is needed.

- Install skills to .dsh/skills/speckit-<name>/SKILL.md (isolated
  static root; multi-install safe alongside other agents)
- CLI dispatch via 'dsh --profile headless "<prompt>"' one-shot mode
- Register 'dsh' in ALWAYS_SLASH_AGENTS so init output and hook
  messages render /speckit-<command> invocations
- Add init next-steps hint, catalog entry, issue-template lists,
  devcontainer install step, docs table row
- Verify with the real dsh-skill-filesystem provider: all 10 skills
  discovered as user- and model-invocable, bodies loadable

Assisted-by: DeepSeek Harness (model: glm-5.3, supervised)
@AnInteger
AnInteger requested a review from mnriem as a code owner August 26, 2026 07:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Agent]: Add support for DeepSeek Harness (DSH)

1 participant