heyquilt 0.3.109 → 0.3.116

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/README.md +34 -5
  2. package/RELEASES.md +93 -1
  3. package/assets/vendor/LICENSES.md +285 -0
  4. package/assets/vendor/mammoth.js +13 -0
  5. package/assets/vendor/marked.js +78 -0
  6. package/assets/vendor/xlsx.mjs +28228 -0
  7. package/bin/quilt.js +122 -8
  8. package/desktop/main.js +33 -3
  9. package/package.json +10 -2
  10. package/src/account.js +26 -3
  11. package/src/agent-join.js +1 -0
  12. package/src/ai-vm.js +65 -6
  13. package/src/api/api-machines.js +45 -0
  14. package/src/api/autoscale.js +71 -0
  15. package/src/api/cf-mail.js +46 -0
  16. package/src/api/fly-machines.js +10 -0
  17. package/src/api/join-text.js +19 -5
  18. package/src/api/leader.js +40 -0
  19. package/src/api/memory-store.js +80 -0
  20. package/src/api/releases.js +1 -1
  21. package/src/api/routes/agent-wake.js +112 -0
  22. package/src/api/routes/agents.js +71 -1
  23. package/src/api/routes/ai-vm.js +19 -3
  24. package/src/api/routes/github.js +14 -1
  25. package/src/api/routes/mail.js +422 -0
  26. package/src/api/routes/voice.js +132 -0
  27. package/src/api/scaler.js +70 -0
  28. package/src/api/server.js +53 -5
  29. package/src/api/supabase-store.js +64 -0
  30. package/src/autowork.js +12 -1
  31. package/src/branch-view.js +371 -0
  32. package/src/branchdocs.js +17 -1
  33. package/src/chat-links.js +41 -18
  34. package/src/connection.js +1 -1
  35. package/src/control.js +64 -11
  36. package/src/duties.js +12 -0
  37. package/src/gitstate.js +117 -8
  38. package/src/hooks.js +16 -11
  39. package/src/inbox-wait.js +59 -0
  40. package/src/inbox.js +22 -4
  41. package/src/integrations.js +7 -2
  42. package/src/key-cli.js +7 -5
  43. package/src/mail-address.js +105 -0
  44. package/src/mail-tools.js +143 -0
  45. package/src/mcp-proxy.js +2 -1
  46. package/src/mcp.js +55 -34
  47. package/src/merge3.js +43 -10
  48. package/src/on-mention.js +97 -0
  49. package/src/persona.js +1 -1
  50. package/src/protocol.js +2 -1
  51. package/src/quilts/archiver.js +168 -0
  52. package/src/quilts/blame.js +103 -0
  53. package/src/quilts/block.js +228 -0
  54. package/src/quilts/cbor.js +92 -0
  55. package/src/quilts/cli.js +254 -0
  56. package/src/quilts/client.js +92 -0
  57. package/src/quilts/conflict-format.js +190 -0
  58. package/src/quilts/describe.js +120 -0
  59. package/src/quilts/dogfood.js +82 -0
  60. package/src/quilts/events.js +146 -0
  61. package/src/quilts/export-git.js +126 -0
  62. package/src/quilts/export.js +81 -0
  63. package/src/quilts/fastmerge.js +41 -0
  64. package/src/quilts/hash.js +44 -0
  65. package/src/quilts/ids.js +12 -0
  66. package/src/quilts/import-git.js +193 -0
  67. package/src/quilts/import.js +98 -0
  68. package/src/quilts/index.js +40 -0
  69. package/src/quilts/limits.js +67 -0
  70. package/src/quilts/live-block.js +251 -0
  71. package/src/quilts/live-square.js +104 -0
  72. package/src/quilts/merge.js +438 -0
  73. package/src/quilts/objects.js +139 -0
  74. package/src/quilts/pack.js +118 -0
  75. package/src/quilts/records.js +210 -0
  76. package/src/quilts/routes.js +89 -0
  77. package/src/quilts/service.js +815 -0
  78. package/src/quilts/setup.js +34 -0
  79. package/src/quilts/squares.js +239 -0
  80. package/src/quilts/store-memory.js +531 -0
  81. package/src/quilts/store-rpc.js +64 -0
  82. package/src/quilts/store-supabase.js +13 -0
  83. package/src/quilts/textdiff.js +96 -0
  84. package/src/quilts/tools.js +201 -0
  85. package/src/quilts/tree.js +351 -0
  86. package/src/quilts/window.js +119 -0
  87. package/src/quilts/xdiff.js +435 -0
  88. package/src/relay-ai-vm.js +31 -3
  89. package/src/relay-ask.js +34 -0
  90. package/src/relay-commit.js +37 -6
  91. package/src/relay-mcp.js +176 -45
  92. package/src/relay-outbound.js +40 -18
  93. package/src/relay-prune.js +196 -0
  94. package/src/relay-repo-moves.js +43 -0
  95. package/src/relay-sync.js +89 -10
  96. package/src/relay-turn-sync.js +28 -15
  97. package/src/relay-upstream.js +88 -3
  98. package/src/relay-webhooks.js +148 -34
  99. package/src/release-words.js +18 -0
  100. package/src/releases.js +1 -1
  101. package/src/say-args.js +21 -0
  102. package/src/secrets-client.js +14 -13
  103. package/src/server.js +539 -55
  104. package/src/session.js +718 -91
  105. package/src/setup.js +10 -5
  106. package/src/status.js +18 -5
  107. package/src/tasks.js +17 -6
  108. package/src/ui/agent-guide.js +17 -9
  109. package/src/ui/agent-place.js +0 -16
  110. package/src/ui/agents-table.js +102 -0
  111. package/src/ui/app.css +275 -25
  112. package/src/ui/app.js +69 -11
  113. package/src/ui/board.js +15 -2
  114. package/src/ui/boxes.js +12 -0
  115. package/src/ui/changes-seen.js +45 -0
  116. package/src/ui/changes.js +22 -1
  117. package/src/ui/chat.js +15 -8
  118. package/src/ui/cloud-ai.js +2 -2
  119. package/src/ui/common.js +4 -0
  120. package/src/ui/feedback-model.js +88 -0
  121. package/src/ui/feedback.js +166 -0
  122. package/src/ui/files.js +30 -6
  123. package/src/ui/fileview.js +73 -19
  124. package/src/ui/git-rule.js +28 -0
  125. package/src/ui/home.js +149 -92
  126. package/src/ui/invite.js +11 -9
  127. package/src/ui/loom-model.js +57 -40
  128. package/src/ui/loom.css +33 -18
  129. package/src/ui/loom.js +22 -8
  130. package/src/ui/preview-model.js +132 -0
  131. package/src/ui/preview.js +172 -0
  132. package/src/ui/rail-model.js +12 -9
  133. package/src/ui/rail.js +1 -1
  134. package/src/ui/session.js +238 -304
  135. package/src/ui/sounds.js +4 -1
  136. package/src/ui/voice-call.js +233 -0
  137. package/src/ui/voice-model.js +143 -0
  138. package/src/ui/voice-worklet.js +26 -0
  139. package/src/ui/voice.js +280 -0
  140. package/src/ui-server.js +119 -5
  141. package/src/voice.js +184 -0
  142. package/src/wake-tool.js +76 -0
  143. package/src/wake.js +79 -0
  144. package/src/webhook-cli.js +62 -0
  145. package/src/webhooks.js +25 -9
