[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-96016":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":14,"contributorsCount":9,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":16,"hasPages":16,"topics":9,"createdAt":9,"pushedAt":9,"updatedAt":18,"readmeContent":19,"aiSummary":20,"trendingCount":14,"starSnapshotCount":14,"syncStatus":21,"lastSyncTime":9,"discoverSource":22},96016,"funes","huggingface\u002Ffunes","huggingface","Durable, searchable memory of your past agent sessions.",null,"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ffunes","Rust",231,12,0,40.34,false,"main","2026-09-20 04:01:32","# funes\n\n**Durable memory for your AI coding agents.** `funes` indexes your past sessions across Claude\nCode, Codex, pi, and Hermes and lets any agent recall the past decisions, rationale, and findings.\nYour memory is a dataset you can publish to the Hugging Face Hub — then any machine, teammate, or\nagent can recall from it.\n\n![Asking a published memory why funes is append-only; funes recalls the relevant sessions and a coding agent answers, grounded, naming its sources](docs\u002Fimg\u002Fask.gif)\n\n*Put a question to a memory and borrow a coding agent to answer it: funes recalls the relevant sessions, hands them over, and you get one grounded answer that names the sessions it drew from — nothing installed. Here it reads the public `huggingface\u002Ffunes-memory` dataset named right in the command.*\n\n## Features at a glance\n\n- **Your agent recalls your past work.** The model spontaneously uses `funes` to recall prior decisions, rationale, and findings mid-task.\n- **One memory across your agents.** Index Claude Code, Codex, pi, and Hermes into a single memory;\n  recall spans all of them, and every hit shows which agent it came from.\n- **Your memory is a Hugging Face dataset.** Publish it to the Hugging Face Hub; a teammate,\n  another of your machines — or anyone, if you make it public — recalls from it with one flag.\n\n![A coding agent, mid-task, reaches for funes on its own and recalls from the public huggingface\u002Ffunes-memory dataset, then answers grounded, naming the session it drew from](docs\u002Fimg\u002Frecall.gif)\n\n*And it happens on its own: with funes added, your agent reaches for `recall` mid-conversation — no command to run. Here it recalls to answer a question about funes's own design, grounded, naming the session it drew from.*\n\n## Get funes\n\nThe [installer](scripts\u002Finstall.sh) detects your platform, downloads the matching prebuilt binary,\nverifies its tagged release checksum and version, and puts it on your PATH (`~\u002F.local\u002Fbin` by\ndefault):\n\n```bash\ncurl -fsSL https:\u002F\u002Fhuggingface.co\u002Fbuckets\u002Fhuggingface\u002Ffunes\u002Fresolve\u002Finstall.sh | sh\n```\n\nThen add it to your agent:\n\n```bash\nfunes add claude    # or codex, pi, hermes\n```\n\nOne command onboards you: your agent gets `recall` and `get` as tools, and — for Claude, Codex, and\nHermes — funes builds your first index, installs a hook that keeps it current every turn, and (with a\nmemory bound) publishes at each session boundary. From here you just work. See\n[docs\u002Fadd.md](docs\u002Fadd.md) for the agents, memory binding, and what a run does; `funes status` tells\nyou whether recall is reading your own memory yet.\n\nTagged binaries and their `SHA256SUMS` manifest are also available in the\n[release bucket](https:\u002F\u002Fhuggingface.co\u002Fbuckets\u002Fhuggingface\u002Ffunes):\n\n| Platform | Binary |\n| --- | --- |\n| Linux x86_64 | `funes-x86_64-linux` |\n| Linux aarch64 | `funes-aarch64-linux` |\n| macOS Apple Silicon | `funes-arm64-apple-darwin` |\n\nThe checksum detects corrupt, truncated, or mismatched release downloads. Because the binary and\nchecksum share the same bucket, it does not authenticate the bucket itself.\n\nAlready installed? **`funes update`** replaces the binary in place with the latest build for your\nplatform (`--force` reinstalls the current one); `funes status` tells you when a newer release is\nout. To build it yourself, see [Building from source](#building-from-source).\n\n## Works across your agents (and models)\n\nYour memory isn't tied to one tool. Because Claude Code, Codex, pi, and Hermes all index into a single\nmemory, you can **switch agents without losing anything** — start a task in Claude Code, pick it up\nin Codex next week, and each one recalls the *entire* history, not just its own sessions (every hit\nshows which agent it came from). Another agent can join through a compatible `.parquet` trace\nexport; [the import contract](docs\u002Findex.md#parquet-trace-format) defines the required schema.\n\nModels work the same way. funes runs pinned local embedding and reranking models, but no generative\nmodel of its own: you reason with whatever your agent uses — through **pi**, any local model or one\nserved through the Hugging Face router. Switch models between sessions and the memory doesn't move.\n\n## Your memory on the Hub\n\nYour local memory is a dataset, and it shares the way one does: publish it to a Hugging Face\n**dataset** repo you own and it becomes an artifact on the Hub like any model or dataset — owned by\nyour account or org, gated by your token, readable by whoever you say. Not just the code of a\nproject, but the *process* behind it — the decisions, dead ends, and rationale — becomes something\nan agent can recall.\n\nDataset repositories created by funes are **private by default**. Existing repositories retain their\ncurrent visibility, and making a funes-created memory public is a deliberate change on the Hub.\n\nBind a memory when you add funes to an agent and it recalls from there and keeps it current on its\nown; or run the two commands directly:\n\n```bash\nfunes push \u003Cuser|org>\u002Ffunes-memory                    # publish your local memory's new chunks\nfunes recall \"...\" --memory \u003Cuser|org>\u002Ffunes-memory   # read any remote memory for one call\n```\n\nThat second form is how you read **someone else's** published memory on a topic, without touching\nyour own setup. Publishing is guarded: funes redacts credentials at index time, and a separate,\nalways-on gate refuses to push any chunk that still contains a secret. And because a published memory\nis just a dataset, you can try recall **right now**, before indexing anything of your own:\n\n```bash\nfunes recall \"why is funes append-only\" --memory huggingface\u002Ffunes-memory\n```\n\nAnd to get an **answer** rather than ranked passages, borrow an agent for one question — nothing\ninstalled:\n\n```bash\nfunes ask claude \"why is funes append-only\" --memory huggingface\u002Ffunes-memory   # or: funes ask codex\n```\n\nSee [docs\u002Fpush.md](docs\u002Fpush.md) for publishing, the secrets gate, selecting what to publish, and\ninspecting a memory; [docs\u002Fask.md](docs\u002Fask.md) for grounded answers;\n[docs\u002Fhub-caching.md](docs\u002Fhub-caching.md) for how remote recall caches to local speed.\n\n## Commands\n\n`funes add` wires all of this into your agent; each command is also usable on its own. Browse the\nworkflow-oriented [documentation index](docs\u002FREADME.md) for the complete guides.\n\n| Command | Docs |\n| --- | --- |\n| `funes add \u003Cagent> [memory]` \u002F `funes remove \u003Cagent>` \u002F `funes mcp [memory]` | [docs\u002Fadd.md](docs\u002Fadd.md) — supported agents, integration lifecycle, generic MCP clients, hooks, and memory binding |\n| `funes index [path]` | [docs\u002Findex.md](docs\u002Findex.md) — build\u002Fupdate the memory; sources, incremental, flags |\n| `funes recall \"…\"` \u002F `funes get …` | [docs\u002Frecall.md](docs\u002Frecall.md) — recall passages and drill into them |\n| `funes sessions` \u002F `funes sketch …` \u002F `funes scan …` | [docs\u002Fsessions.md](docs\u002Fsessions.md) — list sessions, digest one, find a literal in one |\n| `funes ask \u003Cagent> \"…\"` | [docs\u002Fask.md](docs\u002Fask.md) — borrow an agent for a grounded answer |\n| `funes push \u003Cmemory>` (+ `scrub`, `status`) | [docs\u002Fpush.md](docs\u002Fpush.md) — publish and share a memory |\n| `funes update` | [installation and updating](#get-funes) — replace the installed binary with a verified release |\n\nThe per-turn indexing and session-boundary publishing the hooks run are detailed in\n[docs\u002Fautomation.md](docs\u002Fautomation.md).\n\n## How it works\n\n`funes add` runs one loop: **index** what you've done, **recall** it when it matters — and index what\nyou just did, so it's recallable next time. Both halves are one deterministic pipeline: each source\nis parsed into a generic turn\u002Fblock shape, chunked, embedded with a pinned local model, and written to\na local Lance dataset; recall fuses vector + BM25 search, reranks, and reweights by recency. Because\neverything downstream of parsing is source-agnostic, adding an agent means implementing one\n[`TraceSource`](src\u002Fsource.rs) trait — not touching the indexing or query path.\n\n`funes` shapes its output for agents, not people — so to put a question to a memory yourself, borrow\nan agent: `funes ask` recalls from the memory and answers grounded in what it finds, installing\nnothing. `funes recall` prints the raw ranked passages behind an answer, and `funes get` reassembles\nany cited turn in full.\n\n- [docs\u002Findex.md](docs\u002Findex.md) — the indexing pipeline, tiers, and incremental behavior.\n- [docs\u002Frecall.md](docs\u002Frecall.md) — retrieval, drill-down with `get`, and reading a shared memory.\n- [docs\u002Fsessions.md](docs\u002Fsessions.md) — browsing a memory by session: `sessions`, `sketch`, `scan`.\n- [docs\u002Fask.md](docs\u002Fask.md) — borrow an agent for a grounded answer, nothing installed.\n- [docs\u002Fautomation.md](docs\u002Fautomation.md) — the per-turn hooks that keep it all fresh.\n\n## Building from source\n\nNeeds a Rust toolchain and **`protoc`** — `lance`'s build scripts compile protobuf at build time\n(the finished binary does not need it). Install it one of two ways:\n\n```bash\n# System-wide:\nsudo apt-get install -y protobuf-compiler   # Debian\u002FUbuntu\nbrew install protobuf                        # macOS\n\n# …or repo-local, no sudo (downloads a pinned protoc into .tools\u002F):\n.\u002Fscripts\u002Fbootstrap-protoc.sh\nexport PROTOC=\"$PWD\u002F.tools\u002Fprotoc\u002Fbin\u002Fprotoc\"\n```\n\nThen `cargo build --release` (binary at `target\u002Frelease\u002Ffunes`); `cargo test` runs the suite. The\nintegration test downloads the embedder\u002Freranker weights on first run.\n\nInference (embedding + reranking) runs on a built-in backend — Accelerate on macOS, pure Rust on\nLinux — so the default build has no ML runtime dependency and runs on any glibc ≥ 2.35 (Ubuntu\n22.04). An ONNX Runtime backend is available as an opt-in variant:\n\n```bash\ncargo build --release --no-default-features --features onnx   # ONNX backend instead\ncargo run --release --features onnx --example bench_backends  # A\u002FB both backends\n```\n\n## Notes\n\n- **Embedding model is pinned** and stamped into the memory; querying with a different embedding\n  model is refused. To change it, rebuild from the transcripts (the memory is a disposable derived\n  artifact — the raw text is retained in every row). This is separate from the model you *reason*\n  with, which is free to change.\n- **Subagent transcripts** (`...\u002Fsubagents\u002Fagent-*.jsonl`) are indexed too.\n\n## Why funes\n\n> *\"To think is to forget differences, generalize, make abstractions.\"*\n> — Jorge Luis Borges, *Funes the Memorious*\n\nWhy `funes` is built the way it is — and how it compares to other memory tools — is documented in\n[docs\u002FRATIONALE.md](docs\u002FRATIONALE.md).\n\n## License\n\n`funes` is licensed under the [Apache License 2.0](LICENSE).\n","funes 是一个为 AI 编程智能体（coding agents）提供持久化、可检索记忆的工具。它支持将 Claude Code、Codex、pi、Hermes 等多种编码代理的历史会话（含决策、推理过程与发现）统一索引，并以 Hugging Face 数据集形式存储与发布，实现跨设备、跨团队、跨代理的共享回忆。核心特点是自动触发 recall（无需显式指令）、附带来源标注的上下文增强回答，以及基于 Rust 实现的轻量高效本地二进制部署。适用于需要长期知识沉淀、团队协同开发、AI 代理持续学习与可追溯性验证的研发场景。",2,"trending"]