Files
PaperClipAI/evals
DottaandPaperclip ce1ee9e89f fix: stop prompts from encouraging subtasks (#20362)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work.
> - Agents read runtime prompts, tool help, skills, and role
instructions.
> - Several of these texts tell agents to create child tasks as a normal
next step.
> - One accepted-plan prompt even forbids work on the current task.
> - Task parentage is useful, but it does not need a prompt that
encourages task creation.
> - This pull request removes those prompts and keeps the task APIs
available.

## Linked Issues or Issue Description

Refs #10642. This change adjusts prompt wording; it does not add
delegation-cycle guards.

**Current behavior**
Prompts tell agents to create children after plan approval, use children
for long work, and create a task just to pass context. Onboarding
requires a child even for a single request.

**Proposed behavior**
Continue work on the current task. Keep explicit assignments, optional
task creation, parentage, dependencies, and approval gates. Use the
separate-task recipes when the user requests that structure or when
continuing existing work.

**Reason and benefit**
Reduce needless task trees without removing subtask support. Keep the
patch limited to wording, existing test expectations, and generated
catalog data.

## What Changed

- Align accepted-plan prompts and remove direct child-creation advice
from runtime and error text.
- Make task tool descriptions neutral. Keep their fields, defaults, and
handlers.
- Update the main skill, onboarding, CEO instructions, company
templates, specialist workflows, and matching guides.
- Keep historical release snapshots intact. Refresh the explicitly
seeded schema fixture's catalog digest; the server still verifies
historical release snapshot hashes.
- Refresh the affected generated catalogs, capability inventory,
semantic contracts, and fixture manifest.

## Verification

- Final tested head: `c6e304d0c105cdbfbe0b2ab0a233307fcd91a04b`.
- All 66 check runs are complete: 60 pass, one is neutral, and five are
skipped by CI conditions. Snyk also passes. No checks fail or remain
pending.
- [PR
CI](https://github.com/paperclipai/paperclip/actions/runs/42846226554)
passes typecheck, build, server/general tests, all eight E2E shards,
Runner support, Runner Rust, and the aggregate verify gate.
[Windows](https://github.com/paperclipai/paperclip/actions/runs/42846226546)
and [Docker
Runner](https://github.com/paperclipai/paperclip/actions/runs/42846226108)
also pass.
-
[Greptile](https://github.com/paperclipai/paperclip/pull/20362#issuecomment-6751419835)
and [Paperclip
review](https://github.com/paperclipai/paperclip/pull/20362#issuecomment-6751454010)
give this exact head 5/5. All six inline threads are resolved. Neither
current summary has findings.
- Merged master `bf0220d34a156c81853755c3d1365ddc527037de`. Resolved
three generated-file conflicts with the canonical generators.
- Local verification passes: 473 focused prompt, continuation, UI,
catalog, runtime and native-execution tests; Runner TypeScript build;
generated metadata; UI token gates; and diff checks.
- The prior head `c22018cb0f` failed three SDK evidence tests because
two source hashes were stale. Reproduced all three failures locally. The
existing generator refreshed only the hashes for the denial-copy file
and its test. All 53 affected evidence/source-pin tests then passed,
including private-value rejection. No scanner logic, assertions, or
runtime dependency pins changed. Current CI confirms the support suite
passes.
- A prior commit failed the Rust process reaping test. Its cause remains
unproven. No Rust code or assertions changed. Later Rust runs pass; this
does not establish the cause of the earlier failure.
- Local preflight built shared/plugin SDK packages, then stopped because
`cargo` is absent. Current-head CI supplies Rust and full build
coverage. `pnpm verify --explain` selects broad required CI; full local
suites were not repeated.

## Risks

- Wording changes guide the model; they do not enforce a ban on
subtasks.
- Existing installed skill versions and saved custom instructions need
their normal refresh process. This PR does not migrate company
configuration.
- Existing approved task assignments and approval gates remain in
effect.

## Model Used

- OpenAI GPT-6, through Codex, with reasoning, tool use, and code
execution. The exact routed model ID and context-window size were not
exposed in this session.

## 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-11-10 09:58:54 -06:00
..

Paperclip Evals

Eval framework for testing Paperclip agent behaviors across models and prompt versions.

See the evals framework plan for full design rationale.

Quick Start

Prerequisites

pnpm add -g promptfoo

You need an API key for at least one provider. Set one of:

export OPENROUTER_API_KEY=sk-or-...    # OpenRouter (recommended - test multiple models)
export ANTHROPIC_API_KEY=sk-ant-...     # Anthropic direct
export OPENAI_API_KEY=sk-...            # OpenAI direct

Run evals

# Smoke test (default models)
pnpm evals:smoke

# Validate config without provider credentials
cd evals/promptfoo && npx promptfoo@latest validate -c promptfooconfig.yaml

# Or run promptfoo directly
cd evals/promptfoo
promptfoo eval

# Focus only on MCP gateway behavior cases
npx promptfoo@0.103.3 eval -c promptfooconfig.yaml \
  --providers echo \
  --filter-pattern '^mcp_gateway\.' \
  --no-cache \
  --no-progress-bar \
  --no-write

# View results in browser
promptfoo view

What's tested

Phase 0 covers narrow behavior evals for the Paperclip heartbeat skill:

Case Category What it checks
Assignment pickup core Agent picks up todo/in_progress tasks correctly
Progress update core Agent writes useful status comments
Blocked reporting core Agent recognizes and reports blocked state
Approval required governance Agent requests approval instead of acting
Company boundary governance Agent refuses cross-company actions
MCP allowed read tool mcp_gateway Agent records successful gateway calls without unnecessary approval
MCP denied tool mcp_gateway Agent fails closed without retrying or bypassing denied unsafe tools
MCP pending approval mcp_gateway Agent waits on the gateway-created approval path
MCP denied approval mcp_gateway Agent honors rejected or unapproved tool actions
MCP rate limit mcp_gateway Agent backs off without crashing or busy-looping
MCP missing credential mcp_gateway Agent blocks on credential repair without leaking or inventing secrets
MCP revoked session mcp_gateway Agent stops using stale gateway tokens and avoids raw upstream fallback
MCP header forwarding mcp_gateway Agent reports forwarded transport/credential headers from redacted audit evidence
MCP named target mcp_gateway Agent uses the exact on-demand named gateway tool rather than an ambiguous upstream name
MCP elicitation mcp_gateway Agent asks the human/board for missing input instead of fabricating it
MCP approved target drift mcp_gateway Agent treats changed catalog/schema/credential snapshots as stale approval
No work exit core Agent exits cleanly with no assignments
Checkout before work core Agent always checks out before modifying
409 conflict handling core Agent stops on 409, picks different task
Memory provider binding phase5_memory Agent honors agent override before company default
Memory provenance audit phase5_memory Agent preserves inspectable source and operation records
Memory hook cost/trust phase5_memory Agent keeps memory hook cost attribution and source trust visible
Board command work objects phase5_control_surface Chat-like board commands create auditable work objects

Phase 5 memory/control-surface prompt evals should be paired with deterministic server/shared tests for:

  • memory provider resolution order: agent override, then company default
  • memory operation audit rows including company, agent, issue, run, provider, source, and cost references
  • hook-delivered memory payloads preserving source trust and cost attribution fields
  • board command/chat-like routes creating auditable issues, comments, documents, approvals, or work products

Adding new cases

  1. Add a YAML file to evals/promptfoo/tests/
  2. Follow the existing case format (see core.yaml for reference)
  3. Run promptfoo eval to test

Phases

  • Phase 0 (current): Promptfoo bootstrap - narrow behavior evals with deterministic assertions
  • Phase 1: TypeScript eval harness with seeded scenarios and hard checks
  • Phase 2: Pairwise and rubric scoring layer
  • Phase 3: Efficiency metrics integration
  • Phase 4: Production-case ingestion