Repository navigation
Add Claude Code, split connectors into triggers, workflows, and actions, and rework the UI - #2
Merged
Merged
Conversation
Driven through claude -p with stream-json, so runs can be watched and the answer comes from the result event. Read only allows just Read, Grep and Glob under dontAsk; workspace write uses acceptEdits plus Bash, since bypassPermissions is refused as root. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The runner reports the agents it has loaded, so one started before an agent was added kept saying that agent was on no runner. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Server functions use validator() instead of the deprecated inputValidator(), buttons rendered as links say they are not native buttons, and the agents page no longer exports its component, so the route can be code-split. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Only the app's own pages call server functions, so cross-site requests now get a 403. The /api routes runners use are not affected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Connection was always meant to be a shared bot, but the copy read as a personal login: workflows said "assigned to me" and nothing said which account to sign in as. The connector page now says so before connecting, the workflows name the bot, and the docs explain the setup and why it is not a GitHub App. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Plan and Implement for assigned issues give way to one Reply workflow, which keeps the old id so existing loops still run. Gmail's mail summary goes, since it was one person's inbox. Chat workflows name their bot, the schedule leads the list, and GitHub is the account the team sends work to, whether made for this or someone's own. The code-writing path stays in place with no workflow on it; its tests drive it through a test-only workflow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ettings as links. The form drops its explanations, folds what the workflow fixes away, and picks where the answer goes from one grouped list. The loop page puts on/off and Run or Check in the header, says what it does in one line, and keeps the tab in the URL. Cards no longer pad their tops twice. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Runs and loops sit as rows in one box instead of a card each. Loop order and delete move into a menu, the prompt box shrinks to a composer, and a run's log and details fold away until wanted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Connections show a quiet status dot, the join command gets a copy button, connector capabilities sit side by side, and page headers wrap on a phone. Long field help is cut to a line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Slack connection read as its workspace, so a bot in "Personal" was called Personal. It is now @bot · workspace. Waiting items each get their own Run, in place of running all of them at once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ox only. New loop opens with Custom and Schedule, then the connector workflows, and says how many loops of each you already have. A custom loop picks a trigger and starts with an empty prompt. Send to is a service and an action again, with the clock's "keep it" shown as Inbox, first. GitHub workflows drop the shared-account wording from their names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Service marks are from Simple Icons; Codex, Claude Code and Cursor from LobeHub Icons. Slack is coloured by quarter from its one-path mark. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gmail now asks to send as well as read, and offers Send an email with To and Subject on the loop. A connection made before this cannot send until it is reconnected, and says so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
They were open before the loop or held back by a rule, and neither runs by itself, so they no longer lead the Tasks tab. The line says why, and opens to the same list with a Run on each. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A browser may restore a fold as open before React takes over, and "5m ago" can land either side of a minute between server and browser. Both are marked as allowed to differ. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… answer itself. A connector now registers what can start a loop (triggers), ready-made jobs on them (workflows), and where an answer can go (actions). A custom loop is a trigger alone. Trigger ids are the old workflow ids, so saved loops and polls are unchanged. Gmail gets "An email arrives" back as a trigger, and its send action now emails the connected account, in the thread when the run began from one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ames. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
It has nothing to write, so it ended as Prepared, the state for a dry run holding a write back. It now ends as done, shown as Written, and a migration moves earlier ones across. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…agent, and drop team notes. A folder is stored like code/web and each runner looks for it under its own home, so a folder loop no longer has to run on Loopable's host. The runner checks the folder and names context files in its own workspace. Absolute folders from before still run on the host, and a migration turns ones under a home folder into relative paths. The folder moves to the Agent section of the form, and team notes go, with existing notes moved onto the prompt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…h runner. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Publishing now runs the tests too, and package.json pins the pnpm version CI and the Dockerfile use. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sion. pnpm release patch|minor|major checks git and npm, runs typecheck, tests, and build, then bumps, commits, tags, publishes, and pushes. --dry-run runs every check and lists what would be published without changing anything. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…old for them. A runner reports its loopable-cli version and a protocol number on joining and on every heartbeat; runners before this report neither and count as the first. Folder jobs need protocol 2, since a relative folder and the workspace placeholder mean nothing to an older runner. Such a job goes only to a runner that has it, a loop that has none says to upgrade, and the Runners page shows each runner's version and flags the old ones. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds Claude Code as an agent, splits what a connector offers into triggers, workflows, and actions, and reworks the app UI around shorter forms and denser lists. Also updates the docs and site to the new story.
Agents and runners
code/web), and each runner resolves it. Folder loops no longer have to run on Loopable's host. Older absolute paths still run there, and a migration turns paths under a home folder into relative ones.Triggers, workflows, actions
gmail.send, so existing connections need reconnecting to send.@bot · workspace.UI
?tab=tasks), on/off and Check/Run in the header, items that were not run folded into one line with a Run on each.Docs and site
Releasing
.github/workflows/ci.yml) runs typecheck, tests, and both builds on every PR and onmain. Publishing also runs the tests now, and pnpm is pinned.pnpm release patch|minor|majorpublishes only from a cleanmainthat matches GitHub: it runs every check, bumps, commits, tagsvX.Y.Z, publishes, and pushes.--dry-runchecks without changing anything.Testing
pnpm typecheckandpnpm test(364 tests) pass.pnpm dev, at desktop and phone width.Migrations
0025_prompt_tasks_done,0026_guidance_into_prompt,0027_relative_folders,0028_runner_versionrun when the dispatcher starts. Upgrade runners on other machines too (npm install -g loopable-cli): an old runner keeps working, but no longer takes folder jobs.🤖 Generated with Claude Code