DeepSeek Harness plugin

dsh-plugin-skill-tree

Shared public and profession-core capability trees for DeepSeek Harness

Jump to install

Source facts

Repository
nfz/dsh-plugin-skill-tree
Latest update
Aug 14, 2026
Category
Development & Runtime
GitHub stars
1
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/nfz/dsh-plugin-skill-tree
Plugin: dsh-plugin-skill-tree
Author: nfz

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer4 files
README.mdSource · read only
README language

DeepSeek Harness Profession Skill Trees

A persistent profession and capability-budget plugin for DeepSeek Harness:

Shared catalog → Public tree definitions
Profession → One wallet + Private public build + Private core-tree build

“Public” means every profession may allocate nodes from the same definition. It does not mean allocations are global. Each profession independently funds its public and core nodes from one wallet, and switching profession switches both builds together.

  • Public definitions are shared across professions.
  • Public allocations, core allocations, and point wallets are profession-private.
  • One profession may have multiple core trees with cross-tree prerequisites.
  • Only the active profession contributes its public-plus-core live effects.
  • Runtime changes, profession switches, and persistence roll back on failure.

Points come from human-approved external evidence. Allocation, respec, grants, and profession switching require approval and revision compare-and-set. State uses a file lock, atomic writes, a hash-linked audit ledger, and runtime rollback.

The current release targets @deepseek-ai/dsh@0.1.0-rc.6.

Install

dsh plugin --profile <profile> add ./dsh-plugin-skill-tree-0.7.2.tgz
dsh --profile <profile> --dump-config
dsh --profile <profile>

The default bundle includes a General Work public tree and 14 preset professions, each with two core trees (software-engineer and ai-video-artist have three): general base (software-engineer, researcher), creative (artist, lyricist, composer, screenwriter, novelist), AI creation (ai-video-artist, ai-image-artist), visual media (photographer, film-director), and everyday crafts (chef, teacher, translator). Every profession starts with its tier-1 build fully allocated: the public layer (3 points) plus every tier-1 core node at max level. Advanced nodes declare requiresCareerLevel: 2 and start locked — each wallet keeps 3–4 unspent points reserved for them — until a human-approved skill_tree_advance_career raises the profession's tier. Default nodes add runtime Skills only; they do not gate existing tools.

Control tools

ToolPurposeMutation
skill_tree_statusRead one profession and its public or core layerNo
skill_tree_skillsBrowse and search every skill across all professions by categoryNo
skill_tree_ledgerRead the hash-linked mutation ledger incrementally (since/limit)No
skill_tree_planSimulate one layer against the combined profession budgetNo
skill_tree_allocateRaise one public or core node for one professionApproval required
skill_tree_respecReplace one profession layerApproval required
skill_tree_grant_pointsGrant evidence-backed points to one profession walletApproval required
skill_tree_advance_careerRaise one profession career level, unlocking higher-tier nodesApproval required
skill_tree_switch_professionActivate the target public-plus-core buildApproval required
skill_tree_save_buildSave one profession build into a named slot (max 8)Approval required
skill_tree_load_buildRestore a saved slot as one transactional two-layer respecApproval required
skill_tree_delete_buildRemove one saved slot; live build untouchedApproval required

layer accepts public or core and defaults to core. Every mutation must use the latest global expected_revision.

skill_tree_skills is a read-only catalog-wide index. Omit every filter to list each category with its skill count; pass category to list one group (or "(uncategorized)"), query for a case-insensitive search over skill names and descriptions, and active_only to see just the skills live under the active profession build. A skill may carry an optional category (a lowercase identifier such as prompt-engineering); skills without one are grouped as uncategorized.

The plugin accepts a Chinese display alias through the alias config option (default 技能树). It surfaces as plugin.alias in the skill_tree_status and skill_tree_skills outputs and in the human-facing title of every tool call card.

Web panels

Under the web profile the plugin also registers two conversation views plus their HTTP endpoints through the optional webServer service:

  • Profession panel: every profession's wallet, build summary, and active marker; switching is one click on a non-active card and goes through the same transaction, revision check, and ledger as the model tools. Browsers get an interactive HTML page.
  • Skill tree panel: the complete build of any profession and layer, with node levels, next-level costs, and blockers. Browsers get an interactive HTML page.
  • Skill catalog panel: every skill across all professions grouped by category, with free-text search and an active-only filter. Browsers (Accept: text/html) get an interactive HTML page; API clients get JSON.
EndpointPurpose
GET /skill-tree/status?layer=&profession=&tree=Read the status view, same shape as the skill_tree_status tool
GET /skill-tree/skills?category=&query=&active_only=Read the skill catalog index, same shape as the skill_tree_skills tool
GET /skill-tree/ledger?since=&limit=Incremental hash-linked ledger feed for external aggregators, same shape as the skill_tree_ledger tool
POST /skill-tree/switch-professionSwitch the active profession; requires the x-skill-tree-client custom header, which cross-origin pages cannot forge, so only the same-origin panel can call it

Profiles without a webServer service (CLI/TUI) mount neither the endpoints nor the panels.

Catalog shape

config:
  catalogId: my-agent-professions
  catalogVersion: 1
  initialProfession: software-engineer
  public:
    trees:
      - id: general
        nodes:
          - id: foundation
            costs: [0]
          - id: planning
            costs: [1]
            requires:
              - node: foundation
  professions:
    - id: software-engineer
      initialPoints: 4
      initialPublicAllocations:
        general:
          foundation: 1
          planning: 1
      initialCoreAllocations:
        delivery:
          foundation: 1
      coreTrees:
        - id: delivery
          nodes:
            - id: foundation
              costs: [0]
            - id: implementation
              costs: [1, 2]
              requires:
                - scope: public
                  tree: general
                  node: planning
        - id: reliability
          nodes:
            - id: recovery
              costs: [2]
              requires:
                - tree: delivery
                  node: implementation

Incremental costs from both layers count toward the profession's single wallet. Public nodes cannot depend on core nodes. Core nodes may depend on public nodes or other core trees owned by the same profession.

See README.zh.md for the complete guide and safety boundaries. The package includes a [crawler engineer example](examples/crawler-engineer.patch.yml), a [profession-aware tool-gating example](examples/coding-tree.patch.yml), and the formal model in [DESIGN.zh.md](DESIGN.zh.md).

The catalog now supports career levels. Each profession has an initialCareerLevel (default 1) and maxCareerLevel (default 5); skill_tree_advance_career raises one profession's level through approval. A node may declare requiresCareerLevel — allocating it is blocked until the profession reaches that tier, producing an insufficient-career-level blocker. Points and the live build are unchanged by advancing; it only unlocks allocation permission.

Version 0.7 uses state schema v5 and does not silently consume schema v4 state: it adds per-profession careerLevel (plus the buildSlots from v4). Use a new state file or an explicit migration. skill_tree_grant_points also accepts an optional verification object (kind, reference, optional 64-hex digest) that binds a grant to an immutable evaluation and is recorded in the hash-linked ledger.

Development

npm install
npm test
npm run pack:check

MIT License.