- Python 56.1%
- JavaScript 30.2%
- CSS 9.4%
- HTML 4.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .vscode | ||
| API | ||
| CLI | ||
| core | ||
| tests | ||
| UI | ||
| .gitignore | ||
| .woodpecker.yml | ||
| pyproject.toml | ||
| README.md | ||
| test_config.json | ||
| ty.toml | ||
Farning
A coding Harness for any API, that supports:
- OpenAI Endpoints
- groq (Comming Soon)
- Anthropic (Coming Soon)
Supported tools:
- Read File
- Write File
- Delete File
- Execute Command
Setup
go to the wiki
Bundles
Bundels are different UIs for FarningCode, like CLI, in development the core Package gets copied in the
Installation
You can install uv using pip:
pip install uv
or directly from the source: astral.sh/uv
Usage
To run selected tools without an approval prompt, add an explicit allowlist to
your active config.json (or test_config.json / dev_config.json):
{
"AUTO_APPROVE_TOOLS": ["file_reader"]
}
Add this property alongside your existing settings. Supported names are
file_reader, file_writer, file_deleter, and execute_code. An omitted
property or an empty list keeps manual approval for every tool. Names match
exactly; wildcards do not grant approval. Restart after editing the file.
Allowlisted tools execute immediately, including writes, deletions, and commands
if enabled. The web UI and terminal UI retain tool entries labeled
Auto-approved, even when execution finishes between polls.
After installing uv, you can initialize it using the following command:
uv init
to add a new component, use the following command:
uv add <component_name>
Execute the following command to run uv:
uv run main.py
Linting
To lint your Python code using ruff and typecheck using ty, execute the following commands:
To lint your Python code using ruff.
uvx ruff check
To format your Python code using ruff:
uvx ruff format
for typechecking your Python code using ty:
uvx ty check
Build
To build the standalone CLI, run the following command from the repository root:
uv --project CLI run pyinstaller --noconfirm --distpath CLI/dist --workpath CLI/build CLI/main.spec
The executable will be located at CLI/dist/main (main.exe on Windows).
CiCD
The Linting and typechecking is also integrated into the CI/CD pipeline to ensure code quality before merging changes. This setup uses Woodpecker CI. The Ci/CD workflow will automatically run the linting and typechecking steps defined in the .woodpecker.yml configuration file.
DISCLAIMER: The Ci/CD workflow just works if a uv init was executed in the repository beforehand. And at least one component has been added using uv add <component_name>.
Model configuration
In the CLI, use /settings (or Ctrl+,) to add, edit, or remove model profiles.
Each profile has a display name, AI endpoint type, model ID, API host, and optional API key.
Save & select saves all profiles and selects the profile being edited.
Model IDs must be unique. Hosts may include /v1 or just the server root.
Use /model to open the model picker, or /model <model ID or display name>
to switch directly. Selection is saved and used for subsequent tasks without
restarting. A task already running retains its starting model configuration.
Only OpenAI-compatible chat completion endpoints are currently supported.
Configuration uses MODELS and SELECTED_MODEL, for example:
{
"MODELS": [
{
"DISPLAY_NAME": "Local coder",
"AI": "openai",
"MODEL": "my-model",
"API_HOST": "http://localhost:11434",
"API_KEY": ""
}
],
"SELECTED_MODEL": "my-model",
"IGNORE_FOLDERS": [".git", "__pycache__", ".venv"]
}
Legacy single-model configuration and global AI endpoint types are migrated into model profiles in memory when loaded and saved in the new format the next time you save settings or select a model. The settings dialog shows the active configuration file path.
Run the model and CLI tests from the repository root:
CLI/.venv/bin/python -m unittest discover -s tests -v