Changelog
What shipped in Fermium, newest first.
Dates are when the change reached the main branch.
2026-10-08
- Brains are now Agents. Navigation, setup and help use Agent terminology.
Existing app and documentation links redirect to the new addresses. MCP
discovery advertises
list_agents,load_agent,agent_readand the other Agent tools; previous tool names remain callable. REST paths, response fields and storedBRAIN.mdfiles remain compatible. See Agent tool names.
2026-09-22: People & teams, directory sync and MCP session duration
- People & teams now provides searchable members, groups, bulk membership changes, pending group assignments, source ownership and resource access inspection. Group management and group grants are available on Team and above.
- Invitations activate group assignments only when the intended account accepts. Email uses a durable retry queue; resend rotates the token, and normal listings do not expose invitation secrets.
- Google Workspace groups can be imported once or kept synced on Team and above, after operator OAuth setup and Google administrator approval. Direct active members only; failed snapshots preserve membership and stale Google group grants pause after an hour. Enterprise can enforce Google-only group authority.
- MCP OAuth connections default to 30 days, with a duration selector up to one year and Enterprise maximum-duration policy. Refreshes and remembered consent cannot extend the original deadline.
- Activity addresses use a trusted proxy chain. New visits from
192.168.1.0/24are excluded from activity counts, their addresses are redacted in logs, and cleanup removes historical stored addresses. Mutation audits remain.
2026-09-22: File activity and plan retention
- File Activity tabs, folder Activity panels and a Traffic dashboard show audience views, downloads, edits and permission activity. Internal opens and detected bots are separate.
- Daily totals outlive detailed viewer/IP history according to the workspace plan, with bounded cleanup every 15 minutes. Queries enforce current file permissions and retention.
- Five activity MCP tools and REST endpoints support charts, rankings, event catch-up and lightweight polling. Form progress activity stays on the response database.
2026-09-17: Roots, the fused navigator, and brains as agent memory
- Roots. Every document now lives in one root. My documents is each member's private tree (
root: "~", the default everywhere). General is one root per workspace that every member reads and writes. Shared roots are created by workspace owners and admins, up to 200 per workspace, each with an access list of people, groups or the whole workspace atview,commentoredit. Folders inherit the list; a folder with a list of its own replaces what it would inherit, so it can narrow or widen. A document published or moved into General or a shared root belongs to the root: its editors run it, it counts against the workspace's storage, and it stays when its author is removed from the workspace (their My documents still travel with them). MCP:list_roots,create_root, androotonpublish_html,publish_markdown,publish_snippet,publish_file,move_doc,list_docs,list_folders,create_folder,list_tree,download_bundle,search_docsandlist_changes. REST:/api/roots,/api/roots/{root}/access, androoton the document, folder, star, tree, bundle, search and change-feed endpoints. The document object gainsroot_id,rootanddoc_type. Audit:root.create,root.update,root.delete. See Roots and folders. - The fused navigator. One view is file browser and wiki. The sidebar has two sections, My documents and Shared; the folder pane has a Grid | List | Page switch, index pages that render on top of a folder, a manual order of a folder's children, shortcuts that show a document in a second folder without copying it, folder descriptions, and Root settings for details, access and deletion. MCP:
get_folder_view,set_folder_meta,create_shortcut. REST:/api/folder-view,/api/folder-meta,/api/shortcuts. - Publish a folder as a site. Any root or folder can be published: the folder tree is the navigation in its manual order and index pages are landing pages. Served at
/w/@<workspace>/r/<root-slug>/<path>/on the content host and/w/r/<root-slug>/<path>/on a custom domain, for everyone, signed-in readers or one group. Only documents inside published folders are served, document visibility still applies, and search engines can index a published folder only on an active custom domain with indexing turned on. Audit:folder.publish,folder.unpublish. Publishing a folder is now the primary way to build a wiki; the brain-tree wiki keeps working. - Brains as agent memory. A brain is now a set of typed markdown files that any harness loads over MCP:
BRAIN.md,INDEX.md,skills/*.md,workflows/*.mdandmemory/**/*.md, plus a journal, sources (roots, folders, tags and documents it reads through to, which only ever narrow to what the caller may open) and includes (other brains whose skills and workflows apply). Every member has a private personal brain. Agent changes toBRAIN.md, skills and workflows become proposals that a person with write access approves in whole or hunk by hunk, or rejects; a proposal whose file has moved on is marked stale. The journal is short-term memory with a budget (40,000 characters by default); when it is passed,load_brainasks the agent to consolidate notes into memory files. MCP:list_brains,load_brain,brain_read,brain_write,brain_remember,brain_search,brain_log,brain_consolidate_mark,brain_export,propose_change,list_proposals,create_brain,add_brain_source. REST under/api/brain-rootsand/api/brain-proposals. App: a brain viewer with Files, Sources, Includes, Activity, Review, Agent view, Access and Export tabs. Audit:brain.create,brain.write,brain.propose,brain.decide,brain.source,brain.includes,brain.access,brain.delete. See Brains, Skills and Workflows. - Renamed tools. The names
list_brains,brain_searchandcreate_brainnow belong to brains as agent memory. Their counterparts for brains of the earlier form arelist_legacy_brains,legacy_brain_searchandcreate_legacy_brain;use_brain,set_brain_instructions,attach_skill,detach_skill, the navigation tools and the workflow tools are unchanged. An earlier brain converts into the new form with its instructions asBRAIN.md, its skills and workflows as files, and its document, folder and tag members as sources. - Notifications. A bell in the top bar, with
GET /api/notificationsandPOST /api/notifications/read. It carries proposals that need your review and the outcome of your own proposals. - Diagram viewer. Every rendered Mermaid diagram has an Expand diagram button that opens a viewer with zoom, pan and reset, on published pages, wiki pages, the editor preview and inside the app. See Kinds and formats.
- Custom domains. The first domain to go live becomes the workspace's link host on its own; Use shared host instead switches back. See Custom domains.
- Plans for roots, access lists, brains and folder sites. Creating a shared root beyond General needs Team or above. Changing an access list on a root, on a folder inside a root or on a brain needs Business or above; reading a list stays open. Workspace brains are limited to 1 on Free and 5 on Team, with no limit on Business and above; personal brains are extra. Publishing a folder as a site needs Team or above, and unpublishing always works. Each refusal is a 402 that names the plan, over REST and MCP alike. Only new changes are checked, so roots, entries, brains and published folders that already exist keep working.
GET /api/roots/{root}/accessandGET /api/brain-roots/{slug}/accessgainaccess_blocked;GET /api/brain-rootsgainslimitandcount. See Plans and limits. - Publishing policy. The workspace policy gains
publishing:public(the default),signed_inoroff.signed_inrefuses public folder sites and serves folders already set to public to signed-in readers only;offrefuses publishing and answers not found for every folder site.GET /api/folder-metaandGET /api/folder-viewgainpublishing_policyandpublish_blocked(null,"plan"or"policy"). In the app: Publishing folders as sites under Settings, Access policy. See Workspace policy. - robots.txt for published folders. On an active custom domain with Allow search engines on,
/robots.txtallows/w/and lists aSitemap:line for each root with a published folder (/w/r/<root-slug>/sitemap.xml), next to the sitemap of the earlier brain wiki when that is on. Before, a workspace that published folders without the earlier wiki gotDisallow: /. - Change feed.
rootonGET /api/changesandlist_changes:~for personal documents only, a shared root's slug for that root; rows carryroot. See Building a sync client.
2026-09-16: Workflows and one file browser
- Workflows. A recipe for one recurring job, next to skills, which say how anything should look. A workflow is a
WORKFLOW.mdsteps document (folderWorkflows/<slug>, alias<slug>-workflow, team-listed, kept forever) plus trigger phrases, inputs to ask for ({name, description, required, example}), templates to duplicate with a role each, skills applied on top of the brain's, and output rules (kind,folder,title_pattern,tags,brain,listing,visibility). Brains hand out every workflow by default or a picked, ordered set;use_brainlists them so an agent can recognise a job,use_workflowreturns the full recipe and counts a use,duplicate_doccopies a template into a new document the user owns. Per plan: Free 3, Team 25, Business and above unlimited. App: a Workflows section in the sidebar and a Workflows page with cards, a New workflow form (name, triggers, inputs, templates, skills, output), Read, Edit and Usage tabs, Run with an agent, Duplicate on templates, Use as template in… on a document's menu, and a Workflows tab in the brain's Manage view. MCP:list_workflows,use_workflow,create_workflow,set_workflow_templates,set_workflow_skills,duplicate_doc;workflowsin theuse_brainpayload. REST under/api/workflows,/api/brains/{ref}/workflowsandPOST /api/docs/{id}/duplicate. Audit:workflow.created,workflow.changed,workflow.deleted,workflow.used,doc.duplicated. See Workflows. - One file browser. Home is the entry and the Documents rail item is gone. All documents shows everything you may open in one tree and one grid: your own documents, team-listed documents and documents shared with you through a grant. Documents and folders owned by someone else are tinted and carry the owner; an All / Mine / Shared with me filter narrows the view and is kept in the URL. Bulk actions stay owner-only. REST:
view=allonGET /api/docs,include_team=1onGET /api/foldersandGET /api/tags, all behind the one access rule that governs opening a document.
2026-09-16
- Wiki. A workspace can publish a curated navigation over its documents as a read-oriented site at
/w/@<workspace>/on the content host or at the root of a custom domain. Entry kinds: group, document (by id or by alias, so re-pointing an alias moves the entry), dynamic folder and tag sections that list live documents, external link, divider. Per-entry visibilitypublic,signed_inorgroup(Business), with Sign in to see more for anonymous readers. Only documents the navigation reaches are served, searched or listed; document visibility applies as on a direct link; HTML documents render in a sandboxed frame, never inlined. Pages have breadcrumbs, a table of contents, last-edited, backlinks, Edit this page, History and Copy link. Ranked full-text search within the wiki. Opt-in search-engine indexing on an active custom domain (Team and above): canonical links, Open Graph tags,/robots.txtand/w/sitemap.xml; the shared host staysnoindex. Navigations per plan: Free 1, Team 5, Business unlimited. App: a Navigation section in the sidebar, a drag-and-drop navigation editor with a Not in navigation pane, Add to navigation on documents and folders, and Settings, Wiki. MCP:list_navigations,get_navigation,create_navigation,delete_navigation,set_navigation,add_nav_entry,update_nav_entry,move_nav_entry,remove_nav_entry,publish_home,get_wiki_site, andnavon thepublish_*tools. REST under/api/navigationsand/api/wiki-site. See Wiki. - Icons. One grammar for documents, folders, tags, navigation entries and navigations:
lucide:<name>[/<colour>]from a curated set with twelve named colours,emoji:U+1F680or a literal emoji, andsvg:<id>from an uploaded SVG library (Team and above; 32 KiB, validated on upload, served from the content host under/icons/). A picker in the inspector, folder menu, tag view and navigation editor; icons render on tiles, in the sidebar, the command palette and the wiki. MCP:set_icon,clear_icon,upload_icon,list_icons. REST under/api/icons. The document object gainsicon. See Icons. - Editing in the browser. One editor route for every editable file in a document: markdown with a toolbar,
[[autocomplete over aliases, titles and tags, and a server-rendered live preview; HTML, CSS and JavaScript with a live preview of the draft; JSON and YAML with syntax checks; snippet source with a language picker; raster images with crop, rotate and resize saved as a new version. Saves carrybase_version; a conflict shows who saved, their diff, and Reload or Overwrite. Edit leases (at most ten minutes, renewed while the editor is open) make a document read-only for others while someone types; agents see the same lease. Compare in the Versions tab with side-by-side or unified diffs, image before/after and Restore. Ask an agent posts an instruction as a comment with a file and location for an agent to pick up withlist_comments. Edit and Add to navigation buttons, alias and links in the inspector. See Editing in the browser. - Editing API.
GET /api/docs/{id}/files/{path}withETag,If-None-Matchand?version=;GET /api/docs/{id}/manifest;PUTandPATCH /api/docs/{id}/files/{path}withbase_version(409 withcurrent_version,changed_byand a unifieddiff) andlock_token(423 with the holder); lease endpoints under/api/docs/{id}/lock;POST /api/render/markdown; a cursor-based change feed atGET /api/changesthat folds metadata changes intochanged_atand keeps deleted documents for 30 days;GET /api/search/ranked. MCP:write_file,lock_doc,renew_lock,unlock_doc,list_changes. A recipe for mirrors is in Building a sync client. - App: a working Audit page, a Developers area (Overview, Events, API keys, Logs, Webhooks), and a Members settings page with roles and invites.
2026-09-15
- Links between documents. One human alias per document (
q3-roadmap), unique within the workspace and re-pointable withforce. Markdown[[alias]],[[alias|text]],[[alias/path]],[[#tag]],[[doc:id]]and[[@workspace/alias]]render as links; unresolved references render visibly broken. The/x/<ref>[/<path>]resolver on the content host and custom domains 302s to the canonical URL with the target's visibility applied. Backlinks are indexed. MCP:set_alias,clear_alias,resolve_link,list_links. REST:PUTandDELETE /api/docs/{id}/alias,GET /api/docs/{id}/links,GET /api/resolve. See Links between documents. - Search and edit.
search_docsgreps every text file of your documents and team-listed ones, with folder, tag, kind and path-glob scoping, regex and case flags;grep_docinside one document;get_fileby line range;edit_fileexact find-and-replace with a uniqueness check;apply_patchfor a unified diff exactly asgit diffprints it;list_versionsandrestore_version(a restore is a new version). Edits tosource.md,source.<ext>andindex.htmlre-render the page. REST under/api/searchand/api/docs/{id}/{grep,text,edit,patch,versions}. See Search and edit. - Expiry warning and keep. An email three days before expiry with a one-click keep link;
POST /api/docs/{id}/keep. Keep respects the workspace's maximum retention. - Workspace policy (Business): allowed visibilities, minimum and maximum retention (implicit defaults clamped, explicit values rejected), secret scanning in
warnorblockmode.GETandPUT /api/policy,get_policy. Legal hold (Enterprise):set_legal_hold,POST /api/docs/{id}/legal-hold; held documents never expire and cannot be deleted or purged. IP allowlist (Enterprise) for the app, the API and workspace-gated documents. - Audit log (Business): append-only, filterable by action, actor, target and time, CSV export,
list_audit. Members see events about their own documents. - Webhooks (Business): per-URL secret shown once, event filters with
family.*prefixes,X-Fermium-SignatureHMAC-SHA256 overt.body, retries at 1 m, 5 m, 30 m, 2 h and 12 h, deliveries log, test ping, non-public URLs refused. See Webhooks. - Members, roles and invites. Roles
owner,admin,member;GET /api/members; email invites valid 14 days that reserve a seat; removal moves the person to a personal workspace with their documents; ownership transfer. Groups and access levels (Business):view,comment,editper document or per folder, for a user, a group or the workspace; grants narrow workspace-gated documents; editors update content, rename and tag, owners keep move, listing, visibility, retention, alias and delete. MCP:list_access,share_doc,unshare_doc,list_groups. Comments (paid plans) withpathandanchor; MCPlist_comments,add_comment,resolve_comment. - SSO (Business): OpenID Connect with your own provider (Microsoft Entra ID, Okta, others), PKCE and nonce, ID token verified against JWKS, per-domain routing, enforced mode, public
GET /auth/sso/lookup. SCIM 2.0 (Enterprise): Users and Groups at/scim/v2,eqfilters, PATCH, deactivation frees the seat and keeps documents, tokens minted in settings. See SSO and SCIM and the SCIM reference. - Account export and deletion.
GET /api/exportzips every document you own withmeta.jsonandindex.json;DELETE /api/accountwith a typed email confirmation, 7-day grace, owners transfer first. - App: multi-select in the Documents view with Move to, Keep forever, List for team and Delete.
- Security:
/.well-known/security.txtand a responsible disclosure page. - Folders, tags, and stars as three separate things. A folder is where a document lives: one path like
Customers/Acme, nested up to 8 levels, created on the fly, case preserved. A tag is a topic that cuts across folders (customer-facing,runbook); a tag view lists every document carrying it wherever it lives. A star is a personal shortcut to a document or a folder. Tags no longer stand in for folders. See Folders, tags, and stars and Moving and organizing. - Moving never changes a link. A document's URL is built from its immutable slug and never contains a folder, so moving a document or renaming or deleting its folder keeps every link, embed and bookmark working. Moving does not create a version or reset retention.
- MCP:
folderonpublish_html,publish_markdown,publish_snippetandpublish_file; new toolsmove_doc,list_folders,create_folder,rename_folderanddelete_folder(forcemoves contents to the parent; documents are never deleted);list_docstakesfolderandrecursivealongsidetag. Server instructions andusage_guideexplain the model to the agent. The document object gainsfolder. - REST:
GET,POST,PATCHandDELETE /api/folders;GET,POSTandDELETE /api/stars;folderandtagsonPOST /api/docs;folderonPATCH /api/docs/{id};folderandrecursiveonGET /api/docs. - App: folder tree in the sidebar with breadcrumbs and folder tiles, move by drag or from a Move dialog, Starred and Tags sections in the sidebar, and a tag view that shows each document's folder.
2026-09-15
- New app shell at
fermium.app/app: rail, context sidebar with tags and the Team view, top bar with search and a command palette (Ctrl or Cmd plus K), inspector with Access, Files and History tabs, mobile tab bar. Settings index: General, Domains, Billing, API keys and tokens, Members, Sign-in, Policy, Webhooks, Data, with unshipped features labelled by plan. - Custom domains end to end: add a hostname, CNAME to
cname.fermium.appplus a_fermiumTXT record, verify, certificate issued by Let's Encrypt,activestatus, "Use for links" to make it the link host. Custom domains serve only the owning workspace's documents, and the workspace sign-in handoff returns readers to the custom host. - OAuth consent moved to account creation: new accounts accept the Terms and Privacy Policy on the sign-in page; existing accounts see an interstitial when the version changes.
- Auth-aware marketing header:
GET /api/meand Open app / Sign out versus Sign in / Create account. - Admin area for operators: set plans without Stripe, pre-create company workspaces and claim viewer domains, move and disable users, support tooling.
- Personal workspace names from the email local part ("Ada's workspace").
- Legal pages, brand and fonts, formats section on the home page.
- Secrets manager for production credentials, loaded at boot.
- Fermium reshape: workspaces, plans (Free, Team, Business, Enterprise), Stripe Checkout, Customer Portal and webhook, storage caps and add-ons by plan,
visibility: workspacegated to paid plans with viewer domains, open Google sign-in for any account, the/appUI prefix.
2026-09-08
- Monorepo bootstrap: marketing site, API, and deployment automation for custom-domain provisioning.
Earlier, before the rename
The service ran under a working name before it became Fermium. The features below carried over unchanged.
- Link previews and video posters: Open Graph tags on generated pages, a poster frame grabbed after each video upload,
generate_posterto backfill. Unlisted documents unfurl in Discord and Slack. - Streaming uploads:
create_uploadmints a signed one-timePUT /u/<ticket>URL for files up to 2 GiB;PUT /api/uploaddoes the same with a bearer token. Video and audio get a player page with a markdown description;set_descriptionedits it in place. HTTP range serving for seeking. - MCP OAuth 2.1: RFC 9728 discovery from the 401 challenge, RFC 8414 metadata, RFC 7591 dynamic client registration, authorization code with mandatory PKCE, 7-day access tokens, rotating refresh tokens, RFC 7009 revocation, one-time consent per client. Replaced pasted tokens for interactive clients; static
dsk_tokens kept for headless use. - Tags: up to 10 normalized tags per document,
tagson every publish tool,set_tags,list_docs(tag=),GET /api/tags. The browser UI of the time showed each tag as a folder; real folders replaced that on 2026-09-15. - Markdown fixes:
.mduploads render as documents, BOM and CRLF normalization, contrast-checked palettes, mermaid diagram fences. - Markdown documents (
publish_markdown,update_markdown) withsource.mdkept as raw. - Snippets (
publish_snippet,update_snippet) with server-side highlighting and language detection. - File shares (
publish_file) with image viewer, direct PDF serving and download pages. - Password visibility with HTTP Basic and argon2id hashes; per-IP failure limits.
- Immutable versions with per-file hashes and shared objects across versions; no-op on identical content.
- Retention with a 30-day default, keep-forever,
expires_aton every response, soft delete with a 7-day grace period and a daily purge. - Two-origin model: app on one host, content only on another, CSP sandbox on every document, neutral not-found page, per-IP 404 limits.