From e50666e4c8ebc760e5cde6dd2505ddbf153225cd Mon Sep 17 00:00:00 2001 From: Dotta <34892728+cryppadotta@users.noreply.github.com> Date: Sat, 6 Jun 2026 10:47:59 -0500 Subject: [PATCH] [codex] Move maintainer task skills under .agents (#7658) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work. > - The skills layout separates runtime Paperclip skills in `skills/` from maintainer/agent workflow skills in `.agents/skills/`. > - Three maintainer workflow skills still lived under root `skills/`, making them look like runtime skills shipped through the Paperclip skill path. > - Root `skills/` is documented as reserved for Paperclip runtime skills, so these task-oriented maintainer skills belong with the other `.agents/skills` entries. > - This pull request moves the three requested skill packages, updates the direct smoke path, and adds regression coverage for the maintainer-only skill boundary. > - The benefit is a cleaner skills boundary without changing skill contents or runtime behavior. ## Linked Issues or Issue Description Internal Paperclip issue: PAP-10471. No public GitHub issue exists for this repository-maintenance change. Inline feature/enhancement issue description follows the feature request template fields: ### Problem or motivation Root `skills/` is documented as reserved for Paperclip runtime skills, but `terminal-bench-loop`, `paperclip-create-plugin`, and `diagnose-why-work-stopped` lived there even though they are maintainer/agent workflow skills. ### Proposed solution Move those three skill packages to `.agents/skills/`, update the terminal-bench loop smoke script to read the new local path, and cover the moved skill names in the existing runtime-skill discovery test fixture. ### Alternatives considered Leaving the skills in root `skills/` would preserve direct old paths, but it keeps blurring the runtime-skill boundary. Moving them into the app-shipped skills catalog would be the wrong fit because these are maintainer workflow skills, not bundled company skills. ### Roadmap alignment This is a small maintenance cleanup around the existing Skills Manager/workflow-skill organization and does not introduce a roadmap-level core feature. ## What Changed - Moved `terminal-bench-loop`, `paperclip-create-plugin`, and `diagnose-why-work-stopped` into `.agents/skills/`. - Updated the terminal-bench loop smoke script and skill self-check text to use `.agents/skills/terminal-bench-loop/SKILL.md`. - Added regression coverage in `server/src/__tests__/paperclip-skill-utils.test.ts` that places these three skills under `.agents/skills` while asserting runtime discovery still lists only root runtime skills. ## Verification - `pnpm smoke:terminal-bench-loop-skill --source-issue-id "$PAPERCLIP_TASK_ID" --run-key PAP-10471-move-skill-path` - `pnpm exec vitest run server/src/__tests__/paperclip-skill-utils.test.ts` - `rg -n "skills/(terminal-bench-loop|paperclip-create-plugin|diagnose-why-work-stopped)" . --glob '!node_modules' --glob '!dist' --glob '!ui/dist'` returned no matches. ## Risks - Low risk: this is a file-location change plus direct path/test updates. - Maintainer agents that referenced the old root paths directly will need to use `.agents/skills/...` instead. > For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and discuss it in `#dev` before opening the PR. Feature PRs that overlap with planned core work may need to be redirected — check the roadmap first. See `CONTRIBUTING.md`. ## Model Used - OpenAI Codex, GPT-5 coding agent with shell/tool use. ## Checklist - [x] I have included a thinking path that traces from project context to this change - [x] I have specified the model used (with version and capability details) - [x] I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work - [x] I have searched GitHub for duplicate or related PRs and linked them above - [x] I have either (a) linked existing issues with `Fixes: #` / `Closes #` / `Refs #` OR (b) described the issue in-PR following the relevant issue template - [x] I have run tests locally and they pass - [x] I have added or updated tests where applicable - [x] If this change affects the UI, I have included before/after screenshots - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [ ] All Paperclip CI gates are green - [ ] Greptile is 5/5 with no open P2s, recommendations, or follow-ups - [x] I will address all Greptile and reviewer comments before requesting merge --- {skills => .agents/skills}/diagnose-why-work-stopped/SKILL.md | 0 {skills => .agents/skills}/paperclip-create-plugin/SKILL.md | 0 {skills => .agents/skills}/terminal-bench-loop/SKILL.md | 2 +- scripts/smoke/terminal-bench-loop-skill-smoke.mjs | 2 +- server/src/__tests__/paperclip-skill-utils.test.ts | 3 +++ 5 files changed, 5 insertions(+), 2 deletions(-) rename {skills => .agents/skills}/diagnose-why-work-stopped/SKILL.md (100%) rename {skills => .agents/skills}/paperclip-create-plugin/SKILL.md (100%) rename {skills => .agents/skills}/terminal-bench-loop/SKILL.md (99%) diff --git a/skills/diagnose-why-work-stopped/SKILL.md b/.agents/skills/diagnose-why-work-stopped/SKILL.md similarity index 100% rename from skills/diagnose-why-work-stopped/SKILL.md rename to .agents/skills/diagnose-why-work-stopped/SKILL.md diff --git a/skills/paperclip-create-plugin/SKILL.md b/.agents/skills/paperclip-create-plugin/SKILL.md similarity index 100% rename from skills/paperclip-create-plugin/SKILL.md rename to .agents/skills/paperclip-create-plugin/SKILL.md diff --git a/skills/terminal-bench-loop/SKILL.md b/.agents/skills/terminal-bench-loop/SKILL.md similarity index 99% rename from skills/terminal-bench-loop/SKILL.md rename to .agents/skills/terminal-bench-loop/SKILL.md index ce2c4f22..6a3c8d21 100644 --- a/skills/terminal-bench-loop/SKILL.md +++ b/.agents/skills/terminal-bench-loop/SKILL.md @@ -228,7 +228,7 @@ The command uses the current Paperclip API token and company from `PAPERCLIP_API The smoke is deterministic and intentionally non-comparable. It does not start Terminal-Bench, Harbor, an agent model, or a provider runtime. It verifies only the control-plane shape: -- local `skills/terminal-bench-loop/SKILL.md` contains the loop contract terms; +- local `.agents/skills/terminal-bench-loop/SKILL.md` contains the loop contract terms; - a top-level loop issue can be created and updated into a blocker posture; - an iteration child issue can be created under the loop parent; - mocked benchmark artifact paths are recorded on a `run` document; diff --git a/scripts/smoke/terminal-bench-loop-skill-smoke.mjs b/scripts/smoke/terminal-bench-loop-skill-smoke.mjs index f8253a59..ddceb3bd 100755 --- a/scripts/smoke/terminal-bench-loop-skill-smoke.mjs +++ b/scripts/smoke/terminal-bench-loop-skill-smoke.mjs @@ -83,7 +83,7 @@ function assert(condition, message) { } async function assertLocalSkillPackage() { - const skillPath = join(repoRoot, "skills", "terminal-bench-loop", "SKILL.md"); + const skillPath = join(repoRoot, ".agents", "skills", "terminal-bench-loop", "SKILL.md"); const markdown = await readFile(skillPath, "utf8"); for (const expected of [ "name: terminal-bench-loop", diff --git a/server/src/__tests__/paperclip-skill-utils.test.ts b/server/src/__tests__/paperclip-skill-utils.test.ts index aae6c70a..a8415c20 100644 --- a/server/src/__tests__/paperclip-skill-utils.test.ts +++ b/server/src/__tests__/paperclip-skill-utils.test.ts @@ -27,7 +27,10 @@ describe("paperclip skill utils", () => { await fs.mkdir(moduleDir, { recursive: true }); await fs.mkdir(path.join(root, "skills", "paperclip"), { recursive: true }); await fs.mkdir(path.join(root, "skills", "paperclip-create-agent"), { recursive: true }); + await fs.mkdir(path.join(root, ".agents", "skills", "diagnose-why-work-stopped"), { recursive: true }); + await fs.mkdir(path.join(root, ".agents", "skills", "paperclip-create-plugin"), { recursive: true }); await fs.mkdir(path.join(root, ".agents", "skills", "release"), { recursive: true }); + await fs.mkdir(path.join(root, ".agents", "skills", "terminal-bench-loop"), { recursive: true }); const entries = await listPaperclipSkillEntries(moduleDir);