feat(setup): add Linear channel, fix setup permissions

Enable Linear channel adapter. Fix setup permission rules: use specific
npm install entries per adapter package, replace cp -r with rsync -a to
avoid built-in cp safety prompt, add head to allow list for chained
commands. Update Linear API key URL.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
gavrielc
2026-04-16 14:00:27 +03:00
parent a1a324097e
commit ce80e4ec3e
7 changed files with 79 additions and 11 deletions
+36
View File
@@ -1,5 +1,41 @@
{
"sandbox": {
"enabled": false
},
"permissions": {
"allow": [
"Bash(bash setup.sh*)",
"Bash(git remote *)",
"Bash(npx tsx setup/index.ts*)",
"Bash(npx tsx scripts/init-first-agent.ts*)",
"Bash(npm install @chat-adapter/*)",
"Bash(npm install chat-adapter-imessage*)",
"Bash(npm install @bitbasti/chat-adapter-webex*)",
"Bash(npm install @resend/chat-sdk-adapter*)",
"Bash(npm install @whiskeysockets/baileys*)",
"Bash(npm install @beeper/chat-adapter-matrix*)",
"Bash(npm install @nanoco/nanoclaw-dashboard*)",
"Bash(npm ci*)",
"Bash(npm run build*)",
"Bash(curl -fsSL onecli.sh*)",
"Bash(onecli *)",
"Bash(grep -q *)",
"Bash(echo *>> .env)",
"Bash(ls *)",
"Bash(cat ~/.config/nanoclaw/*)",
"Bash(tail *logs/*)",
"Bash(launchctl *nanoclaw*)",
"Bash(sqlite3 data/*)",
"Bash(docker info*)",
"Bash(docker logs *)",
"Bash(mkdir -p *)",
"Bash(cp .env *)",
"Bash(rsync -a .claude/skills/*)",
"Bash(head *)",
"Bash(xattr *)",
"Bash(find ~/.npm *)",
"Bash(which onecli*)",
"Bash(./container/build.sh*)"
]
}
}
+1 -1
View File
@@ -29,7 +29,7 @@ npm run build
## Credentials
> 1. Go to [Linear Settings > API](https://linear.app/settings/api)
> 1. Go to [Linear Settings > API Keys](https://linear.app/settings/account/security/api-keys/new)
> 2. Create a **Personal API Key** (or use an OAuth application for team-wide access)
> 3. Copy the API key
> 4. Set up a webhook:
+1 -1
View File
@@ -36,7 +36,7 @@ If `ONECLI_MISSING`, tell the user to run `/init-onecli` first, then retry `/add
Copy the bundled container skill into the container skills directory:
```bash
cp -r .claude/skills/add-vercel/container-skills/* container/skills/
rsync -a .claude/skills/add-vercel/container-skills/ container/skills/
```
Verify:
+9 -1
View File
@@ -3,7 +3,13 @@
"Bash(git remote *)",
"Bash(npx tsx setup/index.ts*)",
"Bash(npx tsx scripts/init-first-agent.ts*)",
"Bash(npm install chat-adapter-*)",
"Bash(npm install @chat-adapter/*)",
"Bash(npm install chat-adapter-imessage*)",
"Bash(npm install @bitbasti/chat-adapter-webex*)",
"Bash(npm install @resend/chat-sdk-adapter*)",
"Bash(npm install @whiskeysockets/baileys*)",
"Bash(npm install @beeper/chat-adapter-matrix*)",
"Bash(npm install @nanoco/nanoclaw-dashboard*)",
"Bash(npm ci*)",
"Bash(npm run build*)",
"Bash(curl -fsSL onecli.sh*)",
@@ -19,6 +25,8 @@
"Bash(docker logs *)",
"Bash(mkdir -p *)",
"Bash(cp .env *)",
"Bash(rsync -a .claude/skills/*)",
"Bash(head *)",
"Bash(xattr *)",
"Bash(find ~/.npm *)",
"Bash(which onecli*)",
+30 -6
View File
@@ -13,7 +13,7 @@
"@chat-adapter/discord": "^4.24.0",
"@chat-adapter/gchat": "^4.24.0",
"@chat-adapter/github": "^4.24.0",
"@chat-adapter/linear": "^4.24.0",
"@chat-adapter/linear": "^4.26.0",
"@chat-adapter/slack": "^4.24.0",
"@chat-adapter/state-memory": "^4.24.0",
"@chat-adapter/teams": "^4.24.0",
@@ -242,14 +242,38 @@
}
},
"node_modules/@chat-adapter/linear": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/@chat-adapter/linear/-/linear-4.24.0.tgz",
"integrity": "sha512-FrbIPyWMW5WWT4KFIO14Oc0iLwdUQG1R5eQ0oXLizVCXWb3COTwwNhhozO7eGL8ZDI+OrU7Tz8sWjNEakuBxSg==",
"version": "4.26.0",
"resolved": "https://registry.npmjs.org/@chat-adapter/linear/-/linear-4.26.0.tgz",
"integrity": "sha512-sQfJXh9QbMnLV/odikaWHBQ3Mx1ZS+QtxIt7dTEQ4aCeIrQJflycAxxO8d6aepaGKhLQjvZx7iOkdfxMj35WlA==",
"license": "MIT",
"dependencies": {
"@chat-adapter/shared": "4.24.0",
"@chat-adapter/shared": "4.26.0",
"@linear/sdk": "^76.0.0",
"chat": "4.24.0"
"chat": "4.26.0"
}
},
"node_modules/@chat-adapter/linear/node_modules/@chat-adapter/shared": {
"version": "4.26.0",
"resolved": "https://registry.npmjs.org/@chat-adapter/shared/-/shared-4.26.0.tgz",
"integrity": "sha512-YD0MGktFXrArUqTBsyPfL5vkdD1WBS58PAWO0oVrMQAMmPxpAXfWGjBtZCkf3y8R8Svb0uVuVXiMZSForaEnMQ==",
"license": "MIT",
"dependencies": {
"chat": "4.26.0"
}
},
"node_modules/@chat-adapter/linear/node_modules/chat": {
"version": "4.26.0",
"resolved": "https://registry.npmjs.org/chat/-/chat-4.26.0.tgz",
"integrity": "sha512-QToDnIEGpyb8yQA6YLMHOSRK30YVk4RtsyFyuWFYyB2c4jQlyIrSWtwVK7qyvmvqzQp9uDwCdJRAhS8GtCHAGQ==",
"license": "MIT",
"dependencies": {
"@workflow/serde": "4.1.0-beta.2",
"mdast-util-to-string": "^4.0.0",
"remark-gfm": "^4.0.0",
"remark-parse": "^11.0.0",
"remark-stringify": "^11.0.0",
"remend": "^1.2.1",
"unified": "^11.0.5"
}
},
"node_modules/@chat-adapter/shared": {
+1 -1
View File
@@ -26,7 +26,7 @@
"@chat-adapter/discord": "^4.24.0",
"@chat-adapter/gchat": "^4.24.0",
"@chat-adapter/github": "^4.24.0",
"@chat-adapter/linear": "^4.24.0",
"@chat-adapter/linear": "^4.26.0",
"@chat-adapter/slack": "^4.24.0",
"@chat-adapter/state-memory": "^4.24.0",
"@chat-adapter/teams": "^4.24.0",
+1 -1
View File
@@ -14,7 +14,7 @@ import './telegram.js';
// import './github.js';
// linear
// import './linear.js';
import './linear.js';
// google chat
// import './gchat.js';