用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/corsairdev/agent --skill add-keyslinear命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | add-keys/linear |
| description | Set up Linear credentials for Corsair. Use when the user wants to connect Linear to their agent. |
Read /add-keys first if you haven't — it explains the key model.
Auth type: api_key
api_key (Linear API key), webhook_signature (signing secret)api_key)lin_api_)webhook_signature)Ask the user to provide both values, then write scripts/setup-linear.ts:
import 'dotenv/config';
import { and, eq } from 'drizzle-orm';
import { corsair } from '../server/corsair';
import { db } from '../server/db';
import { corsairAccounts, corsairIntegrations } from '../server/db/schema';
const PLUGIN = 'linear';
const TENANT_ID = 'default';
const API_KEY = 'lin_api_...'; // fill in
const SIGNING_SECRET = '...'; // fill in
async function main() {
let [integration] = await db
.select()
.from(corsairIntegrations)
.where(eq(corsairIntegrations.name, PLUGIN));
if (!integration) {
[integration] = await db
.insert(corsairIntegrations)
.values({ id: crypto.randomUUID(), name: PLUGIN })
.returning();
console.log(`✓ Created integration: ${PLUGIN}`);
}
await corsair.keys.linear.issue_new_dek();
console.log('✓ Integration DEK ready');
const [existing] = await db
.select()
.from(corsairAccounts)
.where(
and(
eq(corsairAccounts.tenantId, TENANT_ID),
eq(corsairAccounts.integrationId, integration!.id),
),
);
if (!existing) {
await db.insert(corsairAccounts).values({
id: crypto.randomUUID(),
tenantId: TENANT_ID,
integrationId: integration!.id,
});
console.log('✓ Created account');
}
await corsair.linear.keys.issue_new_dek();
console.log('✓ Account DEK ready');
await corsair.linear.keys.set_api_key(API_KEY);
await corsair.linear.keys.set_webhook_signature(SIGNING_SECRET);
const stored = await corsair.linear.keys.get_api_key();
console.log(`✓ Linear configured. Key starts with: ${stored?.slice(0, 10)}...`);
process.exit(0);
}
main().catch((e) => { console.error(e); process.exit(1); });
Run it:
docker compose exec agent pnpm tsx scripts/setup-linear.ts
Then delete the script:
rm scripts/setup-linear.ts