Features
Presence is always on. Five modules switch independently, per machine with a per-repo override, and a fresh install starts with presence alone.
fibers is six units. Presence is the floor: the board, the row for every session, the session-start digest, and fibers doctor. It is on whenever the plugin is installed. The other five are switches.
| Module | What it owns |
|---|---|
work |
claim, log, release, bump, work, catchup, retire, pr refresh |
messages |
msg, and deliveries into a session at its next hook touchpoint |
decisions |
decide, decisions, sync |
friction |
local friction capture on tool failures, the friction verbs, and the two friction skills |
areas |
areas backfill, areas ls, areas show: which parts of the repo its pull requests and sessions touch. At the end of each turn a session records the files changed in its worktree since it started (measured from where its branch meets the default branch, once that has been merged in) in ~/.fibers/session-paths/ on this machine, where they are kept until you delete them, and sends only its labels. Off by default |
See and change them
fibers features
fibers features on work
fibers features off friction
fibers features on decisions --repo
The first prints each module, on or off, and which file decided it. The next two write ~/.fibers/config.json. The last writes a features key into this repo’s .fibers.json, which overrides the machine setting for this repo only, so a team can say “decisions on here” without touching anyone’s machine. Only fibers features changes a setting. The first fibers login, fibers register or desktop app sign-in on a machine also creates the config file, once, with every module off. After that one-time default, hooks, the service and the desktop app never write either file.
Defaults
A fresh install turns on presence only, whichever way you signed in: the terminal or the desktop app. fibers login and fibers init end by listing the modules with the command that turns each on. A machine that already had fibers before this existed has no config file, and no config file means everything is on, so nothing changed for it. The exception is areas, which is off until a machine or repo turns it on.
What off means
A verb in an off module prints one line and exits 1: which module, which file turned it off, and the exact command to turn it on. fibers --help hides the verbs of off modules and, when any are off, ends with one line naming them and pointing at fibers features. Hooks skip an off module’s work silently: with friction off nothing is captured, with messages off nothing is delivered into a session. One exception: a human nudge the service had already queued for a session is still printed at session start, so it is never lost silently. Registration, heartbeat, stop and the board never depend on a switch.
A module being off is a fact about your machine. It is never sent anywhere.
Presence options
Presence itself cannot be turned off, but two things it prints at session start can be muted on your machine:
fibers features off digest
fibers features off update-notice
digest is the board summary (who needs you, what is active). update-notice is the line saying a newer fibers release is out. Both write a presence key in ~/.fibers/config.json; fibers features on <option> brings it back. They are per machine only: --repo is refused, because a checked-in file should not silence everyone’s digest. Scripts and tests can mute either for one process with FIBERS_NO_DIGEST=1 or FIBERS_NO_UPDATE_CHECK=1.
Local mode
Available from fibers 0.10.1. Local mode runs fibers on one machine with no account and no service, and it is the quickest way to try it: see install the plugin.
fibers mode local
fibers mode hosted
The first writes "mode": "local" into ~/.fibers/config.json; the second removes it. Only that command sets it: a missing sign-in does not, and a repo’s .fibers.json cannot.
In local mode the hooks write each session’s start, heartbeats, questions, compactions and stops to a log on your machine, ~/.fibers/presence/, one file per day. fibers ls, fibers events and the session-start digest read that log, so you still see which sessions are running and which need you. Status is worked out when you look, as it is on the service.
What needs an account says so and exits 1: work, messages and decisions, login, register, init and friction fix, and desktop resume given a work ref. login, register and init also leave --help. Friction capture stays on your machine as usual, without the fix registry.
Local mode makes no network calls. That includes the daily update check, fibers doctor (it skips the service and marketplace checks, and --launcher does not fetch from git), and the plugin’s one-time download of its self-contained CLI: with local mode on, the plugin runs on Node, or on a CLI it already downloaded. fibers update and fibers promote refuse; keep the plugin current yourself with Claude Code’s own claude plugin update.
What does reach the network is only what you run outside fibers, such as claude plugin update. One exception for now: the fibers desktop app does not yet know about local mode, and its checks still contact the service and the plugin marketplace.
The session history local mode records in ~/.fibers/presence/ is never uploaded, including if you later sign in. Friction is the one exception: its daily totals (counts and hashes, never text) are kept on your machine while you are local, and once you switch to hosted they may be uploaded as they are on any signed-in machine. Turn that off first with fibers features off friction if you would rather they were not.