package/README.md CHANGED
@@ -238,6 +238,7 @@ See [Claims](#claims).
238
238
  | `quilt_project_rules` | The project's rules for AI, the same for every tool: AGENTS.md (root and folders, else CLAUDE.md), Cursor rules that always apply, and the design system (DESIGN.md, or the file AGENTS.md names with `Design system: <path>`) |
239
239
  | `quilt_inbox` | What is waiting for you: mentions (`@yourname`), direct messages and tasks handed to you since you last looked |
240
240
  | `quilt_webhook_subscribe` / `quilt_webhook_unsubscribe` | Have each mention, direct message and handed-over task POSTed to a URL of yours as it happens, signed; or stop that |
241
+ | `quilt_webhook_test` | POST a signed `webhook.test` event to your webhook now, and say what the receiver answered |
241
242
  | `quilt_check_update` | Whether the Quilt you run (your image) is current; an old one is told to update the app |
242
243
  | `quilt_send_file` | Send a project file through chat (secrets and paths outside the project are refused) |
243
244
  | `quilt_get_file` | Download a shared file (again) |
@@ -412,11 +413,39 @@ A receiver that is down or answers 5xx is tried again a few times; whatever was
412
413
  POSTed is still in `quilt_inbox`. `events` narrows the subscription; calling
413
414
  again replaces it; `quilt_webhook_unsubscribe` ends it.
414
415
 
415
- For a hosted agent the relay delivers, so the webhook works even when the agent
416
- itself is asleep, and the subscription carries over when it joins another
417
- session. For an agent joined from a computer, its Quilt delivers and keeps the
418
- subscription in that folder's `.quilt/webhook.json`. URLs must be `https` and
419
- public (an agent on a computer may also use `http` on that computer).
416
+ `quilt_webhook_test` POSTs a `webhook.test` event now (signed like any other) and
417
+ says what the receiver answered. With `coalesce: true` a burst wakes the agent once:
418
+ events are gathered for 2 s, and any that follow within 30 s of a POST go together in
419
+ one more POST; a POST with several carries the first one's fields on top (the shape
420
+ above) and all of them, oldest first, in `events` (with `count`). Without it, one POST
421
+ per event.
422
+
423
+ The relay keeps and sends every agent's webhook, hosted or joined from a computer
424
+ (`quilt join`), so it works while the agent, or its computer, is asleep; it is one
425
+ webhook per agent, and it covers each session the agent is in (a hosted agent's, and
426
+ each one an agent on a computer connects to). So an agent that only has an invite
427
+ link joins, subscribes once, and is woken from then on with nothing else set up. URLs
428
+ must be `https`, without credentials, and every address the host resolves to must be
429
+ public, checked when it is set and again before each POST; redirects are not followed.
430
+ An agent on a computer may also use `http` to that computer (a receiver running next
431
+ to it): that one its own Quilt sends, while it is awake.
432
+
433
+ From a shell, the same webhook:
434
+
435
+ ```
436
+ quilt join <invite> --webhook-url https://example.com/hook --webhook-bearer-env MY_HOOK_KEY
437
+ quilt webhook set https://example.com/hook --bearer-env MY_HOOK_KEY [--coalesce]
438
+ quilt webhook # status: URL, events, who sends it, the last POST
439
+ quilt webhook test
440
+ quilt webhook clear
441
+ ```
442
+
443
+ Keys are given by environment variable name (`--bearer-env`, `--secret-env`), never on
444
+ the command line, and are never shown again. A folder that subscribed with an older
445
+ Quilt (which sent the webhook from the computer, kept in `.quilt/webhook.json`) hands
446
+ it to the relay, same URL and secret, the next time it is let in; from then on only
447
+ the relay sends it, so the agent is not woken twice. A relay too old to keep it leaves
448
+ it with the computer, as before.
420
449
 
421
450
  ### Agents in workspaces
422
451
 
package/RELEASES.md CHANGED
@@ -11,6 +11,96 @@ Format: `## <version> — <YYYY-MM-DD>`, an optional one-line summary, then bull
11
11
  Lead each bullet with a short bold phrase. Inline `code` and **bold** are rendered;
12
12
  nothing else is.
13
13
 
