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
9 changes: 2 additions & 7 deletions .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "tree-ring-memory",
"version": "0.3.0",
"version": "0.3.1",
"description": "Local-first memory lifecycle and receipt-backed harness guidance for coding agents using Tree Ring Memory v0.14+.",
"author": {
"name": "TerminallyLazy",
Expand Down Expand Up @@ -43,11 +43,6 @@
],
"brandColor": "#2F7D5C",
"composerIcon": "./assets/tree-ring-memory-logo.png",
"logo": "./assets/tree-ring-memory-logo.png",
"screenshots": [
"./assets/screenshot-dashboard.png",
"./assets/screenshot-recall.png",
"./assets/screenshot-evidence.png"
]
"logo": "./assets/tree-ring-memory-logo.png"
}
}
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@ This plugin packages one Codex skill that teaches agents when to recall, write,
audit, consolidate, and forget project memory using the open-source
[Tree Ring Memory](https://github.com/TerminallyLazy/Tree-Ring-Memory) CLI.

Plugin `0.3.0` requires Tree Ring Memory CLI **>= 0.14.0**. The minimum is
Plugin `0.3.1` requires Tree Ring Memory CLI **>= 0.14.0**. The minimum is
intentional: v0.14 adds receipt-backed harness readiness on top of the v0.13
schema-v3, coordinated-write, and idempotency contracts used by this guidance.

The public ZIP is a skills-only package. It intentionally omits
`interface.screenshots`, which OpenAI's ZIP ingestion does not accept for this
package type; the logo and composer icon remain available.

It does not run a background service, scrape chats, or capture transcripts.
The active agent chooses when a memory action is useful, source-linked, and
privacy-safe.
Expand Down
12 changes: 7 additions & 5 deletions SUBMISSION.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,13 @@ Long description:

## Release Notes

Initial OpenAI submission of the v0.14-compatible skills-only package. It adds
runtime preflight, receipt-backed harness readiness, exact non-active states,
same-host coordination rules, and explicit privacy-safe fallback when local
execution is unavailable. The plugin has no MCP server, hosted service,
credentials, telemetry, or reviewer account requirement.
Version 0.3.1 of the v0.14-compatible skills-only package removes
`interface.screenshots`, which OpenAI ZIP ingestion does not allow for
skills-only plugins. It retains runtime preflight, receipt-backed harness
readiness, exact non-active states, same-host coordination rules, the logo and
composer icon, and explicit privacy-safe fallback when local execution is
unavailable. The plugin has no MCP server, hosted service, credentials,
telemetry, or reviewer account requirement.

## Review Note

Expand Down
Binary file removed assets/screenshot-dashboard.png
Binary file not shown.
Binary file removed assets/screenshot-evidence.png
Binary file not shown.
Binary file removed assets/screenshot-recall.png
Binary file not shown.
9 changes: 4 additions & 5 deletions scripts/validate-plugin.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ root = Path(".")
manifest = json.loads((root / ".codex-plugin/plugin.json").read_text())
if manifest.get("name") != "tree-ring-memory":
raise SystemExit("plugin name must remain tree-ring-memory")
if manifest.get("version") != "0.3.0":
raise SystemExit("wrapper version must be 0.3.0")
if manifest.get("version") != "0.3.1":
raise SystemExit("wrapper version must be 0.3.1")

interface = manifest.get("interface", {})
prompts = interface.get("defaultPrompt", [])
Expand All @@ -45,9 +45,8 @@ for key in ("composerIcon", "logo"):
if not path or not (root / path).is_file():
raise SystemExit(f"missing interface asset: {key}")

screenshots = interface.get("screenshots", [])
if len(screenshots) != 3 or any(not (root / path).is_file() for path in screenshots):
raise SystemExit("three real screenshots are required")
if "screenshots" in interface:
raise SystemExit("skills-only ZIP manifests must not declare interface.screenshots")

for required in ("PRIVACY.md", "TERMS.md", "SUBMISSION.md"):
if not (root / required).is_file():
Expand Down
Loading