Skip to content
dsh.fish
Bundle

dsh-preset-gpt-6-astra

DeepSeek Harness agent preset + bundle plugin: the GPT-6 / Codex "Astra" persona on dsh's standard toolset, with a preset-local reference skill and a slim spawned-subagent persona

Source
Zioove
License
MIT
Updated
Updated 24 days ago

Readme

# GPT-6 Astra · DeepSeek Harness Agent Preset

**中文** | [English](README.en.md)

把 **GPT-6 / Codex「Astra」提示词**作为人格层,接到 **DeepSeek Harness (dsh)** 的 agent
预设上。装好后在 dsh 里选「GPT-6 Astra」即可得到一个带完整编码工具链、但身份 / 语气 /
判断准则 / 自主性按 Astra 原文运行的 agent。

> 一句话:**工具用 dsh standard 的,人格用 Astra 的。**

**已发布:<https://github.com/Zioove/gpt-6-astra-dsh-preset>** —— 方式 A 一条命令即可安装。

---

## 特性

- **人格按块内联,不是整份塞进去**:源文件是一本给多个 Codex 界面用的提示词**库**,
  本预设只取其中两段连续的、真正属于编码 agent 的指令(见「人格是怎么选出来的」)。
- **工具面保持完整**:预设由 dsh 官方 `standard` 预设整目录派生,文件读写 / 检索 /
  pwsh / 后台任务 / Skills / 计划 / 目标 / 子代理 / 工作流 / web 工具全部保留。
- **一段运行环境适配**:`prompt/harness-bridge.md` 把原文里的工具名(`functions.exec`、
  `apply_patch`、`update_plan`、`request_user_input`、`skills.list` …)映射到本 harness
  真实存在的工具,并声明哪些 Codex 产品面(Apps/Connectors、Plugins、`request_permissions`、
  `end_conversation` …)在这里不存在。
- **子代理不再背人格**:`tool-subagent`(provider `spawn`)行带一段 444 字符的子代理人格,
  新 spawn 的子代理不会复制整份人格(fork 行刻意保持继承父人格——它的意义就是继承历史并复用
  KV cache)。
- **原文随预设自带**:预设内 `skills/gpt-6-astra-reference/`(由 `customSkillDirs` +
  `baseUrl` 挂载)把**被排除的那 ~4,600 行**、选块地图和重建方式放进一个按需加载的 skill,
  常驻 token 成本为 0。
- **模型名来自变量**:人格通过 `{{model}}` 引用当前模型名,不硬写(上游范式:一个事实只有
  一个归属方)。
- **可重建**:`scripts/build.mjs` 从 `base/` + `prompt/` 重新生成 composition。
- **已挂载校验**:composition 通过 `agentPresets.standingKeyFor()` 真实挂载,18 个 row
  全部激活、无 process-global 服务泄漏。

---

## 目录结构

```
.
├── package.json              # 同时是一个 dsh bundle 插件(dsh.bundle.patch)
├── cordis.patch.yml          # bundle patch:insert 一行 host 插件
├── lib/
│   └── index.js              # host 插件:把 preset/(含 skills/)同步进 $DSH_HOME/.agent-presets/
├── preset/
│   ├── agent.cordis.yml      # 可直接安装的 composition(含内联人格,约 60 KB)
│   ├── preset.yml            # 显示名与描述
│   └── skills/
│       └── gpt-6-astra-reference/
│           ├── SKILL.md      # 预设自带的 skill:选块地图、被排除的内容、如何改选块
│           └── reference/GPT-6-Astra_Prompts.md   # 源文档逐字副本(339 KB)
├── base/
│   └── standard.agent.cordis.yml   # 派生的上游基线(dsh 0.1.5-rc.3 的 standard 预设)
├── prompt/
│   ├── GPT-6-Astra_Prompts.md      # 源文档(逐字,未改动)
│   └── harness-bridge.md           # 追加的运行环境适配段
├── scripts/
│   ├── build.mjs             # 选块 + 打补丁 → preset/agent.cordis.yml
│   ├── check.mjs             # 生成物自检(row 完整、persona schema、内置补丁、skill 文件)
│   ├── check-plugin.mjs      # bundle 自检(DSH_HOME、files + skills/、幂等、还原被改文件)
│   ├── ci-check.sh           # 本地 CI:构建可复现 + 变量守卫 + 两个自检
│   ├── install.ps1           # Windows 安装(方式 B)
│   └── install.sh            # macOS / Linux 安装(方式 B)
├── docs/
│   └── notes.md              # 原理、选块依据、schema 迁移坑、升级维护
├── NOTICE.md                 # 提示词文本的来源与归属
└── LICENSE                   # MIT(仅覆盖脚本与配置)
```

