Packages
fnord
0.4.29
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 to
provide 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
## Installation
1. Install `elixir` if necessary:
```bash
# MacOS
brew install elixir
# Debian-based
sudo apt-get install elixir
```
2. Add the mix escript path to your shell's PATH:
```bash
echo 'export PATH="$HOME/.mix/escripts:$PATH"' >> ~/.bashrc
source ~/.bashrc
```
3. Install the script:
```bash
mix escript.install github sysread/fnord
```
Use the same command to reinstall. It will offer to overwrite the existing
installation.
4. Set `OPENAI_API_KEY`
Set this in your shell environment to the OpenAI project key you wish to use
for this tool. You can create a new project and get a key
[here](https://platform.openai.com/api-keys).
## Usage
### Index
The first step is to index your project. This will scan all files in the
project 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 changed
since they were last indexed.
The `--dir` option is required only for the initial indexing. Subsequent
indexing will use the directory specified in the initial index.
```bash
fnord index --project foo --dir /path/to/foo
```
You can **reindex** the project, forcing it to reindex all files.
```bash
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](https://github.com/facebook/watchman). Just be sure to use
`--quiet` to suppress interactive output.
```bash
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](https://github.com/sysread/fnord/blob/main/tools/fnord-watch).
```bash
fnord-watch -p foo -d /path/to/foo
```
### Search
Search for files in the project that match a query.
```bash
fnord search --project foo --query "some search query"
```
If you want more detail about each file matched:
```bash
fnord search --project foo --query "some search query" --detail
```
### Ask
Ask the AI assistant to answer questions about your project.
```bash
fnord ask foo "how do you run the tests for this project?"
# 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.
## Tool usage
Internally, the `ask` command uses the OpenAI chat completions API to generate
a response, implementing a function tool to allow the assistant to query the
database for information.
`fnord` can be used to implement a similar tool for your own projects. While
the `ask` command severely limits the parameters that the assistant may utilize
(`query` only, with `project` being provided by the user's invocation of the
command), the following syntax includes the full set of parameters available
for 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
- abstract agents out into a behaviour
✓ support for tool calls
- support for "accumulator" agents
- user-configurable system prompt for a given project
- ask: report how old the index is
- update command to run `mix escript.install github sysread/fnord` for you