#+TITLE: hashline-tools * CLI tools for [[https://blog.can.ac/2026/02/12/the-harness-problem][Hashline]] ** Included tools :PROPERTIES: :header-args: :results verbatim :exports both :eval never-export :END: + hlcat :: A variant of =cat= that prints the hashline before each line #+begin_src sh hlcat --help #+end_src #+RESULTS: #+begin_example usage: hlcat [-h] [--start START] [--end END] [files ...] Print file with hashline prefixes positional arguments: files Files end print (or stdin if none) options: -h, --help show this help message and exit --start, -s START Starting line, inclusive (omit for beginning of file) --end, -e END Ending line, exclusive (omit for end of file, negatives exclude lines) #+end_example + hlgrep :: A variant of =grep= that prints the hashline before each line #+begin_src sh hlgrep --help #+end_src #+RESULTS: #+begin_example usage: hlgrep [-h] pattern [files ...] Search for pattern in file with hashline prefixes positional arguments: pattern Regex pattern to search for files Files to search (or stdin if none) options: -h, --help show this help message and exit #+end_example + hlpatch :: A hashline-based editing tool #+begin_src sh hlpatch --help #+end_src #+RESULTS: #+begin_example usage: hlpatch [-h] [--inplace INPLACE] {replace,append,prepend,delete} ... Hashline-based editing tool positional arguments: {replace,append,prepend,delete} replace Replace lines append Append lines after position prepend Prepend lines before position delete Delete lines options: -h, --help show this help message and exit --inplace, -i INPLACE Write back to file after editing #+end_example ** Prior implementations + [[https://github.com/can1357/oh-my-pi/blob/main/packages/coding-agent/src/patch/hashline.ts][Oh-My-Pi]] (the original implementation, TypeScript) + [[https://github.com/dwash96/cecli/blob/main/cecli/helpers/hashline.py][Cecli (formerly Aider-CE)]] (Python)