Packages
fnord
0.5.0
0.9.40
0.9.39
0.9.38
0.9.37
0.9.36
0.9.35
0.9.34
0.9.33
0.9.32
0.9.31
0.9.30
0.9.29
0.9.28
0.9.27
0.9.26
0.9.25
0.9.24
0.9.23
0.9.22
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.14
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.99
0.8.98
0.8.97
0.8.96
0.8.95
0.8.94
0.8.93
0.8.92
0.8.91
0.8.90
0.8.89
0.8.88
0.8.87
0.8.86
0.8.85
0.8.84
0.8.83
0.8.82
0.8.81
0.8.80
0.8.79
0.8.78
0.8.77
0.8.76
0.8.75
0.8.74
0.8.73
0.8.72
0.8.71
0.8.70
0.8.69
0.8.68
0.8.67
0.8.66
0.8.65
0.8.64
0.8.63
0.8.62
0.8.61
0.8.60
0.8.59
0.8.58
0.8.57
0.8.56
0.8.55
0.8.54
0.8.53
0.8.52
0.8.51
0.8.50
0.8.49
0.8.48
0.8.47
0.8.46
0.8.45
0.8.44
0.8.43
0.8.42
0.8.41
0.8.40
0.8.39
0.8.38
0.8.37
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.30
0.8.29
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.1
0.8.0
0.7.24
0.7.23
0.7.22
0.7.21
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.3
0.7.2
0.7.1
0.7.0
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.44
0.4.43
0.4.42
0.4.41
0.4.40
0.4.39
0.4.38
0.4.37
0.4.36
0.4.35
0.4.34
0.4.33
0.4.32
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
AI code archaeology
Current section
Files
Jump to
Current section
Files
README.md
# Fnord[](https://github.com/sysread/fnord/actions/workflows/run-tests.yml)Fnord is a command line tool that uses multiple AI-powered agents and tools toprovide a conversational interface to your codebase, notes, and other(non-binary) files.## Features- Code base search- Graph search and pathfinding- On-demand playbooks assembled from documentation and code- Troubleshooting and debugging- Git archaeology- Learns about your project(s) over time- Improves its research capabilities with each interaction## Installation1. Install `elixir` if necessary:```bash# MacOSbrew install elixir# Debian-basedsudo apt-get install elixir```2. Add the mix escript path to your shell's PATH:```bashecho 'export PATH="$HOME/.mix/escripts:$PATH"' >> ~/.bashrcsource ~/.bashrc```3. Install the script:```bashmix escript.install github sysread/fnord```Use the same command to reinstall. It will offer to overwrite the existinginstallation.4. Set `OPENAI_API_KEY`Set this in your shell environment to the OpenAI project key you wish to usefor this tool. You can create a new project and get a key[here](https://platform.openai.com/api-keys).## Usage### IndexThe first step is to index your project. This will scan all files in theproject directory and create a searchable database.The initial index, especially on a large codebase, can will take a while.Subsequent runs will be faster, re-indexing only those files which have changedsince they were last indexed.The `--dir` option is required only for the initial indexing. Subsequentindexing will use the directory specified in the initial index.```bashfnord index --project foo --dir /path/to/foo```You can **reindex** the project, forcing it to reindex all files.```bashfnord index -p foo -d /path/to/foo --reindex````fnord` learns about your project over time, so every now and then it's a goodidea to **consolidate** the notes it has taken.```bashfnord index -p foo --defrag-notes```You can also watch the project for changes and reindex them as they happenusing [watchman](https://github.com/facebook/watchman). Just be sure to use`--quiet` to suppress interactive output.```bashwatchman-make -p '**/*' --settle 5 --run "fnord index --project $project --dir $project_root --quiet"```...or use the `fnord-watch` script in the [tools directory onGitHub](https://github.com/sysread/fnord/blob/main/tools/fnord-watch).```bashfnord-watch -p foo -d /path/to/foo```### SearchSearch for files in the project that match a query.```bashfnord search -p foo -q "some search query"```If you want more detail about each file matched:```bashfnord search -p foo -q "some search query" --detail```### AskAsk the AI assistant to answer questions about your project.```bashfnord ask -p foo -q "how do you run the tests for this project?"# Pipe output to `glow` to render markdownfnord ask -p foo -q "summarize the dependencies of this project" | glow# Reveal tool calls and research stepsLOGGER_LEVEL=debug fnord ask -p foo -q "summarize the dependencies of this project" | glow```### Miscellaneous- **List projects:** `fnord projects`- **List files in a project:** `fnord files -p foo`- **List learned insights and inferences:** `fnord notes -p foo`- **List learned research strategies:** `fnord strategies`- **Show the AI-generated summary of a file:** `fnord summary -p foo -f bar.ext`- **Delete a project:** `fnord delete -p foo`- **Show conversations:** `fnord conversations -p foo -q`Note that deleting a project only deletes from the index, not the actual files.## Tool usageInternally, the `ask` command uses the OpenAI chat completions API to generatea response, implementing a function tool to allow the assistant to query thedatabase for information.`fnord` can be used to implement a similar tool for your own projects. Whilethe `ask` command severely limits the parameters that the assistant may utilize(`query` only, with `project` being provided by the user's invocation of thecommand), the following syntax includes the full set of parameters availablefor the `search` command.```json{ "name": "search_tool", "description": "Searches for matching files and their contents in a project.", "parameters": { "type": "object", "properties": { "project": { "type": "string", "description": "Project name for the search." }, "query": { "type": "string", "description": "The search query string." }, "detail": { "type": "boolean", "description": "Include AI-generated file summary if set to true." }, "limit": { "type": "integer", "description": "Limit the number of results (default: 10)." }, "workers": { "type": "integer", "description": "Number of concurrent workers to use for the search." } }, "required": ["project", "query"] }}```# TODO- ask: report how old the index is- index: option to verify and consolidate notes