OKF Time Series
Chronological spine for agent memory. Session → Hour → Day → Week → Month → Year. Plain markdown with YAML frontmatter, stored in an OKF bundle, committed to Git. No database required to traverse it.
Spec of record: okf-plugin#72
Companion: okf-pointers (#73) · okf-remote (#74)
Installed version. Marketplace catalog strings are not git tags. Marketplace 0.4.13 already pins OTS 0.3.2 / pointers 0.2.0. After install, open the installed plugin.json and confirm the version field is 0.3.2 (this pack is 0.3.3). 0.3.1 is the killed emit-schema write path — do not dogfood it.
Nouns this plugin may write
temporal.year · temporal.month · temporal.week · temporal.day · temporal.hour · temporal.session · temporal.telemetry · temporal.summary · temporal.saliency
Session agent resolves to existing AgentIdentity (second-brain-core). This plugin does not define a new identity type.
Deterministic write boundary
The model proposes. Schema-enforced scripts commit:
python3 scripts/ots_common.py write-session \
--id software_engineer__atlas__001 \
--period 2026-08-21T14 \
--agent-name atlas --agent-role software_engineer \
--author "grok-bot/northstar-console" \
--bundle "$SECOND_BRAIN_ROOT"
python3 scripts/ots_common.py tick-hour \
--period 2026-08-21T14 \
--author "grok-bot/northstar-console" \
--bundle "$SECOND_BRAIN_ROOT"
Hour nodes come from the scheduled tick, not from session writes. No segments in the window means no Hour node — the hierarchy stays sparse. The tick skips only an Hour that still contains an open segment. Closed segments from a long session finalize on schedule. At most one Hour is un-finalized per running session.
Host transcripts enter through the official tailer (no LLM) only after opt-in. Install is not capture: touch .okf-history in the project root, or ots opt-in --jsonl …. The stored capture is a byte-for-byte sessions/<slug>.source.jsonl snapshot — not a vendor-neutral emit fence:
python3 scripts/ots_tail_jsonl.py once \
--jsonl tests/fixtures/host-session.jsonl \
--host claude-code \
--role software_engineer --agent atlas --n 1 \
--author "$SECOND_BRAIN_IDENTITY" \
--bundle "$SECOND_BRAIN_ROOT"
ots-tail also has start / stop / status / check / setup / smoke (setup writes okf/temporal/tailer.json; never a private remote). status and check print the .okf-history paths walked when skipped: not_opted_in. check exits 1 if not opted in. One-command gate: python3 scripts/ots smoke (fixtures + --stub; no API key). Pipeline: tail → tick-hour → summarize --period → rollup → overnight pointers (separate; not in this pack). Summarize Edition A (host CLI + pinned cheapest model: claude-haiku-4-5 / gpt-5.6-luna / grok-4-fast) or Edition B (API key). Setup fails closed on Sonnet / Sol / Terra / any non-pin. Inspect with ots sessions list / show. Cron helper: ots print-cron. Idle flush default is 300s (dogfood may use --idle 60 if follow stalls). Phase-1 snapshot rule: docs/PRD-TELEMETRY-PHASE1.md. Emit table is a read-time filter, not stored: docs/TELEMETRY_EMIT.md.
Milestone segments are hour-aligned. Telemetry retention defaults to 90 days. The watchdog is global, default one hour.
Never invent TypedEdge rel values — that vocabulary is owned by second-brain-core. Never invent Pointers link_type values — that taxonomy is owned by okf-pointers. This plugin writes neither. Never write types owned by another plugin. Never hard-code a private remote.
Multi-host
| Host | How to load |
|---|---|
| Claude Code | marketplace + plugin install |
| Grok Build | zero-config Claude plugin |
| Codex | Agent Skills / .codex-plugin |
| Agent Plugins clients | root plugin.json + skills/ |
| Grok Bot | docs/GROK_BOT.md |
| Cursor | docs/CURSOR.md |
| LangChain Deep Agents | docs/LANG_CHAIN_DEEP_AGENTS.md |
Related plugins
License
MIT. Copyright 2026 Rick Hightower / contributors.