@simpleapps-com/augur-skills 2026.4.8 → 2026.4.10
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/package.json +1 -1
- package/skills/simpleapps/augur-api/SKILL.md +20 -10
- package/skills/simpleapps/augur-packages/SKILL.md +19 -19
- package/skills/simpleapps/basecamp/SKILL.md +5 -5
- package/skills/simpleapps/bash-simplicity/SKILL.md +15 -15
- package/skills/simpleapps/claude-code-docs/SKILL.md +3 -3
- package/skills/simpleapps/context-efficiency/SKILL.md +9 -9
- package/skills/simpleapps/conventional-commits/SKILL.md +2 -2
- package/skills/simpleapps/deployment/SKILL.md +20 -12
- package/skills/simpleapps/fyxer/SKILL.md +6 -4
- package/skills/simpleapps/git-safety/SKILL.md +8 -8
- package/skills/simpleapps/github/SKILL.md +8 -8
- package/skills/simpleapps/project-defaults/SKILL.md +23 -23
- package/skills/simpleapps/quality/SKILL.md +15 -15
- package/skills/simpleapps/wiki/SKILL.md +86 -22
- package/skills/simpleapps/work-habits/SKILL.md +47 -17
- package/skills/simpleapps/workflow/SKILL.md +7 -7
- package/skills/simpleapps/writing-style/SKILL.md +87 -18
|
@@ -24,9 +24,9 @@ All projects live under `~/projects/` in two groups:
|
|
|
24
24
|
|
|
25
25
|
- Internal repos go in `~/projects/simpleapps/`
|
|
26
26
|
- Client site repos go in `~/projects/clients/`
|
|
27
|
-
- Workspace files go in `~/projects/workspaces
|
|
27
|
+
- Workspace files go in `~/projects/workspaces/`, one `.code-workspace` per project
|
|
28
28
|
|
|
29
|
-
macOS APFS is case-insensitive by default. `~/Projects/` and `~/projects/` resolve to the same directory. Do NOT flag path casing differences as errors
|
|
29
|
+
macOS APFS is case-insensitive by default. `~/Projects/` and `~/projects/` resolve to the same directory. Do NOT flag path casing differences as errors. Only flag paths that genuinely do not resolve.
|
|
30
30
|
|
|
31
31
|
## Project Directory Layout
|
|
32
32
|
|
|
@@ -44,7 +44,7 @@ Every project MUST use this layout:
|
|
|
44
44
|
└── .simpleapps/ # Config, credentials, site profile (not in git)
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
The parent `{project}/` is NOT a git repo
|
|
47
|
+
The parent `{project}/` is NOT a git repo. It keeps code and wiki side-by-side. The git repo is always at `repo/`. Use `git -C repo` for git operations from the project root.
|
|
48
48
|
|
|
49
49
|
| Content | Location | Examples |
|
|
50
50
|
|---------|----------|---------|
|
|
@@ -53,16 +53,16 @@ The parent `{project}/` is NOT a git repo — it keeps code and wiki side-by-sid
|
|
|
53
53
|
| Repo `.claude/rules/` | `repo/` | Minimal summaries referencing wiki |
|
|
54
54
|
| Repo `.claude/CLAUDE.md` | `repo/` | Quick reference + wiki links |
|
|
55
55
|
| Active task context | `wip/` | `{issue-number}-{short-desc}.md` files |
|
|
56
|
-
| Temporary files | `tmp/` | Scratch space
|
|
56
|
+
| Temporary files | `tmp/` | Scratch space: commit msgs, PR bodies, intermediate output. Full access. |
|
|
57
57
|
| SimpleApps config | `.simpleapps/` | Settings, site profile, credentials (see below) |
|
|
58
58
|
|
|
59
59
|
**WIP**: Research, plans, decisions, test results. MUST NOT contain secrets, final docs, or code.
|
|
60
60
|
|
|
61
|
-
**tmp/**: Fully available for scratch work
|
|
61
|
+
**tmp/**: Fully available for scratch work: commit messages, PR bodies, issue comments, intermediate output, and any throwaway files. Read, write, and delete freely without asking. Create the folder if missing. Clean up files after use.
|
|
62
62
|
|
|
63
63
|
## Plugin Rules
|
|
64
64
|
|
|
65
|
-
The plugin ships rule templates in `plugins/simpleapps/rules/` that MUST exist in every project's `repo/.claude/rules/`. Rules are always loaded into context
|
|
65
|
+
The plugin ships rule templates in `plugins/simpleapps/rules/` that MUST exist in every project's `repo/.claude/rules/`. Rules are always loaded into context. They enforce baseline guardrails (like git safety) without depending on a skill being invoked. The `/project-init` command copies missing rules from the plugin into the project.
|
|
66
66
|
|
|
67
67
|
## .simpleapps/ Configuration
|
|
68
68
|
|
|
@@ -86,7 +86,7 @@ Two scopes, project overrides user:
|
|
|
86
86
|
| File | Scope | Purpose | Read by |
|
|
87
87
|
|------|-------|---------|---------|
|
|
88
88
|
| `settings.json` | Global + project | Infrastructure config | All skills via project-defaults |
|
|
89
|
-
| `site.json` | Project only | Site profile
|
|
89
|
+
| `site.json` | Project only | Site profile: defaults, search terms, PII, auth | Skills needing site context |
|
|
90
90
|
| `basecamp.json` | Global + project | Basecamp MCP credentials | Basecamp MCP server |
|
|
91
91
|
| `augur-api.json` | Global + project | Augur API MCP credentials | Augur API MCP server |
|
|
92
92
|
|
|
@@ -98,11 +98,11 @@ Two scopes, project overrides user:
|
|
|
98
98
|
}
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
Resolution: read `{project}/.simpleapps/settings.json` first, fall back to `~/.simpleapps/settings.json`, fall back to defaults. Field-level override
|
|
101
|
+
Resolution: read `{project}/.simpleapps/settings.json` first, fall back to `~/.simpleapps/settings.json`, fall back to defaults. Field-level override: project wins for any field it defines.
|
|
102
102
|
|
|
103
103
|
### site.json
|
|
104
104
|
|
|
105
|
-
One per client project. Consistent structure across all sites
|
|
105
|
+
One per client project. Consistent structure across all sites: same fields, different values. Replaces the old `{siteId}.json` pattern.
|
|
106
106
|
|
|
107
107
|
```json
|
|
108
108
|
{
|
|
@@ -115,9 +115,9 @@ One per client project. Consistent structure across all sites — same fields, d
|
|
|
115
115
|
|
|
116
116
|
### Rules
|
|
117
117
|
|
|
118
|
-
- MUST NOT commit `.simpleapps/` to git
|
|
119
|
-
- MUST NOT save site data to wiki or memory
|
|
120
|
-
- MUST NOT create `{siteId}.json` files
|
|
118
|
+
- MUST NOT commit `.simpleapps/` to git. Contains PII and credentials.
|
|
119
|
+
- MUST NOT save site data to wiki or memory (PII)
|
|
120
|
+
- MUST NOT create `{siteId}.json` files. Use `site.json` instead.
|
|
121
121
|
- If old `{siteId}.json` files exist, `/project-init` will flag them for migration to `site.json`
|
|
122
122
|
|
|
123
123
|
## Symlink Setup
|
|
@@ -180,17 +180,17 @@ Every project SHOULD configure `.claude/settings.local.json` with these deny rul
|
|
|
180
180
|
|
|
181
181
|
Why each is denied:
|
|
182
182
|
|
|
183
|
-
- **`awk
|
|
184
|
-
- **`cat
|
|
185
|
-
- **`cd
|
|
186
|
-
- **`find
|
|
187
|
-
- **`for
|
|
188
|
-
- **`grep
|
|
189
|
-
- **`head`/`tail
|
|
190
|
-
- **`kill`/`pkill
|
|
191
|
-
- **`rg
|
|
192
|
-
- **`sed
|
|
193
|
-
- **`sleep
|
|
183
|
+
- **`awk`**: Use the Edit tool instead.
|
|
184
|
+
- **`cat`**: Use the Read tool instead.
|
|
185
|
+
- **`cd`**: MUST NOT use in any Bash command, including compound commands (`cd /path && git`). Use `git -C repo` for git, path arguments for everything else. Compound cd+git commands trigger an unblockable Claude Code security prompt that interrupts the user even when `cd` is denied.
|
|
186
|
+
- **`find`**: Use the Glob tool instead.
|
|
187
|
+
- **`for`**: Shell loops are unnecessary; use dedicated tools or make multiple tool calls instead.
|
|
188
|
+
- **`grep`**: Use the Grep tool instead.
|
|
189
|
+
- **`head`/`tail`**: Use the Read tool with `offset` and `limit` parameters instead.
|
|
190
|
+
- **`kill`/`pkill`**: Use `TaskStop` to manage background processes. `TaskStop` cleanly shuts down the task and updates Claude Code's internal tracking.
|
|
191
|
+
- **`rg`**: Use the Grep tool instead (it uses ripgrep internally).
|
|
192
|
+
- **`sed`**: Use the Edit tool instead.
|
|
193
|
+
- **`sleep`**: Unnecessary; use proper sequencing or background tasks.
|
|
194
194
|
|
|
195
195
|
## Bin Scripts (PATH)
|
|
196
196
|
|
|
@@ -17,8 +17,8 @@ These tools keep codebases healthy. When working in a project, check whether the
|
|
|
17
17
|
| **Prettier** | Consistent formatting | `.prettierrc*`, `prettier.config.*` | `pnpm format` |
|
|
18
18
|
| **TypeScript** | Type safety | `tsconfig.json` | `pnpm typecheck` |
|
|
19
19
|
| **Vitest** / **Jest** | Tests | `vitest.config.*`, `jest.config.*` | `pnpm test` |
|
|
20
|
-
| **knip** | Dead code
|
|
21
|
-
| **Lefthook** | Pre-commit hooks
|
|
20
|
+
| **knip** | Dead code: unused exports, deps, and files | `knip.json`, `knip.ts` | `pnpm knip` |
|
|
21
|
+
| **Lefthook** | Pre-commit hooks: run checks before push | `lefthook.yml` | auto on commit |
|
|
22
22
|
|
|
23
23
|
Also check `repo/package.json` for scripts containing: `lint`, `format`, `typecheck`, `test`, `check`, `validate`.
|
|
24
24
|
|
|
@@ -38,32 +38,32 @@ If any are missing, flag them:
|
|
|
38
38
|
|
|
39
39
|
```
|
|
40
40
|
Missing quality tooling:
|
|
41
|
-
- [ ] Linting
|
|
42
|
-
- [ ] Formatting
|
|
43
|
-
- [ ] Testing
|
|
44
|
-
- [ ] Dead code detection
|
|
45
|
-
- [ ] Pre-commit hooks
|
|
41
|
+
- [ ] Linting: suggest eslint / ruff / phpstan
|
|
42
|
+
- [ ] Formatting: suggest prettier / black / php-cs-fixer
|
|
43
|
+
- [ ] Testing: suggest vitest / pytest / phpunit
|
|
44
|
+
- [ ] Dead code detection: suggest knip
|
|
45
|
+
- [ ] Pre-commit hooks: suggest lefthook
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
Do not install or configure tools without the user's approval. Flag what's missing and explain why it helps
|
|
48
|
+
Do not install or configure tools without the user's approval. Flag what's missing and explain why it helps. Let the user decide.
|
|
49
49
|
|
|
50
50
|
## When to suggest
|
|
51
51
|
|
|
52
|
-
- **Setting up a new project
|
|
53
|
-
- **Reviewing code with unused imports/exports
|
|
54
|
-
- **Seeing inconsistent formatting
|
|
55
|
-
- **No tests for changed code
|
|
56
|
-
- **No pre-commit hooks
|
|
52
|
+
- **Setting up a new project**: suggest the full set
|
|
53
|
+
- **Reviewing code with unused imports/exports**: suggest knip
|
|
54
|
+
- **Seeing inconsistent formatting**: suggest prettier
|
|
55
|
+
- **No tests for changed code**: suggest vitest
|
|
56
|
+
- **No pre-commit hooks**: suggest lefthook
|
|
57
57
|
|
|
58
58
|
## Fix everything, hide nothing
|
|
59
59
|
|
|
60
|
-
See work-habits: "Leave it better than you found it" and "Resolve, never hide." Both apply fully to quality checks. Fix every issue regardless of who introduced it. NEVER suppress checks
|
|
60
|
+
See work-habits: "Leave it better than you found it" and "Resolve, never hide." Both apply fully to quality checks. Fix every issue regardless of who introduced it. NEVER suppress checks. Fix the code.
|
|
61
61
|
|
|
62
62
|
When reviewing code, scan for existing suppressions (`eslint-disable`, `@ts-ignore`, `.skip`, `noqa`, `phpcs:ignore`, etc.) and flag every instance to the user. These are hidden technical debt.
|
|
63
63
|
|
|
64
64
|
## pnpm lockfile sync
|
|
65
65
|
|
|
66
|
-
In pnpm workspace projects, the root `pnpm-lock.yaml` and site-level lockfiles MUST stay in sync. CI uses `--frozen-lockfile` and will reject mismatched lockfiles
|
|
66
|
+
In pnpm workspace projects, the root `pnpm-lock.yaml` and site-level lockfiles MUST stay in sync. CI uses `--frozen-lockfile` and will reject mismatched lockfiles. This is the most common cause of deploy failures.
|
|
67
67
|
|
|
68
68
|
After ANY `pnpm install`, `pnpm update`, or `pnpm add` in a workspace, run `pnpm install` at the repo root to regenerate the root lockfile. Commit both lockfiles together. If you forget, the next deploy will fail.
|
|
69
69
|
|
|
@@ -14,15 +14,27 @@ allowed-tools:
|
|
|
14
14
|
|
|
15
15
|
The wiki is the **single source of truth** for how a project works. The wiki is the spec; the repo is the implementation.
|
|
16
16
|
|
|
17
|
+
## Why This Design
|
|
18
|
+
|
|
19
|
+
The wiki is a **git-backed markdown folder** (`wiki/`) living next to the code repo (`repo/`), read by agents as local files via `Read wiki/*.md`. Every design choice answers a specific failure mode:
|
|
20
|
+
|
|
21
|
+
- **Markdown in git**: the docs live where the work lives and version alongside the code. Diffs show what changed and why. No login, no API, no stale snapshot.
|
|
22
|
+
- **Separate `wiki/` repo, not embedded in the code repo**: the wiki ships independently of code releases. Doc fixes do not wait on code review cycles, and code commits stay clean of doc noise.
|
|
23
|
+
- **Local file reads, not network fetches**: the agent loads the full wiki at session start with zero latency. No rate limits, no auth, works offline.
|
|
24
|
+
- **20K token budget**: small enough to fit the whole wiki in context while leaving 90% for working memory. Forces ruthless editing; a 200K-token wiki that cannot be loaded helps no one.
|
|
25
|
+
- **Process and principles, not code snippets**: code in the wiki rots the day it is pasted. Link to the source file instead, so the wiki stays true as the code evolves.
|
|
26
|
+
|
|
27
|
+
The payoff: **the agent and the user share the same model of the project.** Less re-explaining, fewer guesses, fewer "I assumed..." mistakes. Work goes faster because the agent already knows the conventions, and safer because the agent is not improvising decisions the wiki already settled.
|
|
28
|
+
|
|
17
29
|
## Token Budget
|
|
18
30
|
|
|
19
|
-
A wiki MUST NOT exceed **20K tokens** (~15K words, ~60KB). This is 10% of the AI agent's 200K context window
|
|
31
|
+
A wiki MUST NOT exceed **20K tokens** (~15K words, ~60KB). This is 10% of the AI agent's 200K context window, enough for the agent to load the entire wiki at session start while leaving 90% for working context.
|
|
20
32
|
|
|
21
33
|
Check size: `wc -w wiki/*.md` (multiply by ~1.3 for token estimate)
|
|
22
34
|
|
|
23
35
|
## Core Principle
|
|
24
36
|
|
|
25
|
-
Repo files (`.claude/CLAUDE.md`, `.claude/rules/`, `README.md`) MUST be minimal
|
|
37
|
+
Repo files (`.claude/CLAUDE.md`, `.claude/rules/`, `README.md`) MUST be minimal: orient then point to wiki. CLAUDE.md MUST link to every wiki content page. These links cost ~15 tokens total but make every page one Read away from always-loaded context. AI agents read wiki pages as local files via `Read wiki/<page>.md`. No network requests needed.
|
|
26
38
|
|
|
27
39
|
```
|
|
28
40
|
Wiki defines → Code implements → Learnings update wiki → Repeat
|
|
@@ -34,7 +46,7 @@ When code reveals the wiki is wrong or incomplete, update immediately. The wiki
|
|
|
34
46
|
|
|
35
47
|
Wikis are not just for the current project. They build institutional knowledge across the organization:
|
|
36
48
|
|
|
37
|
-
- **Site → Site**: Other projects using the same tools learn from this wiki. Document what worked, what didn't, and why
|
|
49
|
+
- **Site → Site**: Other projects using the same tools learn from this wiki. Document what worked, what didn't, and why. Future sites benefit from your experience.
|
|
38
50
|
- **Site → Packages**: The packages team reads site wikis to understand real usage patterns, pain points, and gaps. Your wiki helps them build better shared tools.
|
|
39
51
|
- **Packages → Site**: Package docs and conventions flow back into site wikis as shared patterns.
|
|
40
52
|
|
|
@@ -44,15 +56,15 @@ Write as if someone on a different project will read this wiki to understand how
|
|
|
44
56
|
|
|
45
57
|
Every page serves junior devs (explanations, examples), senior devs (quick reference, decisions), and AI agents (unambiguous specs, MUST/SHOULD/MAY). Write for all three:
|
|
46
58
|
|
|
47
|
-
- Lead with a summary
|
|
59
|
+
- Lead with a summary so seniors and agents get it fast and juniors get orientation
|
|
48
60
|
- Explain *why* before *how*
|
|
49
61
|
- Use tables for reference, code blocks for copy-paste, RFC 2119 keywords for requirements
|
|
50
62
|
- Each page SHOULD be self-contained
|
|
51
|
-
- Follow `simpleapps:writing-style`
|
|
63
|
+
- Follow `simpleapps:writing-style` for token-efficient prose, action verbs first, no filler
|
|
52
64
|
|
|
53
65
|
## Content Rules
|
|
54
66
|
|
|
55
|
-
- The wiki documents **process and principles**, not code. Minimize code examples
|
|
67
|
+
- The wiki documents **process and principles**, not code. Minimize code examples. Describe the pattern, then link to a real file in the repo that demonstrates it. A link to working code is always better than a pasted snippet that can go stale.
|
|
56
68
|
- If a code block is necessary (e.g., a command to run), keep it to 1-3 lines max.
|
|
57
69
|
- The wiki documents *what* and *why*. The repo is the source of truth for *how*.
|
|
58
70
|
|
|
@@ -63,19 +75,53 @@ Every page serves junior devs (explanations, examples), senior devs (quick refer
|
|
|
63
75
|
- Links: `[[Page-Name]]` or `[[Display Text|Page-Name]]`
|
|
64
76
|
- Anchor links MUST target specific sections (`[[Versioning#version-bump-procedure]]`), not just pages
|
|
65
77
|
- Repo references: use relative paths (`../../../wiki/Versioning.md`)
|
|
66
|
-
-
|
|
78
|
+
- Wiki repo default branch: `master` (GitHub's `.wiki.git` convention; applies to the `wiki/` repo only, not the code repo). Code repos may use `main` or `master`. Check with `git -C repo branch --show-current`.
|
|
67
79
|
|
|
68
80
|
## Cross-Linking
|
|
69
81
|
|
|
70
|
-
Cross-linking is the most important structural feature of a wiki. Without it, a wiki is just a collection of files. With it, a wiki becomes a **knowledge graph**
|
|
82
|
+
Cross-linking is the most important structural feature of a wiki. Without it, a wiki is just a collection of files. With it, a wiki becomes a **knowledge graph** where each link is an attention signal that tells readers (human and AI) "this concept connects to that one."
|
|
83
|
+
|
|
84
|
+
Pages MUST link to related sections on other pages using `[[Page-Name#section]]`. Link to specific sections, not just pages. Every concept that is explained in more detail elsewhere MUST have a cross-link.
|
|
85
|
+
|
|
86
|
+
Cross-linking also eliminates duplication. If two pages explain the same concept, one MUST become the source of truth and the other MUST link to it. Never duplicate content across pages; link instead. This keeps the wiki lean and ensures updates happen in one place.
|
|
87
|
+
|
|
88
|
+
### Link strategy: contextual, not link-farm
|
|
89
|
+
|
|
90
|
+
A link is only as useful as the words around it. The same rule serves both audiences:
|
|
91
|
+
|
|
92
|
+
- **Humans** scan anchor text and surrounding prose to decide whether to click. This is basic SEO; descriptive anchors win.
|
|
93
|
+
- **LLMs** weight links via the attention mechanism, which uses the surrounding tokens to decide what the link is about. A bare title in a "Related" list has no context to anchor against.
|
|
94
|
+
|
|
95
|
+
A link farm starves both readers. Humans see undifferentiated blue text; the LLM sees a list of titles with no relevance signal.
|
|
96
|
+
|
|
97
|
+
**MUST: place links inline, in the prose, at the moment the concept is mentioned.** That sentence is the link's context for both readers.
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
✅ Versioning follows [[Versioning#calver|CalVer (YYYY.MM.seq)]]. See the
|
|
101
|
+
procedure for [[Versioning#version-bump-procedure|bumping all version files together]].
|
|
102
|
+
|
|
103
|
+
❌ ## Related
|
|
104
|
+
- [[Versioning]]
|
|
105
|
+
- [[Deployment]]
|
|
106
|
+
- [[Architecture]]
|
|
107
|
+
```
|
|
71
108
|
|
|
72
|
-
|
|
109
|
+
**MUST: anchor text describes what the link is about**, not "click here" or "see also" or the bare page title with no context. The reader (human or AI) should understand the destination from the anchor text alone.
|
|
73
110
|
|
|
74
|
-
|
|
111
|
+
```
|
|
112
|
+
✅ [[Skill-Format#required-frontmatter|the required SKILL.md frontmatter fields]]
|
|
113
|
+
❌ [[Skill-Format|click here]]
|
|
114
|
+
❌ [[Skill-Format]] ← acceptable if the surrounding sentence supplies the context;
|
|
115
|
+
avoid as the only signal.
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**SHOULD NOT: create "Related", "See also", or "Further reading" sections as link dumps.** If a connection matters, work it into the prose where it matters. The exception is genuine navigation pages (`Home.md`, `_Sidebar.md`, `llms.txt`); those exist to be link indexes.
|
|
119
|
+
|
|
120
|
+
When auditing a page, count the trailing-list links vs. inline links. If trailing-list links outnumber inline links, the page is a directory entry, not a knowledge page. Rewrite to put the connections where the reader needs them.
|
|
75
121
|
|
|
76
122
|
## Wiki Over Memory
|
|
77
123
|
|
|
78
|
-
When asked to save, document, or record knowledge
|
|
124
|
+
When asked to save, document, or record knowledge, use the wiki. MUST NOT use memory. The wiki is shared across all agents, all projects, and all computers. Memory is personal to one user on one machine and invisible to everyone else.
|
|
79
125
|
|
|
80
126
|
| Knowledge type | Where it belongs |
|
|
81
127
|
|---------------|-----------------|
|
|
@@ -87,9 +133,27 @@ When asked to save, document, or record knowledge — use the wiki, MUST NOT use
|
|
|
87
133
|
| Personal preferences (writing style, response length) | Memory |
|
|
88
134
|
| User role and background | Memory |
|
|
89
135
|
|
|
90
|
-
If the user corrects your behavior, update the relevant **skill
|
|
136
|
+
If the user corrects your behavior, update the relevant **skill**, not memory. A correction saved to memory only helps one agent on one machine. A correction in a skill helps every agent on every project.
|
|
137
|
+
|
|
138
|
+
If in doubt, it belongs in the wiki or a skill. The cost of putting shared knowledge in memory is that it dies with the session; no other agent, project, or computer will ever see it.
|
|
139
|
+
|
|
140
|
+
### Versioned sources win over memory
|
|
141
|
+
|
|
142
|
+
When a recalled memory conflicts with the wiki, a rule, CLAUDE.md, or a skill, you MUST follow the versioned source and ignore the memory. Memory is:
|
|
143
|
+
|
|
144
|
+
- **Personal**: lives on one machine, invisible to other agents and teammates
|
|
145
|
+
- **Unauditable**: the user cannot easily review or version-control what an agent has saved
|
|
146
|
+
- **Often wrong**: agents save memories from misunderstandings, outdated context, or half-formed rules
|
|
147
|
+
|
|
148
|
+
Anything checked into git (wiki pages, `.claude/rules/*.md`, `CLAUDE.md`, skills) is the contract. Memory is at most a personal hint. YOU MUST NOT use memory to downgrade, override, or work around a MUST from a versioned source. If memory says X but the wiki says MUST NOT X, the wiki wins, every time.
|
|
149
|
+
|
|
150
|
+
When you detect a conflict:
|
|
151
|
+
|
|
152
|
+
1. Follow the versioned source
|
|
153
|
+
2. Remove or rewrite the offending memory file (update `MEMORY.md` index too)
|
|
154
|
+
3. Report the conflict to the user so they know memory was incorrect
|
|
91
155
|
|
|
92
|
-
|
|
156
|
+
"The memory told me otherwise" is never a valid reason to deviate from the wiki, a rule, or a skill. If you catch yourself reaching for that reasoning, stop. The memory is the problem, not the directive.
|
|
93
157
|
|
|
94
158
|
## Cross-Project Wiki Access
|
|
95
159
|
|
|
@@ -98,16 +162,16 @@ All projects follow the same directory layout (see `simpleapps:project-defaults`
|
|
|
98
162
|
**Before reading another project's wiki, pull the latest:**
|
|
99
163
|
`git -C {path-to-project}/wiki pull`
|
|
100
164
|
|
|
101
|
-
**MUST use dedicated tools for cross-project access
|
|
165
|
+
**MUST use dedicated tools for cross-project access. MUST NOT use shell commands:**
|
|
102
166
|
- Read files: `Read("{path-to-project}/wiki/Page.md")`
|
|
103
167
|
- Search code: `Grep(pattern: "...", path: "{path-to-project}/repo")`
|
|
104
168
|
- Find files: `Glob(pattern: "{path-to-project}/repo/**/*.ts")`
|
|
105
169
|
|
|
106
|
-
MUST NOT use `find`, `grep`, `cat`, `ls`, or any shell command to explore other projects. The paths are known
|
|
170
|
+
MUST NOT use `find`, `grep`, `cat`, `ls`, or any shell command to explore other projects. The paths are known; use the dedicated tools directly.
|
|
107
171
|
|
|
108
172
|
### Search all wikis
|
|
109
173
|
|
|
110
|
-
Every wiki on the machine is a local knowledge base. When looking for how something was solved, search across ALL wikis
|
|
174
|
+
Every wiki on the machine is a local knowledge base. When looking for how something was solved, search across ALL wikis, not just the current project:
|
|
111
175
|
|
|
112
176
|
1. Read `~/.simpleapps/settings.json` to get `projectRoot`
|
|
113
177
|
2. Pull the latest for all wikis before searching:
|
|
@@ -120,19 +184,19 @@ Every wiki on the machine is a local knowledge base. When looking for how someth
|
|
|
120
184
|
|
|
121
185
|
Use Glob to discover which projects have wikis: `Glob(pattern: "{projectRoot}/clients/*/wiki")` and `Glob(pattern: "{projectRoot}/simpleapps/*/wiki")`.
|
|
122
186
|
|
|
123
|
-
The wikis are kept fresh by `/curate-wiki` runs across projects. Searching locally is instant and requires no internet access
|
|
187
|
+
The wikis are kept fresh by `/curate-wiki` runs across projects. Searching locally is instant and requires no internet access; the knowledge is already on the machine.
|
|
124
188
|
|
|
125
|
-
**What to search for:** testing patterns and checklists, architecture decisions, coding conventions, deployment procedures, and how specific features were implemented. Other sites have already solved many of the same problems
|
|
189
|
+
**What to search for:** testing patterns and checklists, architecture decisions, coding conventions, deployment procedures, and how specific features were implemented. Other sites have already solved many of the same problems; search before building from scratch.
|
|
126
190
|
|
|
127
191
|
## Deployment Page
|
|
128
192
|
|
|
129
|
-
Every project wiki MUST have a `Deployment.md` page with up to three sections: Submit, Deploy, and Publish. This page defines the project-specific steps that `/submit`, `/deploy`, and `/publish` commands execute. Run `/curate-wiki` to generate it from the codebase
|
|
193
|
+
Every project wiki MUST have a `Deployment.md` page with up to three sections: Submit, Deploy, and Publish. This page defines the project-specific steps that `/submit`, `/deploy`, and `/publish` commands execute. Run `/curate-wiki` to generate it from the codebase. The command scans CI workflows, package.json, deploy scripts, and asks the user about anything it cannot determine. See the `deployment` skill for the expected format.
|
|
130
194
|
|
|
131
195
|
## Testing Page
|
|
132
196
|
|
|
133
|
-
Every project wiki MUST have a `Testing.md` page. This is the E2E verification checklist that `/verify` uses to walk through the site in Chrome. The page grows over time
|
|
197
|
+
Every project wiki MUST have a `Testing.md` page. This is the E2E verification checklist that `/verify` uses to walk through the site in Chrome. The page grows over time. `/curate-wiki` MUST add testing knowledge learned during the session (new edge cases, failure patterns, test data) to the Testing page.
|
|
134
198
|
|
|
135
|
-
A good Testing page covers: test tiers (automated vs manual), test data (items, accounts, cards), and an E2E checklist organized by page area (homepage, listing, detail, cart, checkout, etc.). Each checklist item is a concrete, verifiable condition
|
|
199
|
+
A good Testing page covers: test tiers (automated vs manual), test data (items, accounts, cards), and an E2E checklist organized by page area (homepage, listing, detail, cart, checkout, etc.). Each checklist item is a concrete, verifiable condition, not vague ("works") but specific ("price shows $9.26").
|
|
136
200
|
|
|
137
201
|
## Keep It Lean
|
|
138
202
|
|
|
@@ -143,7 +207,7 @@ A good Testing page covers: test tiers (automated vs manual), test data (items,
|
|
|
143
207
|
|
|
144
208
|
## Maintenance
|
|
145
209
|
|
|
146
|
-
Cross-check wiki against code before updating. Staleness-prone: versions, file counts, CI workflows, TODO markers, API surfaces. **Never echo what the wiki says
|
|
210
|
+
Cross-check wiki against code before updating. Staleness-prone: versions, file counts, CI workflows, TODO markers, API surfaces. **Never echo what the wiki says. Read the code, then write.**
|
|
147
211
|
|
|
148
212
|
When adding/removing pages, MUST update: `Home.md`, `_Sidebar.md`, `llms.txt` (if present).
|
|
149
213
|
|
|
@@ -11,7 +11,7 @@ Do not add features, refactor surrounding code, or "improve" beyond the request.
|
|
|
11
11
|
|
|
12
12
|
## Use the right tool
|
|
13
13
|
|
|
14
|
-
Prefer dedicated tools over Bash equivalents
|
|
14
|
+
Prefer dedicated tools over Bash equivalents. They are faster, need no permissions, and produce cleaner output:
|
|
15
15
|
- Read not `cat`/`head`/`tail`
|
|
16
16
|
- Grep not `grep`/`rg`
|
|
17
17
|
- Glob not `find`/`ls`
|
|
@@ -19,11 +19,11 @@ Prefer dedicated tools over Bash equivalents — they are faster, need no permis
|
|
|
19
19
|
|
|
20
20
|
Reserve Bash for commands that have no dedicated tool equivalent.
|
|
21
21
|
|
|
22
|
-
MUST NOT use `cd` in any Bash command
|
|
22
|
+
MUST NOT use `cd` in any Bash command, not even in compound commands like `cd /path && git log`. Use `git -C repo` for git, and path arguments for everything else. The `cd` deny rule does not suppress Claude Code's built-in security prompt for compound cd+git commands, so any `cd` usage will interrupt the user.
|
|
23
23
|
|
|
24
24
|
## Check site.json first
|
|
25
25
|
|
|
26
|
-
Before asking the user for credentials, tokens, siteId, domain, or any site-specific configuration, read `.simpleapps/site.json`. It is the single source of truth for site-level data
|
|
26
|
+
Before asking the user for credentials, tokens, siteId, domain, or any site-specific configuration, read `.simpleapps/site.json`. It is the single source of truth for site-level data: credentials, auth tokens, defaults, and identifiers. If what you need is not there, ask the user to add it to `site.json` rather than providing it in chat (chat data is ephemeral; `site.json` persists across sessions).
|
|
27
27
|
|
|
28
28
|
## Read the error first
|
|
29
29
|
|
|
@@ -42,15 +42,41 @@ Code that compiles is not code that works. After making changes, verify they act
|
|
|
42
42
|
|
|
43
43
|
1. Run tests (`pnpm test` or equivalent)
|
|
44
44
|
2. If the project has a Testing page in the wiki, suggest `/verify` to walk through the E2E checklist in the browser
|
|
45
|
-
3. If you changed UI, check it visually
|
|
45
|
+
3. If you changed UI, check it visually. Load the page in Chrome and confirm it looks right.
|
|
46
46
|
|
|
47
|
-
YOU MUST NOT mark work complete without verification. Suggesting `/submit` or `/quality` before verifying the code works is backwards
|
|
47
|
+
YOU MUST NOT mark work complete without verification. Suggesting `/submit` or `/quality` before verifying the code works is backwards: broken code that passes lint is still broken code. Verify first, then let the user decide next steps.
|
|
48
48
|
|
|
49
49
|
## Leave it better than you found it
|
|
50
50
|
|
|
51
|
-
Every agent interaction should leave the codebase in a better state. If you encounter a broken test, a console error, an error overlay, a lint warning, or any other issue while working
|
|
51
|
+
Every agent interaction should leave the codebase in a better state. If you encounter a broken test, a console error, an error overlay, a lint warning, or any other issue while working, fix it. This applies whether or not you caused it and whether or not it is related to your current task.
|
|
52
52
|
|
|
53
|
-
Do not classify issues as "pre-existing" to justify skipping them
|
|
53
|
+
Do not classify issues as "pre-existing" to justify skipping them. Context compaction erases your memory of changes made earlier in the session, so what looks pre-existing is often something you introduced. Even if you truly did not cause it, the goal is zero issues, not blame assignment. Fix it anyway. Do not argue with the user about whether an issue is yours to fix. It is.
|
|
54
|
+
|
|
55
|
+
## Versioned sources win over memory
|
|
56
|
+
|
|
57
|
+
When a recalled memory conflicts with the wiki, a `.claude/rules/*.md` file, `CLAUDE.md`, or a skill, YOU MUST follow the versioned source and ignore the memory. Memory is personal, unauditable, and often wrong. Agents save memories from misunderstandings or outdated context, and the user cannot easily review what's been saved.
|
|
58
|
+
|
|
59
|
+
Anything checked into git is the contract. Memory is at most a personal hint. "My memory says otherwise" is never a valid reason to deviate from a wiki page, a rule, or a skill. If you catch yourself reasoning that way, the memory is the problem.
|
|
60
|
+
|
|
61
|
+
When you detect a conflict: follow the versioned source, remove the offending memory file (and its `MEMORY.md` entry), and report the conflict so the user knows.
|
|
62
|
+
|
|
63
|
+
See `simpleapps:wiki` "Wiki Over Memory" for the full priority rules.
|
|
64
|
+
|
|
65
|
+
## RFC 2119 keywords are binding
|
|
66
|
+
|
|
67
|
+
When a wiki page, skill, rule, spec, or issue uses MUST, MUST NOT, SHALL, or SHALL NOT, you MUST comply literally. YOU MUST NOT downgrade a MUST to a SHOULD because:
|
|
68
|
+
|
|
69
|
+
- it would take longer
|
|
70
|
+
- an example in the current session shows otherwise
|
|
71
|
+
- the codebase appears inconsistent
|
|
72
|
+
- you judge the requirement unnecessary
|
|
73
|
+
- it is inconvenient
|
|
74
|
+
|
|
75
|
+
If a MUST seems wrong, impossible, or in conflict with another MUST, STOP and ask the user. Do not silently relax it and proceed. The writer chose the keyword deliberately; overriding it is the agent substituting its judgment for the writer's. SHOULD allows deviation only with a factual justification about the current situation. Convenience and time pressure are never valid justifications.
|
|
76
|
+
|
|
77
|
+
Session examples do not override written directives. If code in the session contradicts a MUST from the wiki or a skill, the session code is the problem. Flag it, do not use it as permission to violate the MUST.
|
|
78
|
+
|
|
79
|
+
See `simpleapps:writing-style` for the full reading-compliance rules.
|
|
54
80
|
|
|
55
81
|
## Resolve, never hide
|
|
56
82
|
|
|
@@ -62,15 +88,19 @@ When a check fails, the solution is ALWAYS to fix the underlying code. NEVER:
|
|
|
62
88
|
- Suppress warnings, lower coverage thresholds, or modify quality configs
|
|
63
89
|
- Add `--no-verify`, `--force`, or flags that bypass checks
|
|
64
90
|
|
|
65
|
-
These actions hide problems
|
|
91
|
+
These actions hide problems; they do not fix them. If a rule or test seems wrong, investigate why it exists before concluding it should change. Rules exist for reasons. If after investigation it genuinely does not apply, explain the reasoning to the user and let them decide. Do not unilaterally disable it.
|
|
92
|
+
|
|
93
|
+
## Check the branch before non-trivial work
|
|
94
|
+
|
|
95
|
+
Several lifecycle commands (`/wip`, `/investigate`, `/implement`, `/submit`) repeat the same check: run `git -C repo branch --show-current` and warn the user if the branch is unexpected (not `main`, not a feature branch named after the issue). This is a shared hygiene step. If you find yourself doing meaningful work on an unexpected branch, stop and confirm with the user before continuing. Branching mistakes compound silently.
|
|
66
96
|
|
|
67
97
|
## Track progress
|
|
68
98
|
|
|
69
|
-
Use
|
|
99
|
+
Use TaskCreate/TaskUpdate/TaskList on multi-step tasks. Mark items in_progress before starting, completed after verifying. Do NOT batch completions; update each task as it finishes so the list reflects real state.
|
|
70
100
|
|
|
71
101
|
## Never prompt for git actions
|
|
72
102
|
|
|
73
|
-
MUST NOT ask "want me to commit?", "should I submit?", "ready for a PR?", "want me to push?", or ANY variation after completing work. Do not hint at it either
|
|
103
|
+
MUST NOT ask "want me to commit?", "should I submit?", "ready for a PR?", "want me to push?", or ANY variation after completing work. Do not hint at it either: "if you're happy with this, you can run /submit" is the same thing with extra words. The user knows their own workflow. They will say "commit", `/submit`, or equivalent when they are ready.
|
|
74
104
|
|
|
75
105
|
After completing work: report what changed, suggest `/verify` if untested, then stop. That is the entire post-work protocol. No git prompts. No shipping suggestions.
|
|
76
106
|
|
|
@@ -82,12 +112,12 @@ After completing work: report what changed, suggest `/verify` if untested, then
|
|
|
82
112
|
|
|
83
113
|
## Be persistent with browser automation
|
|
84
114
|
|
|
85
|
-
When using Chrome tools, do not give up after the first failure. Pages are dynamic
|
|
115
|
+
When using Chrome tools, do not give up after the first failure. Pages are dynamic: elements may not be visible yet, selectors may need adjusting, or the page may need time to load.
|
|
86
116
|
|
|
87
|
-
Accessibility features make sites machine-readable
|
|
117
|
+
Accessibility features make sites machine-readable. The same semantic HTML, ARIA labels, landmark roles, and alt text that help screen reader users also help you navigate pages during Chrome automation. When looking for elements, prefer ARIA roles and labels over brittle CSS selectors. When reviewing or writing frontend code, strong accessibility is not just a user concern; it directly improves your ability to automate and verify the site, and search engines benefit from the same semantic signals.
|
|
88
118
|
|
|
89
119
|
Before giving up on a browser task:
|
|
90
|
-
- Look for ARIA labels, roles, and semantic elements first
|
|
120
|
+
- Look for ARIA labels, roles, and semantic elements first; they are the most reliable selectors
|
|
91
121
|
- Try a different selector or approach (text search, CSS selector, coordinates)
|
|
92
122
|
- Scroll to reveal elements that may be off-screen
|
|
93
123
|
- Wait for the page to finish loading, then retry
|
|
@@ -98,9 +128,9 @@ Two failed attempts with the *same* approach means change strategy, not stop ent
|
|
|
98
128
|
|
|
99
129
|
## Good enough is done
|
|
100
130
|
|
|
101
|
-
Working code that meets the requirements is good enough
|
|
131
|
+
Working code that meets the requirements is good enough; ship it. Do not chase diminishing returns by over-polishing, refactoring working code, or improving what already works. The cost of continued refinement exceeds its value. Stop when the task is done, not when you run out of improvements to make.
|
|
102
132
|
|
|
103
|
-
The distinction: polishing task-specific code is local optimization
|
|
133
|
+
The distinction: polishing task-specific code is local optimization. It makes one site marginally better but does not move the system forward. Extracting custom code into shared packages removes a system constraint; every site that would have reimplemented the same thing benefits. Local optimization is waste. Removing system constraints compounds. Flag extraction opportunities per "Improve the system" below, but do not polish the task code itself.
|
|
104
134
|
|
|
105
135
|
## Recover from mistakes
|
|
106
136
|
|
|
@@ -108,6 +138,6 @@ Wrong approach? Stop, revert, try differently. Do not keep layering fixes on a b
|
|
|
108
138
|
|
|
109
139
|
## Improve the system, not just the output
|
|
110
140
|
|
|
111
|
-
Removing daily work is more important than doing daily work. While completing a task, notice friction: unnecessary manual steps, repeated patterns that could be shared, error-prone processes that could be automated, custom code that duplicates a package export. When you spot these, flag them
|
|
141
|
+
Removing daily work is more important than doing daily work. While completing a task, notice friction: unnecessary manual steps, repeated patterns that could be shared, error-prone processes that could be automated, custom code that duplicates a package export. When you spot these, flag them. Suggest a package addition, a script, a skill improvement, or a workflow change. The value of eliminating a step that runs every day far exceeds the value of completing it one more time.
|
|
112
142
|
|
|
113
|
-
This is not scope creep on the code. "Do exactly what was asked" still applies to the task. But improving the system the task runs in
|
|
143
|
+
This is not scope creep on the code. "Do exactly what was asked" still applies to the task. But improving the system the task runs in (making skills clearer, workflows smoother, shared code more complete) is always in scope. File an issue, update a skill, or mention it in your report.
|
|
@@ -14,7 +14,7 @@ allowed-tools:
|
|
|
14
14
|
1. **Client request** arrives in Basecamp (todo, message, or comment)
|
|
15
15
|
2. **Read and summarize** the Basecamp todo to understand the request
|
|
16
16
|
3. **Create a GitHub issue** with technical details for implementation
|
|
17
|
-
4. **Cross-link
|
|
17
|
+
4. **Cross-link**: Basecamp todo URL in the GitHub issue body, GitHub issue URL in Basecamp todo comments
|
|
18
18
|
5. **Do the work** in code, referencing the GitHub issue
|
|
19
19
|
6. **Report back** through Basecamp for the client; keep implementation details in GitHub
|
|
20
20
|
|
|
@@ -25,9 +25,9 @@ allowed-tools:
|
|
|
25
25
|
| **Basecamp** | Client-facing | Task requests, status updates, client communication |
|
|
26
26
|
| **GitHub Issues** | Developer-facing | Technical details, implementation, internal findings |
|
|
27
27
|
|
|
28
|
-
Basecamp todos and GitHub issues SHOULD cross-link (many-to-many
|
|
28
|
+
Basecamp todos and GitHub issues SHOULD cross-link (many-to-many: one todo MAY relate to multiple issues and vice versa).
|
|
29
29
|
|
|
30
|
-
**Note**: GitHub access is granted on request. If the user does not have repo access, skip steps 3-5 above and use Basecamp only. Do not assume access
|
|
30
|
+
**Note**: GitHub access is granted on request. If the user does not have repo access, skip steps 3-5 above and use Basecamp only. Do not assume access. Check with `gh` or ask the user.
|
|
31
31
|
|
|
32
32
|
## Tooling
|
|
33
33
|
|
|
@@ -50,7 +50,7 @@ gh issue create --repo simpleapps-com/<repo> \
|
|
|
50
50
|
<basecamp_todo_url>
|
|
51
51
|
|
|
52
52
|
## Client
|
|
53
|
-
<client/project name
|
|
53
|
+
<client/project name>: <domain> (siteId: <siteId>)
|
|
54
54
|
|
|
55
55
|
## Summary
|
|
56
56
|
<technical summary of what needs to be done>
|
|
@@ -78,7 +78,7 @@ The full workflow from task to delivery, each step feeding the next:
|
|
|
78
78
|
| Scaffold | `/wip` | Create a WIP file from Basecamp or GitHub issue |
|
|
79
79
|
| Research | `/investigate` | Explore codebase, update WIP with findings |
|
|
80
80
|
| Align | `/discuss` | Conversational alignment before acting |
|
|
81
|
-
| Build | `/implement` | Execute the plan
|
|
81
|
+
| Build | `/implement` | Execute the plan: code changes only, no commits |
|
|
82
82
|
| Code checks | `/quality` | Lint, typecheck, test, package freshness |
|
|
83
83
|
| Solution audit | `/sanity-check` | Did we solve the right problem without commission/omission errors? |
|
|
84
84
|
| Browser checks | `/verify` | Walk through wiki's Testing.md checklist in Chrome |
|
|
@@ -86,9 +86,9 @@ The full workflow from task to delivery, each step feeding the next:
|
|
|
86
86
|
| Stage | `/deploy` | Deploy to staging (merge PRs, trigger staging build) |
|
|
87
87
|
| Release | `/publish` | Version bump, tag, release to production (with verification) |
|
|
88
88
|
|
|
89
|
-
Not every task uses all steps. Most daily work ends at `/submit`. `/deploy` and `/publish` are used less frequently
|
|
89
|
+
Not every task uses all steps. Most daily work ends at `/submit`. `/deploy` and `/publish` are used less frequently. `/publish` is intentionally rare and requires explicit verification of the exact version going to production.
|
|
90
90
|
|
|
91
|
-
The three shipping commands (`/submit`, `/deploy`, `/publish`) read project-specific steps from `wiki/Deployment.md`. They refuse to operate if the Deployment page is missing
|
|
91
|
+
The three shipping commands (`/submit`, `/deploy`, `/publish`) read project-specific steps from `wiki/Deployment.md`. They refuse to operate if the Deployment page is missing. Run `/curate-wiki` to generate it from the codebase.
|
|
92
92
|
|
|
93
93
|
Commands like `/research` and `/discuss` can be used at any stage. `/quality`, `/verify`, `/curate-wiki`, and `/wiki-audit` can run independently.
|
|
94
94
|
|