# @wm-coders/dsh-custom-first-control-prompt English | [中文](README.zh.md) Deployment-configured prompt prefix. Ordered system-prompt sections render ahead of the deployment persona, and configured reference user/assistant exchanges are injected into **every ordinary conversation request** — as real alternating messages prepended on the request path (`llm/stream` interception, zero session-log writes). Static content renders byte-identically on every request, preserving prefix-cache reuse. ## Installation ```bash # From GitHub (recommended — built artifacts committed, no build approval needed) dsh plugin --profile web add github:WM-CODER/custom-first-control-prompt # From npm dsh plugin --profile web add @wm-coders/dsh-custom-first-control-prompt # From local directory (development) dsh plugin --profile web add ./path/to/custom-first-control-prompt ``` After installation, restart the web app (`dsh --profile web` or run `restart-web.ps1` / `restart-web.sh`). To uninstall: ```bash dsh plugin --profile web remove @wm-coders/dsh-custom-first-control-prompt ``` > Install / deployment / debugging obstacles and test methods: [DEBUG-NOTES.zh.md](DEBUG-NOTES.zh.md) (in Chinese; web fail-loud root causes, duplicate-id inserts, API verification chains — all paths scrubbed). One-command install: [INSTALL.md](INSTALL.md). Full cross-machine walkthrough: [INSTALL-FULL.zh.md](INSTALL-FULL.zh.md) (Chinese). ## Configuration ```yaml - id: custom-first-control-prompt name: '@wm-coders/dsh-custom-first-control-prompt' config: sections: - name: house-rules order: -50 text: | …stable system text… history: - user: … assistant: … includeSubagents: false ``` | Key | Default | Meaning | |---|---|---| | `sections` | — | Ordered system-prompt fragments; absent or empty registers nothing. | | `sections[].name` | required | Entry name; the registry sees `custom-first-control-prompt:`. | | `sections[].order` | required | Render position among all sections. Factory convention: harness identity −100, persona 0, tool guidance 100–199; values below 0 prepend ahead of the persona. | | `sections[].enabled` | `true` | `false` keeps the entry in configuration without registering it. | | `sections[].text` | required | Static section text; keep it free of volatile values — any change breaks prefix reuse from the first changed token. | | `history` | — | Ordered `user`/`assistant` reference exchanges injected ahead of every ordinary conversation request; both texts must be non-empty and free of reserved tags (case-insensitive: ``, ``, ``, `