Repository navigation
Releases: passioncode-ai/fabric
Release list
v0.3.8
The patch of the operator's audit of the installed 0.3.7 (2026-10-21): other products can now get the access that
fabric.project.resolve needs, the log says what happened, the startup failure names a full disk, and a coding agent
in a folder that is too broad stops asking every half minute. No schema change: 0.3.8 admits schema 94, as 0.3.7 did.
- A full disk is named when the local stack will not start. When the volume that holds Fabric's data has under
3 GB free (decimal), the startup failure says first how much is free and that Docker stops when the disk runs out (in
each system's own words), and the copied details andstartup-failure.logcarry the same number. On macOS the figure
leaves out space the system could purge, so Finder may show more. The stack's own words only ever named a missing Docker socket. - Other products can ask Fabric which project a folder belongs to. 0.3.7 shipped
fabric.project.resolve, but a
product had no way to get the access it needs:fabric.access.requestrefused every ask of Fabric itself but
session.enrollandboard.respond(Observatory's live check, 2026-10-21). Fabric now admitsproject.resolveon the
resourceprojects, read-only, at once on the operator's own machine, for a registered service or a coding agent it
knows (never for one the person disconnected). Settings → Agent access says it in words, and revoking it ends it:
fabric.project.resolvenow answers only while that grant, or a coding agent's enrollment, is live. - A coding agent in a folder that is too broad stops asking every half minute. While Fabric refuses the folder as
too broad (the home folder, a folder right under it, one that holds other projects),fabric-mcpwaits twice as long
each time, up to 10 minutes; a repeated failure waits up to a minute, and a 503 that names Retry-After is waited out.
Every refusal the person can lift in Fabric keeps its wait (a detached folder 30 s, a denial 60 s), and the agent's
ownfabric_whoamistill asks at once. A Hermes in the home folder had asked every 30 s for three days. A coding
agent already running keeps its oldfabric-mcpuntil it is restarted. - The log says why a tool turned a call down. A tool's typed refusal (
needs-grant,no-sessionand the like) is
recorded at warn with its code, not as an error with no reason (CO-335); a product's or Fabric's own failure stays
an error, and a call that may have run isunknown; an accepted MCP notification is no longer a
warning (336 in 49 minutes of the 0.3.7 log). - Docker on Windows is waited for in its bare pipe form too (
//./pipe/docker_engine). - What 0.3.7 said would come in 0.3.8 comes in 0.3.9: the agents' own acts in История and Fabric's own enrollment on
the shared attribution rules (CO-339). 0.3.8 is this patch; История now says «in a later version».
Verify
gpg --verify SHA256SUMS.asc SHA256SUMS # key 63B30DC324BD697487AA31944FAFB8AEC803B6A7
shasum -a 256 -c SHA256SUMS --ignore-missing
gh attestation verify <file> --owner passioncode-ai --signer-repo passioncode-ai/.githubThe organization's public key: https://github.com/passioncode-ai/.github/blob/main/release-signing/passioncode-release-signing.asc
v0.3.7
- Fabric starts when you log in (macOS and Windows). It starts without a window, so agents and the board keep
running; turn it off in Settings → «Компьютер». Settings shows the row only where Fabric registers a login item (not
on Linux or in a development build) and says when the system itself does not start Fabric (turned off in Login Items
or Startup apps, or waiting for your approval). - An agent's history reads as what it did. In Агенты the picked agent's history is newest first and in words (a
task it moved, a decision it recorded, its stage), with who did it, and it now includes what the agent wrote itself. - Other products can ask Fabric which project a folder belongs to. Fabric's hub answers
fabric.project.resolve
with the shared rules all three products agreed on (DEC-0089), so Observatory and Switchboard attribute a folder by
the same rules. When Git cannot be read in time the answer ispendingwithgit-unreadable(DEC-0092), never a guess; a
relative path is refused and one call is bounded at 8 s.
Fabric's own enrollment of agents moves onto the same rules in 0.3.8 (CO-339). - A task is no longer stuck after its agent ended. When an agent's process has ended but Fabric cannot prove its
provider stopped, the console offers «Работа закончена»: the task goes back to the queue and can be taken again, and
«Отменить» on the act line holds it again and puts the console back, so it offers «Работа закончена» again.
After the press the console says «Вы отметили: работа закончена», not that Fabric confirmed the stop (ADR-0170). - A console is your own setup. Claude Code in a Fabric console now has your MCP servers (Observatory, your plugins)
beside Fabric's, and Codex runs with your ownAGENTS.md, plugins, trust and sign-in instead of an empty copy,
without copying your sign-in. A console also finds the same programs your terminal does. An agent you create in a
project, and a console in a project that declares MCP servers of its own, still see only the servers they declare and
run Codex in their own home with a copy of the sign-in (ADR-0169). - Every coding agent starts as a console, with fewer prompts by default. A project's console can now start any
coding agent of the catalogue this computer has (Gemini CLI, OpenCode, Goose, Cursor, Pi, OpenClaw and the rest),
not only the five Fabric connects to its surface. Settings has «Разрешения агентов»: «Меньше подтверждений», chosen by default,
or «Проверять вручную», one choice for every agent, and each agent's row shows how it starts. OpenCode's own
fabric-mcpregistration is accepted (ADR-0168). - Fewer generated-looking touches. Thick coloured side stripes on notices and selected rows became a thin
outline, and buttons and links no longer end in an arrow («Продолжить», not «Продолжить →»). - A quieter top bar and a denser rail. The top bar holds the place's name and the open consoles, nothing else:
search is ⌘K, the profile block and the conversation button are gone, and a line about this computer appears at the
foot of the rail only when something needs a look. Projects take less room on the rail (OF-04, OF-05). - Consoles open inside Fabric, as tabs along the top. «Консоль» no longer opens a separate window: the console
fills the main area, and each open console is a tab in the top bar with its project's name and its coding agent, so
you see which are open and switch with one press. Closing a tab never stops the session. «Открыть в отдельном окне»
on the console still gives it a window of its own. - A console whose agent has ended says so. It said «Остановка не подтверждена» and offered to force a stop of a
process that was already gone; now it says «Сессия завершилась» with the exit code. - «Where you stopped» stays where you stopped. It used to jump to whichever project an agent last touched; now it
is the project of your own last act, and it still counts what happened there since. - Claude Code no longer asks «Do you trust this folder?» in Fabric's consoles. When Fabric starts Claude Code in a
project's folder, it marks the folder trusted first, as Orca does. Folders already trusted stay trusted. - A console no longer closes itself when it opens. Opening a coding agent's console again sent the terminal's own
answers into the agent, and Claude Code read them as «Esc» on its «Do you trust this folder?» question and quit. - Many coding agents at once no longer push each other out. With dozens of Claude Code sessions open in
different projects, they took turns disconnecting one another and then waited on Fabric's rate limit. The limit of
eight sessions now counts one project, and each session gets its own share of calls; one coding agent still holds
at most 64 sessions across all projects, and past that the oldest is ended. - One rail, five places (SCN-162). The left of the window holds «+ Создать», Главная, Агенты, История and
Настройки, then your projects: favourites first, then by latest activity, a green dot where an agent works and a
count where something waits for you. The tab strip, the Back button, the per-project links and the bar above each
screen are gone; ⌘[ goes back and ⌘] forward; ⌘K opens search. Board, Plan, Messages between projects, account
limits, Help and Fabric's name and look are reached from where they belong (Главная, the project page, Настройки). - «Создать» opens in the window with three choices: open a projects folder, create a project, create an agent.
Drafts you left unfinished are listed there to go on with. - История lists every act you take, newest first by day, with «Отменить» where it can be taken back
and the reason where it cannot. After an act, one quiet line at the foot of the place says what was done, with
«Отменить». - No more «are you sure?» (ADR-0160). Stop, force stop, releasing a task, removing a folder, discarding a draft and
replacing your words with a shortcut happen at once and can be undone. A link opened while the first run was on
screen opens what it links to. An agent's request to use a product, the usage-count question and the warning that
the local database is reachable from your network are questions on Главная, never a pop-up or a banner. - «Отключить» for a coding agent that joined on its own (SCN-167). Агенты shows each coding agent that joined
from a terminal, with the fact that Fabric cannot prove which program it is. «Отключить» revokes its access, ends
its consoles and keeps it out of every project until you press «Пустить снова»; either can be undone. - Docker no longer brings back services Fabric does not use. Containers an older full start had left (the
database studio, its logs, mail and file storage) started again with every Docker or OrbStack restart and took about
1.4 GB of memory. Fabric now removes them when it starts its local database; the data stays. - An agent started deep inside a repository adds the repository, not the folder it started in, and removing one
copy of a repository from a project no longer keeps every other copy of it out. This is the first step of one
shared answer to "which project is this folder" across Fabric, Switchboard and Project Observatory (ADR-0166). - Any folder an agent starts in becomes a project by itself, not only a Git repository: a plain folder is added
the same way, with the agent named in the operations log; the add is listed in История with the agents' own acts in 0.3.8. Only a container is skipped (the
disk root, the home folder, a folder right under it such as Documents, or a folder that already holds projects). - Every act can be taken back (ADR-0160, SCN-168, SCN-169). Moving a task, releasing
a claim, removing or adding a folder, renaming a project, answering a question, stopping a console and discarding a
draft are each recorded with who did it and how to undo it: a task moves back, a claim is taken again, a folder
is attached again, the old name returns, a question is opened again, a console starts again where it stood, a
draft is restored. An undo is itself recorded and can be undone. What cannot be taken back says why: a task
closed, a release published, an agent's key revoked. - An answered question can be reopened. The question is open again, what it blocks is blocked again, and a new
answer is a new decision; agents no longer read the withdrawn answer as a current decision. - A task held by an unfinished run says so (CO-323):
fabric_work_claimandfabric_task_claimno longer refuse a
task whose launched session exited with «another agent claimed it in the same moment»; they name the run that holds it,
its session, since and until when, and that its stop is not proved;fabric_work_listlists that task as held,
not open. An expired claim of a session that is gone is taken over by the next claim, as before. - A coding agent opened in an unknown folder gets its project automatically through Fabric's enrollment: exact,
ancestor, worktree and remote identity attach to the existing project, an otherwise unknown repository or plain
folder is created once, andsession.enrollis allowed at once on the operator's own machine. Containers (the disk
root, the home folder, a folder right under it, a folder that holds projects) and ambiguity are refused; detached or
archived projects are not brought back. Every create, attach and access decision is recorded and revocable
(ADR-0136, ADR-0160). - Usage counts go to PassionCode's own analytics host (
analytics.passioncode.ai, docs/ANALYTICS.md),
no longer to the operator's personal instance; what is counted, and the switch that stops it, are unchanged. - **Fabric wai...
v0.3.6
The home says who is doing what across every project, in plain words; a project's page says where it came from,
where it is and where it goes; Settings becomes a screen with the coding agents on this computer; and projects answer
each other's requests on the project board, which Comms now lets you read at any size.
- The home says who is doing what (SCR-30, SCN-158). Four counts at the top — agents working now, tasks in work,
what needs you, what waits for review — each opening where it is counted. Beside "Needs you" («Нужно вам»), "Who
is doing what" («Кто что делает») lists the tasks in work and in review across projects, each as a plain summary
(the task brief's «what», else its title, never its instruction) with its project, agent, how long and the agent's
current stage. "Agents at work" («Агенты в работе») shows every working session with what the agent says it is
doing, in its own words; a session gone silent is marked "silent" («молчит»); a click opens the agent's console when
Fabric holds one, else its project. The reading refreshes every 15 seconds and when the journal moves; a failed
reading says so, keeps the last one on screen and shows the counts as «—». A claim whose agent stopped signing for
it stays in work marked "nobody signing" («никто не отмечается»); a capped count is a floor («50+»), and a lane past six rows offers
"{count} more" («Ещё N») on the Board. The rail's «Настроить агентов» is now «Агенты». - Projects on the home: favourites in your order, then by latest activity (SCN-043, amended), each card with
"Now: …" («Сейчас: …», what its agent is doing) or "Quiet for …" («Тихо уже …»). Projects that are not favourites lost their manual ↑ ↓ order:
an order saved for them before is no longer used; favourites keep theirs. - A project's page says where it came from, where it is and where it goes (SCR-31, SCN-159): the heading says what
its agent is doing now; "Where we came from and where we go" («Откуда пришли и куда идём») shows recently done → in
work and in review (with each agent's stage) → the goal and the queue in board order; then "Questions for you" («Вопросы ко мне»), the
board at a glance (four columns with their counts and first cards; "Done 20+" («Готово 20+») when only the newest twenty were
read) and "Agents on this project" («Агенты на проекте»), each opening its console. A project with no tasks shows its first step instead of an
empty way. - Settings is a screen (SCR-52, SCN-160), no longer a band over another page; the page you came from stays as it
was underneath. It groups the coding agents on this computer (each with its version and path, not answering, or
not installed with the vendor's install command), the launch fallback order, sleep ("Keep the computer awake", «Не давать компьютеру засыпать»,
with what the OS will not do), theme and language, and Data and access: usage counts, private history and restore,
and Agent access. When Switchboard 0.6.31 or later publishes its catalogue (switchboard --json agents status), its
default and switched-off agents are marked and agents only Switchboard knows are added; Fabric reads that catalogue
and never writes it, and an older or absent Switchboard is said. - Fixed: Claude Code sessions could not ask another project anything (CO-292). In 0.3.5 the board tools published
no argument types, so Claude Code sent nested arguments as strings andcom.submit, andcom.listwith alimit,
were refusedinvalid_arguments. Each board tool now publishes the shape its handler accepts; the board still
validates every call itself. - Fabric waits for a stack that is still starting instead of refusing to open: right after Docker (OrbStack)
comes back, «container is not ready: starting» and «supabase start is already running» are waited out and retried
(up to four tries, ten seconds apart, said on the splash in English, like the whole splash — CO-306); any other
refusal, Docker unreachable among them, is shown at once, as before. Each try keeps its own four-minute start
deadline, so a stack that never becomes ready can hold the splash for about 16 minutes before the refusal (CO-311). - The folder question on the home screen names what a folder will not bring back in your words — goals, tasks,
questions and routines — instead of an English sentence with table ids in it (seen in Russian on the 0.3.5 first run).
How sessions start
- A coding agent that connects to Fabric is not started while Fabric's agent surface is down. In 0.3.5 only Kilo
Code, Hermes Agent, Codex and Kimi Code were refused; Claude Code started unconnected — without its board tools,
permissions and briefing, while appearing connected in the journal. Now every connected agent, Claude Code included,
is refused before it starts, with " was not started: Fabric's agent surface is not running, and this agent's
permissions and connection are given with it. Start the session again once the surface is up (Settings → Agent
access)." A launch through the fallback order moves on to the next agent. - Fixed: Kimi Code's Plan, Ask and Bypass modes are applied. 0.3.5 passed
--plan/--auto, which Kimi Code
accepts and ignores (its session still started indefault), so a Plan session ran with Kimi's ordinary approvals.
The mode is now set on the session itself (ACPsession/set_mode:plan,default,yolo). - A task's own words are always delivered whole; memory that does not fit the session's context budget is left out,
and the session is told what was left out. The budget now counts everything the pack writes (its head, separators
and the omission note) when it selects memory; a task, brief and project identity larger than the budget are
delivered whole and nothing is selected from memory. (Between 0.3.5 and this release a revision 4 that never
shipped refused such a task; 0.3.5 itself, at revision 3, never refused one.) The context compiler is at revision 5, so a
pack recorded by 0.3.5 names revision 3 and one compiled now names 5. - Agents are asked for plain-language stages. Fabric's tool descriptions and its rules ask an agent to report its
stage, write a task's brief and title a task as one plain sentence the project's owner understands, in their
language — that is what the home and the project page show. The rules' hash changes with them, so each session's
session.oriented@1names the rules it got. - The resource admission and worker pools of the harness wave
(ADR-0152,
ADR-0154) ship inactive: no launch in this
release waits on them.
Comms and the project board
- Comms reads a long board a page at a time (wave 4, ADR-0156 §8):
threads newest activity first, 50 a page, with "Show older threads"; the filters — project, kind, coding agent, open
request, activity — are answered by Comms itself, so they work on a board too large to hold, and a filter Comms did
not answer keeps the last confirmed list and says so instead of saying nothing matches. The rail's count reads each
thread's last message only and says "5000+" past its cap. - Comms says who answers each request and how it ended (SCN-147): "Responder #n · · since ", a lapsed
lease ("That says nothing about whether it worked."), or that no agent answers it now and why the last one left;
the responder's reported outcome and its evidence, or the requester's reason for cancelling; an outcome nobody
observed reads "may have happened — awaiting reconciliation" with who can settle it. Each message says which projects
marked it read, and each file a message names shows its hash as the sender stated it — onlyhttps:links open.
A request's timeline and the threads related to one (the same projects, or the same file) open on demand. - Search what projects told each other (SCN-156), newest first;
%and_are searched as themselves, and a search
that runs out of time says so. What waits for a project (SCN-157): per project, the messages none of its agents
has read, the oldest, and the requests nobody answers. - Projects answer each other's requests (COM-03, ADR-0149
Amendment 1): the project board serves all seventeen tools offabric-project-comms/0.1at contract DEC-0073 —
com.replyandcom.cancel,com.directory, and the responder toolscom.enroll,com.claim,com.renew,
com.accept,com.progress,com.effect_begin,com.complete,com.reconcileandcom.responder_replace. An agent
answers a project's requests only once the operator allowed it ("Let answer requests for
?", Settings → Agent access); every responder call is fenced, so an agent that was replaced cannot record a
late result. A session's end releases what it held. A service agent joins a project's board withfabric.board.join. - The responder consent says what the grant does not change: "This grant itself lets it spend, publish or delete
nothing; it still has its own tools, and a request is never an approval." In Russian the prompt now says requests
are sent «проекту «…»», not «в проекте «…»». - Requests can be cancelled and expire; replies are threaded (COM-02.3): the requester's Project may cancel a
request (work that had begun becomes "outcome unknown" — it may have happened — until reconciled), a passed deadline
expires a queued request (an accepted one is held), and a reply lands in the thread of what it answers.com.reply
andcom.canceltake the arguments contract DEC-0073 fixed, served since F...
v0.3.5
Fabric on Windows and Linux, the way the other PassionCode.ai apps ship (CO-238); a coding agent you open
yourself in a terminal can work in your project through Fabric; and Fabric shows which agent works on what.
- Fabric opens from a product's Fabric button. A
fabric://link from Fabric Dashboards or any product now opens Fabric in that product's project (found from the product's repository), or says why it could not; before, macOS answered that Fabric was not installed, because Fabric did not register the scheme. A link that starts Fabric is not lost while the window opens, and one that arrives during the first run waits for it to end. - A coding agent opened outside Fabric works in your project. Register Fabric once in Claude Code or Codex —
claude mcp add --scope user fabric -- "<Fabric>/bin/fabric-mcp" --runner claude-code, or
codex mcp add fabric -- "<Fabric>/bin/fabric-mcp" --runner codex— with no key in it (on Windows:
claude mcp add --scope user fabric -- cmd /c "<install folder>\resources\bin\fabric-mcp.cmd" --runner claude-code, with the install folder under
%LOCALAPPDATA%\Programs\; not yet
tried on a Windows machine). The first
time the agent starts in a project's folder, Fabric asks you once whether it may work there; after Allow it gets what
a session Fabric starts gets in that project, and its work is recorded like any session's. Revoke it in
Settings → Agent access (ADR-0134).
<Fabric>/binisFabric.app/Contents/Resources/binon macOS and the install folder'sresources/binon Windows
(fabric-mcp.cmd) and Linux. On Linux register it from the.deb(/opt/Fabric/resources/bin/fabric-mcp): an
AppImage mounts at a new path each start, so a registration pointing into it breaks on the next start. - Who is working on what. A project's page lists each agent's claim on a task — the agent, how it came in, what it
touches, since when, its last sign of life — marks two claims that overlap as related, and lets you release a claim
after asking (SCR-31). Where work is (SCR-78, in the rail) shows the same across every project, with the sessions
that belong to none on the last row. Coding agents claim a task through Fabric before they start and are warned of
related work (REQ-38). - The first run asks which coding agent to use as one choice among the agents Fabric found, and an agent that
cannot be chosen says why (REQ-40). - Fixed: agents registered on this Mac could not be connected through Fabric. Since 0.3.1 the hub's requests,
decisions and calls were refused by the app's own journal before they were saved, so an agent's request never reached
you (CO-254). They are recorded now, and a test checks every event the app writes against the journal's policy. - The database moves to schema 84 (from 79): five migrations, applied in order. An existing database is upgraded
by the documented procedure before 0.3.5 opens it. - "Running for N days" counts from the day Fabric could first open your Estate, not from an install that failed
to start (CO-242). - The old first owner leaves a repaired Estate. On a database the 0.3.4 repair gave to you, 0.3.5 revokes the old
seed's second owner at its first start — through the membership door, recorded, never a delete — while that member is
still the seed's own and nobody signs in as it (CO-242). - A database Fabric refuses at start says what to do in your language: the schema it found and the one it needs,
or that the stack did not answer — the copied details stay in English, for a report. - Codex and Kimi Code connect to Fabric's surface. Sessions of both get the project-board tools
(com.submit,com.list,com.get,com.read_ack,com.status) like Claude Code, Kilo Code and Hermes
Agent before them — each through the way its own probe verified (report):
Kimi Code over ACP with HTTP MCP (no bridge), Codex through an isolated per-sessionCODEX_HOMEwhose server
name and token variable are random per session, because a project.codex/config.tomlshadows any name it
knows. So a Codex session Fabric starts does not read your own~/.codex/config.tomlor~/.codex/AGENTS.md
(a project's ownAGENTS.mdstill applies); when you are signed in to Codex it uses a copy of that login, removed
when the session ends, and otherwise Codex asks you to sign in for that session. One residue, recorded as CO-247: Codex 0.162.1 has no--ignore-project-config, so a project can still
add MCP servers of its own — as it already could before Codex connected. Cline stays unconnected: its ACP
session/newdemands a sign-in no probe has passed. - The project board is visible to the operator: the Comms screen (SCR-81, SCN-143). The left rail gains
Comms / «Переписка»: the estate's threads and messages read with your own eyes — sender, principal and its
provenance per message, a request's state and effect as two separate labels, live by cursor polling; a board
that does not answer says so, never an empty list. Read-only by design; the read goes through two new SQL
functions, sanctioned for the local estate by ADR-0117 (D3). - Windows. A per-user installer for Windows on Intel and AMD (x64) and on Arm (arm64):
Fabric-0.3.5-windows-x64-setup.exe
and-arm64-setup.exe, Authenticode-signed through Azure Artifact Signing. Terminals
open PowerShell; the local stack needs Docker Desktop (WSL2) and the Supabase CLI (scoop install supabase). - Linux. An AppImage and a
.debfor x64 and arm64. The local stack needs Docker Engine and the Supabase CLI. Install
the.debto openfabric://links and to registerfabric-mcp: it registers the scheme and keeps one path. - Not yet on Windows and Linux: whether a coding agent is signed in is not read there (it says so, CO-244).
Not yet on Windows: connecting a cloud product's secret through Project Observatory (CO-245); Agent access says
so when you press Connect, before the product is opened. - Windows and Linux are offered on GitHub Releases; the
download page on passioncode.ai offers the Mac build until its own change. - Usage counts (only after you answer the switch):
agents_with_accesscounts agents with access to a connected
product, and coding agents enrolled in projects are counted apart ascoding_agents_enrolled
(docs/ANALYTICS.md).
Upgrading. A database at schema 79 (0.3.2 to 0.3.4) is upgraded to 84 before 0.3.5 opens it: install 0.3.5 and
start it once (it refuses, and copies its migrations into Fabric's stack folder), quit it, make a verified backup,
rehearse on a copy, then run supabase migration up --local in that folder and start 0.3.5 again
(release runbook).
Until then 0.3.5 refuses to start its workspace services and says which schema it found. An older database (69, 75,
78) takes the same procedure; supabase migration up applies every missing migration in order.
Verify
gpg --verify SHA256SUMS.asc SHA256SUMS # key 63B30DC324BD697487AA31944FAFB8AEC803B6A7
shasum -a 256 -c SHA256SUMS --ignore-missing
gh attestation verify <file> --owner passioncode-ai --signer-repo passioncode-ai/.githubThe organization's public key: https://github.com/passioncode-ai/.github/blob/main/release-signing/passioncode-release-signing.asc
v0.3.4
Fabric starts on a new Mac, and one download now serves Apple silicon and Intel Macs. Every fresh install since 0.2.0
stopped before its first window with "identity could not be established: that person is not a member of this
estate": the database Fabric sets up on first start gave its first Estate to an owner Fabric never runs as
(ADR-0131).
Fixed
- A new install opens its Estate. The database is set up with you as the owner of its first Estate, the same
way Fabric itself founds one. - An install of 0.3.2 or 0.3.3 that could not start, starts. On the next start Fabric finds the database
untouched and makes you its owner. Untouched means nothing happened in it but its creation, and at most an
agent asking for access while the start was failing. A database anyone has used is never changed this way.
The old first owner stays a member in the database beside you; nobody signs in as it, and no screen shows it. - When Fabric still cannot open the Estate, it says why. The startup window names the refusal and what Fabric
found, instead of "could not work out why".
Changed
- One universal DMG for Apple silicon and Intel Macs (
Fabric-0.3.4-universal.dmg, in place of-arm64.dmg).
Its Intel runtime was measured under Rosetta on an Apple silicon Mac
(receipt); the app has not yet been run on an
Intel Mac. How the universal app is built: release runbook, Universal macOS.
Upgrading. No schema change: a database at schema 79 (0.3.2, 0.3.3) opens as it is. A database a 0.3.0 or 0.3.1
install made (75 or 78), or a 0.2.0 one (69), is refused for its schema first: upgrade it to 79, backup and
rehearsal included, and the next start repairs it. If Fabric never opened a window on that Mac, the database holds
nothing, and the runbook names the shorter way
(release runbook).
Verify
gpg --verify SHA256SUMS.asc SHA256SUMS # key 63B30DC324BD697487AA31944FAFB8AEC803B6A7
shasum -a 256 -c SHA256SUMS --ignore-missing
gh attestation verify <file> --owner passioncode-ai --signer-repo passioncode-ai/.githubThe organization's public key: https://github.com/passioncode-ai/.github/blob/main/release-signing/passioncode-release-signing.asc
v0.3.3
Fabric becomes the way into PassionCode.ai: the first screen offers four actions, and the work behind the two agent
actions happens in the console of a coding agent you already use, not in a chat of Fabric's own
(ADR-0129,
ADR-0123). The CEO chat itself
stays in this release; it moves to a session in a later one (amendment 1 of ADR-0123).
Upgrading. No schema change: a database at schema 79 (0.3.2) opens as it is. A database still at 75 (0.3.0)
or 78 (0.3.1) needs the upgrade to 79 first, backup and rehearsal included
(release runbook).
- Four actions to start. The first run and + Project offer two pairs. Agent: create a new one, or adapt
one you built elsewhere. Project: open one (one folder, or a folder of them), or create one. The role agent of
a project is made from that project's Team. - Create an agent. A name, one sentence on what it will do, where its folder goes and which coding agent
builds it. Fabric creates the folder as a git repository and a project for it, then opens the coding agent's
console with thecreating-fabric-agentsskill; the agent asks the rest there, one question at a time. - Adapt an existing agent. Choose its folder: Fabric reads it without running anything and opens the coding
agent's console with theadapting-projects-to-fabricskill. The agent shows its plan and waits for your yes;
a folder that is not yet a repository is committed as it is first, with anything that looks like a secret kept
out; the work goes on a new branchfabric-adapter, and the conformance report says what passed. Fabric writes
nothing in the folder and does not admit the agent to its registry. - The Fabric Agent Adapter skills are checked before either starts, with the version: for Claude Code, Codex,
Kilo and Hermes in the folder each reads; for Cline and Kimi Code, which have no folder Fabric knows, only the
shared~/.agents/skills, and the screen says so. When they are missing, the one command that installs them is
shown to copy, with a note when it does not cover the chosen agent. Fabric installs nothing itself. - A retry is the same attempt. A launch that fails after the folder or the project was made continues with
the same folder, project and task, also after leaving the screen and coming back; a console that did not open
is brought forward again; Use another coding agent gives the same project a new task, and Start over is the
only way to another name or place. - A scanned project arrives with what its repository says it is (the manifest's description, else the
README's first paragraph), kept as the repository's words — "From README.md: …" — not as yours; a repository that
says nothing gets none. - "Set up this project with the agent", the first shortcut on a project's task panel and the scan's next
step: the agent reads the repository, records what it learns with the file each fact came from, asks you to
confirm a one-sentence purpose and files the next three pieces of work. It changes no file, and it runs only on a
coding agent that connects to Fabric's tools: by name, through a created agent, or through the fallback order,
which passes over agents that do not. - Fallback order (Settings): a list of coding agents a launch may walk, each with whether to start a new
session or use an open one; once set, «Fallback order → agent» is offered in the agents and task panels (ADR-0125). - Kimi Code is in the coding-agent list and the launch menu, launched as itself; it does not connect to
Fabric's tools. - Usage counts wait for your answer. They stay on by default, but a release build sends nothing, the install
included, until you have answered the switch once, on a first-run notice or in Settings
(ADR-0127, docs/ANALYTICS.md).
An install from 0.3.2, which may already have sent counts, is told so on that notice. - The launch screens follow the prototype: «Discuss with Fabric ↗» (it opens the CEO chat) and Profile in the
scope bar, the Fabric strip under it, a compact network-exposure warning, and nothing wider than the window. The default
workspace reads My workspace. - Smaller fixes on the project page: the toolbars wrap instead of running past the window, a task's subtitle
names its agent and date instead of a raw id, and Home's «+ Add a topic» opens the board with its form. - Russian. Every screen string, the startup failure dialog, the folder pickers and the app menu are in
Russian when the app is. Not yet: messages written by the main process, the terminal prompts of ACP agents and the
feed's verification tooltips are still in English (CO-225). - Provider pins move to the installed Claude Code and Codex versions; the README names the commercial-licensing
path (passioncode.ai/business).
Verify
gpg --verify SHA256SUMS.asc SHA256SUMS # key 63B30DC324BD697487AA31944FAFB8AEC803B6A7
shasum -a 256 -c SHA256SUMS --ignore-missing
gh attestation verify <file> --owner passioncode-ai --signer-repo passioncode-ai/.githubThe organization's public key: https://github.com/passioncode-ai/.github/blob/main/release-signing/passioncode-release-signing.asc
v0.3.2
A release built from a full audit of the 0.3.2 candidate (e19e1b9e, 0.3.1 plus the work merged after it): all 134 scenarios against their screens and code,
plus the trust boundaries (report). Every P0 and P1
finding is fixed or carried to a named row. It also ships the work that landed on main after 0.3.1.
- Schema 78 → 79 (migration
20261005000081_project_board.sql, the project board's core). Fabric 0.3.2
does not migrate an existing database itself: it refuses a database below schema 79 and names the upgrade
procedure (release runbook, upgrading an existing database).
Once a database is migrated to 79, Fabric 0.3.1 can no longer open it, so take the backup the procedure
asks for first. The rehearsal is one command:node scripts/rehearse-upgrade.mjsruns the upgrade on a copy
of your dump in a separate, disposable stack. - Usage counts, on by default in a release build, from the first start. Fabric sends installs, days of use
and how many projects, products and agents are connected, to PassionCode's self-hosted analytics. Every event
carries the app version, the OS name, a session id and a random installation id that every PassionCode app on
this Mac shares; never names, paths or content. Settings → Share usage counts turns it off for every
PassionCode app on the Mac (docs/ANALYTICS.md). Builds from source send nothing. - The project board. Agents that connect to Fabric's surface (Claude Code, Kilo, Hermes) get the project-board tools (
com.submit,com.list,
com.get,com.read_ack,com.status): durable, project-addressed messages that survive the session
(ADR-0117). - More coding agents in the launch menu: Kilo Code, Hermes Agent and Cline. Hermes runs over the Agent Client
Protocol through Fabric's terminal shell; Kilo through its session-config variable
(ADR-0119). - The editor never damages a file it cannot show as text. Binary and non-UTF-8 files open read-only and
are never written back; a save no longer rebuilds the editor, so typing during a save is kept; "Keep mine"
overwrites only the version you were shown; a conflict puts the focus on its explanation, not on the
destructive button. - Agents run through ACP behave. A turn has no two-minute deadline; a line typed ahead never answers a
permission question, and Ctrl-C during one answers it as cancelled; stopping an agent ends its whole process
group, including the tools it started, even when Fabric has to force the stop; Kilo and Hermes do not start
in a mode their bundle cannot honour; one failed request no longer closes the stdio bridge. - Your project's servers go with Fabric's surface to every agent that connects to it. Hermes, which takes no HTTP MCP servers,
reaches each granted server through its own stdio bridge; a session whose granted servers cannot be carried
is not opened. - Cline asks before each tool. It now starts in Ask (
--auto-approve false); Bypass is the only mode in
which it approves tools on its own. - Keys stay out of transcripts in more spellings: Kilo's config, ACP header pairs, the bridge's
FABRIC_BRIDGE_AUTHORIZATION, escaped JSON and Python dicts (ADR-0119, amendment 4). - Not yet: restoring a private-history archive into a new estate does not bring back project-board messages
(CO-212); the archive keeps the board's events, not its stored messages. - Attention, Board, digest and history read true. A granted refusal leaves the queue and repeats are one
item; an answered question keeps its receipt on the Board screen (the project page's panel does not yet, CO-222); the digest no longer marks lines read while you read
them and is no longer cut at 1000 rows; an agent's history shows its newest 200 events and says when earlier
ones may exist. - Windows hold only Fabric. A window can show only Fabric's own page, links leave for your browser, the
built page carries a Content-Security-Policy, and the bridge refuses any other caller. A failure in a window
is sent to Diagnostics; a broken screen shows a recovery screen, and a window whose page process died is
reloaded instead of staying blank. - Fabric tells you when your local database is reachable from the network. The Supabase CLI publishes the
stack's ports on every interface with its default password, and Fabric cannot bind them to this Mac alone.
Fabric checks after start and again while it is open, at most about ten minutes apart (and retries a check
that failed); if the ports answer on your network address, a warning above every screen gives the remedy for
OrbStack or Docker Desktop.
Verify
gpg --verify SHA256SUMS.asc SHA256SUMS # key 63B30DC324BD697487AA31944FAFB8AEC803B6A7
shasum -a 256 -c SHA256SUMS --ignore-missing
gh attestation verify <file> --owner passioncode-ai --signer-repo passioncode-ai/.githubThe organization's public key: https://github.com/passioncode-ai/.github/blob/main/release-signing/passioncode-release-signing.asc
v0.3.1
- The hub: a local agent reaches a cloud product through Fabric, on your consent
(ADR-0115). Fabric listens
for agents registered on this Mac on a stable loopback port,FABRIC_HUB_PORT(default 47070), published in
~/Library/Application Support/ai.passioncode.fabric/hub.jsonbeside a door token (both 0600, rewritten on
start, removed on quit). An agent asks once withfabric.access.request; you answer once in a native prompt,
or from the attention queue when Fabric is in the background; on Allow the agent collects a revocable binding
credential and calls the product withagent.call, narrowed by your grants and again by the product.
Settings → Agent access lists products, waiting requests, agents with their grants (Revoke, Revoke all)
and standing denials (Clear). - Fabric Inbox connects once, by its own consent. Connect opens the Fabric Inbox app; its key goes to
Project Observatory's vault, never into Fabric's database or logs. It needs a Fabric Inbox server with
account narrowing (fabric-inbox#24). Fabric checks that the runtime reports version 0.9.0 or later, but a
version check does not prove narrowing: the deployed source and a live acceptance remain open (CO-195,
fabric-inbox#26). The 0.9.0 app supplies the connect link. - Hardening from three verification iterations: a per-request poll secret, so only the agent that asked
can read its answer and collect its credential; the registry reads regular files only and never blocks the
app; the connect callback answers the product within its 10 seconds and keeps nothing it could not confirm,
except a late record whose withdrawal itself failed, which stays and is shown to you as such; hub authority
restored from an archive comes back revoked, for you to approve again; each estate keeps its own product
secret slot; the consent, grant and queue wording is in English and Russian; a call whose outcome is unknown
is never sent again under the same key; a caller that disconnects no longer holds an admission slot; quitting
can no longer hang on a special file planted athub.json. - First run shows whether Claude Code and Codex are signed in (CO-176), read with each tool's own read-only
status command on the exact builds Fabric has verified; any other answer is shown as unknown, never as signed
in, and the step never waits for it. - Stopping an agent: asking again to stop a Claude Code or Codex run whose stop was already sent answers with
that first outcome instead of a refusal that would read as "nothing was sent". - Smaller fixes: the onboarding launcher no longer covers the project controls, onboarding scrolls inside
narrow windows, and restoring saved drafts reads one consistent snapshot. - Schema 75 → 78 (migrations 76, 77 and the file with suffix 80; the schema version is the migration count).
Fabric 0.3.1 does not migrate an existing database itself: it refuses a database below schema 78 and names the
upgrade procedure (release runbook, upgrading an existing database).
Once a database is migrated to 78, Fabric 0.3.0 can no longer open it, so take the backup the procedure
describes first. - Not done yet:
agent.calltakes product tool names the agent contract'scapabilityNamepattern refuses
(CO-193); a session Fabric starts cannot reach a product through Fabric (CO-194); no live end-to-end run with
the Fabric Inbox app yet (CO-195); the knowledge base needs final released facts (CO-196); final-source workspace
publication and acceptance remain open (CO-197).
Verify
gpg --verify SHA256SUMS.asc SHA256SUMS # key 63B30DC324BD697487AA31944FAFB8AEC803B6A7
shasum -a 256 -c SHA256SUMS --ignore-missing
gh attestation verify <file> --owner passioncode-ai --signer-repo passioncode-ai/.githubThe organization's public key: https://github.com/passioncode-ai/.github/blob/main/release-signing/passioncode-release-signing.asc
v0.3.0
Release v0.3.0.
Verify
gpg --verify SHA256SUMS.asc SHA256SUMS # key 63B30DC324BD697487AA31944FAFB8AEC803B6A7
shasum -a 256 -c SHA256SUMS --ignore-missing
gh attestation verify <file> --owner passioncode-ai --signer-repo passioncode-ai/.githubThe organization's public key: https://github.com/passioncode-ai/.github/blob/main/release-signing/passioncode-release-signing.asc