# Installing Logic Probe for DeepSeek Harness (dsh)
DeepSeek Harness (`dsh`) discovers skills via the Agent Skills open standard (agentskills.io) — the same `skill-name/SKILL.md` + frontmatter layout this plugin already uses. The logicprobe skill is discovered as-is; no content changes required.
## Install
### Option A — user-level, cross-harness (recommended)
Copy the skills into `~/.agents/skills/` — DSH discovery root rank 500, and a shared directory that other Agent-Skills-standard harnesses also read:
```bash
git clone https://github.com/AmethystLuna/logicprobe.git
mkdir -p ~/.agents/skills
cp -r logicprobe/skills/* ~/.agents/skills/
```
### Option B — project-level
Copy the skills into your project's `.dsh/skills/` (DSH discovery root rank 100 — highest priority, scoped to that project only):
```bash
mkdir -p .dsh/skills
cp -r logicprobe/skills/* .dsh/skills/
```
### Option C — zero-copy (advanced)
If your `dsh` configuration supports `customSkillDirs` (rank 300), point it at this repository's `skills/` directory instead of copying. See the dsh configuration docs for the exact key placement.
### Option D — native plugin (session-start gate injection)
Install the bundle from the repository root (the root `package.json` declares `dsh.bundle`):
```bash
npx -p @deepseek-ai/dsh dsh plugin --profile web add "github:AmethystLuna/logicprobe"
```
This installs under the scoped package name `@amethystluna/logicprobe`. If you manage the profile's `package.json` manually, use `@amethystluna/logicprobe` for both the dependency key and the `dsh.profile.bundles` entry.
Restart the target profile. This mounts a native cordis plugin that folds the gate text (claim-verification doctrine / 1% Rule / Red Flags / proactive suggestion) into the first model step — the dsh-native counterpart of the Claude Code `SessionStart` hook.
The bundle also registers the `logicprobe_verify` tool (via `ctx.tools`) and a `logicprobe:mode` dynamic context (via `ctx.systemPrompt`). The context resolves `interaction` per session: `follow-approval` becomes `auto` when the last `approval/policy` event is `never`.
To change the gate text, interaction mode, or disable injection, override the row by id in your profile's `cordis.patch.yml` (the row's `config` is replaced wholesale, not deep-merged):
```yaml
- insert:
- id: logicprobe
name: '@amethystluna/logicprobe'
config:
enabled: true
gateContent: |
Your own gate text...
```
## Verify
- `dsh --profile --dump-config` shows the `logicprobe` row with `enabled: true` (create a scratch profile with `dsh plugin --profile add ...` first).
- Start a session and check the gate text appears in the model context of the first step.
- `cordis_inspect_list` shows the `logicprobe` provider; `cordis_inspect_query` with method `status` returns `enabled: true`, `interaction: follow-approval`, `toolRegistered: true`, and `engineSchemaVersion: 1`.
- The model-visible `logicprobe_verify` tool accepts Model schema v1 (see `skills/logicprobe/references/dsh-model-schema.md`) and returns the S1-S7 + A1-A7 report.
- Ask in a `dsh` session: "你有设计文档 / 计划 claim 核查相关的 skill 吗?"
## Notes
- Skill frontmatter already matches the DSH expectations: `name` is kebab-case and matches the directory name; `description` is present. The policy keys `disable-model-invocation` / `user-invocable` are omitted, which defaults to model- AND user-invocable — the intended behavior.
- DSH is in v0.1 developer preview; breaking changes are expected. Pin your `dsh` version.
- DSH has no plugin marketplace for this repo — manual install only.
- The first-model-step gate injection is provided natively by the root bundle (Option D). This plugin is the verification half of the embedded-workbench ecosystem: the embedded-workbench bundle's Plan Verification Gate routes plan approval through this skill.
- No custom agents — this plugin is skill-only; nothing else to port.
- **Permission presets**: under `workspace-write` evidence stays inside the workspace and model confirmation defaults to ask. Under `danger-full-access` + `approval=never`, the bundle resolves interaction to auto (no `ask_user_question` for model confirmation) and never requests sandbox escalation.
- **Gate injection semantics**: the gate is appended to the first model step that runs via `agent/pre-step`, once per session, guarded by the session's durable history. This is resilient to blank-session preset switches that clear the agent inbox before the first step; anchored/bootstrap presets may strip first-step Gate messages and the plugin re-injects after promotion. The gate text is the dsh-native adaptation of `hooks/session-start-content.md` — behavior rules synced, presentation adapted to the dsh skill catalog (the trigger list lives in the skill description); review it per deployment and override via `gateContent`.
## Tool Mapping
When the skill references Claude Code tools:
| Skill text | DeepSeek Harness equivalent |
|---|---|
| `Skill("logicprobe")` | Skills are model-invocable by default; the model loads them through the skills catalog (`ctx.skills`) |
| `Read` / `Write` / `Edit` / `Bash` | Native dsh tools (`ctx.tools` registry) |
| `ExitPlanMode` / plan-mode gates | dsh-native: `@deepseek-ai/dsh-plan-mode` (`exit_plan_mode` tool); the embedded-workbench bundle's gate text routes plan verification to this skill |
## Getting Help
- Issues: [https://github.com/AmethystLuna/logicprobe/issues](https://github.com/AmethystLuna/logicprobe/issues)
- Docs: [https://github.com/AmethystLuna/logicprobe](https://github.com/AmethystLuna/logicprobe)