Files
PaperClipAI/server/src/onboarding-assets/first-task
DottaandPaperclip 862a5758ba fix(agents): reduce hiring templates to role descriptions (#14985)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for work.
> - New agents receive role instructions from onboarding, the hiring skill, or a team package.
> - These sources repeat harness procedures and impose generic work policies.
> - They can crowd out the task and the harness instructions.
> - This pull request reduces those sources to short role descriptions.
> - It preserves configuration, skills, authentication, reporting lines, and approval controls.
> - The benefit is less repeated instruction text with explicit coverage for the default hiring path.

## Linked Issues or Issue Description

Refs #3307. The CEO template can impose a fixed delegation route instead of letting the agent choose how to fulfill the request. This change removes that route. It does not implement autonomous goal selection.

Related work: #14920 preserves stock Codex base instructions. #14948 reduces the generic manual and shared runtime prompts. #14961 improves native completion-tool descriptions. This PR is separate from those changes.

## What Changed

- Select only the short CEO `AGENTS.md` for new default CEO bundles. Keep the three former companion files as compatibility assets.
- Reduce the first-agent chief-of-staff prompt and coder, QA, UX, and security role examples.
- Reduce seven bundled team role bodies. Preserve their role, reporting, and skill metadata. Regenerate the catalog.
- Make hiring examples optional. Replace the long generic role manual with short role drafting guidance. Preserve explicit requester instructions.
- Add configuration and import coverage for native and legacy managed bundles, custom instructions, first-agent rendering, and catalog contents.
- Add an explicit-only hiring eval that starts from the production CEO default and checks one coder hire, independently computed JSON output, saved instructions, and worker reuse.
- Include the full prompt comparison and a separate three-request drafting simulation. Neither is a live provider comparison.

Prompt differences: [before and after](doc/plans/2026-10-02-hiring-template-prompt-diff.md). The CEO default falls from 1,897 to 20 words. The coder example falls from 652 to 18 words. Word counts describe instruction size, not outcome quality or billing.

## Verification

- PASS: 99 focused server tests and eight shipped-catalog tests.
- PASS: catalog generation and validation for four shipped teams.
- PASS: hiring skill validation.
- PASS: `pnpm -r typecheck`.
- PASS: `pnpm build`.
- INCOMPLETE: the full local `pnpm test:run` was stopped before rebase. Its original log is retained. This is not a completed full-suite pass. The full current-head GitHub CI workflow passed: https://github.com/paperclipai/paperclip/actions/runs/37073372419.
- PASS: `pnpm test:e2e:runner:typecheck` and `pnpm test:e2e:runner:unit` (63 files / 843 tests).
- PASS: discovery for the two new hiring cells, 50 existing everyday cells, and the full 438-cell catalog.
- PASS after rebase: 99 server tests, 11 catalog tests, 62 selected E2E support tests, and the E2E typecheck.
- PASS: all current-head PR checks at `57dcee147ed0b2d2e3cc657cd9e50fb16bf9ec25`: 51 successful check runs, two intentional Storybook skips, and successful Snyk status. Fresh Greptile is 5/5 with zero unresolved threads.
- PENDING follow-up: matched live hiring runs on frozen integration refs. No live outcome-quality or non-regression result is claimed from the configuration checks or this merge.

The new suite has two local native cells: Codex and ACPX Claude. It expects five provider turns per cell. It compares source-derived bundles, so the historical long templates remain admissible. Missing successful source-read receipts make a pair uncomparable. They do not establish a behavior regression or equivalence.

## Risks

- New default roles have fewer prescribed procedures. Live checks must determine whether a removed instruction was needed for an outcome.
- Existing custom and saved bundles keep their contents. The retained companion assets avoid a source-file compatibility break.
- Specialized Summarizer, Reflection Coach, and Wiki Maintainer prompts remain unchanged. Their product contracts need separate review.
- The generic non-CEO fallback reduction is in #14948. This PR alone does not provide its eight-word fallback.
- Configuration tests and drafting simulations do not establish live outcome quality. QA, UX, security, and chief-of-staff hiring behavior remain outside the new two-cell comparison.

> 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, based on GPT-6, with reasoning, code editing, shell tools, and delegated verification. The runtime does not expose the exact deployment model ID or context-window size.

## 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 not referenced internal/instance-local Paperclip issues or links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip` URLs)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`) and contains no internal Paperclip ticket id or instance-derived details
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] All Paperclip CI gates are green
- [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before requesting merge

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-02 17:56:42 -05:00
..

First-task onboarding assets

Everything the very first agent is told during onboarding lives here as plain markdown so the board can edit the wording without touching TypeScript. The server loads these files (see server/src/services/onboarding-first-task-assets.ts and server/src/services/onboarding-greeting.ts) when it creates a new organization's first task and when it hires the first agent. The first agent also receives the bundled first-task skill through the normal company skill inventory and agent skill assignment flow.

Files

File Layer What it is
greeting.md C The deterministic greeting the server posts as the agent on the first task, before anything runs. No LLM.
opening-question.json C The deterministic ask_user_questions card the server posts as the agent right after the greeting: "Interview me and propose a plan and an agent team to execute it." or "I have a task in mind" (free text). The option ids interview and task are fixed because the first-task skill refers to them; the task option must keep freeText: true. No LLM.
brief.md A The first task's hidden description: a short /first-task invocation and the {{proposalMode}} selected at creation.
skills/first-task/SKILL.md A (workflow) The full first-task policy: opening-answer handling, interview, proposals, approval, and execution. Includes both single-task proposal modes.
chief-of-staff/AGENTS.md B The chief-of-staff persona seeded over the first agent's entry instruction file at hire time.
README.md — This file.

The opening card

opening-question.json is one single-select question. Its prompt, optional helpText, optional submitLabel, and the two options' label/description are free to edit. Picking an option only selects it; nothing happens until the user presses the primary button (submitLabel, "Continue"). That is how every question card behaves: Next / Submit answers, Skip (optional questions only), and Cancel, which returns the plain composer and leaves the card pending. The server validates the file when it creates a first task and refuses (logging a warning, the task is still created) if either option id changes or the task option loses freeText: true. When the user answers, the answer reaches the agent in its wake payload and the first-task skill tells it which path to take; when the user types a message instead, the card expires and the message wakes the agent as before.

Placeholders

  • {{agentName}} → the agent's chosen name. When the agent has no name the greeting drops the name gracefully ("I'm your first agent teammate"), matching the historical behaviour. Used in greeting.md and chief-of-staff/AGENTS.md.
  • {{organizationName}} → the organization (company) name. Used in chief-of-staff/AGENTS.md.
  • {{proposalMode}} (in brief.md only) → confirmation or plan, chosen by the enableFirstTaskPlanProposal toggle. The skill contains the policy for both modes; no policy text is expanded into the task description.

The toggle

enableFirstTaskPlanProposal (Settings → Experimental, tier preference, default off on cloud and self-hosted). Title: "First task: propose with a plan document". When on, the first task's invocation selects plan mode for the single-task path so the chief of staff writes a short plan document and a checkbox card instead of a one-card confirmation. The create route reads the toggle once, when the first task is created; flipping it later does not change an existing first task.

Skill assignment and invocation

The company skill service imports skills/first-task/SKILL.md with canonical key paperclipai/paperclip/first-task and runtime name first-task. The agent create and hire routes add it alongside the five core skills for board-created onboardingFirstAgent agents on skills-capable adapters, including Codex and Claude. Ordinary CEOs and other agents do not receive it automatically.

The hidden description asks the agent to read and follow the skill before responding, including subsequent wakes on that task. The user does not need to type a slash command. Native Codex sends the selected skill as a structured skill input. Native ACPX Claude invokes the assigned skill through its native /first-task command, with the complete task/wake envelope as the argument, on initial and resumed turns. Legacy adapters retain the brief's instruction to read the installed skill. None of these adds a separate model run. The skill applies only to the onboarding task that invokes it, not to every task assigned to that agent. The deterministic greeting, opening card, and initial no-wake behavior are unchanged.

Updates

  1. Edits take effect on the next server restart locally, or the next release on cloud. The files are read from disk (bundled into dist/ at build time), not baked into TypeScript, so a plain markdown edit + restart/release is all that is needed.
  2. Task descriptions and personas are snapshots. An existing first task keeps the description it was created with, and an existing first agent keeps its seeded persona (editable per agent under Instructions). This change does not migrate existing first tasks or assign the skill to existing agents.
  3. Skill text follows normal bundled-skill refresh. Agents assigned the unpinned first-task skill receive its current bundled contents through the company inventory. Its policy can therefore update independently of the saved invocation; the proposal mode remains the one stored on the task.