---

## 安装

预设按 id 决定目录名,dsh 只会从 `${DSH_HOME:-~/.dsh}/.agent-presets/<id>/` 读取本地预设。

### 方式 A:通过 dsh 安装(推荐,一条命令,自带更新)

本仓库同时是一个 **dsh bundle 插件**(`package.json` 里声明 `dsh.bundle.patch`,
`cordis.patch.yml` 里 insert 一行 host 插件)。装上之后它会在每次启动时把 `preset/` 的
两个文件**和整个 `skills/` 树**同步进预设目录:

```bash
dsh plugin --profile web add github:Zioove/gpt-6-astra-dsh-preset
# 然后重启 dsh web(bundle 层在下次启动时加载)
```

也可以直接从本地目录装:`dsh plugin --profile web add ./gpt-6-astra-dsh-preset`

- 升级:`dsh plugin --profile web update dsh-preset-gpt-6-astra`
- 卸载:`dsh plugin --profile web remove dsh-preset-gpt-6-astra`
  (已落盘的预设目录会保留,需要时自己删 `<DSH_HOME>/.agent-presets/gpt-6-astra/`)
- 该插件**零依赖**(只用 node 内置模块)、**幂等**(逐文件比字节)、**不会因为失败而拖垮启动**
  (出错只打日志)。它以仓库为准,会覆盖同名的本地改动(含 `skills/`),但**从不删除**文件。
- 若 pnpm 提示需要 `allowBuilds`,那只会出现在带 `prepare`/`postinstall` 的包上,
  本包没有安装脚本,正常情况不需要授权。

### 方式 B:克隆后运行安装脚本

```powershell
pwsh -File scripts/install.ps1          # Windows(-Force 覆盖)
```

```bash
bash scripts/install.sh                 # macOS / Linux(FORCE=1 覆盖)
```

### 方式 C:手动复制

把 `preset/` 整个目录复制到 `%DSH_HOME%\.agent-presets\gpt-6-astra\`
(或 `~/.dsh/.agent-presets/gpt-6-astra/`):

```
.agent-presets/gpt-6-astra/agent.cordis.yml
.agent-presets/gpt-6-astra/preset.yml
.agent-presets/gpt-6-astra/skills/…          # 可选:参考 skill
```

### 零拷贝(进阶)

`dsh-agent-presets` 的 row 支持 `roots` 配置(扫描顺序里靠前的 root 优先),所以也可以把
克隆下来的仓库直接挂成一个预设 root——把 `preset/` 重排成
`presets/gpt-6-astra/agent.cordis.yml`,再在 profile 的 `cordis.patch.yml` 或宿主配置里给
`agent-presets` row 加:

```yaml
- id: agent-presets
  config:
    roots:
      - path: ~/src/gpt-6-astra-dsh-preset/presets
        trust: user
