Agent preset
dsh-autoresearch-preset
AutoResearch Project Mode preset for DeepSeek Harness.
- Source
- gavenma
- License
- MIT
- Updated
- Updated 6 days ago
Readme
# AutoResearch — a research project agent for DeepSeek Harness A preset for [DeepSeek Harness (DSH)](https://github.com/deepseek-ai/DeepSeek-Harness) that turns DSH into a research project team. You write a brief; the agent plans the project with you, executes it step by step with specialized AI roles, verifies every piece before accepting it, traces failures to their cause, and publishes a finished deliverable — mirrored into Linear if you connect it. ## What it can do - **Plan from a brief.** A few paragraphs in, a structured, immutable plan out: every node, its deliverable, its dependencies, and a mechanical "done" checklist per node. Nothing runs before you approve it. - **Execute without babysitting.** Nodes run in dependency order as fresh, single-purpose roles — scouts, verifiers, writers, critics, judges, coders, and an integration editor — each with a declared read/write scope, so no step inherits another step's context. - **Verify at every level.** Draft → critique → revise until convergence; competing drafts are ranked by **blind** judges (zero-based `pass_NN/judge_NN` packets, digest-bound `judgeContext`); mechanical judge degradation routes to the critic gate instead of deciding with a broken panel. - **Trace failures causally.** A downstream failure attributes to the responsible upstream node as a bounded, evidence-backed hypothesis — `observe` mode records it, `enforce` mode reopens the owning node within hard caps and re-verifies downstream. - **Assemble and re-verify whole.** The integration pass checks every accepted contribution against a hash-anchored ledger, fixes only editorial issues in place, bounces substantive conflicts back to their owning node, and visually inspects figures before publishing. - **Publish exactly what the plan names.** One folder, `outputs/<projectId>/`, driven solely by the plan's explicit `deliverables` list — plus a `MANIFEST.json` attributing every file by source, rule, and hash. Publication is transactional: the previous output stays last-known-good until a replacement commits. - **TeX done right.** Reproducible builds are `SOURCE_DATE_EPOCH`-pinned, word counts cover the resolved input closure, compiler failures keep first-error/line/tail evidence, and a missing toolchain blocks with a clear remediation diagnostic — never a bare error, never a silent pass. - **Linear as the live operational surface.** Each plan step is an issue with dependency arrows, and every issue carries a short, human-readable `Current Node Context` block — what is done, what failed, why it was reopened, what is next — readable on the issue itself, digest-bound so every lifecycle action re-reads it first. - **Reopen finished work from feedback.** `autoresearch_submit_feedback` stores verbatim user feedback; triage reopens only the smallest responsible closure (cycle-checked, receipt-`supersedes`-linked, last-known-good preserved), and a repair republishes through the normal gates. - **One canonical, unversioned schema.** Every record has exactly one shape identified by `kind`; tool schemas are generated from the core definitions; no version markers, no legacy readers at runtime (see Schema discipline). - **Honest role confinement.** Broad role tooling (`read/grep/glob/bash/ write/edit`) unlocks only behind a fresh, run-bound confinement attestation; on deployments that cannot attest it, roles stay on narrow allowlists and the preset says so. ## How a project runs 1. **Propose and approve.** The planner proposes the DAG; you approve it. The plan is frozen after approval — the agent surfaces drift, never rewrites it. 2. **Execute in dependency order.** Each node: evidence preparation → author loop (A/B/AB) → critique → blind judging → promotion, bounded by the node's budget. 3. **Accept mechanically.** Every criterion is accounted for (PASS/FAIL/WAIVED/NOT_APPLICABLE); TeX nodes run the strict build; acceptance receipts are hash-bound to the node contract and its journal revision. 4. **Integrate.** The editor merges accepted contributions, the verifier checks coverage, and the publish transaction lands the deliverable. 5. **Iterate from feedback.** Completed projects reopen minimally from user feedback and republish a verified replacement. ## Quick start ```bash git clone https://github.com/gavenma/dsh-autoresearch-preset.git cd dsh-autoresearch-preset npm run init # guided setup: role models + optional Linear key npm run verify:snapshot # offline integrity check npm run install:preset -- "$HOME/.dsh/.agent-presets/research" ``` - `npm run init` writes model choices straight into `config.default.json` — the single source of truth for role routing. It is **local-only and gitignored**: a fresh clone seeds it from the committed public template `config.example.json` on first `npm run init` (or copy the template by hand). No `config.local.json` overlay exists. - The Linear key is stored in the DSH credentials store, never in this repo. - **Restart the DSH process** after installing so the preset remounts. ## What's in this repository - `roles/` — instructions for every worker role. - `skills/` — the two entry points: `research-project` (open brief) and `research-outline-project` (your outline). - `tools/` — the generated runtime: orchestrator, core engine, Linear adapter, bounded web/PDF fetcher. - `src/` — editable source; `scripts/` builds/verifies/installs; `tests/` holds the regression suite (`npm test`). - `briefs/demo-brief.md` — a synthetic brief for an end-to-end demo. ## Requirements - A compatible DSH installation (recorded and tested with `@deepseek-ai/dsh` `0.1.5-rc.1`; the composition uses the split `prefix`+`suffix` persona shape introduced in 0.1.5). - Node.js 20 or later for build/verify/install scripts (CI runs Node 24). - Optional: `LINEAR_API_KEY` in the DSH credentials store for Linear workflows; local-only projects never call Linear. - A model provider reachable from your deployment; role assignment lives in `roleProfiles` in `config.default.json` (local-only; seeded from `config.example.json`). A per-workspace `.research-agent/config.json` can override roles for one workspace. ## Install ```bash npm run verify:snapshot npm run install:preset -- "$HOME/.dsh/.agent-presets/research" ``` The installer copies runtime assets (composition, roles, skills, tools) into the target. **A `config.default.json` that already exists at the target is never touched** — re-installing after a code update cannot change your working configuration. Two explicit flags can write it: - `--replace-config` — reset the target config to this checkout's `config.default.json` (use after editing it or running `npm run init`). - `--clean-target` — remove the destination tree first (stale bundles and residue); an existing target config is still preserved unless `--replace-config` is also passed. First installs receive the config: the checkout's local `config.default.json` when present, otherwise seeded from the public `config.example.json` template (a mounted preset cannot run without one). The installer also *reports* — never changes — role models outside the recognized list. Run `tests/installed-build-probes.mjs <target>` after installing to confirm the installed runtime. ## Verify the build - `npm run check` — offline snapshot verification (hashes every runtime file against the build manifest; no network, seconds). - `npm test` — the full suite (build, snapshot, schema, migration, capabilities, preflight, transport, blinding, promotion, Linear core/ reducer/reconcile/lifecycle, feedback, causal routing, TeX acceptance, output policy, hardening). CI runs it on Node 24 on GitHub-hosted runners, which have no TeX toolchain — toolchain-dependent paths degrade to structured diagnostics. - `npm run release:verify` — full suite + local smoke + clean install + installed probes. ## Configuration and operation Precedence: workspace `.research-agent/config.json` > installed `config.default.json` > built-in defaults. - `linear.approval: "auto"` by default; set a stricter mode if side effects should require confirmation. - Each role may set a provider-supported `reasoningEffort`; writing roles ship a `modelFallbacks` chain with a per-workspace rate-limit breaker. - External research performs bounded outbound HTTP(S) fetches and may send context to providers; disable it for unauthorized material. The fetch provider rejects URL credentials, bounds sizes/time, retries transient failures, and refuses cross-origin redirects. ## Data handling Never commit `.research-agent/` — it holds plans, drafts, evidence, transcripts, receipts, and Linear metadata. Credentials, logs, and private input material are ignored by default; inspect `git status` before every commit. Redaction checks on final reports are not a substitute for reviewing what external systems receive. ## Schema discipline - One canonical, unversioned record shape per kind, defined and validated in `src/autoresearch-core.mjs`; `kind` is a record type, never a version. - No `schemaVersion` fields, `v1/v2` branches, legacy readers, alternate unions, or policy-version markers. Runtime rejects old shapes with exactly one error: `not canonical; run scripts/migrate-workspace.mjs`. - Tool parameter schemas are generated from the core definitions; never hand-maintain one. - Change a core constructor/validator and all consumers atomically — fixtures, docs, bundles, snapshots, and tests in the same change. - `scripts/assert-canonical-schema.mjs` enforces all of the above in source and generated artifacts. ## Development Make runtime changes in `src/`, then `npm run build:preset` (it regenerates the `tools/` bundles, pins `agent.cordis.yml`, and bumps the generation id). Never edit generated bundles by hand. Run `npm test` before installation or deployment. Maintainer-only helper files — `AGENTS.md` (agent change discipline) and `docs/` (exactly two files: `capabilities.md`, `plans.md`) — are kept locally in the working checkout and intentionally not published. See `CONTRIBUTING.md`, `SECURITY.md`, and `NOTICE` for the remaining rules.
Install
# Copy the composition to $DSH_HOME/.agent-presets/dsh-autoresearch-preset/agent.cordis.yml
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install gavenma-dsh-autoresearch-preset from the hub