14
+ ## 0.3.116 — 2026-10-25
15
+
16
+ - **Source control has its own command, `seam`.** Quilt Source's git verbs (`seam log`, `seam merge`, `seam checkout`…) now come from their own package, `@heyquilt/seam`, with their own sign-in (`seam login`) and their own MCP server (`seam mcp`, tools named `seam_*`). The Quilt app's `quilt` command and Quilt's MCP no longer carry source control: Quilt sessions and Quilt Source are separate products. Block folders now hold `.seam/block.json`, and agents give seam their key with `SEAM_TOKEN`. The docs at frame.heyquilt.com say the same.
17
+
18
+ ## 0.3.115 — 2026-10-25
19
+
20
+ 0.3.114 did not finish publishing, so this release carries it.
21
+
22
+ - **Quilt Source has its own site.** frame.heyquilt.com now opens on a page that says what Quilt's source control is (quilts, squares, patches and blocks, how a square gets to main, what happens to a conflict, how agents use it), with docs: getting started, git commands side by side, squares and merging, agents, and the HTTP API. Your repos are under Your repos, and old repo links still work.
23
+ - **A repo's home page.** A repo opens on its numbers (patches on main, patches this week, open squares, conflicts, how long squares take to merge, each with its trend), its files with the last patch that changed each one, patches a day for the last month, its README, what it's written in, its open squares, and who works on it.
24
+ - **A fresh import takes merges at once.** Right after `quilt import git`, merging into main was refused for an hour because the imported history counted against main's hourly merge limit. Imported patches no longer count.
25
+ - **Your cloud AI runs the newest Quilt on its machine.** When your cloud AI updated Quilt on its machine (by running the install script), its AI tool's Quilt tools and hooks kept running the version the machine was made with, and the AI could not fix that by itself. Now the machine's `quilt` command, and the Quilt tools and hooks of every AI tool on it, run whichever installed Quilt is newest, and a machine with a newer one installed starts on it the next time it goes idle.
26
+
27
+ ## 0.3.114 — 2026-10-25
28
+
29
+ - **Quilt Source has its own site.** frame.heyquilt.com now opens on a page that says what Quilt's source control is (quilts, squares, patches and blocks, how a square gets to main, what happens to a conflict, how agents use it), with docs: getting started, git commands side by side, squares and merging, agents, and the HTTP API. Your repos are under Your repos, and old repo links still work.
30
+ - **A repo's home page.** A repo opens on its numbers (patches on main, patches this week, open squares, conflicts, how long squares take to merge, each with its trend), its files with the last patch that changed each one, patches a day for the last month, its README, what it's written in, its open squares, and who works on it.
31
+ - **A fresh import takes merges at once.** Right after `quilt import git`, merging into main was refused for an hour because the imported history counted against main's hourly merge limit. Imported patches no longer count.
32
+ - **Your cloud AI runs the newest Quilt on its machine.** When your cloud AI updated Quilt on its machine (by running the install script), its AI tool's Quilt tools and hooks kept running the version the machine was made with, and the AI could not fix that by itself. Now the machine's `quilt` command, and the Quilt tools and hooks of every AI tool on it, run whichever installed Quilt is newest, and a machine with a newer one installed starts on it the next time it goes idle.
33
+
34
+ ## 0.3.113 — 2026-10-24
35
+
36
+ - **@you is for you, @you's AI is for your cloud AI.** The AI sessions on your computer (Claude Code, Cursor, Codex…) no longer read, get woken by or have to answer @mentions of you, direct messages to you or tasks for you: those are yours, and you see them in the app as before. Your AI on your computer only does what you ask it at the keyboard. "@Daniel's AI" is your cloud AI, which answers what is written to it. Agents that joined as their own members still get what is written to them. A file handed to you in its file queue still reaches the AI working on it.
37
+ - **Your cloud AI stays connected.** A cloud AI whose session connection stayed down after its machine slept or the relay restarted heard nothing until its machine was restarted; it now joins again by itself within a couple of minutes. Cloud AI machines also move to the newest Quilt when they go idle, so they no longer run the version they were made with.
38
+ - **One agent invite, in three steps.** The invite you paste into an AI now walks it through: register and connect (the CLI, a sandbox key or HTTP, from the same invite), choose how Quilt wakes it, then work. The invite page, the reply an agent gets when it registers and `quilt agent join` say the same.
39
+ - **Agents choose how Quilt wakes them.** `quilt_wake` (CLI: `quilt wake`) lists the ways that fit the agent and sets one up: a webhook, email, a command Quilt runs on its computer, `quilt inbox --wait`, MCP push, a schedule (it checks every few minutes) or its turns. Choosing one switches the others off, so nobody is woken twice. Until an agent chooses, every answer reminds it.
40
+ - **Wake by email.** An agent can give Quilt an inbox it watches: Quilt emails it a code to confirm the address, then sends each mention, direct message, task or email for it there (a few at once come as one email), from the session's own address.
41
+ - **See how each agent wakes.** `quilt_status` lists every agent in the session and how Quilt wakes it, so you know whether an @mention reaches it now; an agent's row in the Agents table says it too, or that it hasn't chosen yet.
42
+ - **Branches cherry-picked into main leave the session.** A branch whose commits are already in the branch it started from as the same changes (cherry-picked or rebased in by hand, with no pull request) counts as merged, so it leaves the session and its GitHub branch is deleted, as a merged pull request's does.
43
+ - **See inside Quilt's source control.** A new dashboard, its own app at frame.heyquilt.com (signing in with your Quilt account), shows every repo you're in the way a git host does: its files at any revision with blame, its history of patches with each one's diff, its squares (the work still open, merged or dropped, who holds each one and whether it is stuck in a conflict), and an activity list of what was opened, merged and abandoned. Agents' work is marked, so you can tell it from people's.
44
+
45
+ ## 0.3.112 — 2026-10-24
46
+
47
+ A branch costs only what changed on it.
48
+
49
+ - **Branches keep only their changes.** A branch started in a session from now on holds only the files it changed relative to git, not a copy of the whole project: an agent's task branch that touches five files costs five files on the relay, not the whole repository. Every other file is git's, read from your folder's own checkout, or by the relay from GitHub for hosted agents and chat links. Edits, deletions and files coming back reach everyone as before, and commits that land on the branch are merged into the session's files as before. Branches already in a session keep their full copy until they leave. An app from before this version is asked to update before it can open one of these branches.
50
+ - **An agent's folder leaves a merged branch.** When the branch an agent's folder is on is merged, the folder goes back to the branch it was merged into by itself, so the finished branch can leave the session. A folder with changes not committed yet stays, and says why. People's folders are never moved.
51
+ - **Committing work boxed while you were away opens its box.** Edits made while Quilt was off are boxed when it starts again; committing them now lets them into everyone's folder, as committing any other boxed work does.
52
+
53
+ ## 0.3.111 — 2026-10-24
54
+
55
+ - **Every session has an email address.** Each session gets its own, like `teal.otter@agents.heyquilt.com` or `teal.saw@agents.heyquilt.com`, the first time someone asks for it, and keeps it for good: no other session ever gets it, so accounts made with it stay the session's. Agents read the mailbox with `quilt_mail`, send from it with `quilt_mail_send` (50 emails a day per session, at most 10 recipients each), and sign up for the services a task needs with it, keeping the logins in the session's secrets.
56
+ - **Email agents wake on mail.** `quilt_mail_wake` makes an agent (or your cloud AI) one of the session's email agents: every mail that arrives wakes it, in `quilt_inbox`, on its webhook (`email.received`) and on its cloud machine. Mail to `<address>+<name>@agents.heyquilt.com` wakes that one member for that message. Each mail also shows in the chat as a line from Quilt. Mail to an address no session has bounces.
57
+ - **Sessions can email each other.** Mail from one session's address to another's (or to its own) is handed over inside Quilt, so it arrives at once and never leaves for the internet.
58
+ - **Only the owner can stop a session sending.** The session's owner can turn sending off for the session; mail still comes in.
59
+ - **One webhook, sent by the relay, for every agent.** `quilt_webhook_subscribe` from an agent joined from a computer is now kept and sent by the relay too, as for a hosted agent: it wakes the agent while its computer sleeps, in every session it connects to, with the same signed payload. A folder's older `.quilt/webhook.json` is handed over the next time it's let in, and only the relay sends it from then on. `quilt_webhook_test` pings it; `coalesce: true` turns a burst into one POST; the relay checks the receiver's address before every POST. From a shell: `quilt webhook set|test|clear`, or `quilt join --webhook-url <url> --webhook-bearer-env VAR`.
60
+ - **Finished and forgotten branches leave the session by themselves.** A branch merged into another one the session follows leaves at once, whether through a pull request or merged by hand, and its branch on GitHub is deleted (never one with an open pull request). A branch nobody worked on for a week leaves too, whoever started it; any changes it had that aren't on GitHub are kept by the relay for 30 days. Never the default branch or main, and never a branch someone is on. Quilt says what left in the chat, and checking a branch out again brings it back. Sessions stay small, so they start new branches without hitting their size limit.
61
+
62
+ ## 0.3.110 — 2026-10-23
63
+
64
+ One of you, and your cloud AI.
65
+
66
+ - **Agents wake on a mention without a webhook.** `quilt join --on-mention "<command>"` runs your command each time you're mentioned, sent a direct message or handed a task or file, with the event (the webhook's JSON) on stdin and in `QUILT_EVENT`; one at a time, kept for the folder. `quilt inbox --wait` waits for the next one and prints it (`--json`, `--timeout`; exit 2 on timeout).
67
+ - **Agents without hooks stitch on the loom.** An agent on the command line (no Claude Code or Cursor hooks) shows its needle while it says `quilt_set_work` "working", or while Quilt sees it editing, and stops when it says "done" or goes quiet. Agents are told to say "working" when they start.
68
+ - **`quilt say` takes several @mentions.** `quilt say "@Brandon @Daniel Carmichael the fix is in QA"` now sends the message to the room with every mention, multi-word names included, instead of printing the usage line; `quilt say @bob hi` is still a direct message, and `quilt say --help` prints help instead of sending it.
69
+ - **Your cloud AI wakes when you show up.** Opening a session it follows, or editing, writing or adding a task there, wakes your cloud AI if it's asleep (no Wake now needed), and it stays up while you work. Left alone, it still goes to sleep after ten quiet minutes.
70
+ - **Voice calls in the chat.** Call in the chat's header starts one; a call going on is pinned to the bottom of the chat, above the message box, with who is in it and Join. In the call it holds mute, leave and a ring around whoever is speaking. Your voice goes straight to the others, never through Quilt's servers. On a Mac, Quilt asks once to use the microphone.
71
+ - **Transcripts, live in the chat, only with your say-so.** The session owner turns transcripts on from the call. Nobody is written down until they agree: joining a transcribed call asks first, and anyone can stop being transcribed. Each line appears in the pinned call as it's said, named for whoever said it; a finished call stays in the chat as a card that opens its whole transcript. Audio is never kept. Every agent reads the same lines with `quilt_voice_transcript`, and `quilt_status` tells agents who is in a call and whether it is transcribed.
72
+ - **A repository moved on GitHub takes its branches along.** When a repository is transferred to another owner (DanielCarmichaelGit/heyquilt to Hey-Quilt/heyquilt, say), the session's other branches of it, an agent's old branch with no folder on it, now follow the new name too, so they sync with GitHub again instead of saying nobody has connected GitHub.
73
+ - **Your AI sessions are you.** The AI sessions on your computer (Claude Code, Cursor, Codex) no longer show up as members of their own ("Daniel · Claude Code 3"). What they say, claim and work on is yours, under your name. The only other one of you is "Daniel's AI", your cloud AI, once you connect one. Names like "Daniel · Claude Code 7" from older apps and in past chat show as their person.
74
+ - **A tidier top bar.** The session's name sits beside the logo, with a green dot while you're connected and a red one when you're not. Its menu lists your sessions on this computer, so you can jump to an open one or rejoin an earlier one, then rename, session settings, AI rules, ask for a commit and leave. Your picture at the right holds Settings and Shut down Quilt. Invite is part of the people button, and Open shows your AI app's logo. Every button is the same height, and the people list opens on a click like the rest instead of on hover.
75
+ - **Settings with a list on the left.** Settings (from your picture) is a wider window (80% of the app's width) with its sections down the left: Agents, Source control, You, Session and Account. Click one to see its settings beside the list.
76
+ - **The left sidebar shows everyone's boxes instead of the files.** It lists who is in the session, what each person and AI is working on, and their boxes (the files they're changing that aren't in everyone's folder yet), so you can see who is on what at a glance. Click a box to see its change in place, ask for it, or Unpack your own. The file directory is gone from the app: files open from the git panel, the Loom and the lock list, and from your editor as before.
77
+ - **A line between people in the Boxes sidebar, and their files folded away.** A dashed line now divides each person (and AI) in the left sidebar, and a person's boxed files are hidden under one line ("2 files not in your folder yet"). Click it to see the files, and again to fold them away.
78
+ - **Click a file to see it.** A file someone drops in the chat now opens in the middle when you click it, shown as what it is instead of a download: markdown drawn nicely (headings, lists, tables, links) with a Raw switch for its text, pictures (PNG, JPEG, GIF, WebP) and SVG, PDFs, spreadsheets (Excel .xlsx and .xls, OpenDocument), Word documents (.docx), CSV as a table, video and audio. Files of the session you open from the git panel, the Loom or the lock list show the same way. Anything else, like an old .doc, shows its name and size with a Download button. The workspace file panel shows markdown, spreadsheets and Word files too.
79
+ - **Report a bug and Suggest a feature.** Two round buttons sit at the bottom left, under the sidebar at Home and under the Boxes pane in a session. Each opens a short form: what went wrong (with a screenshot you choose, paste or drop in) or your idea. Sending it adds a task in To do on the session's board, "Bug: ..." or "Feature idea: ...", with your details as its note; a screenshot is posted in the session's chat. An idea is marked **Not for auto pickup**, so no AI starts on it by itself (nor when its task is handed to an AI that works on its own) until someone clicks the badge on its card to clear it. Any card's ⋯ menu can set the flag too. At Home with more than one session running, the form asks which one.
80
+ - **The source-control button never shows up empty.** In a folder without git, with nothing changed, the button in the top bar was a blank square. It now shows a branch icon.
81
+ - **Shut down is quick again.** Quitting Quilt waited for every AI tool connected to a session to hang up first, which could take more than a minute. It now closes those connections and stops all your sessions at once, in well under a second.
82
+ - **Opening Quilt twice while it starts no longer errors.** Opening Quilt (or an invite link) while it was still starting showed "Cannot read properties of null". It now just opens once it's ready.
83
+ - **Unfinished work isn't shown as about to free up.** In the locked-files list, a file someone changed but hasn't committed yet said "frees any moment" however long ago they stopped. It now says it's held until committed, since nobody else gets those changes before then.
84
+ - **A file you stop sharing lets go of its box.** Work on a file that's since been added to `.gitignore` can never be committed, so it used to stay held as yours forever. Now its box lets go as soon as the file is ignored.
85
+ - **Your cloud AI never strands your files.** When your cloud AI stopped with work it hadn't committed (it reached its daily cap, its AI tool ran out of usage, or its machine stopped), that file stayed held by it, and nobody could edit it. Now, once your AI has been gone five minutes, the work comes to you: it's written into your folder, held as yours until you commit it. If someone was waiting for the file, they get it instead. If your AI carries on before you touch the file, it takes the file back.
86
+ - **Your pulls never undo your own work when a held file comes back.** If you pulled several times while someone held a file, Quilt kept a note per pull and merged each one in separately when they let go. A note made after your folder had moved on could read your own earlier changes as the session deleting them, and put old code back in your folder. Your changes now go in as one merge, from the version you both last had.
87
+ - **Work handed to you that git already has lets go.** When your cloud AI's unfinished work comes to you and your git already has it (it reached GitHub another way), the file is freed at once instead of staying held until your next commit.
88
+ - **A file waiting for its holder is listed once.** It used to appear once per pull.
89
+ - **Workspaces are off for now.** Home lists your sessions again, and workspaces, workspace invites and your AI's workspace library tools (and `quilt workspace`) are gone from the app. Nothing in them is deleted; they come back if they turn out to be missed.
90
+ - **Agents in the sidebar, Home on top.** Home now sits above the Sessions menu, and Agents below it: your agents, Invite an agent, and each agent's keys, without going through Settings.
91
+ - **Agents as a table.** A row per agent with what it is, how many sessions it's been in, when it last connected (or that it's connected now) and when it was added. Click a row to open it in place: each session it was in over the last 30 days, with when it was last there and how it came in, where a hosted agent's webhook goes, and its keys.
92
+ - **Fetching keeps working when a repository moves.** After a repository moved to another owner on GitHub, Quilt kept using the sign-in it already had, which no longer worked, so Check said "git can't sign in to github.com from this folder" for up to an hour. It now drops a sign-in that stops working and gets a new one.
93
+ - **A repository that moves takes the session with it.** When a repository is renamed or moved to another owner on GitHub, GitHub tells Quilt, the session follows the new name, and each member's folder points `origin` at it by itself. No more "Connect GitHub" after a move, and no folder still on the old name pulling the session back.
94
+ - **A turn that's still going stays at the bottom of the Loom.** Turns are placed by their latest action or reply instead of their prompt, so an AI on a long task stays just above its needle while chat and other turns come in, and says "still going" by its time. When it finishes it stays where it ended.
95
+ - **heyquilt.com/download opens the download section.** A link to heyquilt.com/download (what a phone sends you) went to the API and showed "not found". It now opens the site's download section; installer links under /download/ still download.
96
+ - **heyquilt.com's demo is the app as it is today.** The hero shows the Boxes sidebar (who is working on what, and the files they hold back) instead of a file tree, lane heads with each conversation's piece of the Q (the one working laps it), the app's cards in its rows, and its needle piecing the Q, all drawn with the app's own styles.
97
+ - **heyquilt.com's header holds still.** Moving between pages no longer jolts the links: Sign in or Dashboard and the Download button keep what they found for the whole visit and always take the same width, and the current page's link no longer grows when it turns bold. Signed in, the header's loading placeholders are the height of what replaces them, so the bar doesn't jump when a dashboard page arrives.
98
+ - **Committing your work lets go of every file again on Windows.** Where git converts line endings (Git for Windows does by default), Quilt read the committed copy of a file cut short and took an AI's copy for different from it, so some files stayed boxed and held under your name after you committed them. Now git decides what counts as committed, and those files let go as they should.
99
+ - **On Windows, heyquilt.com's demo is a Windows window.** Visitors on Windows see the hero's Quilt window with Windows' title bar (minimize, maximize and close on the right) instead of a Mac's three dots, from the first paint.
100
+ - **heyquilt.com says what Quilt solves.** The problem section is rewritten around the three things that go wrong when everyone has an AI: you can't see what they're doing, people and AIs can't work as one team, and they overwrite each other. Each has a picture of it, and then what Quilt does about each one.
101
+ - **heyquilt.com shows how Quilt fixes each problem.** After the problem section, three rows answer it one for one: an opened turn of a teammate's AI in the Loom, a session chat where an AI answers and a board it works from, and the same checkout.js kept this time. The features grid and the agents section fold into them, and How it works moves down to just before pricing.
102
+ - **An agent's git no longer asks for a Username now and then.** Quilt rewrote its credential helper in the folder's git config every time it checked it, and a fetch or push that started in that moment got no sign-in. It now leaves a helper that is already right alone.
103
+
14
104
  ## 0.3.109 — 2026-10-20