```

`path` 支持 `~`,相对路径按进程 cwd 解析,所以请用绝对路径或 `~`。

---

## 验证与重建

```bash
node scripts/build.mjs        # 选块 + 打补丁,重建 preset/agent.cordis.yml
node scripts/check.mjs        # 自检:row 完整、persona schema、内置补丁、skill 文件
node scripts/check-plugin.mjs # bundle 自检:DSH_HOME 解析、files + skills/、幂等
bash scripts/ci-check.sh      # 以上 + 构建可复现校验 + 提示词变量守卫(本地 CI)
```

`preset/agent.cordis.yml` 是**生成物**:改选块、改适配段或同步 `base/` 之后必须重跑
`build.mjs` 并提交结果,否则 CI 会在 `git diff --exit-code` 上失败。

---

## 使用

1. 重开或刷新 dsh Web GUI,在会话的预设选择器里选 **GPT-6 Astra**。
2. 想让它成为新会话的默认预设,在 `settings.yaml` 里写:

   ```yaml
   agent-presets:
     default: gpt-6-astra
   ```

   (该值每次解析时读取,改完不需要重启 dsh。)

---

## 人格是怎么选出来的(重要)

源文档 `prompt/GPT-6-Astra_Prompts.md` 的标题就是 **“Collected prompts and templates”**:
它是给**多个 Codex 界面**用的提示词**库**(5,051 行),不是一份系统提示词。本预设只内联
两段**连续**的、真正属于编码 agent 的指令:

| 块 | 源文档行 | 内容 |
|---|---|---|
| `## Base model instruction template` → `# Apps (Connectors)` 之前 | 5–157 | 模型层:身份、权限姿态、自主性与持久性、Personality 与写作风格、与用户沟通、把活干完的规则、使用 skills |
| `## Engine default base instruction template` → 文件末尾 | 4,775–5,051 | 引擎层:组装好的 Codex CLI 基础指令(How you work / AGENTS.md / Responsiveness / Planning / Task execution / Validating / Ambition vs precision / 进度汇报 / 最终答复结构 / Tool Guidelines) |

其余约 4,600 行**刻意排除**,因为它们是对**别的模型**说的:`# Classification` 结尾写的是
"Output that single token immediately and nothing else."(分类器),还有 Guardian 审查模板、
批准与 `request_permissions` 片段、浏览器确认策略、code review rubric、realtime backend、
桌面 UI 片段、编排与压缩模板。它们**没有丢**——就在
`preset/skills/gpt-6-astra-reference/reference/` 里,按需加载。

还有一个纯粹技术上的理由:第 362 行有 `{{ tenant_policy_config }}`。dsh 的提示词插值是
**严格**的,未注册的 `{{...}}` 组会让整轮请求失败;而 `dsh-persona` **没有** `interpolate:
false`(只有用 `ctx.systemPrompt.section({ interpolate: false })` 注册的段才有),
所以整份内联在这个 schema 下根本挂不上。

改选块:编辑 `scripts/build.mjs` 里的 `SELECTION`(起止标题锚点),重跑 build + check。
锚点找不到时构建会**报错退出**。

---

## 本预设相对 standard 的刻意改动

`build.mjs` 里有一个显式的 `PATCHES` 列表,每处改动都写明了它覆盖的是上游哪个事实、为什么。
锚点在新版 `standard` 里找不到(或匹配多处)时构建会**报错退出**,不会静默丢掉改动:

| 改动 | 为什么 |
|---|---|
| `skill-filesystem` 加 `customSkillDirs`(`!!js` + `baseUrl` 指向 preset 自己的 `skills/`) | 让被排除的原文与选块说明随预设自带、按需加载;这是 shipped `cordis` 预设用的同一套机制 |
| `tool-subagent`(spawn)加 444 字符 `persona` | 人格是常驻成本,新 spawn 的子代理不需要完整版本;fork 不加,因为它要继承历史并复用父级 KV cache |

---

## 原理

dsh 的系统提示是**按段拼装**的,`dsh-persona` 这个 row 提供两个段:

| 段 | order | 本预设内容 |
|---|---|---|
| `deployment:persona-prefix` | 0 | 两段 Astra 指令 + 运行环境适配段 |
| `deployment:persona-suffix` | 10200 | `Your working directory is {{cwd}}.` |

顺序是 **identity-first**(与 Claude Code / Codex 的惯例一致):harness 身份段(−100)→
人格(0)→ 各工具 row 自己的指导(100–199)→ 工作目录尾段(10200)。也就是说 **dsh 的工具
指导排人格之后**,冲突时以 harness 的工具说明为准。

