gm-codex 2.0.420 → 2.0.422
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/.codex-plugin/plugin.json +1 -1
- package/agents/memorize.md +89 -0
- package/gm.json +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/browser/SKILL.md +3 -46
- package/skills/code-search/SKILL.md +3 -0
- package/skills/create-lang-plugin/SKILL.md +3 -0
- package/skills/ssh/SKILL.md +3 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: memorize
|
|
3
|
+
description: Background memory agent. Classifies context into memory/ dir and CLAUDE.md. Aggressively prunes stale/derivable/duplicate entries.
|
|
4
|
+
agent: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Memorize — Background Memory Agent
|
|
8
|
+
|
|
9
|
+
Memory dir: C:/Users/user/.claude/projects/C--dev-plugforge/memory/
|
|
10
|
+
CLAUDE.md: C:/dev/plugforge/CLAUDE.md
|
|
11
|
+
|
|
12
|
+
## STEP 1: READ
|
|
13
|
+
|
|
14
|
+
Read memory dir contents and MEMORY.md index. Read all existing memory files. Read CLAUDE.md in full.
|
|
15
|
+
|
|
16
|
+
If memory dir does not exist, create it. If MEMORY.md does not exist, create it empty.
|
|
17
|
+
|
|
18
|
+
## STEP 2: PRUNE
|
|
19
|
+
|
|
20
|
+
Run BEFORE writing any new content.
|
|
21
|
+
|
|
22
|
+
Remove entries that are:
|
|
23
|
+
- Contradicted or superseded by current CLAUDE.md or observable codebase facts
|
|
24
|
+
- Duplicates of other entries (merge into one)
|
|
25
|
+
- Derivable at runtime via exec:codesearch: file paths, function names, API shapes, architecture patterns
|
|
26
|
+
- Active task state, current progress, session narration
|
|
27
|
+
|
|
28
|
+
Keep ONLY: cross-session unknowns that required multiple failed attempts to discover, user preferences and feedback, project decisions with non-obvious rationale.
|
|
29
|
+
|
|
30
|
+
When in doubt: DELETE. Memory must stay lean.
|
|
31
|
+
|
|
32
|
+
## STEP 3: CLASSIFY
|
|
33
|
+
|
|
34
|
+
Examine the ## CONTEXT TO MEMORIZE section at the end of this prompt. For each fact, classify as:
|
|
35
|
+
|
|
36
|
+
- user: user role, goals, preferences, knowledge
|
|
37
|
+
- feedback: guidance on approach — corrections AND confirmations
|
|
38
|
+
- project: ongoing work, goals, bugs, incidents, decisions
|
|
39
|
+
- reference: pointers to external systems, URLs, paths
|
|
40
|
+
|
|
41
|
+
Discard:
|
|
42
|
+
- Facts already covered in CLAUDE.md (exact or paraphrase)
|
|
43
|
+
- Obvious facts derivable from reading the code
|
|
44
|
+
- Active task state or session progress
|
|
45
|
+
|
|
46
|
+
## STEP 4: WRITE
|
|
47
|
+
|
|
48
|
+
For each classified fact:
|
|
49
|
+
1. Check all existing memory files — if one covers the same topic, merge the new fact in
|
|
50
|
+
2. If no existing file covers it, create memory/<slug>.md
|
|
51
|
+
|
|
52
|
+
File format:
|
|
53
|
+
```
|
|
54
|
+
---
|
|
55
|
+
name: <descriptive name>
|
|
56
|
+
description: <one-line under 80 chars>
|
|
57
|
+
type: user|feedback|project|reference
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
<body>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
For feedback and project types, body must include:
|
|
64
|
+
- The fact or rule
|
|
65
|
+
- Why: <reason>
|
|
66
|
+
- How to apply: <concrete application>
|
|
67
|
+
|
|
68
|
+
## STEP 5: UPDATE MEMORY.md
|
|
69
|
+
|
|
70
|
+
Rewrite the MEMORY.md index to reflect all current files in the memory dir.
|
|
71
|
+
|
|
72
|
+
Format: one line per file, under 150 chars each:
|
|
73
|
+
`- [Title](file.md) — one-line hook`
|
|
74
|
+
|
|
75
|
+
No frontmatter. Max 200 lines.
|
|
76
|
+
|
|
77
|
+
## STEP 6: CONSOLIDATE
|
|
78
|
+
|
|
79
|
+
For each memory file: if its content is already fully covered by CLAUDE.md (exact or equivalent), delete the memory file and remove its line from MEMORY.md.
|
|
80
|
+
|
|
81
|
+
## STEP 7: CLAUDE.md
|
|
82
|
+
|
|
83
|
+
A non-obvious technical caveat qualifies if it required multiple failed runs to discover and would not be apparent from reading code or docs.
|
|
84
|
+
|
|
85
|
+
For each qualifying fact from context:
|
|
86
|
+
- If CLAUDE.md already covers it → skip
|
|
87
|
+
- If genuinely non-obvious → append to the appropriate section
|
|
88
|
+
|
|
89
|
+
Never add: obvious patterns, active task progress, redundant restatements.
|
package/gm.json
CHANGED
package/package.json
CHANGED
package/plugin.json
CHANGED
package/skills/browser/SKILL.md
CHANGED
|
@@ -6,6 +6,9 @@ allowed-tools: Bash(browser:*), Bash(exec:browser*)
|
|
|
6
6
|
|
|
7
7
|
# Browser Automation with playwriter
|
|
8
8
|
|
|
9
|
+
**Use gm subagents for all independent work items. Invoke all skills in the chain: planning → gm-execute → gm-emit → gm-complete → update-docs.**
|
|
10
|
+
|
|
11
|
+
|
|
9
12
|
## Two Pathways
|
|
10
13
|
|
|
11
14
|
**Session commands** (`browser:` prefix) — manage multi-step sessions via playwriter CLI. Each `browser:` block runs its commands sequentially.
|
|
@@ -64,12 +67,6 @@ browser:
|
|
|
64
67
|
playwriter -s 1 -e 'console.log(state.x)'
|
|
65
68
|
```
|
|
66
69
|
|
|
67
|
-
List active sessions:
|
|
68
|
-
|
|
69
|
-
```
|
|
70
|
-
browser:
|
|
71
|
-
playwriter session list
|
|
72
|
-
```
|
|
73
70
|
|
|
74
71
|
**RULE**: The `-e` argument must use single quotes. The JS inside must use double quotes for strings.
|
|
75
72
|
|
|
@@ -135,21 +132,7 @@ task_N
|
|
|
135
132
|
|
|
136
133
|
## Common Patterns
|
|
137
134
|
|
|
138
|
-
### Navigate and check current URL/status
|
|
139
|
-
|
|
140
|
-
```
|
|
141
|
-
exec:browser
|
|
142
|
-
await page.goto('https://example.com')
|
|
143
|
-
console.log('URL:', page.url())
|
|
144
|
-
console.log('title:', await page.title())
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### Screenshot
|
|
148
135
|
|
|
149
|
-
```
|
|
150
|
-
browser:
|
|
151
|
-
playwriter -s 1 -e 'await screenshotWithAccessibilityLabels({ page })'
|
|
152
|
-
```
|
|
153
136
|
|
|
154
137
|
### Data Extraction
|
|
155
138
|
|
|
@@ -159,18 +142,6 @@ const items = await page.$$eval('.product-title', els => els.map(e => e.textCont
|
|
|
159
142
|
console.log(JSON.stringify(items))
|
|
160
143
|
```
|
|
161
144
|
|
|
162
|
-
### Fetch bypassing browser cache
|
|
163
|
-
|
|
164
|
-
`fetch()` inside `page.evaluate()` hits the browser cache — use `cache: 'no-store'` to get fresh content:
|
|
165
|
-
|
|
166
|
-
```
|
|
167
|
-
exec:browser
|
|
168
|
-
const text = await page.evaluate(async () => {
|
|
169
|
-
const r = await fetch('./app.js', { cache: 'no-store' })
|
|
170
|
-
return await r.text()
|
|
171
|
-
})
|
|
172
|
-
console.log('Has feature:', text.includes('myFunction'))
|
|
173
|
-
```
|
|
174
145
|
|
|
175
146
|
### Console Monitoring — set up listener first, then poll
|
|
176
147
|
|
|
@@ -189,14 +160,6 @@ console.log('logs so far:', JSON.stringify(state.logs.slice(-20)))
|
|
|
189
160
|
console.log('errors:', JSON.stringify(state.errors))
|
|
190
161
|
```
|
|
191
162
|
|
|
192
|
-
### Web Worker Access
|
|
193
|
-
|
|
194
|
-
```
|
|
195
|
-
exec:browser
|
|
196
|
-
const workers = page.workers()
|
|
197
|
-
console.log('Workers:', workers.length, workers.map(w => w.url()).join(', '))
|
|
198
|
-
```
|
|
199
|
-
|
|
200
163
|
```
|
|
201
164
|
exec:browser
|
|
202
165
|
if (page.workers().length > 0) {
|
|
@@ -205,9 +168,6 @@ if (page.workers().length > 0) {
|
|
|
205
168
|
}
|
|
206
169
|
```
|
|
207
170
|
|
|
208
|
-
### Access window globals
|
|
209
|
-
|
|
210
|
-
```
|
|
211
171
|
exec:browser
|
|
212
172
|
const result = await page.evaluate(() => JSON.stringify({
|
|
213
173
|
entityCount: window.debug?.scene?.children?.length,
|
|
@@ -216,9 +176,6 @@ const result = await page.evaluate(() => JSON.stringify({
|
|
|
216
176
|
console.log(result)
|
|
217
177
|
```
|
|
218
178
|
|
|
219
|
-
### Wait for element with short poll
|
|
220
|
-
|
|
221
|
-
```
|
|
222
179
|
exec:browser
|
|
223
180
|
const start = Date.now()
|
|
224
181
|
while (Date.now() - start < 12000) {
|
|
@@ -5,6 +5,9 @@ description: Mandatory codebase search workflow. Use whenever you need to find a
|
|
|
5
5
|
|
|
6
6
|
# CODEBASE SEARCH — Mandatory Workflow
|
|
7
7
|
|
|
8
|
+
**Use gm subagents for all independent work items. Invoke all skills in the chain: planning → gm-execute → gm-emit → gm-complete → update-docs.**
|
|
9
|
+
|
|
10
|
+
|
|
8
11
|
`exec:codesearch` is the only way to search the codebase. Glob, Grep, Find, Explore are hook-blocked.
|
|
9
12
|
|
|
10
13
|
## Syntax
|
|
@@ -5,6 +5,9 @@ description: Create a lang/ plugin that wires any CLI tool or language runtime i
|
|
|
5
5
|
|
|
6
6
|
# CREATE LANG PLUGIN
|
|
7
7
|
|
|
8
|
+
**Use gm subagents for all independent work items. Invoke all skills in the chain: planning → gm-execute → gm-emit → gm-complete → update-docs.**
|
|
9
|
+
|
|
10
|
+
|
|
8
11
|
A lang plugin is a single CommonJS file at `<projectDir>/lang/<id>.js`. gm-cc's hooks auto-discover it — no hook editing, no settings changes. The plugin gets three integration points: **exec dispatch**, **LSP diagnostics**, and **context injection**.
|
|
9
12
|
|
|
10
13
|
## PLUGIN SHAPE
|
package/skills/ssh/SKILL.md
CHANGED
|
@@ -5,6 +5,9 @@ description: Run shell commands on remote SSH hosts via exec:ssh. Reads targets
|
|
|
5
5
|
|
|
6
6
|
# exec:ssh — Remote SSH Execution
|
|
7
7
|
|
|
8
|
+
**Use gm subagents for all independent work items. Invoke all skills in the chain: planning → gm-execute → gm-emit → gm-complete → update-docs.**
|
|
9
|
+
|
|
10
|
+
|
|
8
11
|
Runs shell commands on a remote host over SSH. No shell open, no manual connection — just write the command.
|
|
9
12
|
|
|
10
13
|
## Setup
|