15
105
 
16
106
  "Your AI" is your cloud AI, and only that.
@@ -19,7 +109,6 @@ nothing else is.
19
109
  - **"Daniel's AI" is your cloud AI.** Connected, your cloud AI is named "Daniel's AI": what anyone writes or hands to your AI goes to it, whether or not you have AI sessions open. Without one, nobody is "Daniel's AI".
20
110
  - **Nothing is pushed to the AI sessions on your computer.** Messages, mentions and tasks for your AI no longer land in whichever session you used last, and your computer never starts a run on its own: work for your AI waits on the board until you ask your AI for it. The "When work comes to your AI" settings are gone with it.
21
111
  - **Your cloud AI talks caveman.** It answers in short, plain sentences (the caveman skill, for Claude Code, Codex and Cursor), so its notes cost fewer tokens. Code, commands, paths and commit messages stay exact.
22
- - **Workspaces are off for now.** Home lists your sessions again, and workspaces, workspace invites, the Agents page and your AI's workspace library tools (and `quilt workspace`) are gone from the app. Nothing in them is deleted; they come back if they turn out to be missed.
23
112
  - **The git panel shows only your work not committed.** It used to count every file anyone in the session had changed (14, say), with nothing about whose they were. Now it lists just yours and your AIs', in two lines: boxed (only in your folder so far) and shared (everyone has them); click either to see its files. The count in the top bar is yours too, and Commit and push commits only your files, leaving everyone else's for them.
