kracked-core 1.6.1 → 1.6.2
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 +276 -41
- package/package.json +1 -1
- package/src/scaffold.mjs +71 -5
package/README.md
CHANGED
|
@@ -13,10 +13,20 @@ Kracked Core fixes both.
|
|
|
13
13
|
npx kracked-core init
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
+
Zero dependencies · plain markdown files · nothing leaves your machine
|
|
17
|
+
|
|
16
18
|
</div>
|
|
17
19
|
|
|
18
20
|
---
|
|
19
21
|
|
|
22
|
+
## Contents
|
|
23
|
+
|
|
24
|
+
**Start here** — [The problem](#the-problem) · [What it actually is](#what-it-actually-is) · [Install](#install) · [Your first session](#your-first-session) · [A worked example](#a-worked-example)
|
|
25
|
+
|
|
26
|
+
**Reference** — [How memory works](#how-memory-works) · [The build flow](#the-build-flow) · [What gets written](#what-gets-written-to-disk) · [Commands](#command-reference) · [Editor support](#editor-support) · [FAQ](#faq)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
20
30
|
## The problem
|
|
21
31
|
|
|
22
32
|
You've had this conversation:
|
|
@@ -30,7 +40,15 @@ Tomorrow it happens again. Your agent has no memory. Every session starts from z
|
|
|
30
40
|
|
|
31
41
|
The second problem is quieter: you describe a feature in one sentence, the agent builds *something*, and you spend the next hour discovering it wasn't what you meant.
|
|
32
42
|
|
|
33
|
-
## What
|
|
43
|
+
## What it actually is
|
|
44
|
+
|
|
45
|
+
Kracked Core is a **CLI installer**. You run it once in a project, it asks a few questions, and it writes a set of markdown files to your disk. That's the whole product — there is no app, no server, no extension.
|
|
46
|
+
|
|
47
|
+
Those files do two jobs:
|
|
48
|
+
|
|
49
|
+
**1. They give your agent a memory.** A `~/.kracked/` folder holds who your agent is, how you like to work, and every lesson it has learned. A `.kracked/` folder in each project holds that codebase's stack, conventions, and current state. Your agent reads them at the start of every session.
|
|
50
|
+
|
|
51
|
+
**2. They give your agent a process.** Five skills get installed as slash commands. They cover starting a session, building a feature properly, and writing memory down before you close the laptop.
|
|
34
52
|
|
|
35
53
|
| | Before | After |
|
|
36
54
|
|---|---|---|
|
|
@@ -39,7 +57,13 @@ The second problem is quieter: you describe a feature in one sentence, the agent
|
|
|
39
57
|
| **Building** | "Build me X" → surprise | Idea → spec → build → review, with a tracker you can see |
|
|
40
58
|
| **"Done"** | Agent says done, it isn't | Nothing is `done` without stated evidence |
|
|
41
59
|
|
|
42
|
-
It's plain markdown
|
|
60
|
+
It's plain markdown. You can read it, edit it, commit it to git, and delete it. No database, no cloud, no black box. If you don't like what your agent believes, open the file and fix the sentence.
|
|
61
|
+
|
|
62
|
+
### What it is not
|
|
63
|
+
|
|
64
|
+
- **Not a model or an agent.** It configures the agent you already use.
|
|
65
|
+
- **Not a hosted service.** Nothing is uploaded. There's no account and no telemetry.
|
|
66
|
+
- **Not automatic.** Memory gets written when you run `/kracked-wrap`. Skip that, and nothing is saved.
|
|
43
67
|
|
|
44
68
|
## Install
|
|
45
69
|
|
|
@@ -47,37 +71,176 @@ It's plain markdown files. You can read them, edit them, commit them to git, and
|
|
|
47
71
|
npx kracked-core init
|
|
48
72
|
```
|
|
49
73
|
|
|
50
|
-
The wizard asks
|
|
51
|
-
|
|
74
|
+
The wizard asks six questions. Pressing Enter through all of them gives you a working setup.
|
|
75
|
+
|
|
76
|
+
| # | Question | Default | What it affects |
|
|
77
|
+
|---|---|---|---|
|
|
78
|
+
| 1 | What should we call your agent? | `KC` | Your agent's name, used everywhere in its memory |
|
|
79
|
+
| 2 | Your name? | your system username | How it addresses you |
|
|
80
|
+
| 3 | Set up this project? | Yes | Whether project memory is written here |
|
|
81
|
+
| 4 | Project directory? | `.` (here) | Where project memory goes |
|
|
82
|
+
| 5 | New project or existing codebase? | auto-detected | Scan vs. ask |
|
|
83
|
+
| 6 | Which editor(s) do you use? | Antigravity + Claude Code | Which skill folders get written |
|
|
52
84
|
|
|
53
|
-
**Existing codebase?** It scans your repo
|
|
54
|
-
**Starting fresh?** It asks what you're building and what stack, so your agent knows from day one.
|
|
85
|
+
**Existing codebase?** It scans your repo — package name, stack, git status, npm scripts — shows you what it found, and asks if that's right before writing anything.
|
|
55
86
|
|
|
56
|
-
**
|
|
57
|
-
**Antigravity** · **Claude Code** · **Kilo Code** (VS Code) · **Roo Code** (VS Code)
|
|
87
|
+
**Starting fresh?** It asks two optional questions instead (what you're building, what stack), so your agent knows something on day one rather than nothing.
|
|
58
88
|
|
|
59
|
-
**
|
|
60
|
-
memory, but the `/kracked-*` commands aren't installed, because those editors use a different
|
|
61
|
-
skill format. You can still run the flow by asking in plain language.
|
|
89
|
+
**Already installed here?** It notices, and offers to refresh package files, reinstall, or cancel — rather than asking you about 27 files one at a time.
|
|
62
90
|
|
|
63
|
-
|
|
91
|
+
Node 18 or newer. No other dependencies — the package installs nothing.
|
|
64
92
|
|
|
65
|
-
|
|
93
|
+
## Your first session
|
|
94
|
+
|
|
95
|
+
After `init` finishes, it tells you exactly this:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
Next step:
|
|
99
|
+
Open this project in your editor and run /kracked-boot to load Nova's memory.
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Restart your editor first.** Editors load skills at startup, so the `/kracked-*` commands won't appear until you do.
|
|
103
|
+
|
|
104
|
+
Then the daily loop is three commands:
|
|
66
105
|
|
|
67
106
|
```
|
|
68
107
|
/kracked-boot Start of session — agent loads its memory and tells you where you left off
|
|
69
108
|
/kracked-sdd Build something — idea → spec → docs → build → review
|
|
70
109
|
/kracked-wrap End of session — agent writes down what it learned
|
|
110
|
+
```
|
|
71
111
|
|
|
112
|
+
Boot gives you back a single line, not a wall of text:
|
|
113
|
+
|
|
114
|
+
> I'm Nova. Last session: shipped email login (story 1.1). Next: password reset (1.2). Caution: this project's tests don't cover the auth callback.
|
|
115
|
+
|
|
116
|
+
Two more commands you'll use occasionally:
|
|
117
|
+
|
|
118
|
+
```
|
|
72
119
|
/kracked-identity Change your agent's name, tone, or how you like to work
|
|
73
120
|
/kracked-explain "What is all this?" — walks you through what got installed
|
|
74
121
|
```
|
|
75
122
|
|
|
76
|
-
> **`/kracked-wrap` is not optional.** Boot without wrap is a memory system that just forgets more slowly. The wrap is where memory actually gets written.
|
|
123
|
+
> **`/kracked-wrap` is not optional.** Boot without wrap is a memory system that just forgets more slowly. The wrap is where memory actually gets written — lessons, session state, decisions. Close the laptop without it and the session is gone.
|
|
124
|
+
|
|
125
|
+
## A worked example
|
|
126
|
+
|
|
127
|
+
Here's a real first day, start to finish.
|
|
128
|
+
|
|
129
|
+
### 1. Install
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
cd ~/code/demo-app
|
|
133
|
+
npx kracked-core init
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
You name the agent `Nova`, accept the defaults, and it scans the repo:
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
Scanned project:
|
|
140
|
+
Name: demo-app
|
|
141
|
+
Stack: Node.js (react, next)
|
|
142
|
+
Git: yes
|
|
143
|
+
Scripts: dev, build, test
|
|
144
|
+
|
|
145
|
+
✔ Does this look right? Yes
|
|
146
|
+
✔ Which editor(s) do you use? Antigravity, Claude Code
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
It writes the files and stops. Nothing else happens yet.
|
|
150
|
+
|
|
151
|
+
### 2. What it wrote about your project
|
|
152
|
+
|
|
153
|
+
`.kracked/project.md` — drafted from the scan, not invented:
|
|
154
|
+
|
|
155
|
+
```markdown
|
|
156
|
+
# Project — demo-app
|
|
157
|
+
|
|
158
|
+
## Overview
|
|
159
|
+
- **Name:** demo-app
|
|
160
|
+
- **Stack:** Node.js (react, next)
|
|
161
|
+
- **Created:** 2026-07-26
|
|
162
|
+
|
|
163
|
+
## Conventions
|
|
164
|
+
- _(not set yet)_
|
|
165
|
+
|
|
166
|
+
## How to run it
|
|
167
|
+
- `dev` — `npm run dev`
|
|
168
|
+
- `build` — `npm run build`
|
|
169
|
+
- `test` — `npm run test`
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
The `_(not set yet)_` lines are honest placeholders — it detected your scripts but it does **not** guess your conventions. Fill those in yourself, or let the agent learn them and write them during a wrap.
|
|
173
|
+
|
|
174
|
+
### 3. Boot
|
|
175
|
+
|
|
176
|
+
Restart your editor, then:
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
/kracked-boot
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
> I'm Nova. No previous session recorded for demo-app — this is a fresh install. Next: nothing tracked yet. Global memory has no lessons yet.
|
|
183
|
+
|
|
184
|
+
Honest, because there genuinely is nothing yet. It doesn't fabricate a history.
|
|
185
|
+
|
|
186
|
+
### 4. Build something
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
/kracked-sdd add email login
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
The agent sizes the job first and says so out loud. For this one it writes a short spec (`what` / `why` / acceptance criteria / **out of scope** / edge cases), confirms it with you, then splits it into stories and puts them in the tracker:
|
|
193
|
+
|
|
194
|
+
```markdown
|
|
195
|
+
| ID | Story | Status | Evidence |
|
|
196
|
+
|-----|------------------------------|-------------|----------|
|
|
197
|
+
| 1.1 | User can log in with email | in-progress | — |
|
|
198
|
+
| 1.2 | Password reset | backlog | — |
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Then it builds `1.1`, moving the row to `review` the moment the code is written — not at the end of the session.
|
|
202
|
+
|
|
203
|
+
### 5. The evidence gate
|
|
204
|
+
|
|
205
|
+
The agent wants to mark `1.1` done. It can't, until it writes what it actually checked:
|
|
206
|
+
|
|
207
|
+
```markdown
|
|
208
|
+
| 1.1 | User can log in with email | done | Logged in as test@demo.dev in browser, session cookie set. NOT verified: expired-token path, rate limiting. |
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
That "NOT verified" half is the point. Green tests aren't evidence, and the gaps are where tomorrow's bug lives.
|
|
212
|
+
|
|
213
|
+
### 6. Wrap
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
/kracked-wrap
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Say during the session you corrected the agent — it used `fetch` when this repo standardises on a typed API client. That correction becomes permanent:
|
|
220
|
+
|
|
221
|
+
**`~/.kracked/lessons.md`** (the index, read every boot) gets exactly one line:
|
|
222
|
+
|
|
223
|
+
```markdown
|
|
224
|
+
- Use the typed apiClient, never raw fetch — see archive 2026-07-26 apiClient
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**`~/.kracked/lessons-archive.md`** (opened only when relevant) gets the full story: what happened, why it matters, how to avoid it.
|
|
228
|
+
|
|
229
|
+
And `.kracked/session.md` records where you stopped and what's next.
|
|
230
|
+
|
|
231
|
+
### 7. Tomorrow
|
|
232
|
+
|
|
233
|
+
```
|
|
234
|
+
/kracked-boot
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
> I'm Nova. Last session: shipped email login (1.1), evidence recorded. Next: password reset (1.2). Caution: use the typed apiClient, never raw fetch.
|
|
238
|
+
|
|
239
|
+
You didn't re-explain anything. That's the entire pitch.
|
|
77
240
|
|
|
78
|
-
## How
|
|
241
|
+
## How memory works
|
|
79
242
|
|
|
80
|
-
Two layers
|
|
243
|
+
Two layers, and the split between them is the whole idea.
|
|
81
244
|
|
|
82
245
|
```
|
|
83
246
|
~/.kracked/ GLOBAL — survives every project
|
|
@@ -114,21 +277,31 @@ Getting this wrong is the #1 failure mode. Put "we use Tailwind in this repo" in
|
|
|
114
277
|
|
|
115
278
|
`lessons.md` is read on **every single boot**. If it grew forever, boot would get slower forever — and Antigravity caps rules files at 12,000 characters, so eventually it would simply break.
|
|
116
279
|
|
|
117
|
-
So: the full lesson goes into `lessons-archive.md`, and **one line** goes into `lessons.md`. The index stays small. The archive grows without cost, and gets opened only when a specific lesson is actually relevant.
|
|
280
|
+
So: the full lesson goes into `lessons-archive.md`, and **one line** goes into `lessons.md`. The index stays small. The archive grows without cost, and gets opened only when a specific lesson is actually relevant to what you're doing right now.
|
|
118
281
|
|
|
119
282
|
Your boot payload stays flat no matter how much your agent learns. That's the trick.
|
|
120
283
|
|
|
284
|
+
### What boot actually does
|
|
285
|
+
|
|
286
|
+
`/kracked-boot` reads files in a fixed order — identity, then preferences, then the lessons index, then the project's stack, session, and decisions. Each file individually, never skimmed as a batch.
|
|
287
|
+
|
|
288
|
+
It works with only one layer present. Global memory but no project here? It boots and says so. Neither installed? It tells you to run `init` rather than pretending. **It never invents identity, preferences, or history it hasn't read** — missing is reported as missing.
|
|
289
|
+
|
|
121
290
|
## The build flow
|
|
122
291
|
|
|
123
|
-
`/kracked-sdd` doesn't force ceremony on everything. It sizes the job first:
|
|
292
|
+
`/kracked-sdd` doesn't force ceremony on everything. It sizes the job first and states the call out loud:
|
|
124
293
|
|
|
125
294
|
| Job | What happens |
|
|
126
295
|
|---|---|
|
|
127
|
-
|
|
|
128
|
-
| Small
|
|
129
|
-
|
|
|
296
|
+
| **Trivial** — typo, one-liner, config tweak | Straight to the fix. No spec, no tracker row. |
|
|
297
|
+
| **Small** — one clear feature | Light spec → build → review |
|
|
298
|
+
| **Large or risky** — multiple areas, unclear scope, data/auth/payments | Full flow: spec → architecture + ADRs → stories → build → review |
|
|
299
|
+
|
|
300
|
+
Over-ceremony on a small task is a failure mode, not thoroughness. It will not write a spec file for a typo.
|
|
130
301
|
|
|
131
|
-
Then it tracks the work:
|
|
302
|
+
Then it tracks the work. Four statuses, no others:
|
|
303
|
+
|
|
304
|
+
`backlog` → `in-progress` → `review` → `done`
|
|
132
305
|
|
|
133
306
|
| ID | Story | Status | Evidence |
|
|
134
307
|
|---|---|---|---|
|
|
@@ -136,9 +309,51 @@ Then it tracks the work:
|
|
|
136
309
|
| 1.2 | Password reset | in-progress | — |
|
|
137
310
|
| 1.3 | Remember me | backlog | — |
|
|
138
311
|
|
|
139
|
-
|
|
312
|
+
The tracker updates **the moment** a status changes — never batched to the end of a session, because a stale ledger is worse than none.
|
|
313
|
+
|
|
314
|
+
### The evidence gate
|
|
315
|
+
|
|
316
|
+
**A story cannot move to `done` without a note stating what was verified and what was not.**
|
|
317
|
+
|
|
318
|
+
Not "the tests pass" — what did you actually run, what did you see, and what did you skip? Green tests are not a working feature; a test can pass while testing the wrong thing.
|
|
319
|
+
|
|
320
|
+
A story marked `done` with no evidence is worse than one left at `review`, because it hides risk instead of surfacing it. This one rule catches more bugs than any other part of the system.
|
|
321
|
+
|
|
322
|
+
## What gets written to disk
|
|
323
|
+
|
|
324
|
+
A real install into a Next.js project, choosing Antigravity + Claude Code:
|
|
325
|
+
|
|
326
|
+
```
|
|
327
|
+
demo-app/
|
|
328
|
+
├── AGENTS.md ← canonical instructions
|
|
329
|
+
├── CLAUDE.md ← one-line shim: @AGENTS.md
|
|
330
|
+
├── .kracked/ ← your project memory
|
|
331
|
+
│ ├── project.md
|
|
332
|
+
│ ├── session.md
|
|
333
|
+
│ ├── decisions.md
|
|
334
|
+
│ ├── .version
|
|
335
|
+
│ └── sdd/
|
|
336
|
+
│ ├── tracker.md
|
|
337
|
+
│ ├── README.md
|
|
338
|
+
│ ├── specs/_TEMPLATE.md
|
|
339
|
+
│ ├── epics/_TEMPLATE.md
|
|
340
|
+
│ ├── stories/_TEMPLATE.md
|
|
341
|
+
│ └── architecture/_TEMPLATE.md
|
|
342
|
+
│ └── decisions/_TEMPLATE.md
|
|
343
|
+
├── .agents/ ← Antigravity / Kilo / Roo
|
|
344
|
+
│ ├── rules/kracked.md
|
|
345
|
+
│ └── skills/kracked-{boot,sdd,wrap,identity,explain}/SKILL.md
|
|
346
|
+
└── .claude/ ← Claude Code
|
|
347
|
+
└── skills/kracked-{boot,sdd,wrap,identity,explain}/SKILL.md
|
|
348
|
+
```
|
|
140
349
|
|
|
141
|
-
|
|
350
|
+
Plus global memory at `~/.kracked/` (identity, preferences, lessons, archive, projects).
|
|
351
|
+
|
|
352
|
+
**`AGENTS.md` is canonical; `CLAUDE.md` is a one-line shim that imports it.** Most editors read `AGENTS.md` natively — Claude Code is the exception, it only reads `CLAUDE.md`. Writing the instructions once and shimming means the two can't drift apart, which is the exact bug this package exists to prevent.
|
|
353
|
+
|
|
354
|
+
Install is **non-destructive**. Existing files are never silently overwritten — you get skip / overwrite / write-alongside per file, and it refuses to touch a `CLAUDE.md` or `AGENTS.md` another tool wrote.
|
|
355
|
+
|
|
356
|
+
## Command reference
|
|
142
357
|
|
|
143
358
|
```bash
|
|
144
359
|
npx kracked-core init # set up memory in this project
|
|
@@ -147,18 +362,18 @@ npx kracked-core update # refresh skills + loaders, keep your memory
|
|
|
147
362
|
npx kracked-core uninstall # remove it (asks before deleting anything)
|
|
148
363
|
```
|
|
149
364
|
|
|
150
|
-
|
|
365
|
+
### Am I on the latest version?
|
|
151
366
|
|
|
152
367
|
```bash
|
|
153
368
|
npx kracked-core@latest status
|
|
154
369
|
```
|
|
155
370
|
|
|
156
|
-
Shows the version that installed your files, the latest on npm, and tells you plainly whether
|
|
157
|
-
you need to update:
|
|
158
|
-
|
|
159
371
|
```
|
|
160
|
-
|
|
161
|
-
|
|
372
|
+
kracked-core status
|
|
373
|
+
|
|
374
|
+
This project ~/code/demo-app
|
|
375
|
+
installed version: 1.6.1
|
|
376
|
+
.claude/skills: 5/5 skills
|
|
162
377
|
.agents/skills: 5/5 skills
|
|
163
378
|
|
|
164
379
|
Global memory ~/.kracked
|
|
@@ -166,52 +381,72 @@ Global memory ~/.kracked
|
|
|
166
381
|
lessons learned: 12
|
|
167
382
|
|
|
168
383
|
Version
|
|
169
|
-
running now:
|
|
170
|
-
latest on npm: 1.
|
|
384
|
+
running now: 1.6.1
|
|
385
|
+
latest on npm: 1.6.1
|
|
171
386
|
|
|
172
387
|
Up to date.
|
|
173
388
|
```
|
|
174
389
|
|
|
175
390
|
> The `@latest` matters — plain `npx kracked-core` can serve a cached older copy.
|
|
176
391
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
When a new version ships:
|
|
392
|
+
### Updating
|
|
180
393
|
|
|
181
394
|
```bash
|
|
182
395
|
npx kracked-core@latest update
|
|
183
396
|
```
|
|
184
397
|
|
|
185
|
-
Refreshes the skills and loaders. **Your memory is never touched** — identity, preferences,
|
|
186
|
-
lessons, and everything under `.kracked/` stay exactly as they are. It keeps your agent's name too.
|
|
398
|
+
Refreshes the skills and loaders. **Your memory is never touched** — identity, preferences, lessons, and everything under `.kracked/` stay exactly as they are. It keeps your agent's name too.
|
|
187
399
|
|
|
188
400
|
Restart your editor afterwards so it picks up the new skills.
|
|
189
401
|
|
|
190
|
-
|
|
402
|
+
### Uninstalling
|
|
191
403
|
|
|
192
404
|
```bash
|
|
193
405
|
npx kracked-core uninstall
|
|
194
406
|
```
|
|
195
407
|
|
|
196
|
-
Shows what it will remove and asks before deleting — project files and global memory are separate
|
|
197
|
-
questions. It never touches a `CLAUDE.md` or `AGENTS.md` another tool wrote.
|
|
408
|
+
Shows what it will remove and asks before deleting — project files and global memory are separate questions. It never touches a `CLAUDE.md` or `AGENTS.md` another tool wrote.
|
|
198
409
|
|
|
199
410
|
Full guide, including manual removal and how to keep your docs: [docs/UNINSTALL.md](https://github.com/Krackeddevs-Org/kracked-core/blob/main/docs/UNINSTALL.md)
|
|
200
411
|
|
|
412
|
+
## Editor support
|
|
413
|
+
|
|
414
|
+
| Editor | Memory | `/kracked-*` commands | Files written |
|
|
415
|
+
|---|:---:|:---:|---|
|
|
416
|
+
| **Antigravity** | ✅ | ✅ | `AGENTS.md`, `.agents/rules/`, `.agents/skills/` |
|
|
417
|
+
| **Claude Code** | ✅ | ✅ | `CLAUDE.md` shim, `.claude/skills/` |
|
|
418
|
+
| **Kilo Code** (VS Code) | ✅ | ✅ | `AGENTS.md`, `.agents/`, `kilo.jsonc` entry |
|
|
419
|
+
| **Roo Code** (VS Code) | ✅ | ✅ | `AGENTS.md`, `.agents/`, `.roo/rules/` |
|
|
420
|
+
| Cursor, Windsurf, others | ✅ | — | `AGENTS.md` |
|
|
421
|
+
|
|
422
|
+
**Memory only** means your agent still loads everything on boot — but the slash commands aren't installed, because those editors use a different skill format. You can run the same flow by asking in plain language ("load your memory and tell me where we left off").
|
|
423
|
+
|
|
201
424
|
## FAQ
|
|
202
425
|
|
|
203
426
|
**Does this send my code anywhere?**
|
|
204
|
-
No. Everything is local markdown files. There's no service, no telemetry, no account.
|
|
427
|
+
No. Everything is local markdown files. There's no service, no telemetry, no account, and the package has zero dependencies.
|
|
428
|
+
|
|
429
|
+
**Do I have to use the slash commands?**
|
|
430
|
+
Boot and wrap are what make it work. The SDD flow is optional — plenty of people use this purely for memory.
|
|
205
431
|
|
|
206
432
|
**Should I commit `.kracked/` to git?**
|
|
207
433
|
Yes, mostly. Project memory is useful to your teammates. Add `.kracked/session.md` to `.gitignore` if you don't want your working state shared.
|
|
208
434
|
|
|
435
|
+
**What about `~/.kracked/`?**
|
|
436
|
+
That's yours alone — it lives in your home folder and never gets committed anywhere.
|
|
437
|
+
|
|
209
438
|
**My editor isn't listed. Will it work?**
|
|
210
439
|
If it reads `AGENTS.md`, yes. That's most of them now. Claude Code is the exception — it reads `CLAUDE.md`, so we write a one-line shim that imports `AGENTS.md`.
|
|
211
440
|
|
|
212
441
|
**Can I edit the memory files by hand?**
|
|
213
442
|
Please do. They're yours. Correcting your agent's memory directly is faster than arguing with it.
|
|
214
443
|
|
|
444
|
+
**Will it overwrite my existing `AGENTS.md`?**
|
|
445
|
+
No. It detects another agent system and asks before touching anything, per file.
|
|
446
|
+
|
|
447
|
+
**I ran init but the commands don't appear.**
|
|
448
|
+
Restart your editor. Skills load at startup.
|
|
449
|
+
|
|
215
450
|
**How is this different from just writing a good prompt?**
|
|
216
451
|
A prompt lasts one session. This lasts across all of them, and it compounds — every mistake you correct is a mistake you never see again.
|
|
217
452
|
|
package/package.json
CHANGED
package/src/scaffold.mjs
CHANGED
|
@@ -84,13 +84,79 @@ async function writeFileWithConflictCheck(destPath, content, ask, report) {
|
|
|
84
84
|
* Drop the illustrative example entries from a freshly-written memory file.
|
|
85
85
|
* They exist to show the format, but left in place they sit alongside the
|
|
86
86
|
* user's real lessons forever and make the index untrustworthy.
|
|
87
|
+
*
|
|
88
|
+
* Two things this has to get right, both learned the hard way:
|
|
89
|
+
*
|
|
90
|
+
* 1. Fenced blocks are FORMAT DOCUMENTATION, not examples. The placeholder
|
|
91
|
+
* line inside a ``` fence (`- [YYYY-MM-DD] <project> — ...`) teaches the
|
|
92
|
+
* shape and must survive; stripping it left an empty fence behind.
|
|
93
|
+
* 2. An example is not always a list row. The archive's entries are `##`
|
|
94
|
+
* headings followed by prose, so a line-shaped filter never saw them and
|
|
95
|
+
* a fictional todo-app lesson shipped into real memory.
|
|
87
96
|
*/
|
|
88
97
|
function stripExamples(content) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
98
|
+
const lines = content.split('\n');
|
|
99
|
+
const out = [];
|
|
100
|
+
let inFence = false;
|
|
101
|
+
let skippingEntry = false;
|
|
102
|
+
|
|
103
|
+
// Match the SHIPPED examples by their exact date+project pair, never by
|
|
104
|
+
// project name alone. A user whose repo is genuinely called todo-app or
|
|
105
|
+
// my-blog must keep every real lesson they write about it — a name-shaped
|
|
106
|
+
// filter would silently delete their memory.
|
|
107
|
+
const SHIPPED = [
|
|
108
|
+
/^\[?2026-01-15\]?\s*todo-app\s*—/,
|
|
109
|
+
/^\[?2026-02-03\]?\s*my-blog\s*—/,
|
|
110
|
+
];
|
|
111
|
+
const isShipped = (text) => SHIPPED.some((re) => re.test(text.trim()));
|
|
112
|
+
|
|
113
|
+
const isExampleLine = (line) => {
|
|
114
|
+
const m = line.match(/^[-*]\s*(.+)$/);
|
|
115
|
+
if (m) return isShipped(m[1]);
|
|
116
|
+
const cell = line.match(/^\|\s*(todo-app|my-blog)\s*\|/);
|
|
117
|
+
return Boolean(cell);
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// An archive entry is a `## [date] project — title` heading; it owns every
|
|
121
|
+
// line until the next heading.
|
|
122
|
+
const isExampleHeading = (line) => {
|
|
123
|
+
const m = line.match(/^#{2,3}\s+(.+)$/);
|
|
124
|
+
return Boolean(m) && isShipped(m[1]);
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
for (const line of lines) {
|
|
128
|
+
if (/^```/.test(line)) {
|
|
129
|
+
inFence = !inFence;
|
|
130
|
+
skippingEntry = false;
|
|
131
|
+
out.push(line);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Inside a fence everything is documentation — never strip.
|
|
136
|
+
if (inFence) {
|
|
137
|
+
out.push(line);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (isExampleHeading(line)) {
|
|
142
|
+
skippingEntry = true;
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// A new heading ends the example entry we were dropping.
|
|
147
|
+
if (skippingEntry) {
|
|
148
|
+
if (/^#{1,6}\s/.test(line)) skippingEntry = false;
|
|
149
|
+
else continue;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (isExampleLine(line)) continue;
|
|
153
|
+
|
|
154
|
+
out.push(line);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Collapse the run of blank lines a removed block leaves behind, and keep
|
|
158
|
+
// exactly one trailing newline.
|
|
159
|
+
return `${out.join('\n').replace(/\n{3,}/g, '\n\n').replace(/\s+$/, '')}\n`;
|
|
94
160
|
}
|
|
95
161
|
|
|
96
162
|
export async function writeGlobalMemory({ tokens, ask, report }) {
|