Repository navigation
feat: linear issues in shipyard, with an api key that stays on your computer - #51
Merged
Merged
Conversation
…omputer Settings → Integrations takes a personal Linear API key. The laptop agent checks it with Linear, keeps it in linear.json in its state folder (0600) and makes every call itself: who you are, teams, a list of open issues, one issue with its comments, and posting a comment. The app's window, plugins and boxes are told who is connected, never the key. Issues gets a Linear side beside GitHub: what is assigned to you or a team's open issues, filters, the thread, comments after a confirm, and Start an agent in the project you choose, in a worktree named for the issue on the branch Linear suggests. Rows follow their agents. Home gets a Linear widget for what is assigned to you. Plugins get berth.linear and berth.openSettings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
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.
What you get
berth.linearandberth.openSettings.Where the key lives
The app's CSP only lets the window talk to the laptop agent, so the agent makes every call to Linear (
internal/agent/linear.go): a fixed set of reads and one write, a comment. The key is inlinear.jsonin the agent's state folder (0600). It is never returned by the API, logged, put in a URL or sent to a box.How it was checked
go vet ./... && go test -race ./..., all packages pass (new tests run against a fake Linear: a refused key is not written, the file is 0600, the key never comes back, filters, detail, comment, a rotated key)cargo checkpnpm typecheck:plugins && pnpm check:titles && pnpm check:csp && pnpm check:themes && pnpm test && pnpm build,npx tsc -p e2edocs-site:pnpm builde2e/linear.spec.ts(new, 4 tests), plusa11y,home-widgets,lookandkeyboard: 81 pass, 1 fails. The failure issettings-boxesina11y.spec.ts, a list-markup violation inbox-processes.tsx, which this branch does not touch.Not checked: a real Linear workspace. Everything above ran against the fake API in Go tests and the mock workspace in the app.
Not in this PR
OAuth. Linear supports PKCE without a client secret, so it can follow once a Shipyard OAuth application is registered with Linear.
🤖 Generated with Claude Code