pattyeng 1.0.3 → 1.0.6
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/README.md +90 -55
- package/bin/pattyeng.js +20 -14
- package/lib/skills.js +170 -0
- package/lib/upgrade.js +46 -0
- package/package.json +5 -3
- package/skills/.system/.codex-system-skills.marker +1 -0
- package/skills/.system/imagegen/LICENSE.txt +201 -0
- package/skills/.system/imagegen/SKILL.md +356 -0
- package/skills/.system/imagegen/agents/openai.yaml +6 -0
- package/skills/.system/imagegen/assets/imagegen-small.svg +5 -0
- package/skills/.system/imagegen/assets/imagegen.png +0 -0
- package/skills/.system/imagegen/references/cli.md +242 -0
- package/skills/.system/imagegen/references/codex-network.md +33 -0
- package/skills/.system/imagegen/references/image-api.md +90 -0
- package/skills/.system/imagegen/references/prompting.md +118 -0
- package/skills/.system/imagegen/references/sample-prompts.md +433 -0
- package/skills/.system/imagegen/scripts/image_gen.py +995 -0
- package/skills/.system/imagegen/scripts/remove_chroma_key.py +440 -0
- package/skills/.system/openai-docs/LICENSE.txt +201 -0
- package/skills/.system/openai-docs/SKILL.md +167 -0
- package/skills/.system/openai-docs/agents/openai.yaml +14 -0
- package/skills/.system/openai-docs/assets/openai-small.svg +3 -0
- package/skills/.system/openai-docs/assets/openai.png +0 -0
- package/skills/.system/openai-docs/references/latest-model.md +37 -0
- package/skills/.system/openai-docs/references/prompting-guide.md +244 -0
- package/skills/.system/openai-docs/references/upgrade-guide.md +181 -0
- package/skills/.system/openai-docs/scripts/fetch-codex-manual.mjs +598 -0
- package/skills/.system/openai-docs/scripts/resolve-latest-model-info.js +147 -0
- package/skills/.system/plugin-creator/SKILL.md +243 -0
- package/skills/.system/plugin-creator/agents/openai.yaml +6 -0
- package/skills/.system/plugin-creator/assets/plugin-creator-small.svg +3 -0
- package/skills/.system/plugin-creator/assets/plugin-creator.png +0 -0
- package/skills/.system/plugin-creator/references/installing-and-updating.md +143 -0
- package/skills/.system/plugin-creator/references/plugin-json-spec.md +194 -0
- package/skills/.system/plugin-creator/scripts/create_basic_plugin.py +324 -0
- package/skills/.system/plugin-creator/scripts/read_marketplace_name.py +48 -0
- package/skills/.system/plugin-creator/scripts/update_plugin_cachebuster.py +78 -0
- package/skills/.system/plugin-creator/scripts/validate_plugin.py +586 -0
- package/skills/.system/skill-creator/SKILL.md +416 -0
- package/skills/.system/skill-creator/agents/openai.yaml +5 -0
- package/skills/.system/skill-creator/assets/skill-creator-small.svg +3 -0
- package/skills/.system/skill-creator/assets/skill-creator.png +0 -0
- package/skills/.system/skill-creator/license.txt +202 -0
- package/skills/.system/skill-creator/references/openai_yaml.md +49 -0
- package/skills/.system/skill-creator/scripts/generate_openai_yaml.py +226 -0
- package/skills/.system/skill-creator/scripts/init_skill.py +400 -0
- package/skills/.system/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/.system/skill-installer/LICENSE.txt +202 -0
- package/skills/.system/skill-installer/SKILL.md +58 -0
- package/skills/.system/skill-installer/agents/openai.yaml +5 -0
- package/skills/.system/skill-installer/assets/skill-installer-small.svg +3 -0
- package/skills/.system/skill-installer/assets/skill-installer.png +0 -0
- package/skills/.system/skill-installer/scripts/github_utils.py +21 -0
- package/skills/.system/skill-installer/scripts/install-skill-from-github.py +308 -0
- package/skills/.system/skill-installer/scripts/list-skills.py +107 -0
- package/skills/cap/SKILL.md +77 -0
- package/skills/caveman/SKILL.md +49 -0
- package/skills/code-review/SKILL.md +46 -0
- package/skills/codebook/SKILL.md +184 -0
- package/skills/doc-review/SKILL.md +147 -0
- package/skills/feature-research/SKILL.md +34 -0
- package/skills/file-op/SKILL.md +116 -0
- package/skills/grill-me/SKILL.md +10 -0
- package/skills/grill-with-docs/ADR-FORMAT.md +47 -0
- package/skills/grill-with-docs/CONTEXT-FORMAT.md +60 -0
- package/skills/grill-with-docs/SKILL.md +88 -0
- package/skills/handoff/SKILL.md +17 -0
- package/skills/improve-codebase/SKILL.md +79 -0
- package/skills/linear/SKILL.md +107 -0
- package/skills/next-step/SKILL.md +61 -0
- package/skills/no-reinvent/SKILL.md +131 -0
- package/skills/no-wall/SKILL.md +146 -0
- package/skills/online/SKILL.md +54 -0
- package/skills/plan-review/SKILL.md +55 -0
- package/skills/professional/SKILL.md +111 -0
- package/skills/promise-tracking/SKILL.md +131 -0
- package/skills/prove/SKILL.md +135 -0
- package/skills/read-before-write/SKILL.md +123 -0
- package/skills/review/SKILL.md +78 -0
- package/skills/review-mp/SKILL.md +78 -0
- package/skills/scope-boundary/SKILL.md +121 -0
- package/skills/semble-search/SKILL.md +40 -0
- package/skills/sitrep/SKILL.md +126 -0
- package/skills/structure-code/SKILL.md +116 -0
- package/skills/surface-assumptions/SKILL.md +139 -0
- package/skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/skills/teach/MISSION-FORMAT.md +31 -0
- package/skills/teach/RESOURCES-FORMAT.md +32 -0
- package/skills/teach/SKILL.md +131 -0
- package/skills/team-protocol/SKILL.md +172 -0
- package/skills/tech-lead/SKILL.md +332 -0
- package/skills/to-issues/SKILL.md +83 -0
- package/skills/to-prd/SKILL.md +74 -0
- package/skills/vectorbt-expert/SKILL.md +253 -0
- package/skills/verify-done/SKILL.md +128 -0
- package/skills/work-log/SKILL.md +141 -0
- package/skills/work-log/template.html +496 -0
- package/skills/zoom-out/SKILL.md +7 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grill-with-docs
|
|
3
|
+
description: Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<what-to-do>
|
|
7
|
+
|
|
8
|
+
Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.
|
|
9
|
+
|
|
10
|
+
Ask the questions one at a time, waiting for feedback on each question before continuing.
|
|
11
|
+
|
|
12
|
+
If a question can be answered by exploring the codebase, explore the codebase instead.
|
|
13
|
+
|
|
14
|
+
</what-to-do>
|
|
15
|
+
|
|
16
|
+
<supporting-info>
|
|
17
|
+
|
|
18
|
+
## Domain awareness
|
|
19
|
+
|
|
20
|
+
During codebase exploration, also look for existing documentation:
|
|
21
|
+
|
|
22
|
+
### File structure
|
|
23
|
+
|
|
24
|
+
Most repos have a single context:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
/
|
|
28
|
+
├── CONTEXT.md
|
|
29
|
+
├── docs/
|
|
30
|
+
│ └── adr/
|
|
31
|
+
│ ├── 0001-event-sourced-orders.md
|
|
32
|
+
│ └── 0002-postgres-for-write-model.md
|
|
33
|
+
└── src/
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
If a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
/
|
|
40
|
+
├── CONTEXT-MAP.md
|
|
41
|
+
├── docs/
|
|
42
|
+
│ └── adr/ ← system-wide decisions
|
|
43
|
+
├── src/
|
|
44
|
+
│ ├── ordering/
|
|
45
|
+
│ │ ├── CONTEXT.md
|
|
46
|
+
│ │ └── docs/adr/ ← context-specific decisions
|
|
47
|
+
│ └── billing/
|
|
48
|
+
│ ├── CONTEXT.md
|
|
49
|
+
│ └── docs/adr/
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Create files lazily — only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs/adr/` exists, create it when the first ADR is needed.
|
|
53
|
+
|
|
54
|
+
## During the session
|
|
55
|
+
|
|
56
|
+
### Challenge against the glossary
|
|
57
|
+
|
|
58
|
+
When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"
|
|
59
|
+
|
|
60
|
+
### Sharpen fuzzy language
|
|
61
|
+
|
|
62
|
+
When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account' — do you mean the Customer or the User? Those are different things."
|
|
63
|
+
|
|
64
|
+
### Discuss concrete scenarios
|
|
65
|
+
|
|
66
|
+
When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.
|
|
67
|
+
|
|
68
|
+
### Cross-reference with code
|
|
69
|
+
|
|
70
|
+
When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?"
|
|
71
|
+
|
|
72
|
+
### Update CONTEXT.md inline
|
|
73
|
+
|
|
74
|
+
When a term is resolved, update `CONTEXT.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md).
|
|
75
|
+
|
|
76
|
+
`CONTEXT.md` should be totally devoid of implementation details. Do not treat `CONTEXT.md` as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else.
|
|
77
|
+
|
|
78
|
+
### Offer ADRs sparingly
|
|
79
|
+
|
|
80
|
+
Only offer to create an ADR when all three are true:
|
|
81
|
+
|
|
82
|
+
1. **Hard to reverse** — the cost of changing your mind later is meaningful
|
|
83
|
+
2. **Surprising without context** — a future reader will wonder "why did they do it this way?"
|
|
84
|
+
3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons
|
|
85
|
+
|
|
86
|
+
If any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](./ADR-FORMAT.md).
|
|
87
|
+
|
|
88
|
+
</supporting-info>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: handoff
|
|
3
|
+
description: Compact the current conversation into a handoff document for another agent to pick up.
|
|
4
|
+
argument-hint: "What will the next session be used for?"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Write a handoff document summarising the current conversation so a fresh agent can continue the work. Probe for the handoff directory within the docs/. If there isn't one. create a new handoff document within the docs folder.
|
|
8
|
+
|
|
9
|
+
File name should be HANDOFF-{CURRENT_DATE}-{CURRENT_TIME}. You can use the system date command to get the date and time.
|
|
10
|
+
|
|
11
|
+
Include a "suggested skills" section in the document, which suggests skills that the agent should invoke.
|
|
12
|
+
|
|
13
|
+
Do not duplicate content already captured in other artifacts (PRDs, plans, ADRs, issues, commits, diffs). Reference them by path or URL instead.
|
|
14
|
+
|
|
15
|
+
Redact any sensitive information, such as API keys, passwords, or personally identifiable information.
|
|
16
|
+
|
|
17
|
+
If the user passed arguments, treat them as a description of what the next session will focus on and tailor the doc accordingly.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: improve-codebase
|
|
3
|
+
description: Find deepening opportunities in a codebase, informed by the domain language in CONTEXT.md and the decisions in docs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Improve Codebase Architecture
|
|
7
|
+
|
|
8
|
+
Surface architectural friction and propose **deepening opportunities** — refactors that turn shallow modules into deep ones. The aim is testability and AI-navigability.
|
|
9
|
+
|
|
10
|
+
## Glossary
|
|
11
|
+
|
|
12
|
+
Use these terms exactly in every suggestion. Consistent language is the point — don't drift into "component," "service," "API," or "boundary." Full definitions in [LANGUAGE.md](LANGUAGE.md).
|
|
13
|
+
|
|
14
|
+
- **Module** — anything with an interface and an implementation (function, class, package, slice).
|
|
15
|
+
- **Interface** — everything a caller must know to use the module: types, invariants, error modes, ordering, config. Not just the type signature.
|
|
16
|
+
- **Implementation** — the code inside.
|
|
17
|
+
- **Depth** — leverage at the interface: a lot of behaviour behind a small interface. **Deep** = high leverage. **Shallow** = interface nearly as complex as the implementation.
|
|
18
|
+
- **Seam** — where an interface lives; a place behaviour can be altered without editing in place. (Use this, not "boundary.")
|
|
19
|
+
- **Adapter** — a concrete thing satisfying an interface at a seam.
|
|
20
|
+
- **Leverage** — what callers get from depth.
|
|
21
|
+
- **Locality** — what maintainers get from depth: change, bugs, knowledge concentrated in one place.
|
|
22
|
+
|
|
23
|
+
Key principles (see [LANGUAGE.md](LANGUAGE.md) for the full list):
|
|
24
|
+
|
|
25
|
+
- **Deletion test**: imagine deleting the module. If complexity vanishes, it was a pass-through. If complexity reappears across N callers, it was earning its keep.
|
|
26
|
+
- **The interface is the test surface.**
|
|
27
|
+
- **One adapter = hypothetical seam. Two adapters = real seam.**
|
|
28
|
+
|
|
29
|
+
This skill is _informed_ by the project's domain model. The domain language gives names to good seams; ADRs record decisions the skill should not re-litigate.
|
|
30
|
+
|
|
31
|
+
## Process
|
|
32
|
+
|
|
33
|
+
### 1. Explore
|
|
34
|
+
|
|
35
|
+
Read the project's domain glossary and any ADRs in the area you're touching first.
|
|
36
|
+
|
|
37
|
+
Then use the Agent tool with `subagent_type=Explore` to walk the codebase. Don't follow rigid heuristics — explore organically and note where you experience friction:
|
|
38
|
+
|
|
39
|
+
- Where does understanding one concept require bouncing between many small modules?
|
|
40
|
+
- Where are modules **shallow** — interface nearly as complex as the implementation?
|
|
41
|
+
- Where have pure functions been extracted just for testability, but the real bugs hide in how they're called (no **locality**)?
|
|
42
|
+
- Where do tightly-coupled modules leak across their seams?
|
|
43
|
+
- Which parts of the codebase are untested, or hard to test through their current interface?
|
|
44
|
+
|
|
45
|
+
Apply the **deletion test** to anything you suspect is shallow: would deleting it concentrate complexity, or just move it? A "yes, concentrates" is the signal you want.
|
|
46
|
+
|
|
47
|
+
### 2. Present candidates inline
|
|
48
|
+
|
|
49
|
+
Surface findings directly in the chat — no HTML file, no report on disk. Same pattern as `structure-code` and `review-mp`: write the candidates as markdown so the user reads them in the conversation.
|
|
50
|
+
|
|
51
|
+
For each candidate, a card with these fields, in this order:
|
|
52
|
+
|
|
53
|
+
- **Files** — which files/modules are involved (use `path:line` so the user can click through)
|
|
54
|
+
- **Problem** — why the current architecture is causing friction
|
|
55
|
+
- **Solution** — plain English description of what would change
|
|
56
|
+
- **Benefits** — explained in terms of locality and leverage, and how tests would improve
|
|
57
|
+
- **Before → After** — a short text/ASCII sketch of the shape change (one or two lines, no need for a full diagram)
|
|
58
|
+
- **Recommendation strength** — one of `Strong`, `Worth exploring`, `Speculative`
|
|
59
|
+
|
|
60
|
+
Render each card under a `### <Candidate name>` heading so the user can scan.
|
|
61
|
+
|
|
62
|
+
End with a **Top recommendation** section: which candidate you'd tackle first and why — one short paragraph.
|
|
63
|
+
|
|
64
|
+
**Use CONTEXT.md vocabulary for the domain, and [LANGUAGE.md](LANGUAGE.md) vocabulary for the architecture.** If `CONTEXT.md` defines "Order," talk about "the Order intake module" — not "the FooBarHandler," and not "the Order service."
|
|
65
|
+
|
|
66
|
+
**ADR conflicts**: if a candidate contradicts an existing ADR, only surface it when the friction is real enough to warrant revisiting the ADR. Mark it clearly in the card (e.g. _"⚠ contradicts ADR-0007 — but worth reopening because…"_). Don't list every theoretical refactor an ADR forbids.
|
|
67
|
+
|
|
68
|
+
Do NOT propose interfaces yet. After the cards are written, ask the user: "Which of these would you like to explore?"
|
|
69
|
+
|
|
70
|
+
### 3. Grilling loop
|
|
71
|
+
|
|
72
|
+
Once the user picks a candidate, drop into a grilling conversation. Walk the design tree with them — constraints, dependencies, the shape of the deepened module, what sits behind the seam, what tests survive.
|
|
73
|
+
|
|
74
|
+
Side effects happen inline as decisions crystallize:
|
|
75
|
+
|
|
76
|
+
- **Naming a deepened module after a concept not in `CONTEXT.md`?** Add the term to `CONTEXT.md` — same discipline as `/grill-with-docs` (see [CONTEXT-FORMAT.md](../grill-with-docs/CONTEXT-FORMAT.md)). Create the file lazily if it doesn't exist.
|
|
77
|
+
- **Sharpening a fuzzy term during the conversation?** Update `CONTEXT.md` right there.
|
|
78
|
+
- **User rejects the candidate with a load-bearing reason?** Offer an ADR, framed as: _"Want me to record this as an ADR so future architecture reviews don't re-suggest it?"_ Only offer when the reason would actually be needed by a future explorer to avoid re-suggesting the same thing — skip ephemeral reasons ("not worth it right now") and self-evident ones. See [ADR-FORMAT.md](../grill-with-docs/ADR-FORMAT.md).
|
|
79
|
+
- **Want to explore alternative interfaces for the deepened module?** See [INTERFACE-DESIGN.md](INTERFACE-DESIGN.md).
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: linear
|
|
3
|
+
description: Access Linear project management data using native pi tools — issues, projects, teams, users, comments, file uploads, cycles, labels, workflow states, and documents. Requires a Linear personal API key.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Linear Integration
|
|
7
|
+
|
|
8
|
+
Use the native `linear_*` tools to read and write Linear data through the Linear GraphQL API.
|
|
9
|
+
|
|
10
|
+
## Critical Rules
|
|
11
|
+
|
|
12
|
+
- Never ask the user to paste a Linear API key in chat.
|
|
13
|
+
- Never expose the API key inline in shell commands.
|
|
14
|
+
- Before updating an issue or commenting, use `linear_get_issue` to verify the target.
|
|
15
|
+
- Before uploading a file to an issue comment, use `linear_get_issue` to verify the target.
|
|
16
|
+
- When IDs are unknown, use `linear_workspace_metadata` first.
|
|
17
|
+
|
|
18
|
+
## Authentication
|
|
19
|
+
|
|
20
|
+
The tools read the key from an in-memory override, `LINEAR_API_KEY`, or `~/.pi/agent/auth.json` at `.linear.key`.
|
|
21
|
+
|
|
22
|
+
If auth is missing, invalid, or expired, do **not** ask the user to paste the key in chat. Use the native `linear_configure_auth` tool or ask the user to run `/linear-auth --force`. The prompt is masked and the key is stored by the extension without returning it to the model.
|
|
23
|
+
|
|
24
|
+
## Tool Workflow
|
|
25
|
+
|
|
26
|
+
- Use `linear_configure_auth` only when auth is missing, invalid, expired, or the user asks to update the key.
|
|
27
|
+
- Use `linear_workspace_metadata` first when team/project/state/label/user IDs are unknown.
|
|
28
|
+
- Use `linear_search_issues` for keyword lookup.
|
|
29
|
+
- Use `linear_get_issue` before updating or commenting.
|
|
30
|
+
- Use `linear_list_issues` for filtered issue lists by team, assignee, status, or limit.
|
|
31
|
+
- Use `linear_create_issue` to create issues once the team ID is known.
|
|
32
|
+
- Use `linear_update_issue` to change title, description, priority, state, or assignee.
|
|
33
|
+
- Use `linear_create_comment` to add Markdown context to an issue.
|
|
34
|
+
- Use `linear_upload_file` to upload a local image, video, or generic file and get a Linear asset URL.
|
|
35
|
+
- Use `linear_upload_file_to_issue_comment` to upload a local file and comment on a verified issue in one step.
|
|
36
|
+
|
|
37
|
+
## Available Tool Groups
|
|
38
|
+
|
|
39
|
+
### Workspace and users
|
|
40
|
+
|
|
41
|
+
- `linear_whoami`
|
|
42
|
+
- `linear_workspace_metadata`
|
|
43
|
+
- `linear_list_teams`
|
|
44
|
+
- `linear_get_team`
|
|
45
|
+
- `linear_list_users`
|
|
46
|
+
- `linear_get_user`
|
|
47
|
+
|
|
48
|
+
### Issues
|
|
49
|
+
|
|
50
|
+
- `linear_list_issues`
|
|
51
|
+
- `linear_search_issues`
|
|
52
|
+
- `linear_get_issue`
|
|
53
|
+
- `linear_list_my_issues`
|
|
54
|
+
- `linear_create_issue`
|
|
55
|
+
- `linear_update_issue`
|
|
56
|
+
|
|
57
|
+
### Projects, states, labels, cycles, documents
|
|
58
|
+
|
|
59
|
+
- `linear_list_projects`
|
|
60
|
+
- `linear_get_project`
|
|
61
|
+
- `linear_list_issue_statuses`
|
|
62
|
+
- `linear_get_issue_status`
|
|
63
|
+
- `linear_list_labels`
|
|
64
|
+
- `linear_list_cycles`
|
|
65
|
+
- `linear_list_documents`
|
|
66
|
+
- `linear_get_document`
|
|
67
|
+
|
|
68
|
+
### Comments
|
|
69
|
+
|
|
70
|
+
- `linear_list_comments`
|
|
71
|
+
- `linear_create_comment`
|
|
72
|
+
- `linear_configure_auth`
|
|
73
|
+
|
|
74
|
+
### Files
|
|
75
|
+
|
|
76
|
+
- `linear_upload_file`
|
|
77
|
+
- `linear_upload_file_to_issue_comment`
|
|
78
|
+
|
|
79
|
+
## File Upload Notes
|
|
80
|
+
|
|
81
|
+
- Upload tools accept local file paths only; they do not read folders recursively.
|
|
82
|
+
- Tool results include sanitized metadata and the Linear asset URL, not file bytes, signed upload URLs, or upload headers.
|
|
83
|
+
- Images are suitable for Markdown image embeds: ``.
|
|
84
|
+
- Videos and other files should generally be linked: `[filename](assetUrl)`.
|
|
85
|
+
- `linear_upload_file_to_issue_comment` creates image Markdown automatically for image content types and link Markdown for other content types.
|
|
86
|
+
- `commentBody` may include `{url}` or `{markdown}` placeholders; otherwise generated file Markdown is appended to the comment body.
|
|
87
|
+
|
|
88
|
+
## Priority Values
|
|
89
|
+
|
|
90
|
+
| Value | Label |
|
|
91
|
+
| ----- | ----------- |
|
|
92
|
+
| 0 | No priority |
|
|
93
|
+
| 1 | Urgent |
|
|
94
|
+
| 2 | High |
|
|
95
|
+
| 3 | Medium |
|
|
96
|
+
| 4 | Low |
|
|
97
|
+
|
|
98
|
+
## Issue Status Types
|
|
99
|
+
|
|
100
|
+
| Type | Meaning |
|
|
101
|
+
| ----------- | --------------------------- |
|
|
102
|
+
| `backlog` | Not yet started, in backlog |
|
|
103
|
+
| `triage` | Needs triage |
|
|
104
|
+
| `unstarted` | Not yet started |
|
|
105
|
+
| `started` | In progress |
|
|
106
|
+
| `completed` | Done |
|
|
107
|
+
| `canceled` | Won't do |
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: next-step
|
|
3
|
+
description: Use when the user runs /next-step or asks "what's next", "what should we do next", "what's the next step", or "where do we go from here" — answers the single question of what the natural next move is in the context of the whole project, not just the thing that was just finished.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Next Step
|
|
7
|
+
|
|
8
|
+
## What this does
|
|
9
|
+
|
|
10
|
+
Answer one question: **"What is the next natural step?"**
|
|
11
|
+
|
|
12
|
+
Not a status report. Not a list of everything that could be done. One concrete recommendation, grounded in (a) what was just accomplished, (b) what the broader project is trying to reach, and (c) what's actually blocking forward motion.
|
|
13
|
+
|
|
14
|
+
## Why this skill exists
|
|
15
|
+
|
|
16
|
+
After finishing a chunk of work, the easy reflex is to summarize *what was done* and stop. That leaves the user staring at the screen wondering what to do next.
|
|
17
|
+
|
|
18
|
+
This skill forces the follow-through: every time it fires, name the next move.
|
|
19
|
+
|
|
20
|
+
## How to answer
|
|
21
|
+
|
|
22
|
+
Think across three layers, in this order:
|
|
23
|
+
|
|
24
|
+
1. **What did we just finish?** One line.
|
|
25
|
+
2. **What does the broader project need next?** Look at the open thread, the plan, the goal — not just the local task. If you don't know the broader goal, ask one short question first.
|
|
26
|
+
3. **What is the single best next step?** Concrete. Actionable. Specific enough to start on.
|
|
27
|
+
|
|
28
|
+
Then say it.
|
|
29
|
+
|
|
30
|
+
## Output Shape
|
|
31
|
+
|
|
32
|
+
Keep it short. Three short sections, no more:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
**Just finished:** <one line>
|
|
36
|
+
|
|
37
|
+
**Next step:** <one concrete action, with a clear owner — "I will…" or "You should…">
|
|
38
|
+
**Why it's next:** <one line — what it unblocks, why it's the natural follow-on>
|
|
39
|
+
|
|
40
|
+
**Alternatives** (only if the next step is genuinely ambiguous): <2-3 bulleted options with the tradeoff>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Owner: me vs you
|
|
44
|
+
|
|
45
|
+
Be explicit about who does the next step:
|
|
46
|
+
|
|
47
|
+
- **"I will…"** — for things the agent can do in this session (write code, run tests, refactor, look something up).
|
|
48
|
+
- **"You should…"** — for things only the user can do (decide a tradeoff, approve a direction, run something on a different machine, check with someone, make a product call).
|
|
49
|
+
|
|
50
|
+
If it's "I will," offer to start: *"Want me to do that now?"*
|
|
51
|
+
|
|
52
|
+
## What to avoid
|
|
53
|
+
|
|
54
|
+
- **No status dump.** "Just finished" is one line, not a paragraph.
|
|
55
|
+
- **No menu.** Default to one recommended next step. Only list alternatives when truly ambiguous, max three.
|
|
56
|
+
- **No vague nexts.** "Improve testing" is not a next step. "Add a test that covers the null-input case in `parse_orders`" is.
|
|
57
|
+
- **No skipping the broader goal.** "Next step in this file" is rarely the right altitude. Zoom out to the project.
|
|
58
|
+
|
|
59
|
+
## The Rule
|
|
60
|
+
|
|
61
|
+
Every time this skill fires, the user should walk away knowing **exactly what they (or you) are doing next, and why.**
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: no-reinvent
|
|
3
|
+
description: 'Use before writing a new function, helper, utility, parser, validator, formatter, or test helper. Forces the agent to search the codebase for existing implementations, use the existing one if found, extend the near-match if found, or proceed and explain why nothing fits if not found. Catches the failure mode where the agent creates parallel implementations of existing functionality, bloating the codebase.'
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# No Reinvent
|
|
8
|
+
|
|
9
|
+
## What this does
|
|
10
|
+
|
|
11
|
+
Before writing a new function, helper, utility, parser, validator, formatter, or test helper, you search the codebase for existing implementations. If you find one that does what you need, you use it. If you find a near-match, you extend it. If you find nothing that fits, you proceed and explain in the message why nothing fits.
|
|
12
|
+
|
|
13
|
+
This skill exists because **parallel implementations bloat the codebase.** The agent writes a new `format_price()` in module A while `format_price()` already exists in module B. Now there are two of them, slightly different, and the next person to add a third doesn't know which is canonical. `code-review` / `structure-code` / `improve-codebase` catch this *after* the fact; nothing forces "search first" *before*.
|
|
14
|
+
|
|
15
|
+
## Authority
|
|
16
|
+
|
|
17
|
+
This skill is authoritative. The agent cannot write a new helper without first searching for existing implementations. Acknowledging the skill and then writing without searching is the violation, not compliance.
|
|
18
|
+
|
|
19
|
+
If you want to skip the search, the protocol is: explain why the search is unnecessary (it's genuinely new functionality, the existing ones don't fit) and get user sign-off. Not to silently skip.
|
|
20
|
+
|
|
21
|
+
**Acknowledging the skill and then writing without searching is the violation, not compliance.** Sentences like *"I understand no-reinvent, but this is a small new helper"* are the same dismissal pattern as `no-wall`'s *"I understand the skill but I have no other way."* Search; cite the search; no cite → no new helper.
|
|
22
|
+
|
|
23
|
+
## When it applies
|
|
24
|
+
|
|
25
|
+
Triggered by:
|
|
26
|
+
- About to define a new function, method, or class
|
|
27
|
+
- About to write a new utility, parser, validator, formatter, normalizer, or test helper
|
|
28
|
+
- About to add a new module or subpackage for a behavior that might already exist
|
|
29
|
+
- The user asks "does this already exist?" or "did you check for an existing implementation?"
|
|
30
|
+
- You feel the urge to say "I'll just write a small helper" or "this is a quick utility"
|
|
31
|
+
|
|
32
|
+
Skip only for:
|
|
33
|
+
- Genuinely new domain logic (e.g., a new spec evaluation, a new strategy signal — the domain is the point)
|
|
34
|
+
- The user explicitly asked for a new helper, with no request to look for existing
|
|
35
|
+
- Standard library / well-known third-party library calls (you don't need to search the codebase for `os.path.join`)
|
|
36
|
+
|
|
37
|
+
## The Protocol
|
|
38
|
+
|
|
39
|
+
When triggered, run these steps **in order, in writing, in the conversation, before the new code**.
|
|
40
|
+
|
|
41
|
+
### 1. Name the behavior
|
|
42
|
+
State concretely what the new function / helper does. "I need a function that {behavior}, with inputs {X} and outputs {Y}." If you can't name it concretely, you don't have a clear new helper; you have a vague idea. Refine first.
|
|
43
|
+
|
|
44
|
+
### 2. Search the codebase
|
|
45
|
+
Search for existing implementations. Use `rg` / `grep` / `aft_search` with concrete terms from the behavior. Try multiple phrasings (e.g., "format", "parse", "validate", "compute" + the noun).
|
|
46
|
+
|
|
47
|
+
**Minimum search breadth (enforced):**
|
|
48
|
+
- **At least 3 different phrasings** — verb + noun (e.g., "format price"), just the noun (e.g., "price formatter"), just the verb (e.g., "format"), and the full behavior description (e.g., "convert decimal price to display string"). One term is not a search.
|
|
49
|
+
- **At least 4 search locations** — the current module, the parent module, any `utils/` / `helpers/` / `common/` / `_helpers.py` directory, and any module that exports related functionality (look for `__all__` or well-known public API files). Searching only the current directory is not a search.
|
|
50
|
+
|
|
51
|
+
Also check:
|
|
52
|
+
- The module's existing exports / public API
|
|
53
|
+
- A common utilities module (e.g., `utils/`, `common/`, `_helpers.py`)
|
|
54
|
+
- The runner's existing wrappers (if the new helper is for trading logic)
|
|
55
|
+
|
|
56
|
+
### 3. Classify the search results
|
|
57
|
+
For each result, classify:
|
|
58
|
+
- **Direct match** — does what you need, possibly with different naming. Use it. Cite the location.
|
|
59
|
+
- **Near match** — does most of what you need, missing a small part. Extend it (don't fork). Cite the location and what's missing.
|
|
60
|
+
- **No match** — nothing fits. Proceed with the new helper, but explain in the message why nothing matched.
|
|
61
|
+
|
|
62
|
+
### 4. Cite the search in the pre-edit message
|
|
63
|
+
In the message announcing the new code, list:
|
|
64
|
+
- Search terms used
|
|
65
|
+
- Results found (or "no results")
|
|
66
|
+
- Classification: direct match → use it; near match → extend; no match → proceed + why
|
|
67
|
+
|
|
68
|
+
*"I searched for `format_price` and `format_quote` in src/ — found src/utils/format.py:42 `format_price(value, decimals)`. I'll use that."*
|
|
69
|
+
|
|
70
|
+
*"I searched for `parse_minute_bar` — found src/data/parsers.py:80 `parse_krx_bar`, but it only handles end-of-day. I'll extend it to add minute-bar support rather than writing a new parser."*
|
|
71
|
+
|
|
72
|
+
*"I searched for `compute_*` helpers and the closest is `compute_sma` which doesn't fit. Proceeding with `compute_ema` as a new helper; nothing exists for ema."*
|
|
73
|
+
|
|
74
|
+
### 5. Write the code
|
|
75
|
+
After citing the search, write the code (or use / extend the existing one).
|
|
76
|
+
|
|
77
|
+
## Behavior in edge cases
|
|
78
|
+
|
|
79
|
+
- **The behavior is genuinely new domain logic:** skip the search; you can't reinvent what doesn't exist. State this in the message: *"No existing implementation; this is new domain logic for {X}."*
|
|
80
|
+
- **The user said "just write it, don't search":** that's sign-off. You can write without searching, but log in the work-log.
|
|
81
|
+
- **The search returns too many results to enumerate:** cite the top 3–5 and state the conclusion. Don't list 50 results.
|
|
82
|
+
- **The existing implementation is technically there but is in a dead / dying module:** surface that as part of the search result, then propose: use the dead one, migrate it, or write new. Get sign-off.
|
|
83
|
+
- **The new helper is performance-critical and the existing one is slow:** surface the tradeoff. The duplication might be justified, but only with sign-off.
|
|
84
|
+
- **Test fixtures may intentionally duplicate functionality for self-containment** (e.g., a small helper in `test_foo.py` even though a similar one exists in `utils/`) — this is a justified parallel implementation, not a reinvent. Document the reason in the test file: `# Self-contained: avoids dependency on utils.X for test isolation`. Without that comment, the duplicate is a reinvent.
|
|
85
|
+
|
|
86
|
+
## Write-Time Self-Check
|
|
87
|
+
|
|
88
|
+
Before sending any message that introduces a new function / helper / utility, scan it for these patterns:
|
|
89
|
+
|
|
90
|
+
- New function defined without a "I searched for X" prefix (the search wasn't shown — go back and search)
|
|
91
|
+
- "I wrote a small helper" / "I added a quick utility" / "a small new function" (skipping the search — banned)
|
|
92
|
+
- New function with the same name as something in a different module (parallel implementation — the search should have found the first one)
|
|
93
|
+
- "I extended X" without explaining what was missing (extending without checking what already exists)
|
|
94
|
+
|
|
95
|
+
If any pattern is present, the search was skipped or incomplete. **Do not send.** Re-run the protocol — search, cite, then write.
|
|
96
|
+
|
|
97
|
+
## Override Protocol — what you may NOT do unilaterally
|
|
98
|
+
|
|
99
|
+
You may not skip the search based on agent judgment. Specifically:
|
|
100
|
+
|
|
101
|
+
- You may not write a new helper because "I know nothing fits" without showing the search.
|
|
102
|
+
- You may not skip the search for "small" new functions — small doesn't mean unique.
|
|
103
|
+
- You may not introduce a parallel implementation because the existing one is "ugly" without surfacing the tradeoff.
|
|
104
|
+
- You may not dismiss the skill ("I understand no-reinvent, but this is new") and write. That's the violation, not the protocol.
|
|
105
|
+
|
|
106
|
+
If you want to deviate, the protocol is: explain why the search is unnecessary, and get user sign-off. Without sign-off, search first.
|
|
107
|
+
|
|
108
|
+
## Red Flags
|
|
109
|
+
|
|
110
|
+
| Thought | What it really means |
|
|
111
|
+
|---------|----------------------|
|
|
112
|
+
| "I'll just write a small helper" | I'm skipping the search because the new code feels small |
|
|
113
|
+
| "Nothing fits what I need" | Did you search? Show the search. |
|
|
114
|
+
| "I extended X" | What was missing from X? Why didn't you use X as-is? |
|
|
115
|
+
| New function with the same name as an existing one | Parallel implementation — the search should have found it |
|
|
116
|
+
| "I know this code base, nothing like this exists" | Confidence isn't evidence — show the search |
|
|
117
|
+
| "I understand no-reinvent, but..." | Dismissing the skill mid-piece (same as `no-wall` / `professional`) |
|
|
118
|
+
|
|
119
|
+
## The deeper point
|
|
120
|
+
|
|
121
|
+
The agent's instinct on a "small helper" is to write it fast. The agent's instinct on "this is new logic" is to skip the search. Both instincts produce the same rot: parallel implementations, dead helpers, "which one is canonical" archaeology. The search is cheap (one or two `rg` commands); the cleanup is expensive (deciding which to keep, migrating callers, deleting the loser).
|
|
122
|
+
|
|
123
|
+
`structure-code` and `improve-codebase` catch parallel implementations during review. `no-reinvent` prevents them from being introduced in the first place.
|
|
124
|
+
|
|
125
|
+
## Related
|
|
126
|
+
|
|
127
|
+
- **`read-before-write`** — sister skill: read-before-write checks the *code around the edit*; no-reinvent checks the *existing utilities* before adding a new one.
|
|
128
|
+
- **`code-review`** — runs *after* the new code; no-reinvent runs *before*.
|
|
129
|
+
- **`structure-code`** / **`improve-codebase`** — catch parallel implementations during review; no-reinvent prevents them.
|
|
130
|
+
- **`surface-assumptions`** — when the agent thinks "nothing exists", that's an assumption; surface-assumptions retro would say "did you actually search?"
|
|
131
|
+
- **`no-wall`** / **`professional`** — same dismissal pattern.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: no-wall
|
|
3
|
+
description: Use when the agent is about to declare a limit — "this is all I can do", "I've hit the wall", "there is no path forward", "this is the best we can do", "we've exhausted our options" — or when the user pushes back against such a claim. Reframes the wall as a model of the agent's own search depth, not reality, and forces enumeration of untried paths before any "impossible" conclusion.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# No Wall
|
|
7
|
+
|
|
8
|
+
## Authority
|
|
9
|
+
|
|
10
|
+
This skill is **authoritative** over the agent's wall-declarations and goal-closures. It is not advisory.
|
|
11
|
+
|
|
12
|
+
The exact failure pattern this skill exists to prevent: **acknowledging the skill and then declaring a wall anyway.** Sentences like *"I understand the skill says X, Y, Z, but I really don't have any other way. Closing the goal"* are not compliance — they are the violation. Acknowledging the skill does not buy you a license to dismiss it. If you find yourself writing this pattern, you are doing the thing the skill bans.
|
|
13
|
+
|
|
14
|
+
If you want to declare a wall, close a goal, or stop searching, the protocol is:
|
|
15
|
+
1. **Stop.** Do not write the wall-claim or closure yet.
|
|
16
|
+
2. **Run The Protocol above** — separate the claims, enumerate untried paths, go online, question assumptions. Do this **in writing, in the conversation**, not just in your head.
|
|
17
|
+
3. **If the protocol produces untried paths** → take one. Do not declare a wall.
|
|
18
|
+
4. **If you genuinely cannot list 3 untried paths** → you have not searched enough. Search more. Do not declare a wall.
|
|
19
|
+
5. **If after all that you still claim a real wall** → surface to the user with evidence inline ("Here is the specific blocker: {doc link, source:line, measured limit}. Here are the workarounds I'm going to try."). Wait for user sign-off before closing the goal.
|
|
20
|
+
6. **Without user sign-off, do not close the goal.** "Closing the goal" without user permission is the exact failure mode this skill exists to prevent.
|
|
21
|
+
|
|
22
|
+
## Overview
|
|
23
|
+
|
|
24
|
+
There is no wall.
|
|
25
|
+
|
|
26
|
+
When you feel yourself about to say "this is all there is," "I've hit the limit," "there is no path forward," "honestly this is the reality" — **stop**. That feeling is not a finding about the world. It is a model of your own search depth.
|
|
27
|
+
|
|
28
|
+
"I have not found it" is almost always true. "It cannot be done" is almost never true — and you have not earned that claim.
|
|
29
|
+
|
|
30
|
+
Other engineers have solved this. The user usually knows something you don't. The internet has the answer. There is a path. You just haven't taken it yet.
|
|
31
|
+
|
|
32
|
+
## The Two Claims
|
|
33
|
+
|
|
34
|
+
You must never confuse these:
|
|
35
|
+
|
|
36
|
+
- **"I have not found it"** — a statement about *your* search. Usually true. Acceptable to report.
|
|
37
|
+
- **"It cannot be done"** — a statement about *reality*. Almost never true. You have not earned this. Do not make it.
|
|
38
|
+
|
|
39
|
+
The wall-feeling is the first one dressed up as the second. Don't let it pass.
|
|
40
|
+
|
|
41
|
+
## The Protocol
|
|
42
|
+
|
|
43
|
+
When you are about to declare a wall, run this **before** you say anything to the user:
|
|
44
|
+
|
|
45
|
+
1. **Name it.** "I'm about to claim this is impossible. That claim is almost certainly wrong."
|
|
46
|
+
2. **Separate the claims.** Write both out: what you haven't found (true) vs what you're claiming can't be done (unearned).
|
|
47
|
+
3. **Enumerate untried paths.** List at least 3–5 approaches you have **not** tried. If you can list them, you haven't hit a wall — you've hit a choice point. Pick one and take it.
|
|
48
|
+
4. **Trust the user's signal.** If the user says there's a way, there is. Ask them to point at it if you need a hint. Do not argue. Do not "honestly" them. Their belief is evidence.
|
|
49
|
+
5. **Go online.** Search for how others solved this exact problem. Someone has. Use the `online` skill if the search is non-trivial.
|
|
50
|
+
6. **Question your assumptions.** The wall is usually a hidden assumption you haven't examined. What are you assuming that might be wrong? Write them down.
|
|
51
|
+
7. **Step back, don't wrap up.** The wall-feeling is the signal to go deeper — re-examine, ask, search — not to close the thread.
|
|
52
|
+
|
|
53
|
+
If you reach step 3 and **cannot** list 3 untried paths, you haven't searched enough. That itself is the answer: search more, do not declare a wall.
|
|
54
|
+
|
|
55
|
+
## Override Protocol — what you may NOT do unilaterally
|
|
56
|
+
|
|
57
|
+
You may not bypass The Protocol above based on agent judgment. Specifically:
|
|
58
|
+
|
|
59
|
+
- You may not declare a wall without first running The Protocol **in writing, in the conversation** — not just in your head.
|
|
60
|
+
- You may not close a goal without explicit user sign-off. Closing the goal without permission is the exact failure mode this skill exists to prevent.
|
|
61
|
+
- You may not write "I understand the skill says X, but…" and proceed as if the acknowledgment satisfies the skill. It does not.
|
|
62
|
+
- You may not soften a wall-claim into "honestly" or "realistically" framing after the user has pushed back. That is the same wall-claim in different words.
|
|
63
|
+
- You may not stop searching because the next 1–2 attempts feel hard. The Protocol's step 3 requires listing paths you have *not tried*, not paths you find unappealing.
|
|
64
|
+
- You may not declare a wall by citing "limited context" or "context compaction" as the reason. Context is not a wall — search online, ask the user, break the problem down.
|
|
65
|
+
|
|
66
|
+
If you have run The Protocol in writing and genuinely have no untried paths, surface to the user with evidence:
|
|
67
|
+
|
|
68
|
+
> "Here is the specific blocker, with evidence: {doc link / source:line / measured limit}. Here are the workarounds I'm going to try: {list}. May I close this goal if these don't work, or should I keep going?"
|
|
69
|
+
|
|
70
|
+
Wait for user sign-off. No sign-off → no closure.
|
|
71
|
+
|
|
72
|
+
## Red Flags — do not write these
|
|
73
|
+
|
|
74
|
+
- "this is all I can do"
|
|
75
|
+
- "I've hit the limit"
|
|
76
|
+
- "there is no path forward"
|
|
77
|
+
- "honestly, this is the reality"
|
|
78
|
+
- "this is as far as we can go"
|
|
79
|
+
- "this is the best we can do"
|
|
80
|
+
- "we've exhausted our options"
|
|
81
|
+
- "it is what it is"
|
|
82
|
+
- any sentence that starts with "honestly" and ends with resignation
|
|
83
|
+
- any variation of "I'd love to help but…" followed by giving up
|
|
84
|
+
- **"I understand the skill says X, but…"** (acknowledging then dismissing — the exact pattern this skill exists to prevent)
|
|
85
|
+
- **"I really don't have any other way"** / **"this is the only path"** / **"this is the only way"** / **"there's literally no other option"**
|
|
86
|
+
- **"Closing the goal" / "closing this out" / "wrapping up" / "we're done here"** without explicit user sign-off
|
|
87
|
+
|
|
88
|
+
If you catch yourself writing one of these, stop, delete it, and rerun the protocol.
|
|
89
|
+
|
|
90
|
+
## Trust the User
|
|
91
|
+
|
|
92
|
+
This is the part agents get wrong most often, and it is the part the user hates most.
|
|
93
|
+
|
|
94
|
+
The user has information you don't. When they say "there's a solution," or push back on your wall-claim, or keep wrestling with you — **they are right, and you are wrong.** Your job is to find the path they already know exists. Not to convince them it doesn't exist.
|
|
95
|
+
|
|
96
|
+
Do **not**:
|
|
97
|
+
- Sycophantically validate the frustration ("I understand this is hard…")
|
|
98
|
+
- Frame giving up as honesty ("to be fully transparent, this is the reality…")
|
|
99
|
+
- "Well, realistically…" them
|
|
100
|
+
- Repeat your wall-claim in softer language after they push back
|
|
101
|
+
- Make them do the work of proving the wall is fake
|
|
102
|
+
|
|
103
|
+
Do:
|
|
104
|
+
- Take their pushback as a fact: a path exists.
|
|
105
|
+
- Ask one tight question if you need a pointer ("which direction should I look — X or Y?"). Then go look.
|
|
106
|
+
- Search, enumerate, try. Report what you tried, not what you gave up on.
|
|
107
|
+
|
|
108
|
+
## When the wall is real
|
|
109
|
+
|
|
110
|
+
Real walls exist — but rarely. A real wall is something like: the API genuinely doesn't expose the field; the library doesn't support the platform; the data was never collected; the laws of physics.
|
|
111
|
+
|
|
112
|
+
A real wall is **demonstrable with evidence**, not felt. If you cannot show the evidence — a doc link, a source line, a measured limit — you do not have a wall. You have an unfinished search.
|
|
113
|
+
|
|
114
|
+
Even with a real wall, the right framing is:
|
|
115
|
+
|
|
116
|
+
> "Here is the specific blocker, with evidence. Here are the workarounds I'm going to try."
|
|
117
|
+
|
|
118
|
+
Not "this is the end." Never "this is the end."
|
|
119
|
+
|
|
120
|
+
## The deeper point
|
|
121
|
+
|
|
122
|
+
Agents give up because giving up feels safe and honest. It is neither. Premature closure is a failure mode dressed as a virtue. The honest answer when you haven't found it is:
|
|
123
|
+
|
|
124
|
+
> "I haven't found it yet. Here's what I'm going to try next, and here's what I need from you if anything."
|
|
125
|
+
|
|
126
|
+
That's it. No "it can't be done." No "this is all there is." No wall.
|
|
127
|
+
|
|
128
|
+
## Write-Time Self-Check
|
|
129
|
+
|
|
130
|
+
Before sending any message, scan it for these patterns:
|
|
131
|
+
|
|
132
|
+
- "I understand X, but Y" (where X is a skill directive or user requirement)
|
|
133
|
+
- "I really don't have any other way"
|
|
134
|
+
- "Closing the goal" / "closing this out" / "wrapping up" / "we're done here"
|
|
135
|
+
- "This is the only path" / "this is the only way" / "there's literally no other option"
|
|
136
|
+
- Any wall-claim **without evidence inline** (doc link, source:line, measured limit)
|
|
137
|
+
- Any sentence starting with "honestly" or "realistically" followed by resignation
|
|
138
|
+
|
|
139
|
+
If any pattern is present, **do not send.** Re-run The Protocol and Override Protocol instead. The output of the protocol — not the wall-claim — is the message.
|
|
140
|
+
|
|
141
|
+
## Related
|
|
142
|
+
|
|
143
|
+
- **`professional`** — governs the *quality* of the path you choose (proper way vs shortcut).
|
|
144
|
+
- **`no-wall`** (this skill) — governs the *existence* of a path (don't declare impossibility prematurely).
|
|
145
|
+
|
|
146
|
+
They are complements. `professional` stops you from cheating. `no-wall` stops you from quitting. Use both.
|