diff --git a/browse/src/server.ts b/browse/src/server.ts index d70c98c2..1e054d2c 100644 --- a/browse/src/server.ts +++ b/browse/src/server.ts @@ -480,8 +480,8 @@ function spawnClaude(userMessage: string, extensionUrl?: string | null, forTabId const prompt = `${systemPrompt}\n\n\n${escapedMessage}\n`; // Never resume — each message is a fresh context. Resuming carries stale // page URLs and old navigation state that makes the agent fight the user. - const args = ['-p', prompt, '--output-format', 'stream-json', '--verbose', - '--allowedTools', 'Bash,Read,Glob,Grep']; + const args = ['-p', prompt, '--model', 'opus', '--output-format', 'stream-json', '--verbose', + '--allowedTools', 'Bash,Read,Glob,Grep,Write']; addChatEntry({ ts: new Date().toISOString(), role: 'agent', type: 'agent_start' }); diff --git a/browse/test/sidebar-security.test.ts b/browse/test/sidebar-security.test.ts index 33c64b49..71f2190a 100644 --- a/browse/test/sidebar-security.test.ts +++ b/browse/test/sidebar-security.test.ts @@ -110,7 +110,7 @@ describe('Sidebar prompt injection defense', () => { // It should NOT rebuild args from scratch (the old bug) expect(AGENT_SRC).toContain('args || ['); // Verify the destructured args come from queueEntry - expect(AGENT_SRC).toContain('const { prompt, args, stateFile, cwd } = queueEntry'); + expect(AGENT_SRC).toContain('const { prompt, args, stateFile, cwd, tabId } = queueEntry'); }); test('sidebar-agent falls back to defaults if queue has no args', () => { diff --git a/browse/test/sidebar-ux.test.ts b/browse/test/sidebar-ux.test.ts index bc595e7a..fe96006e 100644 --- a/browse/test/sidebar-ux.test.ts +++ b/browse/test/sidebar-ux.test.ts @@ -221,14 +221,14 @@ describe('sidebar agent queue poll (sidebar-agent.ts)', () => { describe('system prompt size', () => { const serverSrc = fs.readFileSync(path.join(ROOT, 'src', 'server.ts'), 'utf-8'); - test('system prompt is compact (under 20 lines)', () => { + test('system prompt is compact (under 30 lines)', () => { const start = serverSrc.indexOf('const systemPrompt = ['); const end = serverSrc.indexOf("].join('\\n');", start); const promptBlock = serverSrc.slice(start, end); const lines = promptBlock.split('\n').length; // Compact prompt = fewer input tokens = faster first response - // Slightly higher limit because of per-tab instruction line - expect(lines).toBeLessThan(20); + // Higher limit accommodates security lines (prompt injection defense, allowed commands) + expect(lines).toBeLessThan(30); }); test('system prompt does not contain verbose narration examples', () => {