{"record":{"id":"aeca7638d89857e9","repo":"slopus/happy","slug":"usage-happy-acp-agent-name-or-happy-acp-com","errorCode":null,"errorMessage":"Usage: happy acp <agent-name> or happy acp -- <command> [args]","messagePattern":"Usage: happy acp <agent-name> or happy acp -- <command> \\[args\\]","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/happy-cli/src/agent/acp/acpAgentConfig.ts","lineNumber":19,"sourceCode":"export type AcpAgentConfig = {\n  command: string;\n  args: string[];\n};\n\nexport const KNOWN_ACP_AGENTS: Record<string, AcpAgentConfig> = {\n  gemini: { command: 'gemini', args: ['--experimental-acp'] },\n  opencode: { command: 'opencode', args: ['acp'] },\n};\n\nexport type ResolvedAcpAgentConfig = {\n  agentName: string;\n  command: string;\n  args: string[];\n};\n\nexport function resolveAcpAgentConfig(cliArgs: string[]): ResolvedAcpAgentConfig {\n  if (cliArgs.length === 0) {\n    throw new Error('Usage: happy acp <agent-name> or happy acp -- <command> [args]');\n  }\n\n  if (cliArgs[0] === '--') {\n    const command = cliArgs[1];\n    if (!command) {\n      throw new Error('Missing command after \"--\". Usage: happy acp -- <command> [args]');\n    }\n    return {\n      agentName: command,\n      command,\n      args: cliArgs.slice(2),\n    };\n  }\n\n  const agentName = cliArgs[0];\n  const known = KNOWN_ACP_AGENTS[agentName];\n  if (known) {\n    const passthroughArgs = cliArgs","sourceCodeStart":1,"sourceCodeEnd":37,"githubUrl":"https://github.com/slopus/happy/blob/b824cd0a4681d41af631a8e422a813873e4455b0/packages/happy-cli/src/agent/acp/acpAgentConfig.ts#L1-L37","documentation":"resolveAcpAgentConfig validates CLI arguments for `happy acp`. With zero arguments there is neither a named agent nor an inline command, so it throws a usage error explaining the two accepted forms: `happy acp <agent-name>` or `happy acp -- <command> [args]`.","triggerScenarios":"Running `happy acp` (or `happy acp` with only flags not routed into cliArgs) so cliArgs resolves to an empty array.","commonSituations":"User forgets the agent name; shell alias/wrapper strips arguments; scripted invocation passes no args; misrouting of parsed CLI flags before resolveAcpAgentConfig.","solutions":["Pass an agent name: `happy acp claude-code` (or another registered agent).","Or pass an explicit command: `happy acp -- npx @example/agent --flag`.","Run `happy acp` help/README to list valid agent names."],"exampleFix":"// before\n$ happy acp\n// after\n$ happy acp claude-code\n// or\n$ happy acp -- npx @zed_industries/claude-code-acp","handlingStrategy":"validation","validationCode":"const acpArgs = process.argv.slice(3); // after 'happy acp'\nif (acpArgs.length === 0) {\n  console.error('Usage: happy acp <agent-name> | happy acp -- <command> [args]');\n  process.exit(1);\n}","typeGuard":null,"tryCatchPattern":"try {\n  const cfg = resolveAcpAgentConfig(cliArgs);\n} catch (err) {\n  if (err instanceof Error && err.message.startsWith('Usage: happy acp')) {\n    printAcpUsage();\n    process.exit(1);\n  } else throw err;\n}","preventionTips":["Always pass an agent name or an inline `-- <command>` when running happy acp.","Check shell wrappers/aliases don't strip arguments.","Add arg-count checks in scripts that invoke happy acp programmatically."],"tags":["cli","usage","arguments","validation"],"backgroundTag":"missing-required-argument","analyzedSha":"b824cd0a4681d41af631a8e422a813873e4455b0","analyzedAt":"2026-08-31T23:12:36.205Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}