@olegkoval/agent-skills 1.41.0 → 1.41.1

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 CHANGED
@@ -342,7 +342,7 @@ When adding or changing a skill:
342
342
 
343
343
  ### Shared context store
344
344
 
345
- ![How the agent context store works: the five resolution steps, the three skills that use the store, and the four states every run ends in](docs/assets/context-store-card.png)
345
+ ![How the agent context store works: the five resolution steps, the three skills that use the store, the four states every run ends in, and how the store is read](docs/assets/context-store-card.png)
346
346
 
347
347
  `retro-analysis` and `shared-knowledge-artifact` share one private GitHub repository,
348
348
  resolved through the `context-repo` skill the first time either one runs. It finds a
@@ -229,6 +229,52 @@ into it:
229
229
  where they do not conflict with this contract. It cannot override lease acquisition,
230
230
  validation, append-only writes, secret handling, or the private-repository requirement.
231
231
 
232
+ ## Reading the store
233
+
234
+ Everything above is the write side, and it is enforced: a lease, a validator, and CI
235
+ that runs the validator again on push. The read side had none of that. For a while the
236
+ only instruction to read the ledger was one sentence in `AGENTS.md`, which is a rule an
237
+ agent has to remember rather than a mechanism. It did not hold. Two notes written on
238
+ 2026-08-25 described failures that both recurred by 2026-08-31: one about stating the
239
+ denominator behind a percentage, one about cache reads dominating a long-session bill.
240
+ Recording a lesson and delivering it are different jobs.
241
+
242
+ The store therefore ships a reader, `recipes/tools/ledger-index`, built on the shape
243
+ that already works for per-user memory: a cheap index is always in context, and the
244
+ body is fetched on demand. The index is titles only, roughly 1.9k tokens for 84 notes,
245
+ grouped by scope with traps first. The ledger itself is around 50KB and does not belong
246
+ in every session.
247
+
248
+ ```text
249
+ ledger-index the index, grouped by scope
250
+ ledger-index --show n41 one note in full, body and Why
251
+ ledger-index --kind trap --scope shell
252
+ ledger-index --count
253
+ ```
254
+
255
+ It resolves the ledger through the same pointer `context-repo` writes, so a machine
256
+ that has resolved the store once needs no further configuration. An explicitly named
257
+ `--ledger` or `LEDGER_PATH` that does not exist is an error rather than a fallback:
258
+ silently reading a different ledger than the one you asked for is the failure this
259
+ whole document exists to prevent.
260
+
261
+ Hosts wire it in their own way and neither owns the format. A Claude `SessionStart`
262
+ hook injects the index once per session; a Codex prompt shells out to the same binary.
263
+ The reference hook is `recipes/hooks/ledger-index.sh`, which prints nothing and exits 0
264
+ when the store is absent, so it can never fail a session.
265
+
266
+ The index states its own horizon. It reads from disk and never fetches, because a
267
+ session start is the wrong place for a network call, so the header carries the commit,
268
+ its age in days, and a plain statement that a newer commit may exist upstream. Past
269
+ three days it prints the `pull --rebase` command for that clone. Age of `HEAD` conflates
270
+ a quiet repository with a checkout that is behind, and only a fetch separates them, so
271
+ the limit is stated rather than implied.
272
+
273
+ One consequence is worth making explicit. The fixed clone path is not a convention, it
274
+ is the point: a second working copy of the store is the copy nothing keeps current, and
275
+ it will be the one an index or an `AGENTS.md` symlink ends up reading. Resolve through
276
+ the pointer and keep one checkout.
277
+
232
278
  ## What is never committed
233
279
 
234
280
  Raw session content, tokens, private prompts, and customer data never go into the
@@ -367,6 +367,30 @@
367
367
  <p class="proof-line">A push that appears to succeed is <strong>not proof</strong>. <strong>CREATED</strong> is claimed only after a <strong>fresh read-back agrees</strong>.</p>
368
368
  </section>
369
369
 
370
+ <section class="state-strip" aria-labelledby="read-title">
371
+ <p class="strip-label" id="read-title">AND ONE WAY IT IS READ</p>
372
+ <div class="state-row">
373
+ <div class="state-item">
374
+ <p class="state-name">LEDGER-INDEX</p>
375
+ <p class="state-detail">titles only, grouped by scope, traps first</p>
376
+ </div>
377
+ <div class="state-item">
378
+ <p class="state-name">--SHOW n41</p>
379
+ <p class="state-detail">one note in full, body and Why</p>
380
+ </div>
381
+ <div class="state-item">
382
+ <p class="state-name">--KIND --SCOPE</p>
383
+ <p class="state-detail">narrow it to the task in front of you</p>
384
+ </div>
385
+ <div class="state-item">
386
+ <p class="state-name">DATED HEADER</p>
387
+ <p class="state-detail">read from disk, no fetch, age stated</p>
388
+ </div>
389
+ <p class="state-copy">A cheap index is always in context; the body is fetched on demand. The ledger never enters a session whole.</p>
390
+ </div>
391
+ <p class="proof-line">A rule that is <strong>recorded but not delivered</strong> is a diary. The index is a <strong>table of contents</strong>, never the rule itself.</p>
392
+ </section>
393
+
370
394
  <footer class="closing-band">
371
395
  <p class="closing-line">One consented store gives every skill durable context with explicit verification.</p>
372
396
  <div class="metadata-line">
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olegkoval/agent-skills",
3
- "version": "1.41.0",
3
+ "version": "1.41.1",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-apple-kit",
3
3
  "description": "Build and ship Apple platform apps: macOS menubar apps, App Store submissions.",
4
- "version": "1.41.0",
4
+ "version": "1.41.1",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-creative",
3
3
  "description": "Creative and personal projects: photo galleries, music players, listings, wiki editing.",
4
- "version": "1.41.0",
4
+ "version": "1.41.1",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-garmin-kit",
3
3
  "description": "Build, test and publish Garmin Connect IQ watch faces.",
4
- "version": "1.41.0",
4
+ "version": "1.41.1",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-git-tools",
3
3
  "description": "Everyday git and GitHub CLI operations: conventional commits, branch hygiene.",
4
- "version": "1.41.0",
4
+ "version": "1.41.1",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-github-pr",
3
3
  "description": "Drive GitHub pull requests to merge-ready: review-bot loops, CI fixes, descriptions, dependency triage.",
4
- "version": "1.41.0",
4
+ "version": "1.41.1",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-obsidian",
3
3
  "description": "Keep an Obsidian vault in sync with work: PR sync, task rollover, morning routine.",
4
- "version": "1.41.0",
4
+ "version": "1.41.1",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-product",
3
3
  "description": "Take a product idea to a shippable build: MVP passes, full-stack scaffolds, launch plans.",
4
- "version": "1.41.0",
4
+ "version": "1.41.1",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-reflection",
3
3
  "description": "Look back and improve: self-critique, retrospectives, performance review, rapid learning.",
4
- "version": "1.41.0",
4
+ "version": "1.41.1",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-release",
3
3
  "description": "Ship a release: semantic-release setup, changelogs, store listing copy, release-day routine.",
4
- "version": "1.41.0",
4
+ "version": "1.41.1",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-skill-meta",
3
3
  "description": "Author and maintain agent skills and the AI toolchain itself.",
4
- "version": "1.41.0",
4
+ "version": "1.41.1",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-web-ops",
3
3
  "description": "Operate a website: WAF rules, search console audits, analytics bootstrap, docs indexes.",
4
- "version": "1.41.0",
4
+ "version": "1.41.1",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },