In the usage scenarios of DeepSeek Harness (DSH), agents often need to guess the startup command for local services, which can easily lead to incorrect commands. Meanwhile, when running multiple projects simultaneously, port conflicts are a common issue, and manually managing processes and logs also increases operational costs. dsh-launch-pad aims to solve these problems by providing a unified local service console.

This is a local service console. It manages services through a global registry, prevents port conflicts, and provides a UI panel and Agent tools to manage the service lifecycle.

Core Features

Startup command normalization detection
The plugin probes startup commands by priority: .dsh-services.yml (authoritative) > package.json (dev/start/serve) > docker-compose.yml > Makefile > justfile > Python project files, etc. This reduces the frequency of manually writing startup commands.

Global registry and port arbitration
All services are registered globally in ~/.dsh/service-registry.json. Before startup, port occupancy is checked via lsof. In portMode=auto mode, when conflicts occur, it automatically allocates the nearest available port and injects parameters (such as --port N or PORT=N).

DSH interface operations
A “Services” button appears in the sidebar of the DSH web interface. Clicking it opens a floating panel where you can view service status and actual ports, and supports one-click startup, stop, and restart. Logs are persisted in the ~/.dsh/services/logs/ directory and can be expanded for viewing.

Dual-channel agent tools
The plugin exposes 7 agent tools, including service_list, detect, register, start, stop, restart, and status. This means agents no longer need to guess startup commands, and can instead invoke these tools to precisely manage services.

Automatic tracking and registration
The panel automatically follows the session currently selected in DSH. When switching to a new unregistered project, the Host automatically detects and registers candidate services (with 60s throttled debouncing), and the panel displays “Auto-registered”.

Installation and Activation

Add the repository using the official plugin installation command:

dsh plugin --profile web add github:realpkuasule/dsh-launch-pad

After installation, restart DSH and refresh the page to load the plugin.

Configuration and Usage

Create a .dsh-services.yml file in the project root directory to define services:

services:
  web:
    command: npm run dev
    cwd: .
    port: 5173
    portMode: auto
    template: npm

In an Agent conversation, you can use tools to check service status:

# 使用 agent 工具 service_list 查看服务状态

Dependencies and Limitations

Dependency environment
The plugin depends on the following system tools: python3 (for wrapping processes with setsid), lsof, pgrep. Windows systems are not yet supported.

Known behavior
* No duplicate launches: The same service instance cannot be started repeatedly.
* Niche frameworks: For unrecognized port parameters, port injection falls back to the PORT environment variable.
* Docker ports: Docker ports are not automatically rewritten; conflicts result in errors.
* Monorepo: Projects without standard dev/start/serve scripts (such as pnpm --filter apps/web dev) may require manually writing .dsh-services.yml.

Summary

dsh-launch-pad solves the service management confusion in local development environments through command normalization detection and global port arbitration. By combining DSH’s UI interaction and Agent tools, it provides a one-stop solution from configuration to startup and monitoring. For more details, see the GitHub repository.