database-schema
SKILL.md
Database Schema
STATUS: NOT IMPLEMENTED IN MVP This skill documents the planned schema for post-MVP persistence. MVP currently has no database - all state is in-memory.
Location: ~/.multishot/database.sqlite
Tables
CREATE TABLE runs (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
created_at INTEGER NOT NULL,
status TEXT NOT NULL, -- 'active' | 'completed'
current_round_id TEXT,
FOREIGN KEY (current_round_id) REFERENCES rounds(id)
);
CREATE TABLE rounds (
id TEXT PRIMARY KEY,
run_id TEXT NOT NULL,
round_number INTEGER NOT NULL,
base_prompt TEXT NOT NULL,
created_at INTEGER NOT NULL,
winner_agent_id TEXT,
winner_files_path TEXT,
status TEXT NOT NULL, -- 'running' | 'selecting' | 'completed'
FOREIGN KEY (run_id) REFERENCES runs(id),
FOREIGN KEY (winner_agent_id) REFERENCES agents(id)
);
CREATE TABLE agents (
id TEXT PRIMARY KEY,
round_id TEXT NOT NULL,
agent_number INTEGER NOT NULL, -- 1-4
sandbox_id TEXT,
variation_prompt TEXT NOT NULL,
status TEXT NOT NULL, -- 'initializing' | 'running' | 'completed' | 'failed' | 'selected'
created_at INTEGER NOT NULL,
completed_at INTEGER,
error_message TEXT,
FOREIGN KEY (round_id) REFERENCES rounds(id)
);
CREATE TABLE output_logs (
id TEXT PRIMARY KEY,
agent_id TEXT NOT NULL,
timestamp INTEGER NOT NULL,
content TEXT NOT NULL,
FOREIGN KEY (agent_id) REFERENCES agents(id)
);
CREATE TABLE credentials (
key TEXT PRIMARY KEY,
value TEXT NOT NULL, -- Reference to safeStorage, not plaintext
updated_at INTEGER NOT NULL
);
Indexes
CREATE INDEX idx_runs_created_at ON runs(created_at DESC);
CREATE INDEX idx_agents_round_id ON agents(round_id);
CREATE INDEX idx_logs_agent_id ON output_logs(agent_id);
better-sqlite3 Usage
import Database from 'better-sqlite3'
const db = new Database(path.join(os.homedir(), '.multishot', 'database.sqlite'))
// Synchronous API (no async/await needed)
const run = db.prepare('SELECT * FROM runs WHERE id = ?').get(runId)
const agents = db.prepare('SELECT * FROM agents WHERE round_id = ?').all(roundId)
db.prepare('INSERT INTO runs (id, name, created_at, status) VALUES (?, ?, ?, ?)')
.run(id, name, Date.now(), 'active')
File Storage
Winner files extracted to: ~/.multishot/runs/[run-uuid]/round-N-winner/
Logs archived to: ~/.multishot/runs/[run-uuid]/logs/agent-N.log
Weekly Installs
5
Repository
seanchiuai/multishotFirst Seen
Jan 28, 2026
Security Audits
Installed on
codex5
gemini-cli4
cline4
github-copilot4
continue4
cursor4