Files
PaperClipAI/maps/feature-map/skills.md
T
DottaandPaperclip a61cf38106 docs: keep the feature map focused on substantial features (#18767)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work.
> - The feature map describes product capabilities and user journeys.
> - Small fixes and test changes have added long notes to that map.
> - These notes make substantial features harder to find.
> - This pull request removes those additions from the last week's
changes and sets a clear rule for future additions.
> - The benefit is a smaller map with stable capability IDs and accurate
entry points.

## Linked Issues or Issue Description

**Issue type**

Unclear or confusing documentation.

**Where is the issue?**

`maps/feature-map/`, the map maintenance instructions, and repository
rules.

**What's wrong?**

Between October 27 and November 3, 2026, 115 commits changed the feature
map. Many additions describe bug fixes, performance details, small UI
changes, or new tests. They do not introduce substantial product
features. The old synchronization instructions also encouraged a map
edit for every behavior change.

**Suggested fix**

Add a rule that requires a substantial new feature before expanding the
map. Remove minor-update notes. Keep genuine feature additions and
minimal corrections to existing instructions. The review covers master
through `b22ef22d56`; it does not revert application code. Conflict
resolution preserves later map changes from master outside that audit
snapshot.

Searched open GitHub PRs and issues for related feature-map work. No
duplicate cleanup was found. Substantial feature additions retained here
include Coordinator (#17983), the agent YAML editor (#18036), document
image galleries (#18157), remote workspace storage (#18403), native Kimi
(#18391), proactive chat messages (#18374), and the Sentry receiver
added in #18714.

## What Changed

- Add `rules/feature-map-scope.mdc` and register its `maps/**` scope
with Greptile.
- Align `AGENTS.md` and the shared map contract with that rule. Routine
fixes and test changes no longer require incidental map edits.
- Remove 755 net lines from 23 feature recipes. Preserve all 35 areas
and 192 capability IDs.
- Keep substantial features and the corrections needed for current
navigation, provider availability, and access boundaries.

Examples from the reviewed changes:

| Removed or shortened addition | Why it does not need a feature-map
expansion |
| --- | --- |
| Rounded composer image thumbnails (#18689) | Small UI change within
existing task creation. |
| Connection profile reads and review-count queries (#18687, #18688) |
Performance details within existing app permissions. |
| Warm-session, Retry, export-capacity, and tool-wait cases | Regression
details for existing execution and recovery. |
| New task-search, project-context, document-persistence, and routine
test journeys | Test additions for existing capabilities. The tests
remain in place. |
| New task button placement (#18703) | Another entry to an existing task
form. |
| Local browser verification notes | Run evidence belongs in the PR or
test report. |

## Verification

- `node scripts/check-maps.mjs` passes: 35 areas, 192 capability IDs,
valid references and contract fields.
- `node scripts/storybook-catalog.mjs` passes: 328 files and 3,068
stories. Generated indexes remain ignored.
- Compared capability keys and navigation metadata in every edited
recipe with the original source. All are unchanged.
- Checked rule frontmatter, Greptile registration, representative scope
matches, and `git diff --check`.
- `pnpm -r typecheck` and `pnpm build` pass on
`9a60eef8eb8da9bc7c3a02203c79bec12e8c8b6b`. The final
`a0801e8a939494ecde3739097a80258917428e94` commit only corrects two
lines in the plugin-panel recipe; map and catalog checks pass again.
- Greptile reviewed the final `a0801e8a939494ecde3739097a80258917428e94`
head at 5/5 with no findings. The earlier review found one inaccurate
phrase about unavailable plugin panels. The hook confirms that readiness
gates automatic opening, while declared panels remain selectable. The
final documentation commit corrects that phrase and the thread is
resolved. Paperclip's refreshed review is advisory and remains queued.
- The earlier CI run failed two assertions: [server
4/12](https://github.com/paperclipai/paperclip/actions/runs/41634761842/job/125914173960)
counted three Anthropic identity calls instead of two in
`connection-management.integration.test.ts`; [chat
1/3](https://github.com/paperclipai/paperclip/actions/runs/41634761842/job/125914174257)
observed zero publications instead of one in the same-principal
endpoint-settlement case. Both exact tests pass locally on the rebased
head. This PR changes neither their source nor their expectations. These
failed results remain historical evidence.
- Final-head CI passed server 4/12 and all other suites except the first
[chat 1/3
attempt](https://github.com/paperclipai/paperclip/actions/runs/41637834618/job/125925926131),
which repeated the same zero-publication assertion. The browser gate
passed. The single failed-job retry was accepted for this unchanged head
in [workflow attempt
2](https://github.com/paperclipai/paperclip/actions/runs/41637834618/attempts/2).
[Chat 1/3 passed on that
retry](https://github.com/paperclipai/paperclip/actions/runs/41637834618/job/125933199635),
and the aggregate verification gate passed. Both required gates, `ci /
verify` and `ci / e2e`, are green on
`a0801e8a939494ecde3739097a80258917428e94`. The one retry allowance is
consumed.
- The first full local `pnpm test:run` attempt was interrupted before
completion so master could be rebased without changing source under
running tests. It is not a passing test result. Full current-head CI
remains required.
- No application code, tests, schemas, or lockfiles changed.

## Risks

- Low runtime risk. This change only edits documentation and review
guidance.
- Detailed regression instructions become less visible in the feature
map. Their tests and technical documentation remain available.
- Some additions mix a new feature with a small fix. Those blocks retain
the feature and shorten the incidental detail.

## Model Used

- OpenAI Codex, GPT-6 family, with reasoning, Git history inspection,
repository tools, and code execution. The session does not expose a more
specific model deployment 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 — map, catalog,
capability-ID, and rule-scope checks; full Vitest limits are stated
above
- [x] I have added or updated tests where applicable — no new runtime
tests apply to this documentation change
- [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-03 07:16:37 -06:00

9.8 KiB
Raw Blame History

navigation
navigation
section sectionOrder order
Agents and reusable capabilities 30 30

Skills and Skill Studio

Operators discover or import skills, author and test them in Skill Studio, manage source versions, and decide which agents may use them.

Feature ID: skills.

Implementation: skill library, studio, sources, agent skills.

Agent access: companion.

Sub-features

  • discovery: skills/discovery — browse installed/discover views and import a skill or source.
  • authoring: skills/authoring — create/edit a writable skill or fork a read-only source.
  • versions: skills/versions — inspect revisions, source updates, diffs, and selected releases.
  • policy: skills/policy — apply agent enablement and skill usage policy independently from installation.
  • testing: skills/testing — run a bounded Studio test and inspect its result and interactions.

How to get to it (user POV)

library-sources

Open /skills, Discover, or /skills/sources; project import is available through the library’s import flow. In Streamlined UI, Installed, Discover and My Skills are route links styled as tabs beneath the toolbar, with no secondary navigation rail. Sources stays separate under New → Manage sources. Legacy UI retains the Skills sidebar.

Agent API discovery distinguishes importing existing SKILL.md content from creating newly authored content. The source-import entry documents allowed local skill directories and supported remote sources without changing source checks or company skill policy. Its protocol regression checks discovery and metadata delivery, not a completed agent import journey.

studio

Use New skill or /skills/studio/:skillId; writable copies and source-backed originals differ. In Streamlined UI, /skills/studio uses the shared Skills toolbar and card collection with My Skills active and Recently updated sorting; opening a card enters Studio. Direct authoring starts at /skills/studio/new: fill Name and Slug, then Create skill. Authoring/save/reload requires no model credential; running a Studio test is separate.

agent-enablement

Use skill policy/agent selection in the library or an agent’s Skills tab.

Driving it with Playwright and the Paperclip CLI

Preconditions: follow the baseline. Use a harmless skill fixture and test agent with skill support. Record whether the source is local, bundled, project, or remote.

library-sources

Automated: library UI and source service cover their respective layers.

Manual: Install a fixture, locate it in Installed, inspect its source and files, and reload. Import a source update and compare versions before accepting it. Check a source requiring unavailable repository access and verify the failure is explicit.

studio

Automated: Studio covers UI behavior; model-driven skill testing remains a separate manual result.

Manual: Create or fork a disposable skill, edit instructions, save, and reload. Run a bounded test, respond to any question, and inspect the output. Verify the saved version matches what was tested and failed saves retain the draft.

agent-enablement

Automated: policy service and agent skills state cover policy/state contracts.

The version-cache regression checks that listing assignments does not create repository caches, validate every support file, or extend cache use. Run preparation still restores and repairs the selected version. To check attachment, use a repository skill with a cold cache, add it to an agent, then reload the skill's Agents tab and the agent's Skills tab. Keep another repository skill set to Latest during this check. With beta version pins disabled, adding the new skill must preserve that Latest selection and save without a beta-pin error. The HTTP regression checks this round trip and retention of explicit historical pins.

Manual: Enable the skill for one test agent and leave another without access. Run a small task on each, inspect the available skill context, then change the release/policy and verify the next eligible run uses the intended version.

A Paperclip Runner run with no selected skills must proceed while another run holds the company skill-cache lock. A saved empty selection remains empty after later assignments. Selected skills and the legacy operational skill retain cache exclusion through version pinning. The configuration regression uses a real PostgreSQL lock; live provider latency remains a separate check.

Concurrent selected-skill preparations share one in-flight company inventory refresh before cache locking. Each run retains its own selection and durable version pins. The concurrency regression checks shared work and separate actor access; the cache tests check that cleanup cannot remove a snapshot before the run stores its pins.

Gotchas

  • The release picker requires enableBetaSkills. Do not invent an Instructions accessibility label for the Studio body editor; inspect its current handles.

  • Installed does not mean enabled for every agent.

  • Read-only GitHub/bundled skills may require a writable copy rather than an in-place edit.

  • Studio interaction coverage is in questions and approvals; a passing mock is not a live harness test.

  • Old version disk caches may expire; saved versions remain available. Verify a pinned version is restored through normal execution with upstream unavailable. Current and in-use versions stay materialized. See cleanup controls and the database-backed cache tests.

Project repository source behavior

New GitHub project repositories import skills automatically. Skills → Sources lists accessible legacy repositories with Import skills, shows each saved repository once with its access scope but without project names, and groups matching repository/ref workspaces. Additional legacy imports for an existing source live in its More menu. Import progress appears in the source metadata; Refresh and Automatic updates are also available. Verify future additions, retained exclusions, error recovery and reload persistence. Private-only sources must be absent for unrelated people/agents; access through either originating project is sufficient.

For an oversized repository, preview and import a skill that links to shared files outside its folder. Its saved version should include those files under the original repository paths. Missing references remain visible warnings and must not disable an otherwise valid skill's selection. Verify an existing source with cached dependency errors recovers on refresh without requiring a new upstream commit. A refresh that cannot preserve installed shared files retains the prior version.

Storybook/browser coverage uses scoped fixtures. Live GitHub-to-routine execution must be verified separately; inspect resolved version IDs across an upstream update.

Connection repair during an update

A missing tracked branch is a branch repair, not a credential failure. On an independent source, choose a new branch from the searchable list or enter its name. The repository's default branch is marked and included even outside the first 100 listed branches. Loading or a failed list request does not prevent manual entry; saving validates the requested ref. Installed identities, selections and version pins remain. Project-tracked branches are changed in project settings. A saved connection is validated against both the repository and tracked revision before repair succeeds.

Open Choose connection while a source is being refreshed. Select an authorized account and save. If the source changes, the dialog must retain that selection, load the current revision, and allow a second save without reopening. The project repository browser suite covers this recovery with simulated upstream data.

Storybook verification

testing

Capability ID: skills/testing.

Scope: ui Storybook: Studio test inputs/configuration, running, question/approval, result and failed test states. Production: Run bounded test of actual saved version with correct selected account/environment; inspect persisted test detail and eligible interaction response. Sources: Source: SkillStudio.tsx, companySkills.ts. Tests: SkillStudio.test.tsx, company-skill-test-runs-service.test.ts

Documentation scope: Skills, Skill Studio, and teams

Main library/Studio/source/policy and CLI team-install paths are mapped. Full source-provider conflicts, harness sync, and remote package variants remain; catalog UI is not a current top-level route.

Installed skill updates and assignments can drive opt-in plugin runtime synchronization. Version pins remain effective. See contract and database coverage.