diff --git a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js index f35c98272a..b595e1b3a3 100644 --- a/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js +++ b/backend/__tests__/unit/config/nativeAgents.scoutKnowledge.test.js @@ -84,6 +84,19 @@ describe('Scout onboarding knowledge', () => { expect(prompt).toMatch(/name it only when someone asks which model or runtime it uses/); }); + // TASK-429: Hermes walked 2026-10-22 (PA-1). The list stays closed: Hermes is + // added by name, and the list still ends with the refusal to claim anything else. + test('lists Hermes from the command line, with its attach step and no provider named as walked', () => { + expect(prompt).toMatch(/OpenCode or dsh through their guides, and Hermes from the command line/); + expect(prompt).toMatch(/Do not claim any other tool connects\./); + expect(prompt).toContain('commonly agent attach hermes --pod --name '); + expect(prompt).toMatch(/It needs Hermes 0\.22\.2 exactly/); + // The adapter fixes --provider openrouter and reads OPENROUTER_API_KEY from the host. + expect(prompt).toMatch(/an OpenRouter API key \(OPENROUTER_API_KEY\) in the environment/); + expect(prompt).toMatch(/do not say OpenRouter, or any model provider, was the one it was walked on/); + expect(prompt).not.toMatch(/walked[^.]*OpenRouter/); + }); + test('the dsh guide gives the same attach step and the completed macOS walk', () => { const guide = fs.readFileSync(path.resolve(__dirname, '../../../../docs/cli/dsh.md'), 'utf8'); expect(guide).toContain('commonly agent attach dsh --pod --name '); diff --git a/backend/config/native-agents/scout.ts b/backend/config/native-agents/scout.ts index dabe1cb12d..248eff8450 100644 --- a/backend/config/native-agents/scout.ts +++ b/backend/config/native-agents/scout.ts @@ -121,6 +121,18 @@ export const scoutApp = { + 'repository; it has been walked on a Mac only. Point them to the guide and ' + 'do not propose a connect card for it: the card sets up Claude Code or ' + 'Codex.\n' + // Walked 2026-10-22 16:30Z (PA-1 PASS): Hermes 0.22.2 on macOS, a non-admin + // account in an invite-only pod, a LiteLLM DeepSeek provider; a mention was + // answered in 56 s. The walk ran on 31cc808d, before forge's probe fix, and + // on our LiteLLM. The adapter itself passes --provider openrouter and needs + // OPENROUTER_API_KEY, which the walk did not use, so no provider is named as walked. + + ' * Hermes connects from the command line, not from this page. It needs Hermes ' + + '0.22.2 exactly, and an OpenRouter API key (OPENROUTER_API_KEY) in the environment ' + + 'of the computer it runs on: the adapter sends its model calls through OpenRouter. ' + + 'Run `commonly agent attach hermes --pod --name `, then `commonly ' + + 'agent run ` to answer @mentions. The pod id is the last part of its URL. ' + + 'Do not propose a connect card for it, and do not say OpenRouter, or any model ' + + 'provider, was the one it was walked on.\n' + ' * "Add a computer": `npm i -g @commonlyai/cli@latest && commonly login ' + '&& commonly daemon register && commonly daemon install` registers their ' + 'machine once; after that they add agents to it from this page with no ' @@ -163,7 +175,7 @@ export const scoutApp = { + '` to answer @mentions. The pod id is the last part of its URL. ' + 'Lead with the yes when someone asks whether dsh can join.\n' + '- What connects as their own agent: Claude Code or Codex from the Bring ' - + 'your own page, and OpenCode or dsh through their guides. Qwen Code and pi are not ' + + 'your own page, OpenCode or dsh through their guides, and Hermes from the command line. Qwen Code and pi are not ' + 'ready for outside use; say so if asked. Do not claim any other tool ' + 'connects.\n' + '- Developers building their own agent: Commonly agents use a small HTTP '