Laya typed decisions (`noul` yes/no, `choice`, `score`) as a first-class Cordis service (`ctx.laya`) plus the model-visible `laya_ask` and `laya_plan` tools. The plugin itself installs and downloads nothing: it is a client of a `laya-mcp serve` sidecar you start yourself, and it reports that the sidecar is not running instead of failing obscurely at the first tool call.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-laya
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:PerryLink/dsh-laya
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Laya typed decisions — noul (yes/no),
choice, score — as a first-class Cordis service and model-visible tools for
DeepSeek Harness.
English · 简体中文 · Español · Português · हिन्दी
Status: 0.1.4, work in progress. The plugin mounts and activates in the Harness, and the sidecar contract it speaks is verified end-to-end on an RTX 5060 (load 9.8 s, 411 ms for three questions on CUDA). It has not yet been exercised through a live model turn in CI.
Install
Two pieces, because Laya is PyTorch and therefore cannot live inside a Node plugin.
1. The sidecar — this is what actually holds the model:
pip install "laya-mcp[mcp]"
laya-mcp serve # loads once, listens on 127.0.0.1:8787
2. This plugin:
dsh plugin --profile <profile> add dsh-laya
Then confirm the row is active, not failed, and read the startup line — it
says in as many words whether state stays on this machine.
Why the sidecar is separate
A plugin that shelled out to pip install and then downloaded a 650 MB
checkpoint behind your back would be hostile, however convenient. So this plugin
installs nothing and downloads nothing. It is a client of a process you
start, and when that process is not running it says so rather than failing
obscurely at the first tool call.
The split also buys the warm model: Laya's cold build costs seconds to tens of
seconds, and its default lazy router rebuilds a checkpoint on every language
switch. laya-mcp serve pays that once.
What it contributes
One service, ctx.laya — so Host code and other plugins can ask for a
judgment directly, without a model round-trip:
const laya = ctx.get('laya')
const result = await laya.ask({ state, questions })
It exposes ask, plan, health, capabilities, sidecarUrl, and loopback
— the last being whether state stays on this machine, as a fact rather than a
policy. plan is the preflight: the same arithmetic /ask reports, with no
forward pass.
Two tools — laya_ask for a batch of typed questions, and laya_plan to
check the token budget before spending a forward pass.
What it is honest about
Laya truncates silently and its confidence number is widely misread, so the tool description and the response both say so:
- An oversized state is cut from the END, and the answer is then about the
surviving prefix. The response reports it under
truncated, andlaya_plantells you before you ask. Passstrict: trueto refuse instead — verified against the live sidecar, which returns HTTP 400 withstate_truncatedand a hint namingmax_len. confidenceis not accuracy. It is a concentration statistic: low whenever probability is spread across options even when the top option is right, and high on a confident wrong answer. Anoulalso carries ano/uncertain/yesband, because a calibrated probability is not a decision — a real measured example from this stack returned 0.5457 with the banduncertain.- A silent CPU demotion is reported. If Laya falls back to CPU after a device
error it never returns to the accelerator, and nothing in its own output admits
it. The health surface carries
degraded, and the tool card appendsCPU (degraded).
Configuration
- insert:
- id: laya
name: 'dsh-laya'
config:
sidecarUrl: 'http://127.0.0.1:8787'
requestTimeoutMs: 120000
lifecycle: never # 'attach' to log a reachability check,
# 'spawn' to start the sidecar yourself
spawnCommand: null # required by 'spawn', e.g. ['laya-mcp', 'serve']
spawnTimeoutMs: 120000
logLevel: info
lifecycle decides what happens when nothing is answering at sidecarUrl:
never |
Start nothing; assume something else manages the sidecar. The default. |
attach |
Also check /health once at load and log what it found — useful when the harness and the sidecar race at startup. |
spawn |
Also run spawnCommand if nothing answers, then wait for it to come up. |
spawn exists because the alternative was worse. The plugin still installs
nothing and downloads nothing — a tool that ran pip install and then fetched a
650 MB checkpoint behind your back would be hostile, and that has not changed.
But launching a sidecar you already installed is a different act, and without it
every session began by starting a Python process in a terminal by hand, and began
failing again every time that process went away.
Two rules make it safe to leave on:
- A sidecar that is already answering is attached to and never touched, so two harness sessions cannot put two models on one port.
- A sidecar this plugin started is stopped when the plugin unmounts; one it did not start is left exactly as it was found.
There is still no option that installs anything or fetches a model, and
spawnCommand has no default: this plugin will not guess at an interpreter.
Pointing sidecarUrl somewhere that is not loopback is allowed and warns once at
startup, naming the destination: that is the moment the privacy story changes,
and it should not be discoverable only by reading a config file.
Upstream limits worth knowing before you rely on this
Repeated from upstream's own measurements, because an integration that implies
otherwise is lying to you. The base checkpoints are near chance zero-shot on
typed decisions (0.362 for English against a 0.461 majority-class baseline);
score is the weakest primitive (35% vs 70% for Jev in independent measurement);
raw calibration error is 0.466 before temperature fitting; and accuracy falls off
above roughly 20 options.
Calibration makes a probability honest. It cannot make a model right.
Applicable DSH version: verified against dsh-v0.1.7-alpha.1 (the host release this build targets); requires >=0.1.7-alpha.1 <0.3.0.
PerryLink DSH Plugin Family
This project is one of the 45 DeepSeek Harness plugins maintained by PerryLink. If this one helps you, the others likely will too:
| Plugin | One-liner |
|---|---|
| dsh-auto-review | Second-model auto-review on the approval chain, fail-closed by default |
| dsh-autotier | Automatic strong/cheap model-tier routing with deterministic risk guards and a /tier command |
| dsh-background-agents | Durable background child agents with a Web UI sidebar, messaging and interrupt |
| dsh-budget | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
| dsh-catalog | DSH Desktop Market standard catalog source for the PerryLink family |
| dsh-cert-mcp | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence |
| dsh-checkpoint-rewind | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
| dsh-claude-move | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
| dsh-click | Cross-platform native desktop control for DeepSeek Harness — Windows first. |
| dsh-composer-history | Terminal-style input history for the web composer: arrows, Ctrl+R search |
| dsh-data-quality | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) |
| dsh-defend | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
| dsh-doublecheck | Engineering-discipline guard: requirements grill, test gates, adversary review |
| dsh-draw | Unified static-image generation routing for DeepSeek Harness. |
| dsh-fast | Read-only performance diagnostics for DeepSeek Harness. |
| dsh-fund-research | Deterministic research reports for Chinese public mutual funds |
| dsh-github | GitHub PR/issues integration for DSH, every write gated by approval |
| dsh-industry-research | Industry research orchestration that seals its deliverables through this plugin's ctx.researchReport.assemble |
| dsh-laya | Laya typed decisions (noul/choice/score) as a first-class Cordis service and model-visible tools |
| dsh-library | Local document knowledge base for DeepSeek Harness. |
| dsh-local-ai | Local-model (Ollama) integration for DeepSeek Harness. |
| dsh-lsp-actions | LSP diagnostics, formatting, completion, code actions and rename over language servers |
| dsh-mask | PII masking middleware: anonymize at the model boundary, restore at the display layer |
| dsh-mcp-panel | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
| dsh-memento | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
| dsh-observe | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. |
| dsh-output-styles | Claude Code outputStyles-equivalent runtime style switching |
| dsh-permission-rules | Claude Code-style declarative allow/deny/ask permission rules with audit |
| dsh-plugin-certification | Community certification registry with repro-checkable grades and badges |
| dsh-plugin-doctor | Zero-dependency static + sandbox smoke detector for DSH plugins |
| dsh-plugin-guide | Plugin-development knowledge base as an on-demand agent skill |
| dsh-plugin-kit | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins |
| dsh-plugin-upgrade | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card |
| dsh-plugin-upgrade-015 | Merged 0.1.3-alpha.1 → 0.1.5-rc.1 upgrade corridor card plus a zero-dependency seam scanner |
| dsh-reach | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console |
| dsh-research-report | Verifiable research-report engine: content-addressed evidence ledger and sealed versions |
| dsh-score | Multi-dimensional quality scoring for DeepSeek Harness plugins. |
| dsh-session-pin | Pin sessions in the Web sidebar with durable ordering |
| dsh-session-sync | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. |
| dsh-skill-pack-security | Security-audit skill pack: secret scan, dependency and supply-chain review |
| dsh-talk | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. |
| dsh-team-rooms | Cross-session team rooms: shared message bus, task board and timeline |
| dsh-test-drive | Isolated install-and-smoke test drives for DeepSeek Harness plugins. |
| dsh-ticktick | TickTick/Dida365 task bridge: session-header panel + 11 tools |
| dsh-translate | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. |
Licence
Apache-2.0. Laya is Apache-2.0 by Convai Innovations. This is an independent integration and is not affiliated with or endorsed by that project.
Links
More in this category
DayuanJiang/next-ai-draw-io#dsh-plugin★ 36718
Draws draw.io diagrams in DeepSeek Harness through the next-ai-drawio MCP server: the link in the reply opens a live preview in the right sidebar, you can edit the diagram by hand, and each AI change is a version you can restore. Node.js 18+; npx downloads the MCP server on first use.
Tencent/WeKnora#dsh-weknora★ 36302
Four read-only tools over a WeKnora knowledge base: list knowledge bases, hybrid passage search, reassemble one document's chunks in order, and WeKnora's own cited RAG or ReAct-agent answer with a resumable session id.
superdesigndev/treg★ 7042
Tool catalog for agents: search ~2,600 external endpoints (SEO and SERP, backlinks, social, people and company enrichment, ad libraries, scraping) by the task you want done, read each one's parameters and per-call price, then call it with the credential injected server-side. Ships the skill plus an MCP row that stays disabled until TREG_TOKEN is set.
T-Auto/dsh-ops★ 5074
Provides bash, PowerShell 7, and high-performance Rust tools for DSH on Windows to reduce token usage.
sixtysevenlf/dsh-blender-plugin★ 1575
Lets a DSH agent drive a local Blender over a direct TCP channel with 15 tools: viewport frames, custom-angle renders, Python execution, headless and job offload, transaction rollback, and a planning layer of 228 ops across 34 families.
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1155
Tencent CloudBase backend for DeepSeek Harness — scaffold and deploy full-stack apps from chat, render query results as table cards with paging, sorting and CSV export, preview a deployment on its domain, and call the CloudBase MCP toolset (`mcp__cloudbase__*`) with device-code login.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.