Files
hub/docs/research/opencode-session-access.md
glm-5.1 2b63cda1c7 Setup repo: migrate architecture specs, code stubs, and tasks from alkhub_ts
Copy architecture docs, ADRs, storage domain specs, research, reviews,
and 56 storage architecture tasks from the alkhub_ts monorepo. Adapt for
standalone @alkdev/hub repo structure (src/ not packages/hub/).

Sanitize all sensitive information:
- Replace private IPs (10.0.0.1) with localhost defaults
- Remove internal server hostnames (dev1, ns528096)
- Replace /workspace/ private paths with npm package references
- Remove hardcoded credentials from examples
- Rewrite infrastructure.md without private network details

Add Deno project scaffolding: deno.json (pinned deps), .gitignore,
AGENTS.md, entry point. Migrate existing code stubs (crypto, config
types, logger) with updated import paths.
2026-05-25 10:56:32 +00:00

3.2 KiB

Research: OpenCode Session Access (Memory Skill)

Question

How to access historical OpenCode session data (conversations, plans, projects) for import into the hub's Postgres storage? The opencode-memory skill provides read-only SQLite access to local OpenCode data.

Overview

The opencode-memory skill by carson2222 provides lightweight, read-only access to OpenCode's local history. It teaches agents how to query the OpenCode SQLite database directly using sqlite3 CLI, covering sessions, messages, plans, and projects.

Key Findings

Storage Location

Database:       ${XDG_DATA_HOME:-$HOME/.local/share}/opencode/opencode.db
Plans:          ${XDG_DATA_HOME:-$HOME/.local/share}/opencode/plans/*.md
Session diffs:  ${XDG_DATA_HOME:-$HOME/.local/share}/opencode/storage/session_diff/<session-id>.json
Prompt history: ${XDG_STATE_HOME:-$HOME/.local/state}/opencode/prompt-history.jsonl

Core Schema (What We Need)

  • projectid (text PK), worktree (path), name (often NULL)
  • sessionid (text), project_id (FK), parent_id (for sub-sessions), title, summary, time_created, time_updated
  • messageid, session_id (FK), data (JSON with role, agent, model, etc.), time_created
  • partid, message_id (FK), session_id (FK), data (JSON with type, text, etc.), time_created

This maps directly to our projects, sessions, messages, parts tables. See ../architecture/storage/sessions.md for the mapping details.

Agent/Role Fields

OpenCode stores an agent field on both user and assistant message data:

  • On user messages: which agent the user selected for that turn
  • On assistant messages: which agent produced the response

This maps to our sessions.roleName / messages.data.agent fields. See ../architecture/agent-roles.md for the full agent-vs-role discussion.

For Import

When importing OpenCode sessions into hub Postgres:

  1. Read from SQLite using the queries in the skill's SKILL.md
  2. Map project.worktreeprojects.directory (default workspace)
  3. Map session fields → our sessions table (preserving parent_id for coordinator relationships)
  4. Map message.data → our messages.data JSONB column (the shapes are compatible)
  5. Map part.data → our parts.data JSONB column (type discriminator maps directly)

The opencode-memory skill's query patterns are a useful reference for writing an import script, but the import itself should be a hub operation that reads from the SQLite file and inserts into Postgres.

Important: Read-Only for Now

The skill provides read-only access patterns. This is exactly what we need for initial import. Writing back to OpenCode's SQLite is not in scope — the hub is the source of truth going forward.

References