[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C6A5BVFWH4T8GTFBECJ7QJ":3,"skill-same:01M6C6A5BVFWH4T8GTFBECJ7QJ":125},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":41,"linkOnly":42,"markdownContent":43,"markdownBody":44,"frontMatter":45,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":55,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6C6A5BVFWH4T8GTFBECJ7QJ","clerk-vue-patterns",null,"Vue 3 patterns with Clerk — composables (useAuth, useUser, useClerk, useOrganization), Vue Router guards, Pinia auth store integration. Triggers on: vue clerk, useAuth vue, clerk composables, vue router clerk guard, pinia auth clerk. For Nuxt, use clerk-nuxt-patterns instead.","Allternit\u002Fallternit-platform","Allternit","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F250397232?v=4","01M6C67T2SPVP033M7REAAHYHX","01M6C67T7CXM1DKVQY8DFAFRB2",1,"MIT","https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"clerk vue patterns","vue patterns","patterns","clerk","vue","nuxt","pinia","webfetch","use","router","auth","guard","integration","triggers","store","with","for","composables","2026-11-10 10:12:30",false,"---\nname: clerk-vue-patterns\ndescription: 'Vue 3 patterns with Clerk — composables (useAuth, useUser,\n  useClerk, useOrganization), Vue Router guards, Pinia auth store\n  integration. Triggers on: vue clerk, useAuth vue, clerk composables,\n  vue router clerk guard, pinia auth clerk. For Nuxt, use clerk-nuxt-patterns instead.'\nlicense: MIT\nallowed-tools: WebFetch\nmetadata:\n  author: clerk\n  version: 1.0.0\n---\n\n# Vue Patterns\n\nSDK: `@clerk\u002Fvue` v2+ (Vue 3). For Nuxt, use `clerk-nuxt-patterns`.\n\n## What Do You Need?\n\n| Task | Reference |\n|------|-----------|\n| Composables: useAuth, useUser, useOrganization | references\u002Fcomposables.md |\n| Vue Router navigation guards | references\u002Fvue-router-guards.md |\n| Pinia store with auth state | references\u002Fpinia-integration.md |\n\n## Mental Model\n\nVue uses composables from `@clerk\u002Fvue`:\n\n- **`useAuth()`** — reactive `isSignedIn`, `userId`, `signOut`\n- **`useUser()`** — reactive `user` object\n- **`useClerk()`** — full Clerk instance for advanced operations\n- **`useOrganization()`** — reactive `organization`, `membership`\n\n## Setup\n\n### Vue (Plain)\n\n```ts\n\u002F\u002F main.ts\nimport { clerkPlugin } from '@clerk\u002Fvue'\nimport { createApp } from 'vue'\nimport App from '.\u002FApp.vue'\n\nconst app = createApp(App)\napp.use(clerkPlugin, {\n  publishableKey: import.meta.env.VITE_CLERK_PUBLISHABLE_KEY,\n})\napp.mount('#app')\n```\n\n## Composables Usage\n\n```vue\n\u003Cscript setup lang=\"ts\">\nimport { useAuth, useUser } from '@clerk\u002Fvue'\n\nconst { isSignedIn, userId, signOut } = useAuth()\nconst { user } = useUser()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv v-if=\"isSignedIn\">\n    \u003Cp>Hello {{ user?.firstName }}\u003C\u002Fp>\n    \u003Cbutton @click=\"signOut()\">Sign Out\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003CSignInButton v-else \u002F>\n\u003C\u002Ftemplate>\n```\n\n## Org Switching\n\n```vue\n\u003Cscript setup lang=\"ts\">\nimport { useOrganizationList } from '@clerk\u002Fvue'\n\nconst { userMemberships, setActive } = useOrganizationList()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cbutton\n    v-for=\"mem in userMemberships.data ?? []\"\n    :key=\"mem.organization.id\"\n    @click=\"setActive({ organization: mem.organization.id })\"\n  >\n    {{ mem.organization.name }}\n  \u003C\u002Fbutton>\n\u003C\u002Ftemplate>\n```\n\n## Common Pitfalls\n\n| Symptom | Cause | Fix |\n|---------|-------|-----|\n| Composables return `undefined` | Not inside `ClerkProvider` tree | Ensure `app.use(clerkPlugin, { publishableKey })` is called |\n| `userId` reactive but not updating | Destructuring loses reactivity | Use `const { userId } = useAuth()` (toRefs-style composable, reactive) |\n## Import Map\n\n| What | Import |\n|------|--------|\n| Composables | `@clerk\u002Fvue` |\n| Plugin setup | `@clerk\u002Fvue` |\n| Components | `@clerk\u002Fvue` |\n\n## See Also\n\n- `clerk-setup` - Initial Clerk install\n- `clerk-custom-ui` - Custom flows & appearance\n- `clerk-orgs` - B2B organizations\n\n## Docs\n\n- [Vue SDK](https:\u002F\u002Fclerk.com\u002Fdocs\u002Fvue\u002Fgetting-started\u002Fquickstart)\n","# Vue Patterns\n\nSDK: `@clerk\u002Fvue` v2+ (Vue 3). For Nuxt, use `clerk-nuxt-patterns`.\n\n## What Do You Need?\n\n| Task | Reference |\n|------|-----------|\n| Composables: useAuth, useUser, useOrganization | references\u002Fcomposables.md |\n| Vue Router navigation guards | references\u002Fvue-router-guards.md |\n| Pinia store with auth state | references\u002Fpinia-integration.md |\n\n## Mental Model\n\nVue uses composables from `@clerk\u002Fvue`:\n\n- **`useAuth()`** — reactive `isSignedIn`, `userId`, `signOut`\n- **`useUser()`** — reactive `user` object\n- **`useClerk()`** — full Clerk instance for advanced operations\n- **`useOrganization()`** — reactive `organization`, `membership`\n\n## Setup\n\n### Vue (Plain)\n\n```ts\n\u002F\u002F main.ts\nimport { clerkPlugin } from '@clerk\u002Fvue'\nimport { createApp } from 'vue'\nimport App from '.\u002FApp.vue'\n\nconst app = createApp(App)\napp.use(clerkPlugin, {\n  publishableKey: import.meta.env.VITE_CLERK_PUBLISHABLE_KEY,\n})\napp.mount('#app')\n```\n\n## Composables Usage\n\n```vue\n\u003Cscript setup lang=\"ts\">\nimport { useAuth, useUser } from '@clerk\u002Fvue'\n\nconst { isSignedIn, userId, signOut } = useAuth()\nconst { user } = useUser()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv v-if=\"isSignedIn\">\n    \u003Cp>Hello {{ user?.firstName }}\u003C\u002Fp>\n    \u003Cbutton @click=\"signOut()\">Sign Out\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003CSignInButton v-else \u002F>\n\u003C\u002Ftemplate>\n```\n\n## Org Switching\n\n```vue\n\u003Cscript setup lang=\"ts\">\nimport { useOrganizationList } from '@clerk\u002Fvue'\n\nconst { userMemberships, setActive } = useOrganizationList()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cbutton\n    v-for=\"mem in userMemberships.data ?? []\"\n    :key=\"mem.organization.id\"\n    @click=\"setActive({ organization: mem.organization.id })\"\n  >\n    {{ mem.organization.name }}\n  \u003C\u002Fbutton>\n\u003C\u002Ftemplate>\n```\n\n## Common Pitfalls\n\n| Symptom | Cause | Fix |\n|---------|-------|-----|\n| Composables return `undefined` | Not inside `ClerkProvider` tree | Ensure `app.use(clerkPlugin, { publishableKey })` is called |\n| `userId` reactive but not updating | Destructuring loses reactivity | Use `const { userId } = useAuth()` (toRefs-style composable, reactive) |\n## Import Map\n\n| What | Import |\n|------|--------|\n| Composables | `@clerk\u002Fvue` |\n| Plugin setup | `@clerk\u002Fvue` |\n| Components | `@clerk\u002Fvue` |\n\n## See Also\n\n- `clerk-setup` - Initial Clerk install\n- `clerk-custom-ui` - Custom flows & appearance\n- `clerk-orgs` - B2B organizations\n\n## Docs\n\n- [Vue SDK](https:\u002F\u002Fclerk.com\u002Fdocs\u002Fvue\u002Fgetting-started\u002Fquickstart)\n",{"name":5,"license":14,"metadata":46,"description":7,"allowed-tools":48},{"author":26,"version":47},"1.0.0","WebFetch","main","7db7c6f88fb96b6792195dacabdb088419b7a9fa",".agents\u002Fskills\u002Fclerk-vue-patterns",0,"https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform","https:\u002F\u002Fgithub.com\u002FAllternit","https:\u002F\u002Fallternit.com","Allternit builds AI agents that work on your computer, in the cloud, and from your phone. Home of Allternit Desktop and Gizzi Code.","2026-11-14 03:24:26",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add Allternit\u002Fallternit-platform --skill clerk-vue-patterns",{"tool":64,"command":65},"bunx","bunx skills add Allternit\u002Fallternit-platform --skill clerk-vue-patterns",{"tool":67,"command":68},"pnpm","pnpm dlx skills add Allternit\u002Fallternit-platform --skill clerk-vue-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002FSKILL.md",true,[72,78,82,86,90,94,98,102,106,112,118,121],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"agents\u002Fopenai.yaml","REFERENCE","参考文档",93,"https:\u002F\u002Fgithub.com\u002Fian-pascoe\u002Fdotfiles\u002Fblob\u002Fmain\u002Fdot_agents\u002Fskills\u002Fpr\u002Fagents\u002Fopenai.yaml",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"CREDITS.md",604,"https:\u002F\u002Fgithub.com\u002Fian-pascoe\u002Fdotfiles\u002Fblob\u002Fmain\u002Fdot_agents\u002Fskills\u002Fpr\u002FCREDITS.md",{"path":83,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":84,"sourceHtmlUrl":85},"evals\u002Fevals.json",2093,"https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002Fevals\u002Fevals.json",{"path":87,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Fcomposables.md",2204,"https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002Freferences\u002Fcomposables.md",{"path":91,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Fpinia-integration.md",1461,"https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002Freferences\u002Fpinia-integration.md",{"path":95,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fvue-router-guards.md",1657,"https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002Freferences\u002Fvue-router-guards.md",{"path":99,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":100,"sourceHtmlUrl":101},"templates\u002Fvue-basic-auth\u002Findex.html",294,"https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002Ftemplates\u002Fvue-basic-auth\u002Findex.html",{"path":103,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":104,"sourceHtmlUrl":105},"templates\u002Fvue-basic-auth\u002Fpackage.json",337,"https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002Ftemplates\u002Fvue-basic-auth\u002Fpackage.json",{"path":107,"resourceType":108,"resourceTypeDesc":109,"sizeBytes":110,"sourceHtmlUrl":111},"templates\u002Fvue-basic-auth\u002Fsrc\u002FApp.vue","OTHER","其他",304,"https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002Ftemplates\u002Fvue-basic-auth\u002Fsrc\u002FApp.vue",{"path":113,"resourceType":114,"resourceTypeDesc":115,"sizeBytes":116,"sourceHtmlUrl":117},"templates\u002Fvue-basic-auth\u002Fsrc\u002Fmain.ts","SCRIPT","脚本",390,"https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002Ftemplates\u002Fvue-basic-auth\u002Fsrc\u002Fmain.ts",{"path":119,"resourceType":108,"resourceTypeDesc":109,"sizeBytes":52,"sourceHtmlUrl":120},"templates\u002Fvue-basic-auth\u002Fsrc\u002Fstyle.css","https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002Ftemplates\u002Fvue-basic-auth\u002Fsrc\u002Fstyle.css",{"path":122,"resourceType":114,"resourceTypeDesc":115,"sizeBytes":123,"sourceHtmlUrl":124},"templates\u002Fvue-basic-auth\u002Fvite.config.ts",127,"https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclerk-vue-patterns\u002Ftemplates\u002Fvue-basic-auth\u002Fvite.config.ts",[126,153,169,191,213,243],{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":41},"01M6C6GBWRCJNWQP5S16PKXB77","jev","Ask typed System One judgments (noul \u002F choice \u002F score) against Allternit's LOCAL System One server instead of prompting a chat model to \"return JSON\". Use when classifying, routing, scoring, or screening something and code needs a probability it can branch on, or when the user runs \u002Fjev. Official TypeSafe Jev is an optional, explicit remote lane.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002Ftools\u002Fsystem-one-local\u002Fskills\u002Fjev\u002FSKILL.md",[],[128,134,135,136,137,138,139,140,141,142,143,144,145,31,146,147,148,149,150,151,152],"official","routing","code","server","lane","system","json","model","choice","branch","ask","user","scoring","chat","local","probability","remote","can","when",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":41},"01M6C6G9CGB9MX47NSQ31QNNB7","jev-route","Route with local System One answers — map Choice + confidence to act \u002F confirm \u002F human lanes, or pick a model tier by Choice label. Also documents the separate `route-model` helper for OpenRouter's typesafe\u002Fjev-router (a chat-model router, NOT System One). Use for confidence routing, model-tier routing, or when the user runs \u002Fjev-route.","https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002Ftools\u002Fsystem-one-local\u002Fskills\u002Fjev-route\u002FSKILL.md",[],[128,160,161,162,135,139,141,163,142,164,145,31,32,165,147,166,148,167,38,39,168,152],"jev route","route","documents","pick","openrouter","model router","map","helper","model-tier",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":41},"01M6C6G6JZE0RC50QWWE6HG320","jev-guardrail","Screen text or agent tool calls with a battery of local System One Noul hazards plus a Score, with policy in code — and the Claude Code PreToolUse guard (hooks\u002Fpretooluse-guard) that puts deterministic hard rules first and lets Jev only raise friction. Use for injection\u002Fsecret\u002Fdestructive-action screening or when the user runs \u002Fjev-guardrail.","https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002Ftools\u002Fsystem-one-local\u002Fskills\u002Fjev-guardrail\u002FSKILL.md",[],[128,176,177,178,136,179,180,34,139,181,182,183,145,31,184,185,186,187,148,188,189,39,190,152],"jev guardrail","guardrail","policy","injection","first","tool","text","Rules","friction","only","hooks","deterministic","battery","calls","agent tool",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":200,"publishedAt":41},"01M6C6G426P7Q5J3F98HVYDCB2","jev-fanout","Ask every independent System One question over the same state in ONE POST \u002Fv1\u002Fsystemone to the local server (speculative fan-out). Use for parallel judgments, compound commands, one-call turn assessment, or when the user runs \u002Fjev-fanout. Do not fire one HTTP call per question.","https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002Ftools\u002Fsystem-one-local\u002Fskills\u002Fjev-fanout\u002FSKILL.md",[197],{"categoryNo":198,"categoryName":199,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",[128,201,202,203,204,205,137,139,206,144,207,145,31,208,209,148,210,211,39,212,152],"fanout","jev fanout","http","assessment","state","parallel","question","do","call","post","v1","local server",{"skillNo":214,"name":215,"nameZh":6,"description":216,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":217,"categories":218,"keywords":219,"publishedAt":41},"01M6C6G13D7JK869Q3DHMQ9542","memory-drive","Read and write the user's Allternit Memory Drive, a git repo of markdown memories in the open Agent Memory Repo format. Use at the start of a session to load what the user's agents remember (MEMORY.md), when the user says \"remember this\", when you learn a durable fact about the user or their work, and before answering questions that depend on past sessions.","https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002Ftools\u002Fmemory-drive-plugin\u002Fskills\u002Fmemory-drive\u002FSKILL.md",[],[220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,145,236,31,237,238,239,240,241,242,152],"memory","drive","memory drive","sessions","remember","learn","git","agent memory","start","open","markdown","format","work","repo","read","write","session","what the","memories","about","questions","you","load",{"skillNo":244,"name":245,"nameZh":6,"description":246,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":247,"categories":248,"keywords":252,"publishedAt":41},"01M6C6FX778N1047QAJ39Y582H","agent-orchestrator","Orchestrate external CLI agents (kimi, codex, agy, claude, grok, gizzi) through the Allternit Factory (gizzi agents \u002F orchestration \u002F workspace \u002F workflows). Use when the user asks to delegate, offload, or farm out implementation work to another CLI agent \u002F terminal session, or to run work outside this session to save tokens. Part of Allternit Agents \u002F Bot Agents — not a separate product.","https:\u002F\u002Fgithub.com\u002FAllternit\u002Fallternit-platform\u002Fblob\u002Fmain\u002Ftools\u002Fagent-orchestrator\u002FSKILL.md",[249],{"categoryNo":250,"categoryName":251,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[253,254,255,256,257,258,259,260,261,262,263,264,265,232,266,267,236,31,268,269,270,271,272,273,274,275,152],"orchestrator","agent orchestrator","bot","cli","terminal","codex","orchestration","workflows","run","product","orchestrate","save","workspace","delegate","factory","grok","kimi","implementation","offload","tokens","cli agents","farm","terminal session"]