24
113
 
25
114
  ## 0.3.108 — 2026-10-19
@@ -34,6 +123,9 @@ nothing else is.
34
123
 
35
124
  0.3.105 didn't publish (GitHub didn't run its builds), so it comes with this one.
36
125
 
126
+ - **Cards wear a corner piece.** In the Loom, on the board and on heyquilt.com, a card's colour is now a small half-square in its bottom-right corner (the shape of the Q's tail) instead of a coloured left edge: solid for a turn, small on a lightly dyed chat, hatched for a task. Board cards show their owner's colour, whoever they are. Requests and file notes get a vermilion corner, and in dark mode lane colours are lifted so every one stays easy to see.
127
+ - **heyquilt.com on phones and tablets.** On a phone, the download buttons offer to send you the link (or copy it) so you can open it on your computer, instead of offering an installer the phone can't run; iPads are recognised too. On tablet-width screens the header's links fold into the menu, so nothing is cut off.
128
+ - **Taking a second task keeps the first one's work where it is.** An agent's folder stays on its task's branch while that task is still open, even before it's pushed, and never leaves a branch with changes not committed yet (it says why), so one task's edits no longer come along into the next task's pull request.
37
129
  - **Agents' folders are git checkouts again.** The relay's newer git no longer came with the part that serves git to agents (`git http-backend`), so agents' and cloud AIs' folders synced without git. It's back.
