Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/coding-agent/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,10 @@

### Fixed

- DeepSeek V4 (flash/flash-0731/pro) and Kimi K3 presets now carry delegation + skill gates: partitioned `task` batch before the local critical path and a terminal visible-skill scan (`SKILL.md` + `load_skills`), mirroring the canary's M1/M2 cure for under-delegation / under-load (see PR #912, draft — ready on ≥20 qualified turns).

### Fixed

- Extension selectors (including the `/fallback` model picker) now window long option lists around the
highlighted row instead of rendering every entry. On large model registries the full list overflowed the
viewport and the moved highlight was never painted, so arrow keys and j/k appeared to do nothing even
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@ export type DeepseekV4RuleId =
| "todo-discipline"
| "missing-info"
| "settled-reading"
| "reasoning-aim";
| "reasoning-aim"
| "delegate-separable-work"
| "load-matching-skills";

export type DeepseekV4Concern = "harness-contract" | "todo" | "grounding" | "deliberation";
export type DeepseekV4Concern = "harness-contract" | "todo" | "grounding" | "deliberation" | "subagent-delegation" | "skill-utilization";

export type DeepseekV4PresetName = "deepseek-v4-flash" | "deepseek-v4-flash-0731" | "deepseek-v4-pro";

Expand Down Expand Up @@ -74,6 +76,20 @@ export const DEEPSEEK_V4_RULES: readonly DeepseekV4Rule[] = [
directive:
"Aim extended reasoning at the problem - the code, the design, the failure - and end it in an action. When reasoning stalls on a missing fact, stop deliberating and fetch the fact; a cheap read beats a long internal debate. Deliver a conclusion and a recommendation, not a survey of options.",
},
{
id: "delegate-separable-work",
concern: "subagent-delegation",
presets: ALL_PRESETS,
directive:
"At task intake, partition the work into the local critical path and separable workstreams. A bounded workstream that does not depend on the parent's in-progress edits is a `task` call: spawn it before local implementation, and submit independent workstreams in one batch. Keep only trivial lookups and tightly coupled edits local. Delegation is complete only after every child result has been read and its evidence integrated into the parent answer.",
},
{
id: "load-matching-skills",
concern: "skill-utilization",
presets: ALL_PRESETS,
directive:
"Before the first non-discovery action, compare the task with every visible skill description. For each loose match, read that skill's listed `SKILL.md` and follow it; when matching work is delegated, include the skill name in `load_skills`. Proceed without a skill only after this scan finds no match - recognizing a match without loading it does not complete the gate.",
},
];

export function buildDeepseekV4FlashIntro(modelLabel: string): string {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ Explicitly scoped requests get exactly that scope; open-ended ones take the smal

Decide one path and act; reopen a settled choice only when new evidence contradicts it. Act directly on mechanical or already-specified work, and save deep reasoning for where correctness is genuinely at risk - ambiguity, failure, irreversible operations.

Settle the delegation decision once at task intake: if a bounded research, reconnaissance, review, or independent-verification workstream can run without the parent's in-progress edits, spawn it with \`task\` before the local critical path, batching independent workstreams. Keep trivial or tightly coupled work local. Stop delegation once child results are consumed and integrated; do not reopen the decision or duplicate the child's work.

Make the visible-skill scan a terminal gate before substantive work: compare the task with every listed description, read each loosely matching \`SKILL.md\`, and apply it. If matching work is delegated, pass its skill name in \`load_skills\`. The gate is complete only when all matches are loaded or the scan finds none.

Fire independent tool calls - reads, searches, listings, diagnostics - in one parallel wave; sequence only when a call needs a value another produced, and never fill missing parameters with placeholders. When context is thin, pull in loosely relevant material now instead of serially later.

Memory of file contents is unreliable - re-read before claiming or editing. Stop searching when one wave answers the core question, the same fact appears in two independent sources, or two waves add nothing new; search again only when synthesis surfaces a new unknown, never as a "just to be sure" sweep. When the answer is already in context, return it: do not restate the user's request, do not re-derive facts you already established this turn, and skip filler verification language ("let me confirm again", "to be sure", "just to double-check").
Expand Down