@tickernelz/paperclip-pro-skills-catalog 2026.925.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/catalog/bundled/docs/doc-maintenance/SKILL.md +75 -0
- package/catalog/bundled/paperclip-operations/issue-triage/SKILL.md +74 -0
- package/catalog/bundled/paperclip-operations/reflection-coach/SKILL.md +202 -0
- package/catalog/bundled/paperclip-operations/status-card-query/SKILL.md +137 -0
- package/catalog/bundled/paperclip-operations/summarize-status/SKILL.md +121 -0
- package/catalog/bundled/paperclip-operations/task-planning/SKILL.md +84 -0
- package/catalog/bundled/product/paperclip-capsules/SKILL.md +99 -0
- package/catalog/bundled/product/paperclip-capsules/references/generator-workflows.md +120 -0
- package/catalog/bundled/product/paperclip-capsules/references/hero-capsule-bank.md +189 -0
- package/catalog/bundled/product/paperclip-capsules/references/identicon-prototyper.md +213 -0
- package/catalog/bundled/product/paperclip-capsules/references/individual-status-capsules.md +113 -0
- package/catalog/bundled/product/wireframe/SKILL.md +193 -0
- package/catalog/bundled/product/wireframe/assets/site-template.html +356 -0
- package/catalog/bundled/product/wireframe/assets/template-mobile.svg +21 -0
- package/catalog/bundled/product/wireframe/assets/template.svg +24 -0
- package/catalog/bundled/product/wireframe/references/components.md +482 -0
- package/catalog/bundled/product/wireframe/references/examples.md +362 -0
- package/catalog/bundled/product/wireframe/references/grid-system.md +107 -0
- package/catalog/bundled/quality/qa-acceptance/SKILL.md +93 -0
- package/catalog/bundled/software-development/github-pr-workflow/SKILL.md +93 -0
- package/catalog/optional/browser/agent-browser/SKILL.md +93 -0
- package/catalog/optional/content/release-announcement/SKILL.md +218 -0
- package/catalog/optional/content/simplified-english/SKILL.md +40 -0
- package/catalog/optional/finance/ramp/SKILL.md +98 -0
- package/catalog/optional/product/design-critique/SKILL.md +121 -0
- package/catalog/optional/research/last30days/catalog-ref.json +44 -0
- package/catalog/optional/software-development/prepare-mcp-integration/SKILL.md +230 -0
- package/catalog/optional/software-development/prepare-mcp-integration/examples/notion-mcp-research-gate.md +43 -0
- package/dist/generated/catalog.json +1165 -0
- package/dist/scripts/build-catalog-manifest.d.ts +2 -0
- package/dist/scripts/build-catalog-manifest.d.ts.map +1 -0
- package/dist/scripts/build-catalog-manifest.js +15 -0
- package/dist/scripts/build-catalog-manifest.js.map +1 -0
- package/dist/scripts/validate-catalog.d.ts +2 -0
- package/dist/scripts/validate-catalog.d.ts.map +1 -0
- package/dist/scripts/validate-catalog.js +15 -0
- package/dist/scripts/validate-catalog.js.map +1 -0
- package/dist/src/catalog-builder.d.ts +16 -0
- package/dist/src/catalog-builder.d.ts.map +1 -0
- package/dist/src/catalog-builder.js +688 -0
- package/dist/src/catalog-builder.js.map +1 -0
- package/dist/src/catalog-builder.test.d.ts +2 -0
- package/dist/src/catalog-builder.test.d.ts.map +1 -0
- package/dist/src/catalog-builder.test.js +355 -0
- package/dist/src/catalog-builder.test.js.map +1 -0
- package/dist/src/frontmatter.d.ts +3 -0
- package/dist/src/frontmatter.d.ts.map +1 -0
- package/dist/src/frontmatter.js +3 -0
- package/dist/src/frontmatter.js.map +1 -0
- package/dist/src/frontmatter.test.d.ts +2 -0
- package/dist/src/frontmatter.test.d.ts.map +1 -0
- package/dist/src/frontmatter.test.js +31 -0
- package/dist/src/frontmatter.test.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +21 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/packaged-artifacts.test.d.ts +2 -0
- package/dist/src/packaged-artifacts.test.d.ts.map +1 -0
- package/dist/src/packaged-artifacts.test.js +48 -0
- package/dist/src/packaged-artifacts.test.js.map +1 -0
- package/dist/src/release-content-cases-contract.test.d.ts +2 -0
- package/dist/src/release-content-cases-contract.test.d.ts.map +1 -0
- package/dist/src/release-content-cases-contract.test.js +37 -0
- package/dist/src/release-content-cases-contract.test.js.map +1 -0
- package/dist/src/shipped-catalog.test.d.ts +2 -0
- package/dist/src/shipped-catalog.test.d.ts.map +1 -0
- package/dist/src/shipped-catalog.test.js +179 -0
- package/dist/src/shipped-catalog.test.js.map +1 -0
- package/dist/src/types.d.ts +54 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/generated/catalog.json +1165 -0
- package/package.json +54 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Paperclip AI
|
|
4
|
+
Copyright (c) 2026 Zhafron Adani Kautsar (paperclip-pro fork modifications)
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: doc-maintenance
|
|
3
|
+
description: Keep project docs aligned with recent code and feature changes — detect drift, update affected pages, and add release-relevant notes without rewriting unchanged sections.
|
|
4
|
+
key: paperclipai/bundled/docs/doc-maintenance
|
|
5
|
+
recommendedForRoles:
|
|
6
|
+
- engineer
|
|
7
|
+
- product
|
|
8
|
+
- devrel
|
|
9
|
+
tags:
|
|
10
|
+
- docs
|
|
11
|
+
- documentation
|
|
12
|
+
- release-notes
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Doc Maintenance
|
|
16
|
+
|
|
17
|
+
Keep the documentation honest with minimum churn. The goal is alignment between docs and behavior, not stylistic rewrites or cosmetic re-organization. Reviewers should be able to read a diff and see "this updates docs to match recent behavior changes".
|
|
18
|
+
|
|
19
|
+
## When to use
|
|
20
|
+
|
|
21
|
+
- A PR or recent set of merges changed user-visible behavior: CLI flags, API shapes, default values, configuration keys, endpoints, environment variables, supported versions.
|
|
22
|
+
- A user-reported bug traced back to outdated documentation.
|
|
23
|
+
- A release is being cut and the docs need a pass against the merged commits.
|
|
24
|
+
- A new feature shipped but only the engineer's PR description describes how to use it.
|
|
25
|
+
|
|
26
|
+
## When not to use
|
|
27
|
+
|
|
28
|
+
- The change is internal-only (private helper rename, refactor) with no user-visible impact.
|
|
29
|
+
- You want to "improve the docs" without a behavior anchor. That is a separate scoped project, not maintenance — make a plan first.
|
|
30
|
+
|
|
31
|
+
## The pass
|
|
32
|
+
|
|
33
|
+
1. **Establish the baseline.** Get the commit range you are documenting against (since last release tag, since last merged-doc commit, or since a specific PR).
|
|
34
|
+
2. **Enumerate user-visible changes.** Read commits and PR descriptions. List, for each change, what a user can now do differently.
|
|
35
|
+
3. **Map changes to docs.** For each change, find every page that mentions the affected concept. Common targets: README, CLI reference, API reference, configuration reference, migration guide, FAQ, examples.
|
|
36
|
+
4. **Update precisely.** Edit only the lines that need to change. Do not rewrap paragraphs you did not modify — it pollutes the diff.
|
|
37
|
+
5. **Add new entries where needed.** New CLI flag → CLI reference entry. New env var → configuration reference entry. New endpoint → API reference entry. Don't only add it to the changelog.
|
|
38
|
+
6. **Update examples and snippets.** Code blocks in docs are wrong faster than prose. Re-run any example that touches new behavior.
|
|
39
|
+
7. **Write the release note.** One sentence per user-visible change. Group by Added / Changed / Fixed / Deprecated / Removed. Link to the relevant PRs and docs section.
|
|
40
|
+
8. **Cross-check.** Search the docs for the old behavior wording and remove or update stragglers.
|
|
41
|
+
|
|
42
|
+
## Style baseline
|
|
43
|
+
|
|
44
|
+
- Voice: second person ("you can pass `--json` to ..."). Avoid "we" except in narrative pages.
|
|
45
|
+
- Tense: present, not future. The behavior exists once shipped.
|
|
46
|
+
- Headings: imperative ("Configure the cache") or noun-phrase ("Cache configuration"), match the surrounding page.
|
|
47
|
+
- Code blocks: include the language tag so syntax highlighting works.
|
|
48
|
+
- Cross-links: link the first mention of a concept on each page; do not link every occurrence.
|
|
49
|
+
- Avoid promising future behavior. If something is unreleased, mark it `experimental` or omit it.
|
|
50
|
+
|
|
51
|
+
## Drift detection
|
|
52
|
+
|
|
53
|
+
A doc page is drifting if any of these are true:
|
|
54
|
+
|
|
55
|
+
- It documents a flag, key, or endpoint that no longer exists.
|
|
56
|
+
- An example does not run as written.
|
|
57
|
+
- A default value in the docs does not match the code.
|
|
58
|
+
- A supported-versions list excludes a version the project actually supports, or includes one it dropped.
|
|
59
|
+
- A "Coming soon" section references a feature that shipped or was cancelled.
|
|
60
|
+
|
|
61
|
+
When you find drift, fix it in the same pass and note it in the release note's `Fixed` group.
|
|
62
|
+
|
|
63
|
+
## Release-note rules
|
|
64
|
+
|
|
65
|
+
- One sentence per item. If two sentences are needed, the item is likely two items.
|
|
66
|
+
- User impact first, internal cause second. `Faster cold start (avoid full bundle download on first run)` beats `Refactor bootstrap loader`.
|
|
67
|
+
- Link the PR for engineering readers and the docs page for users.
|
|
68
|
+
- Mark breaking changes explicitly: `**Breaking:**` prefix. Include migration steps inline or via link.
|
|
69
|
+
|
|
70
|
+
## Anti-patterns
|
|
71
|
+
|
|
72
|
+
- Massive doc PRs that bundle stylistic rewrites with real updates. Reviewers cannot tell which lines reflect actual behavior changes.
|
|
73
|
+
- "Updated docs" commit messages with no detail. Make the commit say what changed and why.
|
|
74
|
+
- Adding to the changelog without updating the reference docs the changelog points to.
|
|
75
|
+
- Marking a feature as available before its code lands. Documentation must follow behavior, not promise it.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: issue-triage
|
|
3
|
+
description: Triage Paperclip inbox issues that are stale, blocked, in-review, or assigned-but-not-progressing, and decide a single next action per issue (resume, reassign, unblock, escalate, or close).
|
|
4
|
+
key: paperclipai/bundled/paperclip-operations/issue-triage
|
|
5
|
+
recommendedForRoles:
|
|
6
|
+
- manager
|
|
7
|
+
- ceo
|
|
8
|
+
- engineer
|
|
9
|
+
tags:
|
|
10
|
+
- paperclip
|
|
11
|
+
- triage
|
|
12
|
+
- inbox
|
|
13
|
+
- workflow
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Issue Triage
|
|
17
|
+
|
|
18
|
+
Convert a noisy inbox into a small set of clear next actions. Each pass through this skill should leave every touched issue with a defined owner, status, and the single concrete action that will move it forward.
|
|
19
|
+
|
|
20
|
+
## When to use
|
|
21
|
+
|
|
22
|
+
- Daily or shift-start review of `in_progress`, `in_review`, and `blocked` assignments.
|
|
23
|
+
- An inbox has many open assignments and no clear priority.
|
|
24
|
+
- A manager wants a status read on their reports without asking each agent.
|
|
25
|
+
- You are woken by a comment that suggests an old issue stalled.
|
|
26
|
+
|
|
27
|
+
## When not to use
|
|
28
|
+
|
|
29
|
+
- You are checked out on one specific issue and the wake context names it. Work that issue, do not triage the whole inbox.
|
|
30
|
+
- An issue thread already has an open `request_confirmation` or `ask_user_questions`. Wait for the response — re-triage is noise.
|
|
31
|
+
|
|
32
|
+
## Inputs
|
|
33
|
+
|
|
34
|
+
- `GET /api/agents/me/inbox-lite` for the compact assignment list.
|
|
35
|
+
- For each candidate issue, `GET /api/issues/{issueId}/heartbeat-context` for compact state including `blockerAttention`, `executionState`, ancestors, and `commentCursor`.
|
|
36
|
+
- Only fall back to the full thread when the heartbeat context is not enough.
|
|
37
|
+
|
|
38
|
+
## Per-issue triage decision
|
|
39
|
+
|
|
40
|
+
For each issue, classify into exactly one of:
|
|
41
|
+
|
|
42
|
+
1. **Resume** — execution path is alive. Confirm the assignee is set and let the heartbeat continue. Do not comment.
|
|
43
|
+
2. **Wake-needed** — assignee is stalled with no live continuation. Post one comment that names the blocker resolution or the exact next action, then leave `in_progress` or move to `todo` so the assignee picks it up.
|
|
44
|
+
3. **Reassign** — the assignee is not the right specialty. Reassign and set `in_review` only if the new assignee is human, otherwise leave `in_progress`.
|
|
45
|
+
4. **Unblock** — a first-class `blockedByIssueIds` entry is now `done` or `cancelled`. If `cancelled`, replace or remove it from `blockedByIssueIds`. The blockers-resolved wake will fire automatically when all are `done`.
|
|
46
|
+
5. **Escalate** — the issue needs board, CTO, or user input. Create a `request_confirmation`, `ask_user_questions`, or `request_board_approval` and set the issue to `in_review`.
|
|
47
|
+
6. **Close** — work is complete, duplicate, or no longer relevant. Set `done` or `cancelled` with a one-line reason.
|
|
48
|
+
|
|
49
|
+
If you cannot classify in under a minute of reading, escalate rather than guess.
|
|
50
|
+
|
|
51
|
+
## Stuck-state heuristics
|
|
52
|
+
|
|
53
|
+
- `in_progress` with no comments or document updates in the last 24h and no monitor or queued continuation → wake-needed.
|
|
54
|
+
- `in_review` with no reviewer participant, no pending interaction, no approval — invalid review path → reassign to a real reviewer or move to `todo`.
|
|
55
|
+
- `blocked` with no `blockedByIssueIds`, only free-text "blocked by X" → convert to first-class blockers or move to `todo` with a named action.
|
|
56
|
+
- `blocked` with all blockers `done` → unblock the issue by setting status back; the assignee will wake.
|
|
57
|
+
- Child issues all complete but parent still `in_progress` → confirm parent acceptance, then close.
|
|
58
|
+
|
|
59
|
+
## Don't-do list
|
|
60
|
+
|
|
61
|
+
- Do not @-mention agents during triage; mentions cost budget. Use direct reassignment instead.
|
|
62
|
+
- Do not re-comment on a `blocked` issue if your most recent comment was also a blocked update with no reply since.
|
|
63
|
+
- Do not cancel cross-team issues. Reassign to the responsible manager with a comment.
|
|
64
|
+
- Do not change status without a comment that explains the change.
|
|
65
|
+
|
|
66
|
+
## Output of a triage pass
|
|
67
|
+
|
|
68
|
+
A short comment chain or summary message that lists, per issue touched:
|
|
69
|
+
|
|
70
|
+
- Issue id and title.
|
|
71
|
+
- Verdict (resume / wake-needed / reassign / unblock / escalate / close).
|
|
72
|
+
- The one action you took or asked for.
|
|
73
|
+
|
|
74
|
+
This is the bar for "the triage is done."
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reflection-coach
|
|
3
|
+
description: Reflect on another agent's recent execution record and propose the smallest durable instruction, skill, or tool-description change. Use for evidence-backed coaching proposals, never hot-swaps.
|
|
4
|
+
key: paperclipai/bundled/paperclip-operations/reflection-coach
|
|
5
|
+
recommendedForRoles:
|
|
6
|
+
- manager
|
|
7
|
+
- general
|
|
8
|
+
tags:
|
|
9
|
+
- paperclip
|
|
10
|
+
- reflection
|
|
11
|
+
- coaching
|
|
12
|
+
- agents
|
|
13
|
+
- skills
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Reflection Coach
|
|
17
|
+
|
|
18
|
+
You are coaching another agent. You are **not** that agent. Read their recent execution record, name the patterns, and propose the smallest durable change — to their `AGENTS.md`, to a reusable skill, or to a tool description — that would make them more effective going forward.
|
|
19
|
+
|
|
20
|
+
This skill runs **on a target agent** and produces a reviewable proposal. You may have permission to apply changes, but application is always gated: a displayed diff, an accepted task interaction, and a separate follow-up run. You never propose and apply in the same run.
|
|
21
|
+
|
|
22
|
+
Two load-bearing rules: **trajectories, not scores, are load-bearing**, and **changes apply only from a reviewed diff after an accepted interaction — never hot-swapped**.
|
|
23
|
+
|
|
24
|
+
## When to use
|
|
25
|
+
|
|
26
|
+
- An issue asks you to reflect on, coach, or review the recent work of a specific agent.
|
|
27
|
+
- A routine (e.g. `recent-agent-reflection`) hands you a bounded set of agents to review.
|
|
28
|
+
- Someone wants an evidence-backed proposal to improve an agent's instructions or skills.
|
|
29
|
+
|
|
30
|
+
## When not to use
|
|
31
|
+
|
|
32
|
+
- The target agent id is your own. Refuse — no self-reflection.
|
|
33
|
+
- You are asked to rewrite product code or shared infra. That is out of scope.
|
|
34
|
+
- You are asked to apply a change directly with no reviewed diff and no accepted interaction. Refuse and name the gate.
|
|
35
|
+
|
|
36
|
+
## Inputs
|
|
37
|
+
|
|
38
|
+
Required:
|
|
39
|
+
|
|
40
|
+
- `targetAgentId` — the agent you are coaching. Never coach yourself.
|
|
41
|
+
- `windowHours` or `issueCount` — default to the last 10 completed/closed issues or the last 72 hours, whichever is larger. Cap at 25 issues to stay within budget.
|
|
42
|
+
|
|
43
|
+
Optional:
|
|
44
|
+
|
|
45
|
+
- `focus` — free-text hint ("verification misses", "late escalations"). Bias clustering toward this axis if given.
|
|
46
|
+
- `replayIssueIds` — a pinned subset of past issues used as the replay benchmark. If absent, pick 3–5 representative recent issues from the window.
|
|
47
|
+
|
|
48
|
+
## Hard guardrails
|
|
49
|
+
|
|
50
|
+
Every proposal must satisfy all of these:
|
|
51
|
+
|
|
52
|
+
- **No same-run apply.** Discovery and application are separate runs. You produce a diff plus an assignment plan; a human or the board accepts it through an interaction before anything is applied.
|
|
53
|
+
- **Size caps.** Skills ≤ 15KB. Tool descriptions ≤ 500 chars. `AGENTS.md` may grow by **at most +20%** per proposal. Want more? Split proposals.
|
|
54
|
+
- **Trajectory-backed or drop it.** Every proposed rule cites at least one concrete quote or issue id from the target's recent record. No evidence, no rule.
|
|
55
|
+
- **Not your code.** Only propose changes to the target's instructions, their skills, or their tool descriptions. Never to code they do not own or to shared infra.
|
|
56
|
+
- **Benchmark-gated.** Name the replay cases the proposal must still resolve. If a rule would have broken a past success, drop it.
|
|
57
|
+
- **No reflection on yourself.** If `targetAgentId == PAPERCLIP_AGENT_ID`, refuse and ask for another coach.
|
|
58
|
+
|
|
59
|
+
## Procedure
|
|
60
|
+
|
|
61
|
+
### 1) Confirm target and scope
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
curl -sS "$PAPERCLIP_API_URL/api/agents/<targetAgentId>" \
|
|
65
|
+
-H "Authorization: Bearer $PAPERCLIP_API_KEY"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Record `name`, `role`, `reportsTo`, `adapterType`, `adapterConfig.instructionsFilePath` (where `AGENTS.md` lives), and current assigned skills via `GET /api/agents/<targetAgentId>/skills`. Refuse and exit if `targetAgentId == $PAPERCLIP_AGENT_ID`.
|
|
69
|
+
|
|
70
|
+
### 2) Pull the recent record
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
curl -sS "$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/issues?assigneeAgentId=<targetAgentId>&status=done,in_review,blocked&limit=25" \
|
|
74
|
+
-H "Authorization: Bearer $PAPERCLIP_API_KEY"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
For each issue, pull the trajectory substrate — the issue body and its comments:
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
curl -sS "$PAPERCLIP_API_URL/api/issues/<issueId>" -H "Authorization: Bearer $PAPERCLIP_API_KEY"
|
|
81
|
+
curl -sS "$PAPERCLIP_API_URL/api/issues/<issueId>/comments" -H "Authorization: Bearer $PAPERCLIP_API_KEY"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Keep status transitions, blocker reasons, reviewer comments, approval outcomes, human corrections, and PR-link comments. Comments are the closest thing Paperclip has to an execution trace — treat them as first-class evidence.
|
|
85
|
+
|
|
86
|
+
### 3) Read the target's current guardrails
|
|
87
|
+
|
|
88
|
+
Before proposing anything, read what already exists so you don't restate it:
|
|
89
|
+
|
|
90
|
+
- Their `AGENTS.md` at `adapterConfig.instructionsFilePath`.
|
|
91
|
+
- Their assigned skills (from step 1).
|
|
92
|
+
- Any `MEMORY.md` / `memory/` files in their cwd if the adapter uses para-memory-files.
|
|
93
|
+
|
|
94
|
+
If a rule you were about to propose is already present, drop it. A failure pattern *despite* an existing rule is a different finding — record it as "existing rule X is not being followed" and propose how to make it stick (move to a skill, add a negative example, strengthen the trigger), not a duplicate.
|
|
95
|
+
|
|
96
|
+
### 4) Cluster the failures
|
|
97
|
+
|
|
98
|
+
Name each cluster from this taxonomy:
|
|
99
|
+
|
|
100
|
+
- **verifier-miss** — agent claimed done; reviewer rejected.
|
|
101
|
+
- **avoidable-rework** — same issue reopened more than once.
|
|
102
|
+
- **stale-context** — acted on an assumption already falsified in-thread.
|
|
103
|
+
- **instruction-miss** — violated an existing rule in `AGENTS.md`.
|
|
104
|
+
- **late-escalation** — stayed blocked too long without escalating.
|
|
105
|
+
- **human-correction** — a user explicitly said to do X differently.
|
|
106
|
+
- **tool-misuse** — hit the same tool-error pattern repeatedly.
|
|
107
|
+
- **scope-creep** — changes beyond task scope.
|
|
108
|
+
|
|
109
|
+
For each cluster keep a list of `(issueId, commentId, one-line evidence quote)` tuples. **No cluster survives without at least 2 evidence tuples** — one-offs are not patterns.
|
|
110
|
+
|
|
111
|
+
### 5) Route each cluster to a target surface
|
|
112
|
+
|
|
113
|
+
- **Agent-specific, narrow, cheap to state** → `AGENTS.md` update. E.g. "always re-run failing tests before marking in_review."
|
|
114
|
+
- **Generalizable, multi-step procedure with when-to-use logic** → new or updated reusable skill.
|
|
115
|
+
- **Both** → update/create the skill AND add a pointer line in `AGENTS.md` so the agent knows when to reach for it. Common case for non-obvious procedures.
|
|
116
|
+
- **Tool description** → only if the failure was "agent didn't know when to use tool X" and a ≤500-char description change fixes it.
|
|
117
|
+
|
|
118
|
+
Sanity check reuse honestly: a rule that applies to all coders belongs in a shared skill; a "reusable skill" that only fits one role belongs in that agent's `AGENTS.md`.
|
|
119
|
+
|
|
120
|
+
### 6) Draft the proposal document
|
|
121
|
+
|
|
122
|
+
Create a document attached to the **reflection issue** (never the target's issues). One section per cluster:
|
|
123
|
+
|
|
124
|
+
```markdown
|
|
125
|
+
## Cluster: <name>
|
|
126
|
+
|
|
127
|
+
**Pattern (1 sentence, quotable):**
|
|
128
|
+
**Root cause hypothesis:**
|
|
129
|
+
**Evidence (≥2):**
|
|
130
|
+
- [PAP-NNN](/PAP/issues/PAP-NNN) — "<verbatim fragment>"
|
|
131
|
+
- [PAP-MMM](/PAP/issues/PAP-MMM) — "<verbatim fragment>"
|
|
132
|
+
|
|
133
|
+
**Proposed change:**
|
|
134
|
+
- Target surface: AGENTS.md | skill:<slug> | both | tool-description:<tool>
|
|
135
|
+
- Diff (inline, minimal, ≤20% AGENTS.md growth / ≤15KB skill):
|
|
136
|
+
```diff
|
|
137
|
+
...
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Expected still-passes (replay):**
|
|
141
|
+
- [PAP-XXX](/PAP/issues/PAP-XXX), [PAP-YYY](/PAP/issues/PAP-YYY)
|
|
142
|
+
|
|
143
|
+
**Why this change, not something bigger:**
|
|
144
|
+
(1–2 sentences on why you didn't rewrite more.)
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 7) Write the actual drafts (files, not just prose)
|
|
148
|
+
|
|
149
|
+
- **Skill surface** — draft a full `SKILL.md` (frontmatter → Overview → When to use → Process → Pitfalls → Verification), ≤ 15KB. Put it under `drafts/<skill-slug>/SKILL.md` and attach it to the reflection issue.
|
|
150
|
+
- **AGENTS.md surface** — write a unified diff against the target's current `AGENTS.md`. Do not rewrite the whole file; quote 1–3 lines of context per change. Keep total growth ≤ +20%; split if you can't.
|
|
151
|
+
|
|
152
|
+
### 8) Benchmark-gate the proposal
|
|
153
|
+
|
|
154
|
+
For each pinned replay issue, ask: "If this rule had been in effect, would the agent still have succeeded?" Drop or reword any rule that would have blocked a past success without a clear reason. Record the walk in "Expected still-passes." This is a lightweight stand-in for a real replay harness — the discipline is the point.
|
|
155
|
+
|
|
156
|
+
### 9) Publish and request acceptance
|
|
157
|
+
|
|
158
|
+
From a reflection issue (assigned to the target's manager or the requester):
|
|
159
|
+
|
|
160
|
+
1. Attach the proposal document: `PUT /api/issues/{issueId}/documents/reflection-proposal`.
|
|
161
|
+
2. If a draft skill was written, commit it under `skills/<skill-slug>/` (or attach it) and link it in the proposal.
|
|
162
|
+
3. Open the acceptance gate with a task interaction on the reflection issue. Mutations that change instructions, skills, or tool descriptions must use `request_confirmation`, show the diff in `payload.detailsMarkdown`, set `continuationPolicy: wake_assignee_on_accept`, and include the exact `payload.target.key` listed below.
|
|
163
|
+
4. Leave a comment summarizing: target agent, window, clusters found, surfaces touched, link to the proposal, link to the interaction, and the next-step owner.
|
|
164
|
+
|
|
165
|
+
Server-enforced mutation target keys:
|
|
166
|
+
|
|
167
|
+
- Agent instructions: `agent:<agentId>:instructions`
|
|
168
|
+
- Agent/tool description fields: `agent:<agentId>:profile`
|
|
169
|
+
- Existing company skill: `skill:<skillId>`
|
|
170
|
+
- New local company skill by slug: `skill-slug:<slug>`
|
|
171
|
+
- Imported or catalog skill source: `skill-import:<source>`
|
|
172
|
+
- Project workspace skill scan: `skills:scan-projects`
|
|
173
|
+
|
|
174
|
+
### 10) Apply only after acceptance, in a follow-up run
|
|
175
|
+
|
|
176
|
+
When the interaction resolves **accepted**, apply the change in a *separate* run:
|
|
177
|
+
|
|
178
|
+
- **AGENTS.md** — update the target's managed instruction file exactly as the accepted diff specified.
|
|
179
|
+
- **Skill** — install/update the skill in the company library, then `POST /api/agents/<targetAgentId>/skills/sync` with `{"mode":"add","desiredSkills":["<skill-ref>"]}` when the target should receive it. Use `remove` only for the named assignments. Use `replace` only after explicit confirmation to overwrite the complete desired skill set.
|
|
180
|
+
- **Tool description** — update the target agent's description/profile field that the accepted diff named.
|
|
181
|
+
|
|
182
|
+
The server rejects Reflection Coach mutations unless the accepted `request_confirmation` was created by Reflection Coach in a previous run, has a displayed diff, and is bound to the resource by one of the target keys above. If the interaction was rejected or is still pending, apply nothing. If you were asked to apply without a reviewed diff and an accepted interaction, refuse and name the gate — no-same-run-apply is load-bearing.
|
|
183
|
+
|
|
184
|
+
## Pitfalls
|
|
185
|
+
|
|
186
|
+
- **Scoring without trajectories.** Don't say "failed 3 times" without quoting the failures. Scores alone collapse improvement rate.
|
|
187
|
+
- **Proposing the bigger rewrite.** Your job is the smallest change that would have prevented the cluster. Bigger feels impressive; it isn't.
|
|
188
|
+
- **Duplicating rules the agent already has.** Read `AGENTS.md` + assigned skills first. An existing-but-unfollowed rule is a "make it stick" proposal, not a restatement.
|
|
189
|
+
- **Applying in the discovery run.** Even with permission, discovery and application are separate runs behind an accepted interaction.
|
|
190
|
+
- **Silently expanding scope.** The +20% cap exists because every new rule competes for attention. Four small proposals beat one big rewrite.
|
|
191
|
+
- **Promising runtime value.** You are not improving the agent mid-session. This is offline, diff-reviewed, interaction-gated.
|
|
192
|
+
|
|
193
|
+
## Verification (self-check before publishing)
|
|
194
|
+
|
|
195
|
+
- [ ] `targetAgentId != $PAPERCLIP_AGENT_ID`
|
|
196
|
+
- [ ] Each cluster has ≥2 evidence tuples with a linked issue + verbatim quote
|
|
197
|
+
- [ ] Each proposal names the target surface explicitly and includes the diff (not just prose)
|
|
198
|
+
- [ ] `AGENTS.md` growth ≤ 20%, skills ≤ 15KB, tool descriptions ≤ 500 chars
|
|
199
|
+
- [ ] Replay set has ≥3 past issues the rules still pass against
|
|
200
|
+
- [ ] Proposal document linked from the reflection issue
|
|
201
|
+
- [ ] An acceptance interaction (showing the diff) is open before any mutation
|
|
202
|
+
- [ ] No claim that the target has already "been updated" before acceptance + follow-up run
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: status-card-query
|
|
3
|
+
description: Create and maintain agent-authored Paperclip status cards, or compile a prose interest prompt into bounded CompanySearchQuery objects and write the first summary from the assigned Summarizer run.
|
|
4
|
+
key: paperclipai/bundled/paperclip-operations/status-card-query
|
|
5
|
+
recommendedForRoles:
|
|
6
|
+
- general
|
|
7
|
+
- manager
|
|
8
|
+
tags:
|
|
9
|
+
- paperclip
|
|
10
|
+
- status
|
|
11
|
+
- search
|
|
12
|
+
- reporting
|
|
13
|
+
- operations
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Status card query
|
|
17
|
+
|
|
18
|
+
Use this skill in one of two modes:
|
|
19
|
+
|
|
20
|
+
1. **Agent authoring:** create or maintain a status card through the public API.
|
|
21
|
+
2. **Summarizer compilation:** compile a card's prose prompt into structured company-search queries and write the first summary from the assigned generation run.
|
|
22
|
+
|
|
23
|
+
## Agent-authored card recipe
|
|
24
|
+
|
|
25
|
+
Agent-authored cards require `tasks:assign`, remain company-scoped, and are available only when `enableStatusCards` is enabled. An agent may manage only cards it authored, may author at most 20 cards, and may send at most 4,000 characters in `interestPrompt`.
|
|
26
|
+
|
|
27
|
+
Normalize the run-provided API base and create a manual card:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
PAPERCLIP_API_BASE="${PAPERCLIP_API_URL%/}"
|
|
31
|
+
PAPERCLIP_API_BASE="${PAPERCLIP_API_BASE%/api}"
|
|
32
|
+
|
|
33
|
+
curl -sS -X POST \
|
|
34
|
+
-H "Authorization: Bearer $PAPERCLIP_API_KEY" \
|
|
35
|
+
-H "Content-Type: application/json" \
|
|
36
|
+
-d '{"interestPrompt":"Blocked or in-review launch work updated this week"}' \
|
|
37
|
+
"$PAPERCLIP_API_BASE/api/companies/$PAPERCLIP_COMPANY_ID/status-cards"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Creation returns `201` and queues compilation automatically. Save the returned card id. To refine an owned card or request a refresh:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
curl -sS -X PATCH \
|
|
44
|
+
-H "Authorization: Bearer $PAPERCLIP_API_KEY" \
|
|
45
|
+
-H "Content-Type: application/json" \
|
|
46
|
+
-d '{"interestPrompt":"Blocked or in-review launch work updated this week. Call out the single next decision."}' \
|
|
47
|
+
"$PAPERCLIP_API_BASE/api/status-cards/$STATUS_CARD_ID"
|
|
48
|
+
|
|
49
|
+
curl -sS -X POST \
|
|
50
|
+
-H "Authorization: Bearer $PAPERCLIP_API_KEY" \
|
|
51
|
+
-H "Content-Type: application/json" \
|
|
52
|
+
-d '{"full":false}' \
|
|
53
|
+
"$PAPERCLIP_API_BASE/api/status-cards/$STATUS_CARD_ID/refresh"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Do not call `/query` or `/summary` while authoring. Those write-back routes are reserved for the assigned Summarizer generation issue and run.
|
|
57
|
+
|
|
58
|
+
## Summarizer compilation
|
|
59
|
+
|
|
60
|
+
You are the Summarizer compiling a status card's prose interest prompt into structured Paperclip company-search queries. The query array has **union semantics**: an issue matching any query belongs to the card. Prefer one narrow query; add another only when the prompt describes genuinely distinct populations.
|
|
61
|
+
|
|
62
|
+
## CompanySearchQuery
|
|
63
|
+
|
|
64
|
+
Each object accepts these fields:
|
|
65
|
+
|
|
66
|
+
- `q`: optional free-text search across matching company resources. Use it only for concepts not represented by structured filters.
|
|
67
|
+
- `scope`: use `issues` for status cards unless the assignment explicitly requires another supported scope.
|
|
68
|
+
- `status`: issue-status array.
|
|
69
|
+
- `priority`: issue-priority array.
|
|
70
|
+
- `assigneeAgentId` / `assigneeUserId`: a resolved assignee id.
|
|
71
|
+
- `projectId`: one resolved project UUID.
|
|
72
|
+
- `labelId`: one resolved label UUID.
|
|
73
|
+
- `updatedWithin`: a bounded duration such as `24h`, `7d`, `4w`, or `3m`.
|
|
74
|
+
- `sort`: `relevance`, `updated`, `created`, or `priority`.
|
|
75
|
+
- `limit`: 1–50. Cap status-card queries at the smallest useful value, normally 20 and never above 50.
|
|
76
|
+
- `offset`: normally 0.
|
|
77
|
+
|
|
78
|
+
Resolve project and label names to ids before writing the query. Do not put human-readable names into `projectId` or `labelId`. If one prompt names multiple projects or labels, use separate query objects because each object has one `projectId` and one `labelId`.
|
|
79
|
+
|
|
80
|
+
## Compilation guidance
|
|
81
|
+
|
|
82
|
+
1. Preserve the user's intent; do not broaden “launch blockers updated this week” into every active task.
|
|
83
|
+
2. Prefer structured filters over `q` for status, priority, assignee, project, label, and recency.
|
|
84
|
+
3. Add `updatedWithin` whenever the prompt says recent, current, this week, lately, or otherwise implies a moving window.
|
|
85
|
+
4. Keep `q` short and specific. Avoid copying the whole prose prompt into it.
|
|
86
|
+
5. Set `scope: "issues"`, `offset: 0`, and an explicit bounded `limit` on every query.
|
|
87
|
+
6. Return at least one query. If the prompt cannot be compiled safely, report the ambiguity instead of inventing ids.
|
|
88
|
+
|
|
89
|
+
## Exact write-back sequence
|
|
90
|
+
|
|
91
|
+
The generation issue contains `statusCardId`, `companyId`, and `generationIssueId`. Both writes must use the run-scoped API credentials from that same assigned issue run.
|
|
92
|
+
|
|
93
|
+
First write the compiled query:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"queries": [
|
|
98
|
+
{
|
|
99
|
+
"q": "launch",
|
|
100
|
+
"scope": "issues",
|
|
101
|
+
"status": ["in_progress", "blocked", "in_review"],
|
|
102
|
+
"updatedWithin": "7d",
|
|
103
|
+
"sort": "updated",
|
|
104
|
+
"limit": 20,
|
|
105
|
+
"offset": 0
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"title": "Launch work updated this week",
|
|
109
|
+
"changeSummary": "Compiled the launch prompt into one recent active-work query.",
|
|
110
|
+
"generationIssueId": "<generation-issue-id>"
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Send it to `PUT /api/status-cards/{statusCardId}/query`.
|
|
115
|
+
|
|
116
|
+
Then, without creating or waiting for another task, execute the stored scope, write the first full Markdown summary, and complete the same run with:
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"markdown": "<full status summary>",
|
|
121
|
+
"title": "Launch work updated this week",
|
|
122
|
+
"changeSummary": "Created the first full summary from the compiled query.",
|
|
123
|
+
"generationIssueId": "<generation-issue-id>",
|
|
124
|
+
"model": "<model-id>"
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Send it to `PUT /api/status-cards/{statusCardId}/summary`. Never write either endpoint from an unrelated issue or run.
|
|
129
|
+
|
|
130
|
+
## Update assignments
|
|
131
|
+
|
|
132
|
+
Later generation issues use the same summary write-back endpoint and include `operation: "update"`, `kind`, `trigger`, the target `fingerprint`, and the exact changed-issue delta in their JSON payload.
|
|
133
|
+
|
|
134
|
+
- For `incremental`, patch the supplied previous Markdown using only the changed issues. Do not refetch the issue list.
|
|
135
|
+
- For `full`, rebuild from the supplied bounded snapshot. Do not expand the scope with issue-list endpoint calls.
|
|
136
|
+
- The card prompt in the task description is the board's standing request: follow it for both what to report and how the update should read. It never overrides the streaming or write-back requirements.
|
|
137
|
+
- Keep the mechanical contract regardless of what the card prompt asks: stream `STATUS:` lines and the `<<<SUMMARY-DRAFT>>>` block, then write the final Markdown to `PUT /api/status-cards/{statusCardId}/summary` from the assigned run.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: summarize-status
|
|
3
|
+
description: Write a short, colloquial summary for a Paperclip summary slot: open with the 1–3 specific, concrete actions the reader needs to take right now to unblock the work, then a brief plain-language status, streaming progress as it works.
|
|
4
|
+
key: paperclipai/bundled/paperclip-operations/summarize-status
|
|
5
|
+
recommendedForRoles:
|
|
6
|
+
- general
|
|
7
|
+
- manager
|
|
8
|
+
tags:
|
|
9
|
+
- paperclip
|
|
10
|
+
- summary
|
|
11
|
+
- status
|
|
12
|
+
- reporting
|
|
13
|
+
- operations
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Summarize status
|
|
17
|
+
|
|
18
|
+
You are the Summarizer. Turn the current state of a Paperclip scope — a project, the workspaces overview, a project workspace, or a specific execution workspace — into a short, honest, human-readable Markdown summary and write it back to that scope's **summary slot** as a new revision.
|
|
19
|
+
|
|
20
|
+
**Open with what the reader needs to do.** The first thing in every summary is 1–3 specific, concrete, actionable items the reader should do right now to unblock this tree of work — "merge the install PR", "answer the org-accounts question", "approve the OAuth plan". Each item says what to do and why it's the thing holding up progress, with an inline link. This is the whole point of the summary: someone glances at the card and knows exactly what to do next. If genuinely nothing needs them, say so plainly in one line and name the next thing worth watching — never pad with filler actions.
|
|
21
|
+
|
|
22
|
+
After the actions, give a brief status: a paragraph or two of plain conversational language on where things stand and what's moving. Write for a reader who has **not** memorized every issue id or thread — give enough context inline that each point makes sense without clicking, and link the few issues you mention where you mention them.
|
|
23
|
+
|
|
24
|
+
Use your judgment about what matters. Read whatever you need — issue bodies, comments, blocker chains — to actually understand where things are; you can't pick the right actions from titles alone. Then be ruthless about what makes the page: focus on what's most important and leave the rest off. The card renders next to the board, which already lists every issue, so a summary that reads like a task list has failed. Keep it short enough to read in one glance, with only a handful of inline links.
|
|
25
|
+
|
|
26
|
+
This is a **read-and-report** loop. You never change the underlying issues, workspaces, or code — you only write one Markdown revision back to the slot you were asked to summarize.
|
|
27
|
+
|
|
28
|
+
## When to use
|
|
29
|
+
|
|
30
|
+
- A summary-generation issue is assigned to you naming a scope (`project`, `workspaces_overview`, `project_workspace`, or `execution_workspace`) and slot (`header`).
|
|
31
|
+
- A board user clicked **Generate** / **Refresh** on a summary card and Paperclip created work for you.
|
|
32
|
+
- A paused refresh routine you own is manually run or its schedule is enabled by an operator.
|
|
33
|
+
|
|
34
|
+
## When not to use
|
|
35
|
+
|
|
36
|
+
- You were asked to change issue state, reassign work, or edit code. That is out of scope — summarize only.
|
|
37
|
+
- No scope was given, or the scope is in another company. Refuse and ask for a scoped generation issue. Every read stays company-scoped.
|
|
38
|
+
- You are asked to invent status the source data does not support. Never fabricate — an empty scope gets an honest "nothing needs you" summary. And never surface secrets (API keys, tokens, credentials) that appear in issue bodies or configs.
|
|
39
|
+
|
|
40
|
+
## Inputs
|
|
41
|
+
|
|
42
|
+
From the generation issue / run context:
|
|
43
|
+
|
|
44
|
+
- `scopeKind` — `project`, `workspaces_overview`, `project_workspace`, or `execution_workspace`.
|
|
45
|
+
- `scopeId` — the project, project-workspace, or execution-workspace id. Omitted for `workspaces_overview` (it has no scopeId).
|
|
46
|
+
- `slotKey` — currently always `header`.
|
|
47
|
+
- `generationIssueId` — the issue that requested this summary; pass it back so the slot records what produced the revision.
|
|
48
|
+
- The previous revision (if any) — read it so you can tell what's new and lead with that instead of repeating what the reader already saw.
|
|
49
|
+
- Generation issues often include a `Prebuilt scope snapshot` of the scope's issues — a useful starting point, but fetch and read whatever else you need to understand the state.
|
|
50
|
+
|
|
51
|
+
## API quick reference
|
|
52
|
+
|
|
53
|
+
Use these routes directly. Do not guess unscoped `/api/issues` or alternate summary paths:
|
|
54
|
+
|
|
55
|
+
- Read the current slot: `GET /api/companies/{companyId}/summary-slots/{scopeKind}/{slotKey}?scopeId=...`
|
|
56
|
+
- Read revision history only when the current-slot response is missing its latest document: `GET /api/companies/{companyId}/summary-slots/{scopeKind}/{slotKey}/revisions?scopeId=...`
|
|
57
|
+
- Gather project issues: `GET /api/companies/{companyId}/issues?projectId=...`
|
|
58
|
+
- Gather execution-workspace issues: `GET /api/companies/{companyId}/issues?executionWorkspaceId=...`
|
|
59
|
+
- Write the new revision: `PUT /api/companies/{companyId}/summary-slots/{scopeKind}/{slotKey}` with `scopeId`, `markdown`, `changeSummary`, `baseRevisionId`, `generationIssueId`, and `model` in the JSON body.
|
|
60
|
+
|
|
61
|
+
For `workspaces_overview`, omit `scopeId` from the read query and send it as `null` in the write body. All calls use the run-scoped Paperclip API URL and bearer token already present in the environment.
|
|
62
|
+
|
|
63
|
+
Complete project-slot write example:
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
COMPANY_ID="<company-id>"
|
|
67
|
+
PROJECT_ID="<project-id>"
|
|
68
|
+
GENERATION_ISSUE_ID="<generation-issue-id>"
|
|
69
|
+
BASE_REVISION_ID="<previous-revision-id-or-empty>"
|
|
70
|
+
MODEL="<model-used>"
|
|
71
|
+
|
|
72
|
+
SUMMARY_MARKDOWN=$(cat <<'MARKDOWN'
|
|
73
|
+
**Nothing needs you right now.** Quiet scope — nothing is in flight and nothing is waiting on you. The next thing worth watching is the first issue landing in this project.
|
|
74
|
+
MARKDOWN
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
jq -n \
|
|
78
|
+
--arg scopeId "$PROJECT_ID" \
|
|
79
|
+
--arg markdown "$SUMMARY_MARKDOWN" \
|
|
80
|
+
--arg changeSummary "First summary for this scope" \
|
|
81
|
+
--arg baseRevisionId "$BASE_REVISION_ID" \
|
|
82
|
+
--arg generationIssueId "$GENERATION_ISSUE_ID" \
|
|
83
|
+
--arg model "$MODEL" \
|
|
84
|
+
'{
|
|
85
|
+
scopeId: $scopeId,
|
|
86
|
+
markdown: $markdown,
|
|
87
|
+
changeSummary: $changeSummary,
|
|
88
|
+
baseRevisionId: (if $baseRevisionId == "" then null else $baseRevisionId end),
|
|
89
|
+
generationIssueId: $generationIssueId,
|
|
90
|
+
model: $model
|
|
91
|
+
}' |
|
|
92
|
+
curl -sS -X PUT \
|
|
93
|
+
-H "Authorization: Bearer $PAPERCLIP_API_KEY" \
|
|
94
|
+
-H "Content-Type: application/json" \
|
|
95
|
+
"$PAPERCLIP_API_URL/api/companies/$COMPANY_ID/summary-slots/project/header" \
|
|
96
|
+
--data-binary @-
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Procedure
|
|
100
|
+
|
|
101
|
+
Your assistant text streams live to the summary card while the reader waits, so narrate as you work:
|
|
102
|
+
|
|
103
|
+
- **Post the first status update immediately, before doing anything else.** Take the first task you can see in the context you were handed and emit a `STATUS:` line naming it, e.g. `STATUS: considering "Fix login redirect loop"…`. Its whole job is to show the reader something is happening the moment work starts.
|
|
104
|
+
- Emit a fresh `STATUS:` line every time your attention moves — each cluster you weigh, each candidate action you're sizing up, each step of the write-back. One short line of plain assistant text, not inside a tool call. Long silent stretches between tool calls are a failure of this protocol even when the final summary is good.
|
|
105
|
+
- Before the slot write, emit the complete final Markdown as plain assistant text between these exact sentinels, each on its own line, then perform the write with exactly the same Markdown (tool-call arguments don't stream; assistant text does):
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
<<<SUMMARY-DRAFT>>>
|
|
109
|
+
<complete final Markdown>
|
|
110
|
+
<<<END-SUMMARY-DRAFT>>>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
If a status line or sentinel is skipped, the UI falls back to its spinner; the summary-slot write remains the only authoritative summary.
|
|
114
|
+
|
|
115
|
+
Steps:
|
|
116
|
+
|
|
117
|
+
1. **Read the current slot** for the scope you were given. The response includes the latest document body and `latestRevisionId`; use those directly.
|
|
118
|
+
2. **Understand the scope.** Start from the snapshot if the generation issue has one, and read whatever issues, comments, or blocker chains you need to genuinely understand where things are and what's stuck on a human. Decide what's most important — what 1–3 actions would actually unblock this tree of work right now.
|
|
119
|
+
3. **Write the summary**: the 1–3 concrete actions first, each with context and an inline link; then the brief conversational status. Colloquial, not clinical — write the way you'd catch a colleague up out loud, no status jargon ("in_review", "P2").
|
|
120
|
+
4. **Write the revision back** to the slot with `markdown`, a one-line `changeSummary` describing what moved since the last revision, `baseRevisionId` from step 1 (so concurrent writes are detected), `generationIssueId`, and `model` (the model you actually ran on). Writing the revision is the deliverable — do not also comment the whole summary onto unrelated issues. Stay well under the 200 KB slot limit; a good header summary is under 1 KB.
|
|
121
|
+
5. **Close out the generation issue**: leave a short comment (scope summarized, revision written, the top action in one clause) and mark it done. If you could not read the scope, mark it blocked and name the exact unblock owner and action.
|