
![]()
A DeepSeek Harness bundle that hires agy-staff's personas as seven skills — /agy-ask, /agy-staffer, /agy-researcher, /agy-reviewer, /agy-implementer, plus /agy-lead and /agy-jobs.
Why · Install · Usage · Core design · Control panel · Updating · Troubleshooting · Credits
What & Why
agy-staff hires Google's Antigravity CLI (agy, Gemini 3.8 Flash) as staff: the host agent hands out a survey, a review, or a scoped implementation, and gets a second model family back in seconds instead of grinding the same work itself. It ships as plugins for Claude Code, Codex, Pi and OpenCode.
DeepSeek Harness is not one of those hosts. dsh plugins are cordis bundles, not host plugin manifests, and dsh has no /agy: namespace: its composer menu matches the skill name from frontmatter, discovered through a registered skill provider. So this repo is not an installer script that copies files around — it is a dsh bundle that registers one provider serving the vendored personas:
dsh-agy-staff (bundle patch)
└── row: dsh-agy-staff (inject: ['skills'])
└── ctx.skills.registerProvider(...)
└── /agy-ask /agy-staffer /agy-researcher /agy-reviewer
/agy-implementer /agy-lead /agy-jobs
Nothing is written into ~/.dsh/skills, nothing is junctioned, and no upstream checkout is required at runtime: the personas, the companion and the reference docs ship inside the package under assets/.
| Claude Code / Codex | DeepSeek Harness (this bundle) | |
|---|---|---|
| Install | claude plugin install … |
dsh plugin --profile <p> add … |
| Surface | /agy:ask |
/agy-ask |
| Skill delivery | plugin manifest | ctx.skills.registerProvider |
| Shared resources | <plugin-root>/companion |
resourceBase → <pkg>/assets/ |
| Taking effect | next session | restart the app (bundles load at host start) |
| Agent surface | not applicable | agy subagent provider + tool: delegate without a shell command |
| Settings | host plugin settings | round agy panel: mode/model/effort/timeout, job list, live test |
Install
Step 1 — the worker. Node.js and the Antigravity CLI, logged in once:
curl -fsSL https://antigravity.google/cli/install.sh | bash
agy --version
On Windows the installer puts agy.exe under %LOCALAPPDATA%\agy\bin; keep that on PATH.
Step 2 — install the bundle into a profile. dsh plugin forwards to pnpm in the profile directory and registers the bundle in dsh.profile.bundles:
git clone https://github.com/Adingo001/dsh-agy-staff.git
dsh plugin --profile desktop add "link:$PWD/dsh-agy-staff"
Or straight from GitHub, if you would rather not keep a clone:
dsh plugin --profile desktop add "github:Adingo001/dsh-agy-staff"
Step 3 — restart DeepSeek Harness. A skill directory is picked up live; a new bundle row is not. Quit the app and open it again, then type /agy in the composer: seven rows.
Step 4 — smoke test. ask is tool-free, so it needs no setup and answers in about three seconds:
node "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-agy-staff\assets\companion\agy-companion.mjs" ask --prompt "reply with OK"
CUJs
| Use case | Type this |
|---|---|
| Quick second opinion | /agy-ask what's your backend model |
| General task | /agy-staffer summarize the open TODOs in this repo |
| Generate an image | /agy-staffer generate a pixel-art robot mascot, save it as assets/mascot.png |
| Review the working tree | /agy-reviewer Review the current working tree |
| Review a PR | /agy-reviewer Review PR #12 |
| Challenge a plan | /agy-reviewer Challenge the migration plan in docs/plan.md |
| Survey a topic | /agy-researcher how does auth work in this repo |
| Scoped implementation | /agy-implementer fix the flaky retry test |
| Orchestrate a task | /agy-lead investigate the options, draft a proposal, then revise it with my feedback |
| Job ops | /agy-jobs, or just "is the agy job done?" |
Only ask blocks. The rest return a job id; the companion's wait collects the report, and in dsh you run that wait as a background command so the host keeps working — one wait per job, exit 2 means still running.
Core design
- One provider, seven candidates.
index.jsparses the vendoredassets/skills/<persona>/SKILL.mdfrontmatter, serves the body as skill content, and reportsrank: 600(the packaged-provider precedence). It has no dependencies — Node builtins only. - Name prefix is load-bearing. dsh has no colon namespace;
/agyonly lists something if the name starts withagy. The bundle therefore servesagy-<persona>while the on-disk directory keeps upstream'sask/jobs, so../jobs/SKILL.mdstill resolves as written. - Every path is resolved before the model sees it. Upstream writes
<skill-dir>/../../companion/agy-companion.mjsand delegates the resolution to its host; under dsh that reads as a riddle, so the first run of every fresh session wasted a turn globbing for the companion and another one retrying. The provider now rewrites<skill-dir>,<plugin-root>,../jobs/…,../../companion/…and../../docs/…to absolute paths and prepends a "these are resolved, do not search" block. The command runs as written, first try, every time — the vendored bytes stay untouched. resourceBaseis still advertised.{ kind: 'directory', path: <pkg>/assets }remains the fallback for anything the rewrite did not catch, so a reference upstream adds tomorrow still resolves.agyis also a subagent.agy-subagent.jsregisters an out-of-processSubagentProviderand the bundle mounts@deepseek-ai/dsh-tool-subagentwithprovider: agy, toolName: agy, so the model can hand a whole task to Antigravity as a child agent instead of orchestrating a shell command and a job id. Capabilities are advertised asfalseacross the board (noagentOptions/agentPreset/outputSchema/depth limit) because a child in another process cannot honor them, and the child inherits no conversation. Environment knobs:DSH_AGY_SUBAGENT_MODE(defaultstaffer),DSH_AGY_SUBAGENT_TIMEOUT_MS,DSH_AGY_COMPANION.- Prose is localized at load. Upstream bodies say
/agy:ask; the provider rewrites that to/agy-askin descriptions and bodies, leaving the vendored files byte-identical to upstream. - Upstream is vendored, not copied at install.
assets/holds the personas, companion, templates and reference docs at the commit recorded inassets/UPSTREAM-COMMIT;NOTICEspells out what came from where.
Control panel
The bundle ships a small panel in the browser client (dsh.client → client.js, registered into the shell.overlay slot) and one host route to feed it: POST /agy/api. After a restart a round agy button sits above the composer.
| Panel section | What it does |
|---|---|
| 环境 | companion path (✓/✗), agy --version, plugin version, settings path |
| 委派配置 | mode (staffer/research/review/implement/ask), effort composed into the model id, a model family or a raw id, and the per-delegation timeout |
| 连通性测试 | one ask round trip with its wall time — the "is agy actually working" button |
| 作业 | recent jobs from <cwd>/.agy-staff/state.json, with 结果 and 取消 |
Every saved value is read per delegation from <dshHome>/agy-staff/settings.json, so 保存 takes effect on the next call, no restart. Only the bundle rows (the panel itself, the tool, the providers) are fixed at app start.
The route is same-origin only: a cross-site request is rejected on Origin/Sec-Fetch-Site, and content-type: application/json is required, so a random page cannot drive agy through the loopback interface.
Updating
Upstream moved:
git -C <agy-staff-checkout> pull
node scripts/vendor-upstream.mjs --from <agy-staff-checkout>
npm test
Then restart the app. scripts/vendor-upstream.mjs copies the payload, rewrites assets/UPSTREAM-COMMIT, and warns when a path upstream dropped is missing.
This bundle itself:
git pull
dsh plugin --profile desktop add "link:$PWD" # re-link after a move
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
/agy lists nothing |
bundle row not loaded | check dsh-agy-staff is in the profile's dsh.profile.bundles, then restart the app |
Warning: duplicate skill agy-ask |
an older filesystem install is still in ~/.dsh/skills |
delete ~/.dsh/skills/agy-* (the bundle takes over) |
unknown subcommand: researcher |
companion modes are research / review / implement |
call the mode, not the skill directory name |
ask hangs or 401 |
agy needs a localhost port plus its OAuth token | run it unsandboxed and log agy in once |
| Skill body's relative path 404s | assets/ incomplete after a manual edit |
re-run node scripts/vendor-upstream.mjs |
| Everything vanished after reinstall | the row id changed to a package name pnpm cannot resolve | dsh plugin --profile desktop why dsh-agy-staff |
Credits
This is an adapter, not the invention. The design that makes it worth using — the five personas, the companion, the job protocol, the prompts, and the bench that measures them — belongs to keli-wen and the agy-staff contributors. Go star upstream; if you use this bundle you are using their work.
- Upstream: https://github.com/keli-wen/agy-staff (MIT, vendored at
9ddec3e) - Bench v1 report: English · 中文
- Worker: Antigravity CLI
Thanks also to the DeepSeek Harness authors: a skill registry that accepts a provider from any bundle is what made a real plugin possible here.
License
MIT — see LICENSE for this bundle's code and NOTICE for the vendored upstream material, which stays under its own MIT license (assets/UPSTREAM-LICENSE).
No comments yet. Be the first to write one.