Local Agents is a Godot addon backed by a native GDExtension runtime for running llama.cpp style language agents entirely offline. Everything ships as C++ and GDScript, keeping the plugin focused on editor/runtime workflows and the native downloader pipeline.
Runtime chat loop (locally-run LLM response)

Editor configuration walkthrough (locally-run LLM setup)

- Native
AgentNode(GDExtension) with queue-backed inference, graph memory helpers, and Piper/Whisper hooks backed by the new runtime speech helpers. - Threaded
LocalAgentsSpeechService+AgentRuntime.synthesize_speech/transcribe_audiopipeline that streams Piper input and parses Whisper JSON off the main thread. - Editor plugin (
addons/local_agents/) that exposes chat, download, and configuration panels while remaining@toolfriendly. - Reusable controllers/services for chat, conversation storage, and project graph helpers written in idiomatic GDScript.
- Shell helpers for fetching third-party dependencies, running headless editor checks, and executing the addon’s GDScript test suites.
- Demo scenes (
ChatExample.tscn,Agent3D.tscn,GraphExample.tscn) that wire everything together without bundled art packs (bring your own textures or drop-in themes as needed).
- Enable the addon inside Godot:
Then open Project Settings → Plugins and toggle Local Agents.
godot --path . --editor - (Optional) Fetch third-party dependencies for the native runtime:
cd addons/local_agents/gdextensions/localagents ./scripts/fetch_dependencies.sh ./scripts/build_extension.sh - Stage speech/transcription runtimes when you need Piper or Whisper:
./scripts/fetch_runtimes.sh --all
- Open the editor bottom panel → Local Agents to configure model/inference settings and explore the Chat or Download tabs.
- Run demo scenes under
addons/local_agents/examples/to validate integration (ChatExample.tscn,GraphExample.tscn, orAgent3D.tscn).
- Configure a Piper voice under Configuration → Model or via
LocalAgentsModelParams.voice. The helperLocalAgentsRuntimePaths.resolve_voice_assetsnow normalizes bothres://and absolute voice bundles. - The chat panel and
LocalAgentsAgentdelegate speech toLocalAgentsSpeechService, which spins up worker threads and calls the nativeAgentRuntime.synthesize_speech/transcribe_audioAPIs so the editor no longer blocks at 80%. - Results surface through
speech_synthesized/job_failedsignals; raw dictionaries mirrorAgentRuntimeresponses (ok,output_path, optionaltext). - Direct GDS access is also available:
var service := LocalAgentsSpeechService.get_singleton() var result := service.synthesize({ "text": "Hello agents!", "voice_path": RuntimePaths.resolve_voice_assets("en_US-amy-high").get("model", "") })
scripts/fetch_runtimes.sh– fetch optional Piper/Whisper bundles via the runtime downloader.addons/local_agents/runtime/RuntimePaths.gd– shared lookup helpers for runtime binaries, default models, platform subdirs, and per-platform voice assets.addons/local_agents/tests/run_all_tests.gd– headless harness that runs the smoke/utility suites on every platform. Pass--include-heavy(or predefineLOCAL_AGENTS_TEST_GGUF) to opt into the runtime-heavy coverage, which uses the built-in download manager to fetch the 4-bitggml-org/Qwen3-0.6B-GGUFmodel when it is not cached locally.
Run the cross-platform harness with:
godot --headless --no-window -s addons/local_agents/tests/run_all_tests.gdBy default the harness skips the heavy runtime pass and finishes in a few seconds. Adding --include-heavy triggers an end-to-end verification that will:
- Use
LocalAgentsModelDownloadService+AgentRuntime.download_model()(llama.cpp’s downloader) to pullQwen3-0.6B-Q4_K_M.ggufintouser://local_agents/models/qwen3-0_6b-instruct/. - Reuse any existing Hugging Face cache (e.g.
~/.cache/huggingface/hub/models--ggml-org--Qwen3-0.6B-GGUF) before downloading. - Leave the model on disk so subsequent heavy runs are instant. The repo never tracks weights; the artifacts live under
user://or your HF cache only.
These model-aware helpers also power the runtime heavy test (test_agent_runtime_heavy.gd), so optional end-to-end runs stay aligned with the same downloader that the editor UI uses. Additional GDScript scenarios (test_conversation_store.gd, test_network_graph.gd, etc.) remain available for manual runs once the native extension is built.
Earlier releases bundled large cursor/icon/logo packs. Those files were removed to keep the repository lean; reference replacements from your own project if a scene references missing textures. The sample scenes and controllers now prefer plain text/buttons by default.
addons/local_agents/gdextensions/localagents/holds the native runtime (C++ headers, sources, and helper scripts).addons/local_agents/agent_manager/andaddons/local_agents/controllers/contain the editor/runtime singletons and UI mediators.addons/local_agents/graph/implements the NetworkGraph helpers and Tree-sitter style services for project exploration.ARCHITECTURE_PLAN.mddocuments the multi-agent stewardship expectations for this branch.
For historical notes, see docs/NETWORK_GRAPH.md and comments in the GDScript controllers. Contributions should stick to C++ or GDScript, and update the plan doc before introducing additional toolchains.