Skip to content

System prompt ​

Language

English | 简体中文 | README

Guide: Install · Sources · Resources · Services · Translation · Settings · Workspace · System prompt

What the page shows ​

The System prompt tab lists the AGENTS.md files the host injects into the session's system prompt: one card per file that exists, in the order the host loads them, and the project files sit in the same list as your global ones. Discovery, load order, deduplication and the byte budget all come from the harness package @deepseek-ai/dsh-agent-instructions, so the page and the prompt cannot disagree: a row's status comes from the text the model receives.

A card opens the file for reading: its absolute path, the scope it belongs to, what it contributes to the prompt, its size and its share of the budget, then the file's text. Edit and Delete live in that dialog, so browsing the chain never puts you in an editor by accident. Create asks which candidate to create, because the chain has one candidate per root and the project's are the ones that go into your repository.

The page reads the chain for the session's working directory. The settings page renders outside any session, so there it reads the host process working directory and says so in one line under the header. The page does not render the injected text: the file list and the status tags are what it can keep true to the prompt.

Load order ​

Two user-global roots come first, then every directory from the project root down to the session directory.

  • $DSH_HOME/AGENTS.md, the harness home, which is ~/.dsh unless you set $DSH_HOME.
  • $DSH_AGENTS_HOME/AGENTS.md, the shared agents root, which is ~/.agents unless you set $DSH_AGENTS_HOME.
  • For each project directory, in order: AGENTS.md, CLAUDE.md, AGENTS.local.md, CLAUDE.local.md.
  • The project root is the first directory at or above the session directory that holds a .git entry, a directory or the file a linked worktree writes.

Which file names load ​

Only AGENTS.md loads in the two user-global roots. Neither CLAUDE.md nor a local overlay is a candidate there, so the page never offers to create one.

All four names load inside a project directory. A file that does not exist is not listed, and Create offers it by path, with the scope it would belong to.

Repeated content ​

Inside one candidate group, a file whose trimmed content matches an earlier one renders once. The two user-global roots form one group, so an AGENTS.md with the same text in both renders once and the harness home wins. Each project directory is its own group, so AGENTS.local.md that repeats its sibling AGENTS.md is reported as repeated content beside the file that carries it.

The byte budget ​

The page reports two caps: 65536 bytes for the whole injected baseline and 1048576 bytes for one file. Both are the values the harness ships and reads a chain under. They are display-only, not settings, because the harness does not export its resolved values. A profile that raises its own maxBytes or maxSourceBytes makes the page report the shipped numbers, and nothing here can detect that. Stated rather than configurable is the deliberate trade: an independent plugin setting would describe a budget the model never got.

Over the budget, broader files are omitted first and only the most specific file is truncated. A file over the per-file cap never loads at all, and the page names that reason instead of the omission list. A budget of 0 or less switches instruction loading off entirely.

Status of one row ​

StatusMeaning
LoadedThe file's text is in the injected prompt.
TruncatedThe file is the most specific one, cut to fit the remaining budget.
Over budgetA broader file the budget omitted.
Over the file limitLarger than the 1048576 byte per-file cap, so it never loads.
Repeated contentThe same trimmed text as an earlier file in its group, shown once.
Not injectedExisting but absent from the prompt for no attributable reason.
Not createdThe file does not exist. Creating it is the offered action.

Creating, editing and deleting ​

Every action writes one file the chain can load. A request names a scope, a project-relative directory and a candidate file name, never a path, so the page cannot reach a file this session does not inject.

Writes are atomic, they create the parent directory only for a location the chain already lists, and the editor refuses text over the 1048576 byte per-file cap because such a file would never load. The editor counts bytes against both caps as you type.

One file can carry two names on the chain, for example CLAUDE.md symlinked to AGENTS.md. Deleting either name reports the other one, and whether the deleted entry was a link, so you know what the remaining name still resolves to.

When the page is unavailable ​

The harness package is optional. A profile that does not provide @deepseek-ai/dsh-agent-instructions gets a notice naming it, not a failed page, and nothing else in the workspace is affected.

dsh-agent-plugins-market — the standard way to run Claude Code, Codex, Cursor and Kimi plugin marketplaces inside DeepSeek Harness.