Skip to content
Back to skills

Memory To Thrum Pointer

ASecurity

An index line that restates a rule goes wrong when it is shortened, because shortening drops the scope that makes the rule true. An index line written as a TRIGGER cannot contradict the rule, because it does not state the rule. It only tells you when to read the full text.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agentsgoshellbash

Works with

  • claude code
  • cursor

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned November 7, 2026

npx -y skills add thrum-team/thrum-pro --skill memory-to-thrum-pointer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Memory To Thrum Pointer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Memory To Thrum Pointer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thrum-team-memory-to-thrum-pointer-thrum-pro/badge)](https://www.skillsdirectory.com/skills/thrum-team-memory-to-thrum-pointer-thrum-pro)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: memory-to-thrum-pointer
description:
  "Use when MEMORY.md is near or over its read limit, or when adding a new
  memory entry. Moves an entry's full text into a thrum memory record and
  shrinks its index line to a trigger plus the thrum memory ID, with a
  byte-for-byte check."
# source: claude-plugin/skills/memory-to-thrum-pointer/SKILL.md
---

## Memory to thrum pointer

### Why

An index line that restates a rule goes wrong when it is shortened, because
shortening drops the scope that makes the rule true. An index line written as a
TRIGGER cannot contradict the rule, because it does not state the rule. It only
tells you when to read the full text.

So each entry has three parts:

- **Full text:** the topic file's body, copied unchanged into a thrum memory
  record (`--full`). This is the source to read before acting.
- **Trigger:** one line saying WHEN it applies, never WHAT it says. It goes in
  the record's `--oneline` field and in the index.
- **Topic file:** kept as the local copy. Never delete it.

Index line format, under ~140 characters:

```text
- 🔴 <trigger: when this applies> → `thrum-mem-<ID>`
```

The topic file carries `thrum_memory: <ID>` in its frontmatter; find it with
`grep -l 'thrum_memory: <ID>' <memory dir>/*.md`.

Keep the 🔴 only on entries that already have it.

### Writing the trigger

Name the situation or action that should make you read the rule, for example
"before choosing a model for any role" or "when the email bridge decides which
inbound mail it processes". Do not put the rule's answer in the trigger: no
"always", "never", "X not Y" or numbers. If the answer leaks in, it will drift
from the full text.

Test it by asking: if I were about to take the wrong action, would this line
make me stop and read? If not, name the action more concretely.

### Steps for one entry

Use the helper for steps 1 to 5. Run it from any directory with
`THRUM_REPO=<repo>` set to the thrum repo root (the helper runs thrum from
there). It extracts the body, creates or reuses the record, checks it byte for
byte, writes `thrum_memory` into the frontmatter, and prints the ID. It exits
non-zero on any problem, and then you leave that index line alone.

```bash
bash <skill-dir>/resources/to-thrum.sh <topic-file.md> "<trigger>" [agent_rule|lesson]
```

Then do step 6 by hand. The manual steps below are what the helper does.

1. Read the topic file. Its body (everything after the frontmatter) is the full
   text.
2. Check whether a thrum memory already holds that text. Search with
   `thrum memory search` on a distinctive phrase. If the topic file names a
   `thrum-mem-` ID, `thrum memory show <ID> --format body --zoom full` and
   compare.
3. If there is none, create one. Write the body to a scratch file first, then
   pass it with `@file`, so the shell never rewrites it:

   ```bash
   thrum memory create --kind agent_rule --scope agent \
     --title "<topic file name>" --oneline "<trigger>" \
     --full @"$SCRATCH/body.md" --tag claude-memory --json
   ```

   Use `--kind lesson` for a habit or lesson rather than a rule.

4. Verify byte for byte before touching the index:

   ```bash
   thrum memory show <ID> --format body --zoom full > "$SCRATCH/back.md"
   cmp "$SCRATCH/body.md" "$SCRATCH/back.md"
   ```

   If they differ only by a trailing newline, that is acceptable; note it. Any
   other difference: stop and do not change that index line.

5. Add `thrum_memory: <ID>` to the topic file's frontmatter `metadata`.
6. Replace that entry's text in MEMORY.md with the trigger-format line. Change
   only that one entry. Entries packed on one line with `·` are separate
   entries: move only the one you are converting and leave its neighbours as
   they are.

### Rules

- Never delete a topic file, a thrum memory or an index entry. This skill only
  adds records and shortens lines.
- Never merge two entries into one line or one record.
- Never reword the full text. It is copied exactly.
- Do not convert the FORMAT CONTRACT header or the hook warning at the top of
  MEMORY.md. They must stay in full in the index, because they guard against
  editing the index wrongly.
- thrum memories are local to this machine. Do not convert an entry another box
  has to read.
- After a batch, reload MEMORY.md and check its size is below 24.4KB, then
  re-read three converted entries' full text through the ID to confirm they come
  back.

### Using converted entries

When a trigger matches what you are about to do, read the full rule before
acting. The trigger is not the rule. The exact command, run from the thrum repo
(thrum finds its daemon from the current directory, and the memory folder is not
a repo):

```bash
cd <repo> && thrum memory show <ID> --format body --zoom full
```

If thrum is unreachable, find the topic file by its ID (grep above) and read it:
it holds the same text.

The index header carries this command once, near the top. Do not repeat it on
each index line; one copy at the top is always in view and costs a fraction of
the space.

### Other runtimes (survey 2026-10-21, agents' own reports, mostly not measured)

The pattern works on every runtime. What changes is where the index lives and
where the skill is installed. In every case, spell out the read command with
`cd <repo> &&`: no runtime resolves an ID by itself, and shells may be fresh
subshells.

| Runtime     | Where the trigger index goes (always loaded)        | Skill location                                    | Limits                                                                                                                                                    |
| ----------- | --------------------------------------------------- | ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Claude Code | `~/.claude/projects/<slug>/memory/MEMORY.md`        | `~/.claude/skills/`                               | 24.4KB index read limit                                                                                                                                   |
| Codex       | AGENTS.md chain                                     | `~/.agents/skills/`                               | ~32KiB `project_doc_max_bytes`; MEMORY.md not read                                                                                                        |
| OpenCode    | AGENTS.md / CLAUDE.md (loaded in full)              | `~/.config/opencode/skills/` or `.claude/skills/` | skill description always loaded: keep it short                                                                                                            |
| Muse        | its own MEMORY.md (native read_memory)              | already sees `~/.claude/skills/`                  | no cutoff at 40KB (measured 2026-10-21, 401 lines); higher untested. Prefers its own topic files; use thrum IDs only for rules shared with other runtimes |
| Cursor      | `.cursor/rules/<name>.mdc` with `alwaysApply: true` | `.cursor/skills/`                                 | always-apply text loads in full, so this saves the most                                                                                                   |
| Copilot     | AGENTS.md or the Copilot plugin                     | `~/.copilot/installed-plugins/`                   | ~41KB output cap on prime                                                                                                                                 |
| AGY         | AGENTS.md / GEMINI.md / `.agents/rules/`            | `.agents/skills/`                                 | 24KB per file, 20k-token rules budget; tool is `run_command`                                                                                              |

Each box needs its own installed copy in its runtime's skill location, and thrum
memory IDs are local to each box's daemon.

### Licensing

`thrum memory create` needs the memory.substrate entitlement. The helper checks
it through the daemon: a `thrum memory edit` on a probe ID returns "not found"
only when the entitlement is granted, because the gate runs before the lookup
and nothing is written. The check does not look at the license tier, so any tier
that the server grants the feature to proceeds. Without the entitlement the
helper prints "needs Thrum Pro (free for eligible public repositories)", exits
7, and changes nothing: no record and no index change.

### Improving this skill

If a trigger fails to stop a wrong action, or a step here is unclear, fix this
file in the same turn and note what changed.

Files in this skill

  • SKILL.md8.5 KB
  • agents/openai.yaml564 B
  • resources/to-thrum.sh3.2 KB
  • resources/to-thrum_test.sh3.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.