Skip to content

A day in a Space

One way through a piece of work with Spaces: pick the project, talk it over, hand the implementation to a worktree of its own, and put both away when it is done.

C-c c j (ecc-space-goto) asks which Space to go to. The list is not only what is open: every project you have ever started a session in is offered, because ecc reads the CLI’s recordings. A project you worked in last month, with nothing running and no tab, is one RET away. The open Spaces appear under Open, marked and numbered as in the sidebar, and those projects under Past, each marked past. The headings show in vertico and other completion UIs that read group-function, and in *Completions* with completions-group on. Type a name to narrow the list. The directory beside each name is not matched.

Picking one adds it to the sidebar and starts a session there.

The session opens beside the project’s source, and you work as usual: ask, read, answer. When the conversation turns into an implementation, move it out of this window.

Ask for a worktree — “cut a worktree and do it there” — and, with the Emacs MCP server on (ecc-mcp-enabled), Claude calls start_worktree_session. Emacs makes the worktree, opens it as a Space of its own under the repository, starts a session in it and hands that session the brief. The conversation you were in reports where the work went and carries on.

The worktree as a Space of its own: its tab beside the repository’s, its row under the repository in the sidebar, and its session running in it

When the implementation is done, kill the worktree session’s buffer. Its Space holds nothing else, so the Space closes and takes you back to the Space beside it, and ecc asks whether to remove the worktree’s directory as well. The branch stays either way.

Killing a buffer puts one worktree away. When several are finished, for example once their pull requests are merged, ask any session of the project to “remove the finished worktrees”. With the MCP server on, Claude checks each worktree of the repository and removes the finished ones without asking about each: their idle sessions stop, their Spaces close, and their branches stay. Files git ignores in them, such as node_modules, go too.

Claude then reports what it removed, and what it left and why. A worktree with uncommitted or untracked files, an unsaved buffer or an unsent draft, a branch not yet merged, or a session at work in it is left alone. Removing finished worktrees has the full rules and what a claude started outside ecc needs.