Packages
fnord
0.4.40
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## 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 --project foo --dir /path/to/foo --reindex```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 --project foo --query "some search query"```If you want more detail about each file matched:```bashfnord search --project foo --query "some search query" --detail```### AskAsk the AI assistant to answer questions about your project.```bashfnord ask foo "how do you run the tests for this project?"# Pipe output to `glow` to render markdownfnord 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.## 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)." }, "concurrency": { "type": "integer", "description": "Number of concurrent threads to use for the search (default: 4)." } }, "required": ["project", "query"] }}```# TODO- user-configurable system prompt for a given project- ask: report how old the index is- tool to allow the assistant to save observations about the project - automatically index these observations and either: - make them searchable - include them in the prompt