待翻譯:Show HN: Feral – one local brain with memory for your devices and apps
AI 服務暫時不可用,以下為來源摘要,待恢復後補全翻譯:Uh oh! There was an error while loading. Please reload this page. Notifications You must be signed in to change notification settings Fork 50 Star 124 BranchesTags Open more actions menu Latest commit History 1,025 Comm…
AI 服務暫時不可用,以下為來源正文,待恢復後補全翻譯。
Uh oh! There was an error while loading. Please reload this page. Notifications You must be signed in to change notification settings Fork 50 Star 124 BranchesTags Open more actions menu Latest commit History 1,025 Commits 1,025 Commits Folders and files NameName Last commit message Last commit date .github .github benchmarks benchmarks desktop desktop dev dev docs docs examples/apps examples/apps feral-client-v2 feral-client-v2 feral-core feral-core feral-extension feral-extension feral-ha-addon feral-ha-addon feral-nodes feral-nodes feral-registry feral-registry feral-relay feral-relay ops ops packages/feral-demo-data packages/feral-demo-data registry registry scripts scripts sdk sdk templates templates .env.example .env.example .gitignore .gitignore .python-pin .python-pin AGENT_INSTALL.md AGENT_INSTALL.md AUDIT-FIXES.md AUDIT-FIXES.md CHANGELOG.md CHANGELOG.md CLAUDE.md CLAUDE.md CODE_OF_CONDUCT.md CODE_OF_CONDUCT.md CONTRIBUTING.md CONTRIBUTING.md Dockerfile.sandbox Dockerfile.sandbox Dockerfile.sandbox-browser Dockerfile.sandbox-browser Dockerfile.sandbox-common Dockerfile.sandbox-common LICENSE LICENSE Makefile Makefile NOTICE NOTICE README.md README.md RESUME-HERE.md RESUME-HERE.md SECURITY.md SECURITY.md SPIKE-TYPESCRIPT.md SPIKE-TYPESCRIPT.md WORK-ORDER.md WORK-ORDER.md docker-compose.yml docker-compose.yml feral-banner.png feral-banner.png flake.nix flake.nix peep.mp3 peep.mp3 Repository files navigation FERAL runs on your machine. It connects software and hardware, keeps long-lived memory, learns your baseline, and executes with explicit control. Public beta — macOS & Linux. Contribute · File an issue · @FeralAi67724 Quick Start · Pairing · What Works · Architecture · Develop · Contribute What FERAL Is FERAL is a local-first runtime that sits between your software and your physical devices. You run it on your own machine and reach it from a browser, a phone, the CLI, or your own integrations. What's inside: 4-layer memory — working context, episodic events, semantic / graph retrieval, and execution history. Baseline learning — rolling metrics and anomaly / trend detection for what "normal" looks like for you. Policy-gated execution — approvals, time windows, and daily caps gate every action that touches the outside world. Server-driven UI (Gen-UI) — the brain emits structured UI payloads; clients render them. Third-party apps ship contracts, not freeform frontends. Reviewed extension registry — community skills and apps go through reviewer approval before they're installable. It ships as feral-core (the brain runtime), feral-client-v2 (web control surface), and feral-nodes (device and hardware bridges). Quick Start Requires Python 3.11+ with SQLite FTS5 on macOS 13+ or modern Linux (Ubuntu 22.04+, Fedora 40+, Arch). Windows is not supported as a host yet, use WSL2. Almost every interpreter has FTS5, but not all: python-build-standalone 3.11.13, for example, ships SQLite 3.49.1 without it. FERAL's memory store creates FTS5 tables at boot, so it refuses to start on such an interpreter with a message naming it. Run feral doctor if you are unsure: it reports FTS5 and loadable-extension support as two separate rows. Recommended: one-line install curl -sSL https://raw.githubusercontent.com/FERAL-AI/FERAL-AI/main/scripts/install.sh | bash This creates a virtualenv at ~/.feral-env, installs feral-ai with all extras, runs the first-run setup wizard, and starts the brain. When it's done, open http://localhost:9090. Alternative: install from PyPI pip install "feral-ai[all]" feral setup feral start Or install with your coding agent If you have Claude Code, Cursor, Codex or similar and would rather not use a terminal directly, AGENT_INSTALL.md has a prompt to paste into your agent. It installs FERAL, walks you through setup, and then verifies the result rather than assuming it worked: it checks the interpreter for FTS5 before installing (the usual reason an install looks fine and the brain then will not start), and reads feral doctor back to you at the end. Upgrading feral update That is the recommended path. It upgrades the Python environment that is actually running the brain (sys.executable, not whatever pip your PATH resolves first), prints which environment that is before touching it, and restarts the brain afterwards so the new code is the code that serves. It refuses rather than half-works: a source checkout is sent to git pull instead of pip, and a brain running under a different interpreter than the CLI is reported rather than skipped. feral update --check reports what it would do and changes nothing. By hand, the same thing is two commands: pip install --upgrade "feral-ai[all]" feral restart The restart is not optional. A running brain holds its code in memory from the moment it started and never reloads it, so upgrading the package on disk does not change a process that is already serving. The install succeeds, nothing errors, and the old build keeps answering as if nothing happened. This is easy to miss for days. feral doctor has a Running version row that compares the version this process is executing against the version installed on disk, and warns when they differ. GET /api/dashboard carries the same answer under runtime. Neither contacts the network; both compare what is already on the machine. If you installed with the one-line installer, the brain lives in ~/.feral-env, so upgrade with that environment's pip: ~/.feral-env/bin/pip install --upgrade "feral-ai[all]" feral restart Check which install you are actually upgrading with which feral. More than one Python environment on a machine can each hold their own copy, and upgrading the one that is not running is the common mistake. feral update exists because of that mistake: one operator ran the upgrade against the wrong environment and served stale code for two days believing they were current. Checking for new releases (off by default) FERAL does not contact PyPI unless you ask it to. Nothing in the boot path, and nothing on any request path, opens a connection to check for releases; the version rows described above compare two things that are already on your machine. feral update asks the index when you run it, because running it is the request. If you also want the brain to notice new releases on its own, turn the check on: export FERAL_UPDATE_CHECK=1 # or "updates": {"check_pypi": true} in ~/.feral/settings.json With it on, the brain asks pypi.org once a day on a background task (never on a request), caches the answer under ~/.feral/update-check.json, and reports it as an Update check row in feral doctor and as update on GET /api/dashboard. updates.ttl_hours (or FERAL_UPDATE_CHECK_TTL_HOURS) changes the interval, and FERAL_PYPI_JSON_URL points the check at an internal mirror. If the network is unavailable the answer is unknown; it is never an error and never blocks anything. The brain will not upgrade itself. An upgrade replaces the code of the process that would have to perform the restart, so it stays an operator command. What feral setup walks you through feral setup is an arrow-key wizard (↑/↓ to navigate, enter to pick the highlighted row): LLM provider — OpenAI, Anthropic, Gemini, Groq, DeepSeek, OpenRouter, Ollama, LM Studio — with masked API key paste, and the key probed before you move on. Model — type to filter through hundreds of model ids, then a one-token round-trip confirms the id actually works. Speech in / out — realtime or chained, cloud or fully local. Identity + personality — who you are, and how the agent should talk to you. Capabilities — vision, proactive nudges, streaming, multi-agent, autonomy tier, and which folders the file tools may touch. Network access — localhost (default), LAN so phones on the same Wi-Fi can pair, or Tailscale Funnel for free public DNS pairing from anywhere. Optional — Google / Notion / Spotify / Microsoft 365 / Gmail, Home Assistant, search + weather keys, messaging channels. Catalog providers without a runtime adapter in this build (Bedrock, Together, Fireworks) are not offered; point llm.base_url at an OpenAI-compatible gateway to use them. You get a local brain on port 9090, the bundled web UI, and a local config under ~/.feral/ (settings + an encrypted vault for keys). Use an existing ChatGPT sign-in through Codex FERAL can use the Codex CLI's managed ChatGPT login without extracting OAuth tokens or treating them as an OpenAI API key: npm install -g @openai/codex codex login feral setup # choose "Codex (ChatGPT sign-in)" The adapter talks to codex app-server --stdio, discovers the models available to the signed-in account, and supports normal and streaming text turns. The app-server interface is experimental, and FERAL tool schemas are not yet bridged to Codex dynamic tools. Codex starts in read-only mode by default; set FERAL_CODEX_SANDBOX=workspace-write only when that is the intended execution boundary. danger-full-access additionally requires FERAL_CODEX_ALLOW_DANGEROUS_SANDBOX=1. Codex runs with approvalPolicy: "never", so that mode lets it execute commands that never pass FERAL's dangerous-tool gate. Two settings rather than one, so a copied .env cannot hand out unrestricted execution on its own. Any value that is unset, misspelled, or not opted in falls back to read-only with an error in the log; it never stops the brain from starting. FERAL_CODEX_PATH, FERAL_CODEX_CWD, and FERAL_CODEX_TIMEOUT_SECONDS override the executable, working directory, and turn timeout. Useful CLI commands feral serve # headless brain only (no chat / no client) feral status # runtime status feral doctor # diagnostics — what's reachable, what needs setup feral access status # current pairing / network mode feral key add # add or rotate a credential without re-running setup feral memory status # backend, knowledge graph counts, decay schedule feral sync status # federated peers + per-peer lag + last-sync clock Pair Your Phone FERAL exposes three pairing modes: Mode UI label Best for Requirement localhost This Mac only No phone pairing yet None local Same WiFi Phone and brain on the same network Brain reachable on LAN remote Anywhere Pair from outside your LAN Tailscale installed, Funnel enabled Same WiFi In setup, choose Same WiFi. Open Devices → Pair new device → Web phone. Click Generate one-time link and scan the QR from your phone. If PIN is enabled, enter the 4-digit PIN shown on the Mac. If the LAN URL is unreachable from your phone, restart the brain on all interfaces: FERAL_HOST=0.0.0.0 feral start Anywhere (Tailscale) Setup attempts this automatically when you choose Anywhere. You can also manage it later in Settings → Access. In setup, choose Anywhere. If setup reports a tunnel error, run: feral access remote-up Complete any Tailscale prompts (tailscale up, Funnel enable URL). Generate a new pairing link from Devices and scan it from anywhere. Check status any time: feral access status. Disable with feral access remote-down. This Mac only Use this if you just want the local dashboard and chat, no phone yet. What Works Today FERAL is in public beta. Single-user local deployment is the primary target — multi-user / HA is not in scope yet. Here's what an operator can rely on, in plain language: Chat, memory, and orchestration — the core agent loop, the 4-layer memory store, and federated sync between brains are stable for day-to-day use. Setup and CLI control — the wizard, feral start, feral doctor, feral memory, feral sync, and feral access reflect real runtime state, not aspirat [truncated for AI cost control]