composition 里三条 `isolate` realm 规则(`planning` / `compaction` / `delegation`)是 dsh
对「预设自有服务」的硬要求,本仓库原样保留,未做改动。

---

## 成本提示

人格段常驻系统提示,约 **44 K 字符 ≈ 11k token**,每次请求都会带上。相比整份内联
(339 KB ≈ 85k token)已经是 1/8,而且:

- spawn 子代理只付 ~100 token 的人格,不再复制整份;
- 参考 skill 与原文在被读取前不产生任何 token 成本。

---

## 升级维护(重要)

dsh 会改 row 的 config schema。本仓库踩过的坑:

- **dsh ≤ 0.1.4**:`dsh-persona` 的字段是 `text: <string>`。
- **dsh 0.1.5-rc.3 起**:字段改为 `prefix`(必填)与 `suffix`;旧写法会以
  `invalid config: $.prefix missing required value` **挂载失败**。如果这个预设同时是默认预设,
  症状就是**新建对话直接失败、磁盘上不产生 session 目录**。

升级 dsh 后请重新同步基线并重建:

```bash
# 1) 用新版 shipped standard 替换 base/
cp "$DSH_INSTALL/node_modules/@deepseek-ai/dsh-agent-presets/presets/standard/agent.cordis.yml" \
   base/standard.agent.cordis.yml
# 2) 重建 + 自检
node scripts/build.mjs
node scripts/check.mjs
# 3) 安装/更新,并在 GUI 里新建一次会话确认
dsh plugin --profile web update dsh-preset-gpt-6-astra     # 方式 A
#   或 bash scripts/install.sh / pwsh -File scripts/install.ps1 -Force
```

第 2 步是 `standard` 被改写时的报警点:`PATCHES` 的锚点会被检查,上游把 model / skill /
subagent 的 row 重排会让构建带着补丁名失败,而不是静默退回上游行为。

shipped 预设目录位置与预设 id 也会随版本变化(例如 0.1.5 起目录移到
`node_modules/@deepseek-ai/dsh-agent-presets/presets/`,预设 `code` 更名为 `ptc`)。

---

## 已知限制

- 原文提到的 Codex 产品面(Apps / Connectors、Plugins、Artifacts、`request_permissions`、
  `end_conversation`、Guardian 审查、realtime backend)在 dsh 中不存在,适配段已明确排除;
  需要跨会话记忆时使用本机记忆服务(OpenViking)的工具。
- 原文写的是 OpenAI 的产品体系,本预设只把它当人格与行为准则使用,不改变模型路由、也不代表
  OpenAI 或 DeepSeek 的任何官方立场;`{{model}}` 说明真正在回答的模型是谁。
- 人格文本一旦改动,系统提示前缀即变化,会重建 KV cache。
- spawn 子代理的人格比父代理短。想让子代理恢复完整人格:删掉 `preset/agent.cordis.yml`
  里 spawn 行的 `persona:` 并重建。

---

## 贡献者

- **作者**:[Zioove](https://github.com/Zioove) —— 预设 composition、bundle 插件、选块与运行环境适配、构建/自检脚本、文档。
- **贡献者**:[T0mor1](https://github.com/T0mr1) —— 仓库协作者。

本仓库的每条提交的作者都是 Zioove;仓库归属 Zioove,T0mor1 拥有协作者权限。

---
## 许可与归属

- 本仓库的**脚本、配置、文档**:MIT,见 `LICENSE`。
- **`prompt/GPT-6-Astra_Prompts.md`**(以及 `preset/skills/.../reference/` 里的同一份文本):
  是 OpenAI GPT-6 / Codex 产品面的提示词文本,版权归 OpenAI,仅作技术研究与互操作研究收录,
  **不在** MIT 授权范围内。详见 `NOTICE.md`。

Install

dsh plugin --profile web add github:Zioove/gpt-6-astra-dsh-preset

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source