Co-Authored-By: Paperclip <noreply@paperclip.ing> * commit 'adb69e8f09852c772d9901ae270e5b2d66e39c77': (84 commits) feat: default new Codex agents to Paperclip Runner on Linux and macOS (#15683) docs(skills): add slow-query diagnosis and fix skill (#16303) feat(sentry): add opt-in run failure reporting with saved run references (#16300) refactor(server): isolate provider message admission and runtime policies (#16289) refactor(server): isolate provider webhook lifecycle decisions (#16283) fix(workspaces): keep cleanup Git scans fresh and dedupe page reads (#16302) fix(sentry): keep provider-rejected Grok wakes out of run failure reports (#16297) fix(runner): report Runner disconnect age when a Dot bridge exits (#16296) refactor(server): isolate chat conversation and control policies (#16276) perf(recovery): use indexed execution identity lookups (#16291) perf(runs): bound history and reduce repeated context reads (#16286) fix(native-runtime): report which close barrier failed (#16298) feat(skills): select and validate tracked GitHub branches (#16288) fix(observability): sample native runs independently of triggers (#16285) fix(github): retry and recover review publication (#16284) perf(workspaces): wake terminal cleanup from committed changes (#16282) fix(mcp): deduplicate discovered tool descriptors (#16281) perf: remove history scans from task and chat queries (#16278) docs(skills): add maintenance bot setup workflow (#16279) fix(observability): time execution configuration steps (#16236) ... # Conflicts: # .dockerignore # doc/plans/2026-10-06-default-agent-runner.md # maps/agent-access-map/agents.md # maps/agent-access-map/onboarding.md # maps/agent-access-map/runs-adapters.md # maps/feature-map/onboarding.md # maps/feature-map/runs-adapters.md # packages/adapter-utils/src/types.ts # packages/adapters/codex-local/src/index.ts # packages/paperclip-runner/acpx-profiles.json # packages/paperclip-runner/protocol/manifest.json # packages/paperclip-runner/runner/crates/runner-core/src/generated_acpx_profiles.rs # packages/paperclip-runner/scripts/generate-acpx-profiles.mjs # packages/paperclip-runner/src/contracts/native-execution.test.ts # packages/paperclip-runner/src/contracts/native-execution.ts # packages/paperclip-runner/src/drivers/acpx/copilot-installation.test.ts # packages/paperclip-runner/src/drivers/acpx/generated-profiles.ts # packages/paperclip-runner/test/fixtures/copilot-profile-v18-identity.json # packages/shared/src/agent-runner.ts # packages/shared/src/index.ts # server/src/__tests__/adapter-auth-signal-routes.test.ts # server/src/__tests__/agent-adapter-validation-routes.test.ts # server/src/__tests__/agent-skills-routes.test.ts # server/src/__tests__/agents-pending-approval-config.test.ts # server/src/__tests__/built-in-agents.test.ts # server/src/__tests__/company-portability.test.ts # server/src/__tests__/native-status-arbiter-corpus.test.ts # server/src/__tests__/onboarding-seed-route.test.ts # server/src/__tests__/plugin-managed-agents.test.ts # server/src/dev-native-runner-status.ts # server/src/lib/agent-records.ts # server/src/lib/agent-runner-platform.ts # server/src/routes/adapters.ts # server/src/routes/agents.ts # server/src/services/agent-hiring.ts # server/src/services/agent-runner-selection.test.ts # server/src/services/agent-runner-selection.ts # server/src/services/built-in-agents.ts # server/src/services/company-portability.ts # server/src/services/native-runtime/runtime-mode.test.ts # server/src/services/native-runtime/runtime-mode.ts # server/src/services/native-runtime/setup-readiness.test.ts # server/src/services/native-runtime/setup-readiness.ts # server/src/services/plugin-managed-agents.ts # tests/e2e/chat-adapters-ui-messaging.spec.ts # tests/runner-e2e/catalog.ts # tests/runner-e2e/first-task-fixtures.ts # tests/runner-e2e/first-task-flow.ts # tests/runner-e2e/first-task.test.ts # tests/runner-e2e/runner.spec.ts # tests/storybook-visual/storybook-visual.spec.ts # ui/src/adapters/adapter-display-registry.test.ts # ui/src/adapters/adapter-display-registry.ts # ui/src/adapters/codex-local/config-fields.test.tsx # ui/src/adapters/codex-local/config-fields.tsx # ui/src/adapters/types.ts # ui/src/components/AgentConfigForm.render.test.tsx # ui/src/components/CodexRunnerSelect.tsx # ui/src/components/ConfigureBuiltInAgentModal.tsx # ui/src/components/OnboardingWizard.tsx # ui/src/components/ui/select.tsx # ui/src/lib/test-agent-setup.ts # ui/src/pages/AgentDetail.tsx # ui/src/pages/CompanyImport.tsx
PRP v1/v2 Contract
The JSON Schema files in schemas/ are the language-neutral source of truth for
Paperclip Runner Protocol versions 1 and 2. The fixtures in fixtures/ define
accepted and rejected compatibility cases.
Compatibility
protocolVersion,fixtureVersion, andevent.schemaVersionare required.- A consumer fails closed when a required version or schema discriminator is not supported.
- A v1 envelope can contain an unknown optional property when its schema marks that object as extensible.
- A consumer ignores an unknown optional property until a later contract gives it meaning.
- A required field, enum value, or typed structured-input field is not optional.
- Question and answer identifiers are stable across the provider boundary.
- Peers negotiate the highest mutually supported protocol version. Existing v1 runners remain compatible but cannot receive v2-only session-goal commands.
The unknown-optional-fields.json fixture must be accepted. The
unsupported-required-version.json fixture must be rejected.
Session goals (v2)
PRP v2 adds a provider-neutral durable session-goal lifecycle. Every v2
capability snapshot includes sessionGoals, even when its availability is
unsupported or policy_disabled. Paperclip sends controls only when the
negotiated capability advertises the corresponding action.
Commands:
session.goal.getsession.goal.setfor objective, status, and optional token budget changessession.goal.clear
Events:
session.capabilities.updatedsession.goal.snapshotsession.goal.updatedsession.goal.cleared
Goal state is separate from Paperclip's company/business goal hierarchy. The
snapshot distinguishes the durable status from workingNow, because an active
goal can be idle between autonomous turns. A runner emits the full capability
and authoritative snapshot after every session open or resume. Missing v1
capability is unsupported; clients do not infer support from an adapter name.
Scope
The first provider descriptor and adapter fixture cover Codex only. The schemas for provider-neutral events and semantic receipts do not enable those actions. Discovery and authorization are separate contracts.
The conformance manifest records every source file and its SHA-256 digest. Run
pnpm generate:protocol-manifest from this package after a source change. CI
runs the same generator with --check to reject drift. This check also compiles
the JSON Schemas and validates every replay, question, and cross-language
conformance fixture against its declared schema.
The files in fixtures/replay/golden/ are deterministic reducer oracles. Each
accepted replay fixture has a complete session snapshot and a compact parity
summary. pnpm generate:replay-goldens updates them after an intentional
reducer change; package build and CI fail when they drift.
The files in fixtures/local-runner/scripts/ drive the package-local fake
harness. They cover successful, failed, interrupted, interactive, duplicate
terminal, process-cleanup, and oversized-frame behavior without starting a
production adapter.