Chroniq is a local-first, CLI-first, agent-friendly personal logging tool.
It is built for one narrow job: capture lightweight notes quickly, keep them append-only, and make them easy for both humans and agents to consume.
It intentionally does not try to become a full journaling app, knowledge base, or review system.
Published package: @hazellin/chroniq
Installed binaries: chroniq, cq
- Fast input over heavy structure
- Local files over cloud dependency
- JSON output over opaque app state
- Agent-friendly workflows over GUI-first interaction
- Add notes from the terminal with
chroniq addorcq add - Save one multi-line note with
chroniq add --multilineorcat note.md | chroniq add --stdin - Interactive
chroniq add --stdinautomatically opens your editor, so multi-line content stays editable before save - Split one input block into multiple notes with
chroniq add --split - Read today's notes with
cq today - Browse stored dates with
cq list - Export all entries as JSON with
cq export - Store data in append-only
jsonlfiles - Keep output readable for humans and stable for scripts
npm install -g @hazellin/chroniq
chroniq --helpOr with pnpm:
pnpm add -g @hazellin/chroniq
cq todaypnpm install
pnpm build
pnpm link --globalAfter installation, chroniq and cq are available in your shell.
pnpm install
pnpm check
pnpm build
node ./dist/cli.js --helpchroniq add: line-oriented input. One line becomes one record.chroniq add --stdin: block-oriented input. The whole input block becomes one record unless you also pass--split.
cq add "I want my logging flow to stay CLI-first"
cq add # multi-line input -> multiple records
cq add --stdin # multi-line input -> one record
cq add "Build for agents should be the default" --tag thought
cq add "Discussed personal logging schema" --tag idea work
cq add "One line with inline tag #idea"
cq add --multiline
chroniq add --stdin
cat note.md | cq add --stdin
cat tasks.txt | cq add --stdin --split autoIf you use inline #tags in your shell command, keep the whole content in quotes. Otherwise your shell treats #... as a comment before Chroniq sees it.
Example output:
Recorded: Build for agents should be the default
File: /path/to/chroniq/data/logs/2026-03-10.jsonl
ID: 20260310121030-123
cq today
cq today --json
cq today --fullcq list
cq list --date 2026-03-10
cq list --date 2026-03-10 --json
cq list --date 2026-03-10 --fullcq export
cq export --format jsonEntries are stored by day under:
data/logs/YYYY-MM-DD.jsonl
Each line is one JSON object:
{
"id": "20260310121030-123",
"content": "I want my logging flow to stay CLI-first",
"created_at": "2026-03-10T04:10:30.123Z",
"source": "cli",
"tags": ["thought"],
"type": "note"
}This format is intended to be:
- Easy to append
- Safe to parse line by line
- Friendly to shell tools, scripts, and LLM or agent pipelines
Typical agent-friendly flow:
cq add "Discussed CLI input design for personal logging" --tag idea
cq today --json
cq export --format jsonThat makes downstream classification, summarization, or indexing straightforward.
Current scope:
- lightweight capture
- simple retrieval
- stable local storage
- machine-readable export
Out of scope for now:
- automatic categorization
- review workflows
- full-text search engine
- sync service
- GUI app
Scripts:
pnpm dev
pnpm build
pnpm checkProject layout:
bin/ executable wrapper
src/ TypeScript source
dist/ compiled output
data/logs/ local append-only log files
Issues and pull requests are welcome.
Before opening a PR:
- keep the tool local-first and CLI-first
- avoid turning simple capture into a heavy workflow engine
- preserve stable JSON output for agent use
- run
pnpm checkandpnpm build
See CONTRIBUTING.md for details.
Chroniq stores entries as local plain-text JSONL files. Do not use it for secrets unless your local machine and repository workflow are already set up for that risk.
See SECURITY.md.
Maintainer release flow:
pnpm install
pnpm release:check
npm publish --access publicSee the npm release checklist.
MIT. See LICENSE.
