Skill Studio for DeepSeek Harness
A Codex-compatible skill system for DSH, with a first-class page in the left
sidebar. It reads and writes plain SKILL.md folders, so the same skills work
in Codex, DSH, and the shared .agents directory.
What it does
- One Skill page in the sidebar — browse every Codex, DSH, and shared skill, search it, read its instructions, and see which copy is effective.
- Create, edit, duplicate, delete, and restore — writes the Codex
SKILL.mdformat with YAML frontmatter. Deletions go to a recoverable.trashfolder inside the same scope. - Enable or disable per surface —
disable-model-invocationcontrols the model catalog and theskilltool;user-invocablecontrols direct user invocation. - Codex scopes —
~/.codex/skillsand<project>/.codex/skillsare bridged into DSH's skill registry, so existing Codex skills appear in the agent catalog without copying them. - Invoke in conversation — type
$skill-namein a chat to inject the full<skill_content>block into that turn, exactly like Codex. The existing/skill-nameform also keeps working. - Progressive disclosure — the model receives only names and descriptions;
full instructions load on demand through the
skilltool or$name. - Codex presentation metadata —
agents/openai.yamlinterfaceandpolicy.allow_implicit_invocation, plus legacyconfig.toml[interface]fields such asdisplayName,shortDescription,brandColor, anddefaultPrompt, are shown when present.
Scopes
| Scope | Location | Writable | Notes |
|---|---|---|---|
| Codex user | ~/.codex/skills |
yes | Bridged into DSH by this plugin |
| Codex project | <project>/.codex/skills |
yes | Nearest .git ancestor, or the workspace directory |
| DSH user | ~/.dsh/skills |
yes | Native DSH filesystem provider |
| DSH project | <project>/.dsh/skills |
yes | Native DSH filesystem provider |
| Shared Agent | ~/.agents/skills, <project>/.agents/skills |
yes | Visible and editable when present |
| Codex built-in | ~/.codex/skills/.system |
no | Read-only; duplicate into a writable scope |
| Bundled/runtime | DSH packages | no | Read-only; duplicate when possible |
DSH_CODEX_HOME (or CODEX_HOME) changes the Codex home; DSH_HOME and
DSH_AGENTS_HOME change the DSH and shared roots. The Codex home is scanned
under <home>/skills.
A project copy outranks a user copy; a DSH copy outranks a Codex copy of the same name. The page marks the losing copy Shadowed and shows both, so a stale duplicate is never invisible.
Skill format
---
name: release-checklist
description: Use when preparing and verifying a production release.
whenToUse: Before tagging a release.
---
# Release checklist
## Workflow
1. Run the project's own checks.
2. Inspect the final diff.
3. Report the result and remaining risks.
A skill is a directory bundle <name>/SKILL.md (recommended) or a flat
<name>.md file directly under a scope root. The only required frontmatter
fields are name (kebab-case) and description. Optional companion files can
live beside SKILL.md (references/, scripts/, assets/, agents/openai.yaml,
config.toml, icon.svg).
disable-model-invocation: true hides the skill from the model catalog and the
skill tool. user-invocable: false removes it from the $name / /name
gesture. Both default to allowed.
Using a skill in chat
$release-checklist verify the 2.4 release and list anything blocking it
The skill's instructions enter the current step as a <skill_content> block,
and the catalog tells the model to follow it rather than load it again. Typing
/release-checklist uses DSH's existing user-skill gesture and has the same
effect.
The model can also load any model-invocable skill with the existing skill
tool, which returns the same canonical <skill_content> shape.
Installation
Install directly from the public GitHub repository:
dsh plugin --profile <profile> add github:PopCapEA/dsh-skill-studio
Or install the release tarball:
dsh plugin --profile <profile> add "https://github.com/PopCapEA/dsh-skill-studio/releases/download/v1.0.0/dsh-skill-studio-codex-1.0.0.tgz"
Or, after the npm release, use the package name:
dsh plugin --profile <profile> add dsh-skill-studio-codex
Refresh the page after installation; the Skills icon appears in the left panel list.
Design notes
- The host half is plain Node ESM with only
node:imports. It registers acodex-studioprovider onctx.skills, owns the authenticated/api/skill-studio-codex.*routes throughctx.connection.fetch, and installs oneagent/pre-steplistener for$name. - The client half is a plain-JavaScript module loaded by
window.__ModuleLoader__; it uses only React, theme tokens, and the public slot/locale services. - File writes are atomic (temp file plus rename), names are validated, and every mutating route is authenticated by the existing browser session.
- Deleting a skill renames its bundle into
<scope>/.trash/with a sidecar record, so Trash → Restore works without a database. - The Codex provider invalidates its catalog on a debounced filesystem watch, so edits made in Codex, VS Code, or a shell reach the next model step.
- This published edition uses its own Loader row, sidebar panel id, API prefix,
locale namespace, and provider name. It can coexist with the local
@local/dsh-skill-studiobuild instead of replacing it.
Limits
- Editing always updates
SKILL.mdfrontmatter; comments on managed keys are not preserved when the key is rewritten. Unknown frontmatter keys andmetadata:blocks are preserved. - Renaming a skill is intentionally not done in place: the name in
SKILL.mdis its identity. Duplicate and delete the old copy instead. - Symlinked skill bundles are visible but read-only.
- The page manages the default workspace for project scopes. Per-session workspaces with a different cwd are still discovered by the model, but the management page uses the process workspace.
No comments yet. Be the first to write one.