A local-first, self-hosted Linux file manager for mounted disks. FileSage manages real directories, resumes large uploads, and lets you review AI-proposed file operations before they run.
The release workflow publishes verified Linux amd64 packages from version tags. See current status, acceptance evidence, and GitHub Releases.
- Browse, search, filter, upload and organize files in their native directory structure. Mount additional disks beneath the configured root; folders remain the only categories.
- Resume interrupted uploads (20 GiB per file and 20 GiB total staging by default; both configurable), download original files, and create or inspect supported archives.
- Read common image, audio, video, PDF, text, Markdown, Office, spreadsheet, EPUB and archive formats in the browser. Unsupported or complex files remain available for download.
- Ask an OpenAI-compatible model to clarify a task, then review the complete
plan before it runs. Continue with follow-up tasks in the same saved
conversation, including after a refresh.
bypasspermissionis on by default and runs steps in order; turn it off in Agent settings to run one step at a time. Expand a step to inspect its command, exit code, bounded output and file diff, then check the audit history. Bounded Shell output is retained in the task record and can inform the next turn in the same conversation. - Keep SQLite task and search metadata outside the managed files. The filesystem remains the source of truth.
Requirements: Linux, Go 1.27.3 or newer, Node.js 24 and npm. Optional system tools enable formats and operations such as Office conversion, OCR, video posters and 7-Zip archives; see deployment.
cd web
npm ci
npm run build
cd ..
go build -o ./filesage ./cmd/filesage
mkdir -p "$HOME/FileSageFiles" "$HOME/.local/state/filesage"
export FILESAGE_ROOT="$HOME/FileSageFiles"
export FILESAGE_DATA_DIR="$HOME/.local/state/filesage"
export FILESAGE_WEB_DIR="$(pwd)/web/dist"
export FILESAGE_LISTEN_ADDR="127.0.0.1:8080"
./filesageOpen http://127.0.0.1:8080. FILESAGE_ROOT must already exist and
FILESAGE_DATA_DIR must be outside it. The default listener is loopback. For
LAN access, bind only to a trusted private interface and configure the host
firewall. FileSage has no login or password.
go test -count=1 ./...
go vet ./...
go build ./...
cd web
npm ci
npm test
npm run typecheck
npm run build
npx playwright install chromium
npm run e2eThe browser test uses a local mock model and temporary files/database. GitHub Actions also runs race detection, vulnerability scanning and a Linux package smoke test.
Report a reproducible bug or suggest an improvement through GitHub Issues. Do not post secrets, private file contents or exploitable security details there; see the security reporting guide for private reports.
FileSage is intended for a trusted personal network. It does not authenticate users or provide HTTPS termination. Anyone who can reach it can browse and change managed files, change the Agent approval mode, create and approve tasks, and consume the configured model quota. Keep it on loopback or a trusted LAN; do not expose it to the internet or an untrusted network. Agent chat messages are sent to the configured model as you converse. File-analysis tools read and send file contents only after you confirm an analysis card; review its listed data types first. Shell does not read file bodies automatically. After you confirm a Shell run, stdout and stderr are stored locally (up to 16 KiB per stream). The next turn sends the confirmed command, scope, working directory, execution status, bounded output and changed paths, types and statuses to the configured model as untrusted evidence. Command output may contain file contents or other sensitive information. See the Agent API notes.
FileSage-authored code and documentation are licensed under the MIT License. Third-party assets and dependencies retain their own terms; see third-party notices. The public repository contains research summaries, source links and collection tools; locally collected upstream documents are excluded.