Introduction

In the development of DeepSeek Harness (DSH), the ask_user_question tool is commonly used to initiate interaction with users. If the tool description is not constrained, the model may experience perspective drift when generating options: within the same option, the label may use “I” from the user’s perspective, while the description shifts to “I” from the AI’s perspective, making it difficult for users to tell who is currently performing the action.

The dsh-narrative-voice plugin rewrites the tool description during the prompt-assembly stage, forcing the questions and options in ask_user_question to maintain a consistent narrative perspective, thereby solving this issue.

What Is This

This is a DSH bundle plugin maintained by TellToday. It intervenes when DSH constructs the system prompt, rewriting the questions.description field of the ask_user_question tool and injecting fixed pronoun rules.

The plugin supports two narrative modes and can be switched in real time via the /voice command. It does not depend on other third-party libraries and is licensed under MIT.

Core Features

  1. Perspective Rewriting
    The plugin listens to the system-prompt/assemble event during the SystemPrompt.assemble() stage, finds the ask_user_question tool, and modifies its parameter description. It only processes places where pronouns appear, without forcing changes to content that does not require pronouns.

  2. Dual-mode Support
    Based on the configuration, it supports two narrative schemes:

    • Scheme A (voice: "ai"): Options are narrated by the AI, using “I” internally to refer to the AI and “you” to refer to the user.
    • Scheme B (voice: "user"): Options are narrated by the user, using “I” internally to refer to the user and “you” to refer to the AI. This is the default mode.
  3. Runtime Control
    The /voice command can be used to enable, disable, or switch modes. This command is handled by the host’s commands service and takes effect without restarting the process.

Installation

Before installation, ensure that pnpm and git are available in the PATH.

dsh plugin --profile <profile> add "github:TellToday/dsh-narrative-voice#main"

After installation, the profile’s process must be restarted. For Web profiles, use dsh web to restart.

Typical Usage

Control the plugin behavior through the /voice command. The command list is as follows:

Command Effect
/voice on Enable rewriting (takes effect from the next message)
/voice off Disable rewriting (restore the original tool description)
/voice user Switch to Scheme B (user narration) and enable
/voice ai Switch to Scheme A (AI narration) and enable
/voice Show the current status (on/off + active scheme)

Configuration and Defaults

The plugin’s default configuration is activated after installation and can be overridden via the profile’s patch file.

Config Item Default Meaning
voice user The narrative scheme to use: user or ai
defaultActive true Whether to enable by default

To modify the default configuration, edit $DSH_HOME/profiles/<profile>/cordis.patch.yml and completely replace the config section:

- id: narrative-voice
  config:
    voice: user          # user (方案B: 用户叙述) | ai (方案A: AI叙述)
    defaultActive: true  # false = 默认禁用,需手动 /voice on

The plugin uses a dependency-free Standard Schema implementation for configuration validation, and invalid configurations will cause an error at load time.

Applicable Scenarios and Notes

  • Applicable scenarios: This plugin is suitable only when your application heavily uses the ask_user_question tool and has high requirements for consistency of the interaction perspective.
  • Scope of impact: The plugin only affects the ask_user_question tool and does not interfere with other tools or ordinary replies.
  • Dependencies: The plugin itself has no runtime dependencies, but installation and execution require the host environment to have pnpm and git available.

Conclusion

dsh-narrative-voice is a lightweight plugin that addresses the perspective-drift problem in large language models. By intervening at the prompt assembly level, it ensures consistent pronoun usage during interaction. For more details and source code, refer to: GitHub