v0.4.0 — CLI Ergonomics
CLI ergonomics (F4)
The CLI is feature-complete. cargo install loust-llm-mempipe and
loust-llm-mempipe --help give you a working pipeline in one
command.
loust-llm-mempipe \
--input conversations.json \
--output ./claude-memory/ \
--format both \
--statsStderr transcript on a real run
$ loust-llm-mempipe --input tests/fixtures/chatgpt-tiny.json \
--output /tmp/lmp-smoke --format both --stats
detected adapter: chatgpt
parsed 7 messages
stats: in=7 out=6 scrubbed=0 redactions=0 dedup_exact=0 dedup_fuzzy=0 age_drop=0 signal_drop=1
wrote: /tmp/lmp-smoke/memory.jsonl
wrote: /tmp/lmp-smoke/multi-turn-with-system-message/multi-turn-with-system-message.md
wrote: /tmp/lmp-smoke/rust-fnv-1a-hashing/rust-fnv-1a-hashing.md
done: 3 files written
In this run, the system message from conv-003 got dropped by the
signal_min filter (assistant=1.0 > user=0.8 > tool=0.5 > system=0.3,
and the message was a year old).
Flags
| Flag | Default | Notes |
|---|---|---|
-i, --input |
required | path to the raw export file |
-o, --output |
required | output dir, created if missing |
-f, --format |
jsonl |
jsonl, markdown/md, or both |
--adapter |
auto-detect | chatgpt, claude_web, gemini, claude_code |
--dedup-threshold |
0.85 |
Jaccard sim, range [0.0, 1.0] |
--signal-min |
0.2 |
drop signal_score < min, range [0.0, 1.0] |
--max-age-days |
1095 |
drop messages older than N days |
--stats |
off | print one-line stats to stderr |
--dry-run |
off | compute but don't write |
--info |
off | print build metadata and exit |
Library additions
loust_llm_mempipe::adapter::registry()— ordered list of all
known adapters for auto-detection.loust_llm_mempipe::adapter::pick_adapter(kind, header)— explicit
override or first-detect.OutputFormat::from_cli(s)andAdapterKind::from_cli(s)—
kebab-case parsers used by clap'svalue_parser.
Validation
cargo fmt --check— cleancargo clippy --all-targets -- -D warnings— cleancargo test— 61/61 pass (44 lib + 4 main clap + 9 cli_e2e + 4 e2e)cargo build --release— 12s- Smoke test against real fixture produces
memory.jsonl+ 2 Markdown
files as expected.
What's next
- F5: CI workflow (
.github/workflows/ci.ymlwith fmt/clippy/test) - F7:
Reddit postcancelled