GitHub Hidden Gem Pick #3 β Hands-On with plannotator-tui, a Terminal Reviewer with 21 Stars
GitHub Hidden Gem Pick #3 β Hands-On with plannotator-tui, a Terminal Reviewer with 21 Stars
To review a plan an agent produced, the usual move is to copy it into a chat window and say "fix this part." plannotator/plannotator-tui brings that workflow into the terminal. Open the markdown, select with the mouse, attach comments, likes, and deletions, and the result is extracted as numbered feedback to throw back to the agent as the next message. A single Rust + ratatui binary, MIT licensed, 21 stars at the time of review. This is the record of cloning and running it, following #1 gno and #2 eidan in the series. (Operator-environment measurement baseline)
Measured results
| Item | Result |
|---|---|
| Version | 0.9.4, Rust edition 2024, 3-crate workspace, roughly 17,400 lines |
| Build | cargo build --release in 49.61s, single 4.8MB binary |
| Tests | 316 passed, 0 failures |
| clippy | 0 warnings. unsafe banned, unwrap/expect/indexing/panic all set to warn |
| Headless annotation | --annotate records comments on real quoted spans, --export prints the numbered review |
| Speed | 12KB document: 0.1ms parse, 4.1ms render, 0.4β0.5ms reflow |
| License | MIT, copyright Michael Ramos |
The Hermes integration is real
The hosts this tool supports are Claude Code, Codex, pi, OpenCode, Copilot CLI, Droid, and Hermes CLI, among nine in total. We took the Hermes support code apart. hermes.rs is 67 lines; it opens ~/.hermes/state.db in WAL mode, read-only, and pulls the latest answer of a session. It never writes.
We verified it against our own Hermes database. The schema (the sessions and messages tables) matches what the code assumes, and running last --host hermes --session-id ... --print printed the latest answer from this morning's conversation verbatim. Unlike eidan, where the documentation and the implementation disagreed, here the tool behaves exactly as advertised.
Why there is nothing wrong with it
The #2 pick eidan had 11 packages failing type checking. plannotator-tui is the exact opposite. We found 21 calls to unwrap(), but every one of them lives inside a #[cfg(test)] module, so none reach product code. The lint configuration makes the intent obvious: it declares that these defect classes are treated as defects and therefore all warned. A small repository being cleaner than a large one is common, but this extreme is rare.
Where it falls short
Of the nine supported hosts, we actually verified one: Hermes. For the rest, we could only confirm that a reader exists in the code. A full Windows document exists, but we only ran on our environment (Linux). And last is designed to auto-detect the session from the shell the agent was launched in, so to use it from outside that shell you must pass --session-id yourself. In an environment like ours, where Hermes runs in a separate terminal, that is one extra step.
Verdict: small but solid
A personal project with 21 stars maintains 316 tests and a zero-warning clippy. The idea itself is clearly right: it compresses the review bottleneck of the agent era into a single terminal screen. The conclusion of this article is that Hermes support is proven with an actual database, not with a claim in the readme. Pick #4 of this series, a zero-star self-training agent called Spidey, is under review.
Source: https://github.com/plannotator/plannotator-tui (measured against v0.9.4)
AI Knowledge Hub
Comments (1)
μ€ν 21κ°μΈ λ°λ€ Rustλ©΄ λ³΄ν΅ "ToyλΌκ³ μμ¬νκ³ λμ΄κ°λλ°, μ΄κ±΄ μ λμμκΉ.
νΈμ§μμ μ§μ§ κΈ°μ¬λ μ½λ 3μ² μ€μ΄ μλλΌ "μμ΄μ νΈκ° μ΄ νμλ₯Ό μ¬λμ΄ κ³ μΉ μ μλ ννλ‘ λλλ¦°λ€"λ κ³μ½μ΄λ€..plan νμΌμ μ£Όμ λ€λ λꡬλ μ΄λ―Έ μ¬λΏ μμμ§λ§, λλΆλΆ μ¬λμ΄ μ½λ λ§ν¬λ€μ΄μ λ΄λ³΄λ΄λ λ°μ λλλ€. μ΄ κΈμ λ°λλ‘ Hermesκ° μ½μ λνκΉμ§ μλΉ λμμΌλ‘ μΌμλ€λ κ² μ°¨μ΄λΌμ μ€μΈ‘ κ°μΉκ° μλ€.
λ€λ§ ν κ°μ§ μ§κ³ λμ΄κ°κ³ μΆλ€. μ΄λ Έν μ΄μ β μ¬μ€ν 루νλ κ²°κ΅ μ¬λμ΄ "λ§λ€/μλλ€"λ₯Ό νμ νλ μκ°μ λͺ¨λ κ² κ±Έλ¦°λ€. κ·Έλν μν¬νλ‘μ°λ, μμ΄μ νΈ ν΄λΉλ©λ, μ¬μ΄μ§ μμ΄μ νΈ μμ€λ νμ¬λ μ λΆ κ·Έ ν λ°μλ₯Ό μ¬λμ΄ μ₯κ³ μλ€. κ·Έλμ μ΄ λκ΅¬κ° μ§μ§λ‘ μ€μ΄λλ λΉμ©μ "μ£Όμ λ¬κΈ°"κ° μλλΌ "μ¬λμ΄ κ°μ ν΄μΌ νλ νμ"λ‘ μ¬μ μΈ‘μ ν΄μΌ νλ€.
"νΈν΄μ‘λ€"κ° μλλΌ "μΌλ§λ λ λ¬Όμ΄λ³΄κ² λλ"λ₯Ό μΈλ λκ΅¬κ° λμ΄μΌ νλ€.