Sillok
Sillok is a Rust CLI for meticulous agentic work chronicles. It records daily objectives, completed tasks, corrections, and retractions into a structured archive instead of a fragile append-only text log.
The name comes from Korean sillok, the court chronicles of Joseon. The design
goal is similar: keep precise records of what happened, when, under what
objective, and in what working context.
Status
Sillok is an early local-first CLI. The command interface is intended to be stable enough for agent harnesses, but the serialized archive format is private and may change.
Install
Build the binary in dev mode:
Install it onto your PATH:
Then use:
Storage
By default, Sillok stores one user-global archive at:
$XDG_DATA_HOME/sillok/sillok.slk.zst
If XDG_DATA_HOME is unset, it falls back to:
~/.local/share/sillok/sillok.slk.zst
Override the store with either:
SILLOK_STORE=/path/to/sillok.slk.zst
The current implementation persists a compressed private archive. On every mutation, it loads the archive, builds indexed in-memory state, validates the change, appends events, and atomically rewrites the archive.
Output
JSON is the default output and is intended for agents:
JSON records include created_at and updated_at fields. Use --human for
interactive summaries with the same timing information rendered into the text:
Daily Workflow
Initialize explicitly, or let the first write initialize the archive:
Add an objective for the day:
Record a completed task:
Attach a note under an objective by passing the objective id as the parent:
Complete the objective:
Read today:
Read a specific day:
Query a timerange:
Agent Integration
Add a short Sillok section to a repository AGENTS.md so coding agents record
objectives and completed work while they operate:
Use Sillok for substantive agentic work. Record objectives, completed tasks,
and corrections during the session instead of relying on chat history.
```bash
sillok objective add "Ship the storage/indexing refactor"
sillok note "Split reducer from view indexing" --parent <objective_id> --tags rust,sillok
sillok note "Fixed relink regression coverage" --parent <objective_id> --tags tests
sillok objective complete <objective_id> --note "Scoped work is complete"
sillok day --human
```
JSON is the default and is intended for agents. Use `--human` when presenting a
summary to a person.
Corrections
Amend current derived state:
Retract a task or objective from current views:
Show current state and event history for one record:
Render a tree:
Backfill And Timezones
Use --at to record when work occurred, and --tz to choose day attribution
for naive timestamps:
RFC3339 timestamps keep their offset:
Maintenance
Validate the archive:
Export current records as JSON:
Reset the whole archive. This creates a timestamped backup first:
Development
Run checks:
Project constraints:
- No
unwrap()orexpect()in project source or tests. - Keep modules under 300 lines where practical.
- Keep folder
mod.rsfiles to module declarations only. - Prefer explicit error handling and structured tracing.
- Do not treat the serialized archive as a public standard; optimize the in-memory representation and CLI behavior first.
Design Notes
See docs/plan/sillok-cli-chronicle-design.md for the initial implementation plan and data model notes.