agentleFS
carson2222carson2222/skills/opencode-memory/SKILL.md

opencode-memory

Skill113 starsChanged 5 months agoApache-2.0View on GitHub

Browse local OpenCode history: sessions, messages, plans, prompt history, and prior decisions. Use when the user says history, previous session, last time, remember, recall, plans, prior work, or when resuming/debugging repeated work where earlier OpenCode context may help. Do not use for fresh tasks or when current files/git already answer the question.

1 other project uses a version of this.

Adopted by

Most recently taken up by

  • Other versions1 project uses a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 1

    1. R44VC0RP/skills★ 161same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository3 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

8 rules. About 0 are common, 5 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Read-only lookup for local OpenCode history.

    line 15
  2. Distinctive:

    Do not use when repo files/git already answer the question or the task is new.

    line 24
  3. Distinctive:

    Read-only. Never modify OpenCode DB/files.

    line 28
  4. Very specific:

    Use sqlite3 with read-only URI.

    line 29
  5. Very specific:

    Keep results small with LIMIT and targeted LIKE.

    line 30
  6. Very specific:

    Avoid auth/provider tables: account, credential, control_account, account_state.

    line 32
  7. Distinctive:

    Run this first in bash:

    line 36
  8. Distinctive:

    Use references/storage-format.md only when you need table details, part/tool shapes, legacy JSON paths, or debug queries.

    line 141

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

OpenCode Memory Browser

Read-only lookup for local OpenCode history. Use it only when prior sessions, plans, or decisions would help. Do not inject history by default.

Use When

  • User asks for history, previous sessions, last time, plans, recall, or memory.
  • Resuming a project where prior OpenCode context may matter.
  • Debugging a repeat issue that may have appeared earlier.

Do not use when repo files/git already answer the question or the task is new.

Rules

  • Read-only. Never modify OpenCode DB/files.
  • Use sqlite3 with read-only URI. Do not read the DB with file-read tools.
  • Keep results small with LIMIT and targeted LIKE.
  • Summarize relevant findings; do not dump raw history.
  • Avoid auth/provider tables: account, credential, control_account, account_state.

Setup

Run this first in bash:

DATA_ROOT="${XDG_DATA_HOME:-$HOME/.local/share}/opencode"
STATE_ROOT="${XDG_STATE_HOME:-$HOME/.local/state}/opencode"
DB="$(opencode db path 2>/dev/null || true)"
[ -n "$DB" ] || DB="${OPENCODE_DB:-$DATA_ROOT/opencode.db}"
case "$DB" in :memory:|/*) ;; *) DB="$DATA_ROOT/$DB" ;; esac
if [ ! -f "$DB" ]; then
  for candidate in "$DATA_ROOT"/opencode*.db; do
    [ -f "$candidate" ] && DB="$candidate" && break
  done
fi
DB_URI="file:${DB}?mode=ro"

Useful files:

  • Plans: $DATA_ROOT/plans/*.md
  • Prompt history: $STATE_ROOT/prompt-history.jsonl
  • Session diffs: $DATA_ROOT/storage/session_diff/<session-id>.json

Queries

Summary

sqlite3 "$DB_URI" "
  SELECT 'projects', COUNT(*) FROM project
  UNION ALL SELECT 'main sessions', COUNT(*) FROM session WHERE parent_id IS NULL
  UNION ALL SELECT 'messages', COUNT(*) FROM message
  UNION ALL SELECT 'parts', COUNT(*) FROM part
  UNION ALL SELECT 'todos', COUNT(*) FROM todo;
"

Recent sessions

sqlite3 "$DB_URI" "
  SELECT s.id, COALESCE(s.title, 'untitled') AS title,
    COALESCE(p.name, p.worktree, '') AS project,
    datetime(s.time_updated/1000, 'unixepoch', 'localtime') AS updated,
    (SELECT COUNT(*) FROM message m WHERE m.session_id = s.id) AS messages
  FROM session s
  LEFT JOIN project p ON p.id = s.project_id
  WHERE s.parent_id IS NULL
  ORDER BY s.time_updated DESC
  LIMIT 10;
"

Search text

Replace SEARCH_TERM first.

sqlite3 "$DB_URI" "
  SELECT s.id, COALESCE(s.title, 'untitled') AS title,
    json_extract(m.data, '$.role') AS role,
    datetime(m.time_created/1000, 'unixepoch', 'localtime') AS time,
    substr(json_extract(p.data, '$.text'), 1, 200) AS snippet
  FROM part p
  JOIN message m ON m.id = p.message_id
  JOIN session s ON s.id = m.session_id
  WHERE s.parent_id IS NULL
    AND json_extract(p.data, '$.type') = 'text'
    AND json_extract(p.data, '$.text') LIKE '%SEARCH_TERM%'
  ORDER BY m.time_created DESC
  LIMIT 10;
"

Read session text

Replace SESSION_ID_HERE first. Text parts only; use the reference for tool, patch, file, reasoning, or V2 internals.

sqlite3 "$DB_URI" "
  SELECT json_extract(m.data, '$.role') AS role,
    datetime(m.time_created/1000, 'unixepoch', 'localtime') AS time,
    GROUP_CONCAT(json_extract(p.data, '$.text'), char(10)) AS text
  FROM message m
  LEFT JOIN part p ON p.message_id = m.id
    AND json_extract(p.data, '$.type') = 'text'
  WHERE m.session_id = 'SESSION_ID_HERE'
  GROUP BY m.id
  ORDER BY m.time_created ASC
  LIMIT 50;
"

Plans And Prompt History

ls -lt "$DATA_ROOT"/plans/*.md 2>/dev/null | head -20
tail -20 "$STATE_ROOT"/prompt-history.jsonl 2>/dev/null

Prompt history entries currently use input, mode, and parts[]; do not assume root text.

Deep Reference

Use references/storage-format.md only when you need table details, part/tool shapes, legacy JSON paths, or debug queries.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.