[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F8ZMATBF5ETC8HFN60MXS8":3,"skill-same:01M6F8ZMATBF5ETC8HFN60MXS8":81},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":58,"commitSha":59,"skillDirectory":60,"forksCount":61,"repositoryHtmlUrl":62,"repositoryHomepageUrl":63,"ownerHtmlUrl":64,"ownerBlogUrl":6,"ownerDescription":65,"updatedAt":66,"install":67,"resources":80},"01M6F8ZMATBF5ETC8HFN60MXS8","cohere-reference-architecture",null,"Implement Cohere reference architecture with layered project layout for RAG and agents.\nUse when designing new Cohere integrations, reviewing project structure,\nor establishing architecture standards for Cohere API v2 applications.\nTrigger with phrases like \"cohere architecture\", \"cohere project structure\",\n\"cohere layout\", \"organize cohere app\", \"cohere design pattern\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fcohere-reference-architecture\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"cohere reference architecture","architecture","cohere","reference","organize","trigger","io","app","layout","project","pattern","structure","design","standards","read","integrations","api","code","rag","project structure","2026-11-10 10:12:30",false,"---\nname: cohere-reference-architecture\ndescription: |\n  Implement Cohere reference architecture with layered project layout for RAG and agents.\n  Use when designing new Cohere integrations, reviewing project structure,\n  or establishing architecture standards for Cohere API v2 applications.\n  Trigger with phrases like \"cohere architecture\", \"cohere project structure\",\n  \"cohere layout\", \"organize cohere app\", \"cohere design pattern\".\nallowed-tools: Read, Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, ai, nlp, cohere]\ncompatible-with: claude-code\n---\n\n# Cohere Reference Architecture\n\n## Overview\nProduction-ready architecture for Cohere API v2 applications covering RAG pipelines, tool-use agents, and multi-model orchestration.\n\n## Prerequisites\n- Understanding of layered architecture\n- `cohere-ai` SDK v7+\n- TypeScript project with vitest\n\n## Project Structure\n\n```\nmy-cohere-app\u002F\n├── src\u002F\n│   ├── cohere\u002F\n│   │   ├── client.ts           # CohereClientV2 singleton\n│   │   ├── models.ts           # Model selection logic\n│   │   ├── types.ts            # Cohere-specific types\n│   │   └── errors.ts           # Error classification\n│   ├── services\u002F\n│   │   ├── chat.ts             # Chat completions + streaming\n│   │   ├── rag.ts              # RAG pipeline (embed → rerank → chat)\n│   │   ├── agents.ts           # Tool-use agent loops\n│   │   ├── embed.ts            # Batch embedding + caching\n│   │   ├── rerank.ts           # Document reranking\n│   │   └── classify.ts         # Few-shot classification\n│   ├── tools\u002F                  # Tool definitions for agents\n│   │   ├── registry.ts         # Tool name → executor mapping\n│   │   ├── search.ts\n│   │   └── calculator.ts\n│   ├── api\u002F\n│   │   ├── chat.ts             # POST \u002Fapi\u002Fchat (streaming)\n│   │   ├── embed.ts            # POST \u002Fapi\u002Fembed\n│   │   └── health.ts           # GET \u002Fapi\u002Fhealth\n│   └── cache\u002F\n│       └── embeddings.ts       # LRU cache for embeddings\n├── tests\u002F\n│   ├── unit\u002F\n│   │   ├── chat.test.ts\n│   │   ├── rag.test.ts\n│   │   └── fixtures\u002F           # Mocked API responses\n│   └── integration\u002F\n│       └── cohere.test.ts      # Real API tests (gated)\n├── config\u002F\n│   ├── models.json             # Model selection per environment\n│   └── tools.json              # Tool definitions\n└── package.json\n```\n\n## Layer Architecture\n\n```\n┌─────────────────────────────────────────┐\n│             API Layer                    │\n│   (Express\u002FNext.js routes, SSE stream)  │\n├─────────────────────────────────────────┤\n│           Service Layer                  │\n│  (RAG pipeline, agent loop, classify)   │\n├─────────────────────────────────────────┤\n│          Cohere Layer                    │\n│   (CohereClientV2, retry, model select) │\n├─────────────────────────────────────────┤\n│         Infrastructure Layer             │\n│    (Embed cache, tool registry, queue)   │\n└─────────────────────────────────────────┘\n```\n\n## Core Components\n\n### Client Layer\n\n```typescript\n\u002F\u002F src\u002Fcohere\u002Fclient.ts\nimport { CohereClientV2, CohereError, CohereTimeoutError } from 'cohere-ai';\n\nlet instance: CohereClientV2 | null = null;\n\nexport function getCohere(): CohereClientV2 {\n  if (!instance) {\n    instance = new CohereClientV2({\n      token: process.env.CO_API_KEY,\n    });\n  }\n  return instance;\n}\n\n\u002F\u002F src\u002Fcohere\u002Fmodels.ts\nexport const MODELS = {\n  chat: {\n    premium: 'command-a-03-2025',\n    standard: 'command-r-08-2024',\n    fast: 'command-r7b-12-2024',\n  },\n  embed: {\n    latest: 'embed-v4.0',\n    english: 'embed-english-v3.0',\n    multilingual: 'embed-multilingual-v3.0',\n  },\n  rerank: {\n    latest: 'rerank-v3.5',\n  },\n} as const;\n```\n\n### RAG Service\n\n```typescript\n\u002F\u002F src\u002Fservices\u002Frag.ts\nimport { getCohere } from '..\u002Fcohere\u002Fclient';\nimport { MODELS } from '..\u002Fcohere\u002Fmodels';\n\ninterface RAGResult {\n  answer: string;\n  citations: Array\u003C{ start: number; end: number; text: string; sources: string[] }>;\n  model: string;\n}\n\nexport async function ragQuery(\n  query: string,\n  documents: Array\u003C{ id: string; text: string }>,\n  options?: { model?: string; topN?: number }\n): Promise\u003CRAGResult> {\n  const cohere = getCohere();\n  const model = options?.model ?? MODELS.chat.standard;\n\n  \u002F\u002F Step 1: Rerank documents\n  const reranked = await cohere.rerank({\n    model: MODELS.rerank.latest,\n    query,\n    documents: documents.map(d => d.text),\n    topN: options?.topN ?? 5,\n  });\n\n  \u002F\u002F Step 2: Chat with top documents\n  const topDocs = reranked.results.map(r => ({\n    id: documents[r.index].id,\n    data: { text: documents[r.index].text },\n  }));\n\n  const response = await cohere.chat({\n    model,\n    messages: [{ role: 'user', content: query }],\n    documents: topDocs,\n  });\n\n  return {\n    answer: response.message?.content?.[0]?.text ?? '',\n    citations: (response.message?.citations ?? []).map(c => ({\n      start: c.start,\n      end: c.end,\n      text: c.text,\n      sources: c.sources?.map((s: any) => s.id) ?? [],\n    })),\n    model,\n  };\n}\n```\n\n### Agent Service\n\n```typescript\n\u002F\u002F src\u002Fservices\u002Fagents.ts\nimport { getCohere } from '..\u002Fcohere\u002Fclient';\nimport { MODELS } from '..\u002Fcohere\u002Fmodels';\nimport { toolRegistry } from '..\u002Ftools\u002Fregistry';\n\nexport async function runAgent(\n  userMessage: string,\n  maxSteps = 5\n): Promise\u003Cstring> {\n  const cohere = getCohere();\n  const messages: any[] = [{ role: 'user', content: userMessage }];\n  const tools = toolRegistry.getToolDefinitions();\n\n  for (let step = 0; step \u003C maxSteps; step++) {\n    const response = await cohere.chat({\n      model: MODELS.chat.premium,\n      messages,\n      tools,\n    });\n\n    if (response.finishReason !== 'TOOL_CALL') {\n      return response.message?.content?.[0]?.text ?? '';\n    }\n\n    const toolCalls = response.message?.toolCalls ?? [];\n    messages.push({ role: 'assistant', toolCalls });\n\n    for (const tc of toolCalls) {\n      const result = await toolRegistry.execute(\n        tc.function.name,\n        JSON.parse(tc.function.arguments)\n      );\n      messages.push({ role: 'tool', toolCallId: tc.id, content: result });\n    }\n  }\n\n  return 'Agent reached max steps.';\n}\n```\n\n### Tool Registry\n\n```typescript\n\u002F\u002F src\u002Ftools\u002Fregistry.ts\ninterface ToolDefinition {\n  type: 'function';\n  function: {\n    name: string;\n    description: string;\n    parameters: Record\u003Cstring, unknown>;\n  };\n}\n\nclass ToolRegistry {\n  private tools: Map\u003Cstring, {\n    definition: ToolDefinition;\n    executor: (args: any) => Promise\u003Cstring>;\n  }> = new Map();\n\n  register(\n    name: string,\n    description: string,\n    parameters: Record\u003Cstring, unknown>,\n    executor: (args: any) => Promise\u003Cstring>\n  ) {\n    this.tools.set(name, {\n      definition: {\n        type: 'function',\n        function: { name, description, parameters },\n      },\n      executor,\n    });\n  }\n\n  getToolDefinitions(): ToolDefinition[] {\n    return Array.from(this.tools.values()).map(t => t.definition);\n  }\n\n  async execute(name: string, args: any): Promise\u003Cstring> {\n    const tool = this.tools.get(name);\n    if (!tool) return JSON.stringify({ error: `Unknown tool: ${name}` });\n    try {\n      return await tool.executor(args);\n    } catch (err) {\n      return JSON.stringify({ error: String(err) });\n    }\n  }\n}\n\nexport const toolRegistry = new ToolRegistry();\n```\n\n### Error Classification\n\n```typescript\n\u002F\u002F src\u002Fcohere\u002Ferrors.ts\nimport { CohereError, CohereTimeoutError } from 'cohere-ai';\n\nexport type ErrorCategory = 'auth' | 'rate_limit' | 'bad_request' | 'server' | 'timeout' | 'unknown';\n\nexport function classifyError(err: unknown): {\n  category: ErrorCategory;\n  retryable: boolean;\n  message: string;\n} {\n  if (err instanceof CohereTimeoutError) {\n    return { category: 'timeout', retryable: true, message: 'Request timed out' };\n  }\n  if (err instanceof CohereError) {\n    switch (err.statusCode) {\n      case 401: return { category: 'auth', retryable: false, message: 'Invalid API key' };\n      case 429: return { category: 'rate_limit', retryable: true, message: 'Rate limited' };\n      case 400: return { category: 'bad_request', retryable: false, message: err.message };\n      default:\n        if (err.statusCode && err.statusCode >= 500) {\n          return { category: 'server', retryable: true, message: err.message };\n        }\n    }\n  }\n  return { category: 'unknown', retryable: false, message: String(err) };\n}\n```\n\n## Data Flow\n\n```\nUser Query\n     │\n     ▼\n┌─────────────┐\n│   API Route  │  POST \u002Fapi\u002Fchat\n└──────┬──────┘\n       │\n       ▼\n┌─────────────┐    ┌─────────────┐\n│  RAG Service │───▶│  Rerank     │  rerank-v3.5\n│  or Agent   │    │  Service    │\n└──────┬──────┘    └─────────────┘\n       │\n       ▼\n┌─────────────┐    ┌─────────────┐\n│ Chat\u002FStream  │───▶│  Embed      │  embed-v4.0\n│  Service    │    │  Cache      │  (cached)\n└──────┬──────┘    └─────────────┘\n       │\n       ▼\n┌─────────────┐\n│ CohereClient │  command-a-03-2025\n│     V2      │\n└─────────────┘\n```\n\n## Output\n- Layered architecture separating API, service, and client concerns\n- RAG pipeline with rerank pre-filtering and grounded citations\n- Agent loop with pluggable tool registry\n- Error classification for retry\u002Falert decisions\n- Model selection per environment and use case\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Circular imports | Wrong layering | Services depend on client, not vice versa |\n| Tool not found | Missing registration | Register tools at startup |\n| Model mismatch | Env config wrong | Validate model IDs at startup |\n| Cache miss storm | TTL expired | Stale-while-revalidate pattern |\n\n## Resources\n- [Cohere API Reference](https:\u002F\u002Fdocs.cohere.com\u002Freference\u002Fabout)\n- [RAG Guide](https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fretrieval-augmented-generation-rag)\n- [Tool Use Guide](https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Ftools)\n\n## Next Steps\nFor multi-environment setup, see `cohere-multi-env-setup`.\n\n","# Cohere Reference Architecture\n\n## Overview\nProduction-ready architecture for Cohere API v2 applications covering RAG pipelines, tool-use agents, and multi-model orchestration.\n\n## Prerequisites\n- Understanding of layered architecture\n- `cohere-ai` SDK v7+\n- TypeScript project with vitest\n\n## Project Structure\n\n```\nmy-cohere-app\u002F\n├── src\u002F\n│   ├── cohere\u002F\n│   │   ├── client.ts           # CohereClientV2 singleton\n│   │   ├── models.ts           # Model selection logic\n│   │   ├── types.ts            # Cohere-specific types\n│   │   └── errors.ts           # Error classification\n│   ├── services\u002F\n│   │   ├── chat.ts             # Chat completions + streaming\n│   │   ├── rag.ts              # RAG pipeline (embed → rerank → chat)\n│   │   ├── agents.ts           # Tool-use agent loops\n│   │   ├── embed.ts            # Batch embedding + caching\n│   │   ├── rerank.ts           # Document reranking\n│   │   └── classify.ts         # Few-shot classification\n│   ├── tools\u002F                  # Tool definitions for agents\n│   │   ├── registry.ts         # Tool name → executor mapping\n│   │   ├── search.ts\n│   │   └── calculator.ts\n│   ├── api\u002F\n│   │   ├── chat.ts             # POST \u002Fapi\u002Fchat (streaming)\n│   │   ├── embed.ts            # POST \u002Fapi\u002Fembed\n│   │   └── health.ts           # GET \u002Fapi\u002Fhealth\n│   └── cache\u002F\n│       └── embeddings.ts       # LRU cache for embeddings\n├── tests\u002F\n│   ├── unit\u002F\n│   │   ├── chat.test.ts\n│   │   ├── rag.test.ts\n│   │   └── fixtures\u002F           # Mocked API responses\n│   └── integration\u002F\n│       └── cohere.test.ts      # Real API tests (gated)\n├── config\u002F\n│   ├── models.json             # Model selection per environment\n│   └── tools.json              # Tool definitions\n└── package.json\n```\n\n## Layer Architecture\n\n```\n┌─────────────────────────────────────────┐\n│             API Layer                    │\n│   (Express\u002FNext.js routes, SSE stream)  │\n├─────────────────────────────────────────┤\n│           Service Layer                  │\n│  (RAG pipeline, agent loop, classify)   │\n├─────────────────────────────────────────┤\n│          Cohere Layer                    │\n│   (CohereClientV2, retry, model select) │\n├─────────────────────────────────────────┤\n│         Infrastructure Layer             │\n│    (Embed cache, tool registry, queue)   │\n└─────────────────────────────────────────┘\n```\n\n## Core Components\n\n### Client Layer\n\n```typescript\n\u002F\u002F src\u002Fcohere\u002Fclient.ts\nimport { CohereClientV2, CohereError, CohereTimeoutError } from 'cohere-ai';\n\nlet instance: CohereClientV2 | null = null;\n\nexport function getCohere(): CohereClientV2 {\n  if (!instance) {\n    instance = new CohereClientV2({\n      token: process.env.CO_API_KEY,\n    });\n  }\n  return instance;\n}\n\n\u002F\u002F src\u002Fcohere\u002Fmodels.ts\nexport const MODELS = {\n  chat: {\n    premium: 'command-a-03-2025',\n    standard: 'command-r-08-2024',\n    fast: 'command-r7b-12-2024',\n  },\n  embed: {\n    latest: 'embed-v4.0',\n    english: 'embed-english-v3.0',\n    multilingual: 'embed-multilingual-v3.0',\n  },\n  rerank: {\n    latest: 'rerank-v3.5',\n  },\n} as const;\n```\n\n### RAG Service\n\n```typescript\n\u002F\u002F src\u002Fservices\u002Frag.ts\nimport { getCohere } from '..\u002Fcohere\u002Fclient';\nimport { MODELS } from '..\u002Fcohere\u002Fmodels';\n\ninterface RAGResult {\n  answer: string;\n  citations: Array\u003C{ start: number; end: number; text: string; sources: string[] }>;\n  model: string;\n}\n\nexport async function ragQuery(\n  query: string,\n  documents: Array\u003C{ id: string; text: string }>,\n  options?: { model?: string; topN?: number }\n): Promise\u003CRAGResult> {\n  const cohere = getCohere();\n  const model = options?.model ?? MODELS.chat.standard;\n\n  \u002F\u002F Step 1: Rerank documents\n  const reranked = await cohere.rerank({\n    model: MODELS.rerank.latest,\n    query,\n    documents: documents.map(d => d.text),\n    topN: options?.topN ?? 5,\n  });\n\n  \u002F\u002F Step 2: Chat with top documents\n  const topDocs = reranked.results.map(r => ({\n    id: documents[r.index].id,\n    data: { text: documents[r.index].text },\n  }));\n\n  const response = await cohere.chat({\n    model,\n    messages: [{ role: 'user', content: query }],\n    documents: topDocs,\n  });\n\n  return {\n    answer: response.message?.content?.[0]?.text ?? '',\n    citations: (response.message?.citations ?? []).map(c => ({\n      start: c.start,\n      end: c.end,\n      text: c.text,\n      sources: c.sources?.map((s: any) => s.id) ?? [],\n    })),\n    model,\n  };\n}\n```\n\n### Agent Service\n\n```typescript\n\u002F\u002F src\u002Fservices\u002Fagents.ts\nimport { getCohere } from '..\u002Fcohere\u002Fclient';\nimport { MODELS } from '..\u002Fcohere\u002Fmodels';\nimport { toolRegistry } from '..\u002Ftools\u002Fregistry';\n\nexport async function runAgent(\n  userMessage: string,\n  maxSteps = 5\n): Promise\u003Cstring> {\n  const cohere = getCohere();\n  const messages: any[] = [{ role: 'user', content: userMessage }];\n  const tools = toolRegistry.getToolDefinitions();\n\n  for (let step = 0; step \u003C maxSteps; step++) {\n    const response = await cohere.chat({\n      model: MODELS.chat.premium,\n      messages,\n      tools,\n    });\n\n    if (response.finishReason !== 'TOOL_CALL') {\n      return response.message?.content?.[0]?.text ?? '';\n    }\n\n    const toolCalls = response.message?.toolCalls ?? [];\n    messages.push({ role: 'assistant', toolCalls });\n\n    for (const tc of toolCalls) {\n      const result = await toolRegistry.execute(\n        tc.function.name,\n        JSON.parse(tc.function.arguments)\n      );\n      messages.push({ role: 'tool', toolCallId: tc.id, content: result });\n    }\n  }\n\n  return 'Agent reached max steps.';\n}\n```\n\n### Tool Registry\n\n```typescript\n\u002F\u002F src\u002Ftools\u002Fregistry.ts\ninterface ToolDefinition {\n  type: 'function';\n  function: {\n    name: string;\n    description: string;\n    parameters: Record\u003Cstring, unknown>;\n  };\n}\n\nclass ToolRegistry {\n  private tools: Map\u003Cstring, {\n    definition: ToolDefinition;\n    executor: (args: any) => Promise\u003Cstring>;\n  }> = new Map();\n\n  register(\n    name: string,\n    description: string,\n    parameters: Record\u003Cstring, unknown>,\n    executor: (args: any) => Promise\u003Cstring>\n  ) {\n    this.tools.set(name, {\n      definition: {\n        type: 'function',\n        function: { name, description, parameters },\n      },\n      executor,\n    });\n  }\n\n  getToolDefinitions(): ToolDefinition[] {\n    return Array.from(this.tools.values()).map(t => t.definition);\n  }\n\n  async execute(name: string, args: any): Promise\u003Cstring> {\n    const tool = this.tools.get(name);\n    if (!tool) return JSON.stringify({ error: `Unknown tool: ${name}` });\n    try {\n      return await tool.executor(args);\n    } catch (err) {\n      return JSON.stringify({ error: String(err) });\n    }\n  }\n}\n\nexport const toolRegistry = new ToolRegistry();\n```\n\n### Error Classification\n\n```typescript\n\u002F\u002F src\u002Fcohere\u002Ferrors.ts\nimport { CohereError, CohereTimeoutError } from 'cohere-ai';\n\nexport type ErrorCategory = 'auth' | 'rate_limit' | 'bad_request' | 'server' | 'timeout' | 'unknown';\n\nexport function classifyError(err: unknown): {\n  category: ErrorCategory;\n  retryable: boolean;\n  message: string;\n} {\n  if (err instanceof CohereTimeoutError) {\n    return { category: 'timeout', retryable: true, message: 'Request timed out' };\n  }\n  if (err instanceof CohereError) {\n    switch (err.statusCode) {\n      case 401: return { category: 'auth', retryable: false, message: 'Invalid API key' };\n      case 429: return { category: 'rate_limit', retryable: true, message: 'Rate limited' };\n      case 400: return { category: 'bad_request', retryable: false, message: err.message };\n      default:\n        if (err.statusCode && err.statusCode >= 500) {\n          return { category: 'server', retryable: true, message: err.message };\n        }\n    }\n  }\n  return { category: 'unknown', retryable: false, message: String(err) };\n}\n```\n\n## Data Flow\n\n```\nUser Query\n     │\n     ▼\n┌─────────────┐\n│   API Route  │  POST \u002Fapi\u002Fchat\n└──────┬──────┘\n       │\n       ▼\n┌─────────────┐    ┌─────────────┐\n│  RAG Service │───▶│  Rerank     │  rerank-v3.5\n│  or Agent   │    │  Service    │\n└──────┬──────┘    └─────────────┘\n       │\n       ▼\n┌─────────────┐    ┌─────────────┐\n│ Chat\u002FStream  │───▶│  Embed      │  embed-v4.0\n│  Service    │    │  Cache      │  (cached)\n└──────┬──────┘    └─────────────┘\n       │\n       ▼\n┌─────────────┐\n│ CohereClient │  command-a-03-2025\n│     V2      │\n└─────────────┘\n```\n\n## Output\n- Layered architecture separating API, service, and client concerns\n- RAG pipeline with rerank pre-filtering and grounded citations\n- Agent loop with pluggable tool registry\n- Error classification for retry\u002Falert decisions\n- Model selection per environment and use case\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Circular imports | Wrong layering | Services depend on client, not vice versa |\n| Tool not found | Missing registration | Register tools at startup |\n| Model mismatch | Env config wrong | Validate model IDs at startup |\n| Cache miss storm | TTL expired | Stale-while-revalidate pattern |\n\n## Resources\n- [Cohere API Reference](https:\u002F\u002Fdocs.cohere.com\u002Freference\u002Fabout)\n- [RAG Guide](https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fretrieval-augmented-generation-rag)\n- [Tool Use Guide](https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Ftools)\n\n## Next Steps\nFor multi-environment setup, see `cohere-multi-env-setup`.\n\n",{"name":5,"tags":49,"author":53,"license":15,"version":54,"description":55,"allowed-tools":56,"compatible-with":57},[50,51,52,26],"saas","ai","nlp","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Implement Cohere reference architecture with layered project layout for RAG and agents.\nUse when designing new Cohere integrations, reviewing project structure,\nor establishing architecture standards for Cohere API v2 applications.\nTrigger with phrases like \"cohere architecture\", \"cohere project structure\",\n\"cohere layout\", \"organize cohere app\", \"cohere design pattern\".\n","Read, Grep","claude-code","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fcohere-reference-architecture",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":68,"prompt":78,"zipAvailable":79},[69,72,75],{"tool":70,"command":71},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill cohere-reference-architecture",{"tool":73,"command":74},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill cohere-reference-architecture",{"tool":76,"command":77},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill cohere-reference-architecture","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fcohere-reference-architecture\u002FSKILL.md",true,[],[82,96,106,115,121,128],{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":92,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[87],{"categoryNo":88,"categoryName":89,"taxonomyType":90,"taxonomyTypeDesc":91},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[93,94,95],"model","model hierarchy","model hierarchy skill",{"skillNo":97,"name":98,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":102,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[101],{"categoryNo":88,"categoryName":89,"taxonomyType":90,"taxonomyTypeDesc":91},[103,104,105],"MCP","zoom","zoom mcp",{"skillNo":107,"name":108,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[112,113,114,104],"sdk","zoom apps sdk","apps",{"skillNo":116,"name":117,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[117],{"skillNo":122,"name":123,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":127,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[126],{"categoryNo":88,"categoryName":89,"taxonomyType":90,"taxonomyTypeDesc":91},[123],{"skillNo":129,"name":130,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[130]]