Everything that has shipped: the engine, the MCP server, the command line and the app.
Context15 September 2026v1.8.0
esfis 1.8 · spaces in the window, deliveries and a source for every item
Settings has a Spaces tab: you choose which agent sees which space and look at what each one received, without opening a terminal. And every item an agent stores carries that agent's name as its source, so that the next day another agent knows who decided it. How it works.
New
Who sees which space. For every space, and for personal context, each AI is set to “Has access”, “No” or whatever the general rule says. It is the same thing as esfis --allow and --deny.
Deliveries. The last fifty recall calls over MCP, with the agent, the space and the question. One click and out comes the esfis --why explanation.
The source is the agent.remember stores whoever called it (Claude Code, Codex, Cursor…) even when the client does not say so, and recall returns it with every item.
Details
esfis --why and the Test tab name what another space or a policy kept out and would have answered the question. The rest is still counted. It is scored while the explanation is being produced: the delivery itself never saw it.
Copilot is one more family in the policies (esfis --deny copilot acme).
App15 September 2026v1.7.0
esfis 1.7 · activity, a space per folder and Codex in Settings
Home has an Activity section: one row per project, from the one you touched most recently to the one you have left alone longest, with what you need in order to go back to it. And adding a folder now creates its space too, so that a project's context stays in the project from the first minute. How it works.
New
Activity, per project: files, when the last change was made, the Git branch, the open agents, the context items and decisions in its space, the sessions of the last 30 days and which agents ran them, the open tasks, the latest decision and where you left off.
One folder, one space. Adding a folder — and opening esfis for the ones already there — creates the project's space with that path. A space that already contains it, or that already has that name, is left alone.
Goals and technologies are context types now, alongside decisions and instructions. MCP accepts them and esfis --compile writes them into CLAUDE.md or AGENTS.md.
Codex in Settings › Connect your AI: codex mcp add esfis -- ~/.esfis/bin/esfis --mcp, and the Check button looks at ~/.codex/config.toml.
Tasks:⌥-click leaves the task typed in the terminal without pressing Return, and every task remembers which agent you sent it to.
Details
Activity is read in the background and without subprocesses: .git's HEAD, .esfis/feina.md and the logs Claude Code, Codex and Grok already leave on disk. Folders like node_modules and .build are not counted.
Who a task was sent to goes in a comment at the end of its line in feina.md, so the list is still ordinary Markdown.
App15 September 2026v1.6.1
Resizable tasks beside every agent
The to-do list is now called Tasks and it sits beside the agent that can deal with it. You can send it a task with one click, or tick it off when it is done, without losing your place in the terminal.
Details
The divider between the terminal and Tasks keeps the agent's colour, whether the panel is beside it or below it.
The divider is the native macOS control: it drags continuously, shows the resize cursor and respects a minimum useful size for both the terminal and the list.
Tasks are still stored inside the project, in .esfis/feina.md, so the lists you already had stay available. New files get the heading Tasques.
The usage panel only refreshes the logs while the Agents section is visible and esfis is in the foreground; removing a project from the list also frees its task cache.
App14 September 2026v1.6.0
The agents, inside esfis
The agent orchestrator is now a section of esfis. Claude Code, Codex, Copilot, Grok and Ollama each run in their own terminal, in a mosaic that splits like tmux, next to the memory they use. How it works.
esfis --usage --days 14
esfis agents --help
Details
The window fits in a quarter-screen column. Below 760 points, the section, the folder and the sessions move up into the title-bar row and the terminals take the full width. ⌃⌥⌘← and ⌃⌥⌘→ park it on one side.
Changing section stops no agent, and neither does closing the window. Quitting esfis does, and it asks first.
Sections are selected with ⌃⌘1 … ⌃⌘4; ⌘1 … ⌘9 jump to the panes.
The terminals run in the esfis colours: dark paper, light ink and a clay cursor.
The first time round, esfis carries over the orchestrator's settings: folders, providers, models, notifications and where you had the window.
Agent settings are one more tab in Settings (⌘,).
Context14 September 2026v1.5.0
Spaces, policies and a compiled CLAUDE.md
Every project or client now has its own space, and what is inside it stays inside. You decide which AI sees which space, you can check what each one received, and esfis can write your CLAUDE.md or AGENTS.md for you.
The space is checked before anything is searched: an item belonging to another client is never even scored, however much it looks like the question. An assistant's space comes from the folder it works in.
Policies win by specificity: this AI in this space, this AI everywhere, everyone in this space, everyone. An agent that cannot see a space cannot write to it either.
Every recall over MCP leaves a delivery behind with what went in, what stayed out and the reason. esfis --why explains it, and the Test tab shows it once you pick the assistant and the space.
--compile writes only what is active, current, stated outright and permitted, inside a marked block. Personal context stays out unless you ask for it, and --import-instructions is the way back.
valid_until (over MCP) or --until (from the terminal) stops an item being delivered the day after that date.
MEMORY.md carries personal context only, because every project reads it.
CLI12 September 2026v1.1.0
esfis --import brings in the memory you have already written
Assistants already store facts in files: one .md per fact, with frontmatter, inside ~/.claude/projects/<project>/memory/. Good items, but locked into the project they were written in.
esfis --import # ~/.claude/projects
esfis --import ~/notes ~/other/mem # or whichever folders you name
It takes every .md with a description: in its frontmatter and stores it; MEMORY.md files, which are indexes, are skipped. A type: feedback comes in as an instruction and the rest as facts.
Details
Every item remembers which file it came from (source: md:<name>): running it again duplicates nothing, and an edited file supersedes the old version instead of being added alongside it.
From an instruction, the description sentence is what gets stored, because it travels with every recall. From a fact, the whole body.
The vector always comes from the description: sentence embeddings blur out over a long text, and the body already carries weight on the lexical half.
App8 September 2026v1.0.0
esfis 1.0
The first stable version. The macOS app, the command line and the MCP server are the same binary: ./build-app.sh produces Esfis.app and leaves ~/.esfis/bin/esfis behind, which is what the assistants call.
New
One window and three tabs: Watch (paste in a conversation and the model pulls the items out of it), Remember (look at what it knows about you, and delete it) and settings, with the API key in the keychain.
Commands: --recall, --add, --list and --mcp.
Not yet
Sync between devices: the store does not leave the machine.
Linux and Windows: the vectors come from the models macOS ships with.