How to use
- Copy the installation command and review the source package before installing it in your own agent environment.
- Check the source document for required tools, credentials and supported hosts.
- Describe your input and desired deliverable; review the output against the source material.
npx skills add https://github.com/affaan-m/ecc --skill deepseek-harness-setupBefore you start
- Installation does not include a model subscription, API allowance or permission to access your files.
- Repository stars and installation counts describe activity, not an independent quality or security test.
Rendered from the source repository. Headings, examples, code, tables, links, and referenced images are preserved.
DeepSeek Harness Setup
Run ECC on the DeepSeek Harness. Full guide: docs/DEEPSEEK-HARNESS-GUIDE.md.
When to Use
- Installing ECC skills or hooks on a DeepSeek Harness install.
- Deciding which ECC surfaces work on DSH and which do not.
- Debugging a DSH session that does not show ECC skills or does not fire ECC hooks.
How It Works
- Skills need no conversion. DSH reads
SKILL.mdfrontmatter
(name/description) from native skill roots. Link the ECC catalog once:
ln -s /path/to/ECC/skills/<skill-name> ~/.dsh/skills/<skill-name>Root priority (project .dsh and .agents roots beat ~/.dsh): skip linking skills whose names already exist in a higher-priority root. Substitute real skill names for the placeholders; the angle brackets are not shell syntax.
- Hooks go through the first-party bridge. Generate a DSH-format config
from the canonical ECC hooks file:
node scripts/dsh/generate-hooks-config.js --ecc-root /path/to/ECC --out ~/.dsh/ecc/hooks-dsh.jsonThe generator lower-cases tool-name matchers, prefixes CLAUDE_PLUGIN_ROOT/ECC_PLUGIN_ROOT inline (the bridge does not export the plugin root), preserves timeouts, and skips events DSH cannot bridge: PreCompact, PostToolUseFailure, SessionEnd.
- Mount with a bare insert in
~/.dsh/profiles/<profile>/cordis.patch.yml:
- insert:
- id: ecc-hooks-claude-code
name: "@deepseek-ai/dsh-hooks-claude-code"
config:
configPath: /absolute/path/to/hooks-dsh.jsonLoader rules that cost debugging time when learned the hard way: a plain - id: top-level entry is silently dropped; insert under an existing non-group id is rejected as "not a group"; first-party plugin packages need no profile package.json entry.
- Validate by composing, then verify live.
cd ~/.dsh && dsh --profile web --dump-config > /tmp/dump.yml
grep ecc-hooks /tmp/dump.ymlCompose exit status stays 0 even when the loader drops or rejects an entry — those problems are only reported on stderr. Confirm the entry id appears in the dump and stderr is empty. A live GateGuard denial on the session's first edit/write/bash is the visible signal the bridge is active.
Updating
git pull reflects into linked skills immediately; regenerate the hooks config with the same generator command. If the ECC checkout moves, regenerate (the path is embedded in every hook command) and relink skills.
Limits
| Surface | Status on DSH |
|---|---|
| Skills | Native discovery; workflows may require host adaptation |
| Hooks | 23 command hooks on 5 of 7 bridge events |
| Slash commands | Not available (Claude Code mechanism); workflows covered by skills |
| Agents | Native dispatch unverified; use canonical prompt guidance only after review |
The validated setup here targets the CLI/web profile. Desktop profiles have a separate installation-owned runtime and skill discovery must be verified there independently. Generate hooks only from a reviewed ECC checkout; the linked checkout supplies their runtime.