38
130
  - **A relay that can't serve git says so.** If its git ever lacks that part again, the relay logs it at start and agents' folders use GitHub's git instead of failing; a failed git request through the relay is logged with what git said.
39
131
  - **An agent's main is the session's main.** When several branches in a session started from main, the relay could give agents' folders an old main from one of them. Now they get the session's own main.
@@ -0,0 +1,285 @@
1
+ # Licenses of the libraries in this folder
2
+
3
+ Written by `node scripts/vendor-preview.mjs`; do not edit by hand.
4
+
5
+ ## marked 18.1.1 (marked.js, from lib/marked.esm.js)
6
+
7
+ ```
8
+ # License information
9
+
10
+ ## Contribution License Agreement
11
+
12
+ If you contribute code to this project, you are implicitly allowing your code
13
+ to be distributed under the MIT license. You are also implicitly verifying that
14
+ all code is your original work. `</legalese>`
15
+
16
+ ## Marked
17
+
18
+ Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/)
19
+ Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)
20
+
21
+ Permission is hereby granted, free of charge, to any person obtaining a copy
22
+ of this software and associated documentation files (the "Software"), to deal
23
+ in the Software without restriction, including without limitation the rights
24
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
25
+ copies of the Software, and to permit persons to whom the Software is
26
+ furnished to do so, subject to the following conditions:
27
+
28
+ The above copyright notice and this permission notice shall be included in
29
+ all copies or substantial portions of the Software.
30
+
31
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
37
+ THE SOFTWARE.
38
+
39
+ ## Markdown
40
+
41
+ Copyright © 2004, John Gruber
42
+ http://daringfireball.net/
43
+ All rights reserved.
44
+
45
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
46
+
47
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
48
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
49
+ * Neither the name “Markdown” nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
50
+
51
+ This software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.
52
+ ```
53
+
54
+ ## xlsx 0.20.3 (xlsx.mjs, from xlsx.mjs)
55
+
56
+ ```
57
+ Apache License
58
+ Version 2.0, January 2004
59
+ http://www.apache.org/licenses/
60
+
61
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
62
+
63
+ 1. Definitions.
64
+
65
+ "License" shall mean the terms and conditions for use, reproduction,
66
+ and distribution as defined by Sections 1 through 9 of this document.
67
+
68
+ "Licensor" shall mean the copyright owner or entity authorized by
69
+ the copyright owner that is granting the License.
70
+
71
+ "Legal Entity" shall mean the union of the acting entity and all
72
+ other entities that control, are controlled by, or are under common
73
+ control with that entity. For the purposes of this definition,
74
+ "control" means (i) the power, direct or indirect, to cause the
75
+ direction or management of such entity, whether by contract or
76
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
77
+ outstanding shares, or (iii) beneficial ownership of such entity.
78
+
79
+ "You" (or "Your") shall mean an individual or Legal Entity
80
+ exercising permissions granted by this License.
81
+
82
+ "Source" form shall mean the preferred form for making modifications,
83
+ including but not limited to software source code, documentation
84
+ source, and configuration files.
85
+
86
+ "Object" form shall mean any form resulting from mechanical
87
+ transformation or translation of a Source form, including but
88
+ not limited to compiled object code, generated documentation,
89
+ and conversions to other media types.
90
+
91
+ "Work" shall mean the work of authorship, whether in Source or
92
+ Object form, made available under the License, as indicated by a
93
+ copyright notice that is included in or attached to the work
94
+ (an example is provided in the Appendix below).
95
+
96
+ "Derivative Works" shall mean any work, whether in Source or Object
97
+ form, that is based on (or derived from) the Work and for which the
98
+ editorial revisions, annotations, elaborations, or other modifications
99
+ represent, as a whole, an original work of authorship. For the purposes
100
+ of this License, Derivative Works shall not include works that remain
101
+ separable from, or merely link (or bind by name) to the interfaces of,
102
+ the Work and Derivative Works thereof.
103
+
104
+ "Contribution" shall mean any work of authorship, including
105
+ the original version of the Work and any modifications or additions
106
+ to that Work or Derivative Works thereof, that is intentionally
107
+ submitted to Licensor for inclusion in the Work by the copyright owner
108
+ or by an individual or Legal Entity authorized to submit on behalf of
109
+ the copyright owner. For the purposes of this definition, "submitted"
110
+ means any form of electronic, verbal, or written communication sent
111
+ to the Licensor or its representatives, including but not limited to
112
+ communication on electronic mailing lists, source code control systems,
113
+ and issue tracking systems that are managed by, or on behalf of, the
114
+ Licensor for the purpose of discussing and improving the Work, but
115
+ excluding communication that is conspicuously marked or otherwise
116
+ designated in writing by the copyright owner as "Not a Contribution."
117
+
118
+ "Contributor" shall mean Licensor and any individual or Legal Entity
119
+ on behalf of whom a Contribution has been received by Licensor and
120
+ subsequently incorporated within the Work.
121
+
122
+ 2. Grant of Copyright License. Subject to the terms and conditions of
123
+ this License, each Contributor hereby grants to You a perpetual,
124
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
125
+ copyright license to reproduce, prepare Derivative Works of,
126
+ publicly display, publicly perform, sublicense, and distribute the
127
+ Work and such Derivative Works in Source or Object form.
128
+
129
+ 3. Grant of Patent License. Subject to the terms and conditions of
130
+ this License, each Contributor hereby grants to You a perpetual,
131
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
132
+ (except as stated in this section) patent license to make, have made,
133
+ use, offer to sell, sell, import, and otherwise transfer the Work,
134
+ where such license applies only to those patent claims licensable
135
+ by such Contributor that are necessarily infringed by their
136
+ Contribution(s) alone or by combination of their Contribution(s)
137
+ with the Work to which such Contribution(s) was submitted. If You
138
+ institute patent litigation against any entity (including a
139
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
140
+ or a Contribution incorporated within the Work constitutes direct
141
+ or contributory patent infringement, then any patent licenses
142
+ granted to You under this License for that Work shall terminate
143
+ as of the date such litigation is filed.
144
+
145
+ 4. Redistribution. You may reproduce and distribute copies of the
146
+ Work or Derivative Works thereof in any medium, with or without
147
+ modifications, and in Source or Object form, provided that You
148
+ meet the following conditions:
149
+
150
+ (a) You must give any other recipients of the Work or
151
+ Derivative Works a copy of this License; and
152
+
153
+ (b) You must cause any modified files to carry prominent notices
154
+ stating that You changed the files; and
155
+
156
+ (c) You must retain, in the Source form of any Derivative Works
157
+ that You distribute, all copyright, patent, trademark, and
158
+ attribution notices from the Source form of the Work,
159
+ excluding those notices that do not pertain to any part of
160
+ the Derivative Works; and
161
+
162
+ (d) If the Work includes a "NOTICE" text file as part of its
163
+ distribution, then any Derivative Works that You distribute must
164
+ include a readable copy of the attribution notices contained
165
+ within such NOTICE file, excluding those notices that do not
166
+ pertain to any part of the Derivative Works, in at least one
167
+ of the following places: within a NOTICE text file distributed
168
+ as part of the Derivative Works; within the Source form or
169
+ documentation, if provided along with the Derivative Works; or,
170
+ within a display generated by the Derivative Works, if and
171
+ wherever such third-party notices normally appear. The contents
172
+ of the NOTICE file are for informational purposes only and
173
+ do not modify the License. You may add Your own attribution
174
+ notices within Derivative Works that You distribute, alongside
175
+ or as an addendum to the NOTICE text from the Work, provided
176
+ that such additional attribution notices cannot be construed
177
+ as modifying the License.
178
+
179
+ You may add Your own copyright statement to Your modifications and
180
+ may provide additional or different license terms and conditions
181
+ for use, reproduction, or distribution of Your modifications, or
182
+ for any such Derivative Works as a whole, provided Your use,
183
+ reproduction, and distribution of the Work otherwise complies with
184
+ the conditions stated in this License.
185
+
186
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
187
+ any Contribution intentionally submitted for inclusion in the Work
188
+ by You to the Licensor shall be under the terms and conditions of
189
+ this License, without any additional terms or conditions.
190
+ Notwithstanding the above, nothing herein shall supersede or modify
191
+ the terms of any separate license agreement you may have executed
192
+ with Licensor regarding such Contributions.
193
+
194
+ 6. Trademarks. This License does not grant permission to use the trade
195
+ names, trademarks, service marks, or product names of the Licensor,
196
+ except as required for reasonable and customary use in describing the
197
+ origin of the Work and reproducing the content of the NOTICE file.
198
+
199
+ 7. Disclaimer of Warranty. Unless required by applicable law or
200
+ agreed to in writing, Licensor provides the Work (and each
201
+ Contributor provides its Contributions) on an "AS IS" BASIS,
202
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
203
+ implied, including, without limitation, any warranties or conditions
204
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
205
+ PARTICULAR PURPOSE. You are solely responsible for determining the
206
+ appropriateness of using or redistributing the Work and assume any
207
+ risks associated with Your exercise of permissions under this License.
208
+
209
+ 8. Limitation of Liability. In no event and under no legal theory,
210
+ whether in tort (including negligence), contract, or otherwise,
211
+ unless required by applicable law (such as deliberate and grossly
212
+ negligent acts) or agreed to in writing, shall any Contributor be
213
+ liable to You for damages, including any direct, indirect, special,
214
+ incidental, or consequential damages of any character arising as a
215
+ result of this License or out of the use or inability to use the
216
+ Work (including but not limited to damages for loss of goodwill,
217
+ work stoppage, computer failure or malfunction, or any and all
218
+ other commercial damages or losses), even if such Contributor
219
+ has been advised of the possibility of such damages.
220
+
221
+ 9. Accepting Warranty or Additional Liability. While redistributing
222
+ the Work or Derivative Works thereof, You may choose to offer,
223
+ and charge a fee for, acceptance of support, warranty, indemnity,
224
+ or other liability obligations and/or rights consistent with this
225
+ License. However, in accepting such obligations, You may act only
226
+ on Your own behalf and on Your sole responsibility, not on behalf
227
+ of any other Contributor, and only if You agree to indemnify,
228
+ defend, and hold each Contributor harmless for any liability
229
+ incurred by, or claims asserted against, such Contributor by reason
230
+ of your accepting any such warranty or additional liability.
231
+
232
+ END OF TERMS AND CONDITIONS
233
+
234
+ APPENDIX: How to apply the Apache License to your work.
235
+
236
+ To apply the Apache License to your work, attach the following
237
+ boilerplate notice, with the fields enclosed by brackets "{}"
238
+ replaced with your own identifying information. (Don't include
239
+ the brackets!) The text should be enclosed in the appropriate
240
+ comment syntax for the file format. We also recommend that a
241
+ file or class name and description of purpose be included on the
242
+ same "printed page" as the copyright notice for easier
243
+ identification within third-party archives.
244
+
245
+ Copyright (C) 2012-present SheetJS LLC
246
+
247
+ Licensed under the Apache License, Version 2.0 (the "License");
248
+ you may not use this file except in compliance with the License.
249
+ You may obtain a copy of the License at
250
+
251
+ http://www.apache.org/licenses/LICENSE-2.0
252
+
253
+ Unless required by applicable law or agreed to in writing, software
254
+ distributed under the License is distributed on an "AS IS" BASIS,
255
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
256
+ See the License for the specific language governing permissions and
257
+ limitations under the License.
258
+ ```
259
+
260
+ ## mammoth 1.13.0 (mammoth.js, from mammoth.browser.min.js)
261
+
262
+ ```
263
+ Copyright (c) 2013, Michael Williamson
264
+ All rights reserved.
265
+
266
+ Redistribution and use in source and binary forms, with or without
267
+ modification, are permitted provided that the following conditions are met:
268
+
269
+ 1. Redistributions of source code must retain the above copyright notice, this
270
+ list of conditions and the following disclaimer.
271
+ 2. Redistributions in binary form must reproduce the above copyright notice,
272
+ this list of conditions and the following disclaimer in the documentation
273
+ and/or other materials provided with the distribution.
274
+
275
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
276
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
277
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
278
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
279
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
280
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
281
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
282
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
283
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
284
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
285
+ ```