Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 17 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ Tree Ring Memory is a framework-agnostic, local-first memory lifecycle for AI
agents. It helps agents decide when to recall, capture, audit, consolidate, and
forget project memory without turning memory into an unbounded transcript dump.

Skill package **0.14.1** keeps coordinator capabilities out of shell history
and requires Tree Ring Memory CLI **0.14.0 or newer**.
Skill package **0.15.0** adds authorized verified bootstrap and scope-preserving
updates while keeping coordinator capabilities out of shell history. It
requires Tree Ring Memory CLI **0.15.0 or newer**.

## Install

Expand All @@ -29,28 +30,31 @@ git clone https://github.com/TerminallyLazy/tree-ring-memory-skill \
```

The skill is useful on its own as memory lifecycle guidance. To use the full
local store, install the Tree Ring Memory CLI:
local store, run the verified project-local setup from the actual project root
after the user has authorized installation:

```bash
brew tap TerminallyLazy/tree-ring
brew install tree-ring
curl -fsSL https://raw.githubusercontent.com/TerminallyLazy/Tree-Ring-Memory/main/install.sh | sh -s -- --project --init --release latest --no-animation
```

Or use the canonical project install guide:
<https://github.com/TerminallyLazy/Tree-Ring-Memory#install>

The receipt-backed harness, multi-agent, Coordinated-policy, and schema-v3
guidance in this skill requires Tree Ring Memory CLI **0.14.0 or newer**. Before
guidance in this skill requires Tree Ring Memory CLI **0.15.0 or newer**. Before
a current process opens a pre-v0.13 store, stop all Tree Ring processes,
checkpoint and back up the database, and upgrade every CLI, plugin, and bundled
worker. Do not use v0.12 against an upgraded schema-v3 root; all mixed-version
operation is unsupported.

If the CLI is absent or older, the skill reports the limitation. It does not
install or upgrade software, edit shell configuration, or claim that recall or
another memory action ran without explicit user permission and observed command
output. On a host without local shell access, it remains useful as
memory-lifecycle guidance.
If the CLI is absent or older and the user's request already authorizes Tree
Ring setup, the skill uses the verified project-local bootstrap. Otherwise it
explains the operation and asks before downloading or changing software. Use
`tree-ring update --check` for a read-only check and, with update authorization,
`tree-ring update` to preserve the active scope. It does not edit shell
configuration, change global scope, or claim that recall or another action ran
without the required authorization and observed command output. On a host
without a local shell, it remains guidance-only.

## What It Teaches

Expand Down Expand Up @@ -92,8 +96,8 @@ memory-lifecycle guidance.
## Source Project

- Framework: <https://github.com/TerminallyLazy/Tree-Ring-Memory>
- Skill release: <https://github.com/TerminallyLazy/tree-ring-memory-skill/releases/tag/v0.14.1>
- v0.14 release: <https://github.com/TerminallyLazy/Tree-Ring-Memory/releases/tag/v0.14.0>
- Skill release: <https://github.com/TerminallyLazy/tree-ring-memory-skill/releases/tag/v0.15.0>
- v0.15 release: <https://github.com/TerminallyLazy/Tree-Ring-Memory/releases/tag/v0.15.0>
- Claude plugin wrapper:
<https://github.com/TerminallyLazy/tree-ring-memory-claude-plugin>
- Skill file: [`SKILL.md`](SKILL.md)
Expand Down
52 changes: 40 additions & 12 deletions SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: tree-ring-memory
description: Guides AI agents in using Tree Ring Memory for durable recall, project decisions, user preferences, warnings, future seeds, privacy-safe memory capture, and lifecycle-aware forgetting.
license: MIT
metadata:
version: "0.14.1"
version: "0.15.0"
tags: "memory, agents, recall, privacy, projects, dox, revolve, skills, cli"
triggers: "remember this; recall what we decided; what did we learn; tree ring memory; consolidate memory; forget this; project memory; sync DOX; sync Revolve; evidence loop; multi-agent memory"
---
Expand All @@ -21,23 +21,51 @@ Tree Ring Memory preserves meaningful agent learning like tree rings:
- speculative future work stays as seeds
- sensitive data is blocked, redacted, or kept out by default

## Runtime Preflight
## Runtime Bootstrap And Updates

Before running a Tree Ring command:
Resolve the actual project root before running Tree Ring. Never initialize a
plugin cache, downloaded package directory, home directory, or arbitrary
working directory by accident.

1. Read project-local `.tree-ring/SKILL.md` and `.tree-ring/CLI.md` when they
exist. They describe the configured root and exact installed commands.
2. Confirm that the local runtime is available:
1. If `<project-root>/.tree-ring/bin/tree-ring` exists, prefer that binary for
this project. Otherwise check `command -v tree-ring` and run
`tree-ring --version`.
2. Read existing `<project-root>/.tree-ring/SKILL.md` and `CLI.md` when present.
3. This package targets Tree Ring Memory CLI 0.15.0 or newer. If no compatible
CLI is available and the user's request already authorizes Tree Ring setup,
install the verified current release project-locally from the project root.
Otherwise explain the exact operation and obtain permission before the
network download or software installation:

```bash
tree-ring --version
cd <project-root>
curl -fsSL https://raw.githubusercontent.com/TerminallyLazy/Tree-Ring-Memory/main/install.sh | sh -s -- --project --init --release latest --no-animation
```

3. This package targets Tree Ring Memory CLI 0.14.0 or newer. If the command is
missing or older, do not invent results, edit shell configuration, or install
or upgrade software without the user's explicit permission. Explain the
limitation and point to the canonical install guide:
<https://github.com/TerminallyLazy/Tree-Ring-Memory#install>
4. For an existing global CLI, initialize from the project root with
`tree-ring --root .tree-ring init`. For a project-local CLI, use
`.tree-ring/bin/tree-ring --root .tree-ring init`. This must place
`memory.sqlite`, `AGENTS.md`, `SKILL.md`, and `CLI.md` under that project's
`.tree-ring/` directory.
5. Verify the created paths and run the same binary with
`--root .tree-ring integrations status`. Initialization creates safe local
guidance and bridge material; it is not receipt-backed activation proof.

Check for releases without changing files with `tree-ring update --check`. Run
`tree-ring update` only when the user has authorized an update. It updates the
active binary in its existing project-local, direct, or Homebrew-managed scope,
verifies official release assets, and must not create a second shadowing binary.
After an update, return to each project root and rerun `tree-ring --root
.tree-ring init` (or the project-local equivalent) to backfill managed guidance
without replacing custom files.

CLIs older than 0.15.0 do not have `tree-ring update`. Upgrade those with the
same manager or prefix that installed them: `brew upgrade tree-ring` for
Homebrew, `--project --release latest` for an existing project-local install,
or `--install-dir <existing-prefix> --release latest` for another direct
install. Check `command -v tree-ring` and `which -a tree-ring` afterward. Do not
edit a shell profile or change global installation scope without separate user
authorization.

If the current host cannot execute a local shell or access project files, use
this skill only as memory-lifecycle guidance. Do not claim that recall, capture,
Expand Down
16 changes: 9 additions & 7 deletions scripts/validate.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,22 @@ def main() -> None:
):
if field not in frontmatter:
raise SystemExit(f"missing frontmatter field: {field}")
if not re.search(r'^\s+version:\s*"0\.14\.1"\s*$', frontmatter, re.MULTILINE):
raise SystemExit("SKILL.md must declare version 0.14.1")
if not re.search(r'^\s+version:\s*"0\.15\.0"\s*$', frontmatter, re.MULTILINE):
raise SystemExit("SKILL.md must declare version 0.15.0")
if "Claude Code" in frontmatter or "Codex" in frontmatter:
raise SystemExit("portable skill frontmatter must remain provider-neutral")

required_guidance = [
"Runtime Preflight",
"Runtime Bootstrap And Updates",
"--project --init --release latest --no-animation",
"tree-ring update --check",
"DOX Contract Flow",
"tree-ring dox sync --source-root <path> --dry-run",
"Certification Boundary",
"tree-ring integrations certify --source-root .",
"tree-ring recall-quality --source-root .",
"full framework release suite",
"0.14.0 or newer",
"0.15.0 or newer",
"tree-ring integrations status",
"configured-awaiting-proof",
"active-isolated",
Expand All @@ -68,13 +70,13 @@ def main() -> None:
if " ".join(marker.split()) not in normalized_body
]
if missing:
raise SystemExit("missing v0.14 guidance: " + ", ".join(missing))
raise SystemExit("missing v0.15 guidance: " + ", ".join(missing))

require_markers(
"README.md",
[
"0.14.0 or newer",
"Skill package **0.14.1**",
"0.15.0 or newer",
"Skill package **0.15.0**",
"configured-awaiting-proof",
"needs-project-mount",
"observed command output",
Expand Down