View Source Fnord
Fnord is a command line tool the builds a searchable database of your files, using AI-generated embeddings to index and search your code base, notes, and other (non-binary) files.
Installation
Install
elixir
if necessary:# MacOS brew install elixir # Debian-based sudo apt-get install elixir
Add the mix escript path to your shell's PATH:
echo 'export PATH="$HOME/.mix/escripts:$PATH"' >> ~/.bashrc source ~/.bashrc
Install the script:
mix escript.install github sysread/fnord
Use the same command to reinstall. It will offer to overwrite the existing installation.
Usage
Index
The first time you run this, especially on a large codebase, it will take a while to index everything. Subsequent runs will be faster, re-indexing only those files which have changed since they were last indexed.
fnord index --project foo --dir /path/to/foo
You can reindex the project, forcing it to reindex all files:
fnord index --project foo --dir /path/to/foo --reindex
You can also watch the project for changes and reindex them as they happen
using watchman. Just be sure to use
--quiet
to suppress interactive output:
watchman-make -p '**/*' --settle 5 --run "fnord index --project $project --dir $project_root --quiet"
...or use the fnord-watch
script in the tools directory on
GitHub.
fnord-watch -p foo -d /path/to/foo
Search
fnord search --project foo --query "some search query"
If you want more detail about each file matched:
fnord search --project foo --query "some search query" --detail
Ask
You can ask the AI assistant to answer questions about your project:
fnord ask foo "how do you run the tests for this project?"
# Continue the conversation
fnord ask -C foo "how does the test coverage look to you?"
# With status messages emitted to stderr
fnord ask -C --debug foo "if the test coverage is so amazing then how come my change didn't break any tests?!"
# Pipe output to `glow` to render markdown
fnord ask foo "summarize the dependencies of this project" | glow
Miscellaneous
- List projects:
fnord projects
- List files in a project:
fnord files --project foo
- Show the AI-generated summary of a file:
fnord summary --project foo --file bar
- Delete a project:
fnord delete --project foo
Note that deleting a project only deletes from the index, not the actual files.
TODO
ask
: read questions from stdinask
: streaming output