ForgePilot is an Electron desktop agent workspace for local and hosted LLMs. It provides a Codex/Cursor-style chat UI, a multi-provider runtime, built-in file and terminal tools, MCP support, web research tools, and document ingestion for PDFs and office files.
The core design goal is simple: even if a model does not support native tool calling, the app can still run tools through an emulated agent envelope and continue the same workflow.
- Added a scalable localization layer with a 5-language core:
- English
- Turkce
- Deutsch
- Espanol
- Russkiy
- Added
browser_fetchas a browser-backed research tool for blocked or JS-heavy pages - Improved
web_searchandweb_fetchreliability:- DuckDuckGo redirect unwrapping
- inaccessible-result filtering
- result-aware fetch flow using discovered search results
- stricter runtime guards against hallucinated URLs
- better timeout and network error handling
- Added thread-level attachment reuse and visible document shelf support in the UI
- Added richer research UX:
- source cards under research-heavy answers
- live activity phases
- diagnostics footer
- progress/debug report export from Help/About
- Improved provider and session error handling so common configuration issues surface as UI notifications instead of noisy console failures
- Expanded cross-platform packaging and CI workflows for Windows, macOS, and Linux artifacts
- Multi-provider runtime
- Ollama
- OpenAI
- Anthropic
- OpenAI-compatible APIs such as LM Studio, OpenRouter, Groq, Together, DeepSeek, vLLM, and LocalAI
- Native tool calling when a provider supports it
- Emulated tool calling when a model does not support tools natively
- Workspace-scoped permissions
read_onlyaskfull_access
- Built-in tools
fs_listfs_readfs_writefs_patchfs_mkdirfs_deletesearch_textrun_commandweb_searchweb_fetchbrowser_fetch
- MCP server support from Settings
- Stdio plugin support
- Conversation search palette
- Persistent threads, settings, and runtime state
- Multi-language UI with English default
entrdeesru
- Attachment reuse across a thread
- Cross-platform packaging targets
- Windows x64 portable
- macOS x64 + arm64
- Linux x64 AppImage + deb
- Document extraction for:
pdfdocxxlsxpptxodtodsodp
- Custom top chrome with app-style controls
- Composer with provider, permission, model, and attachment controls
- Live progress feed for tool execution
- Live activity phases such as searching, fetching, reading, analyzing, and waiting approval
- Approval flow for risky tools in
askmode - Change summary cards after file edits
- Thread attachment/document shelf for reusing previously added files
- Source cards for research-heavy answers
- Exportable progress/debug reports from Help and About
- Structure-first web fetch with title, description, heading outline, and link previews
src/
core/
agent/ Agent loop, tool orchestration, approvals, context management
providers/ Ollama, OpenAI-compatible, Anthropic, provider registry
tools/ Filesystem, command, search, web, document extraction
mcp/ MCP stdio integration and registry
plugins/ Stdio plugin loading
main/
main.js Electron main process and IPC
preload.js Safe renderer bridge
session-service.js
Session lifecycle, persistence, provider/model management
renderer/
app.js Main UI
styles.css Main styles
test/
unit and runtime behavior tests
plugins/
echo/ Example stdio plugin
- Node.js
>= 24 - Electron
^35 - Ollama for local Ollama sessions
- Python 3 for structured document reading from PDFs and office files
- Python packages from
requirements-docs.txtfor PDF and Office extraction - Optional API keys for hosted providers:
- OpenAI
- Anthropic
- Any OpenAI-compatible endpoint that requires authentication
- Windows
x64 - macOS
x64andarm64 - Linux
x64
Kali Linux is covered through the Debian-style deb package target.
Install dependencies:
npm installInstall document-reading Python dependencies:
python -m pip install -r requirements-docs.txtStart the app:
node --run startRun tests:
node --testBuild for the current Windows host:
npm.cmd run build:winBuild on macOS:
npm run build:macBuild on Linux:
npm run build:linuxExpected artifacts:
ForgePilot-<version>-win-x64.exeForgePilot-<version>-mac-x64.dmgForgePilot-<version>-mac-arm64.dmgForgePilot-<version>-linux-x64.AppImageForgePilot-<version>-linux-x64.deb
The repository includes GitHub Actions workflows for native multi-platform validation and packaging:
.github/workflows/ci.yml- runs
node --teston Windows, macOS, and Ubuntu
- runs
.github/workflows/release.yml- builds native artifacts on:
windows-latestmacos-latestubuntu-latest
- builds native artifacts on:
This is the recommended path for final macOS and Linux release artifacts, since electron-builder only supports macOS packaging on macOS and Linux distributables are most reliable on a native Linux runner.
- Best for local workflows
- Supports both native and emulated tool loops
- Make sure the Ollama service is running before opening a session
- Add API credentials in
Settings > General - Model refresh now reports missing credentials in the UI instead of crashing
Use this for local or hosted endpoints that expose an OpenAI-style API surface. Examples:
- LM Studio
- OpenRouter
- Groq
- Together
- DeepSeek
- vLLM
- LocalAI
You can add stdio MCP servers from Settings > MCP.
For each server you can configure:
- Name
- Command
- Arguments
- Working directory
- Environment variables
Once connected, discovered MCP tools become available to the agent runtime just like built-in tools.
Files added in a conversation are copied into a session attachment area so the agent can reuse them in later turns. This includes documents outside the current workspace.
The runtime supports:
- Re-reading previously attached files
- Resolving attachment aliases and filename-only references
- Extracting readable text from PDFs and office documents
- Showing reusable thread attachments in the renderer
- Including richer document metadata in progress summaries when available
ForgePilot includes two built-in web tools:
web_searchweb_fetchbrowser_fetch
web_fetch follows a structure-first approach inspired by browser automation tools such as FSB: besides plain text, it returns the page title, meta description, canonical URL, heading outline, and a compact link preview list. That gives weaker local models more reliable page context than a raw text dump alone.
browser_fetch is the heavier fallback path for pages that are blocked, highly dynamic, or incomplete through a normal fetch. The research runtime now prefers exact discovered search results and applies stronger guards against hallucinated URLs in emulated tool mode.
To run the real Ollama acceptance flow:
$env:RUN_OLLAMA_ACCEPTANCE='1'
node --test test/ollama-acceptance.test.js- Hosted provider support depends on the target endpoint correctly implementing its API contract
- Some weaker local models may still overuse search or produce unstable tool envelopes
- macOS and Linux packaging should be generated on their native host OS for the most reliable release artifacts
- UI is optimized for desktop usage first
- State is persisted locally between restarts
- Running tool traces are cleaned up on stop and app shutdown
- Renderer notifications are used for provider and runtime errors instead of console-spam for common user-facing issues
- Research runs now require at least one successful fetched source before final write-heavy output is accepted in web research flows
- Progress export can be used to inspect web/tool behavior when debugging model decisions