ReviewOS

also looking at this

stacks/uplink

feat: let a text switch one thread between Claude and Codex

#52
Merged glennmichael123 wants to merge feat/per-thread-engine into main
16 files +316 -27
app/Uplink/commands.tsmodified+6-1
Changes to app/Uplink/commands.ts
@@ -3,7 +3,7 @@
33 * message matches ("stop", "/stop", "Stop."), so "stop the dev server in
44 * ~/Code/x" still reaches the agent as a task.
55 */
6export type ControlCommand = 'help' | 'status' | 'stop' | 'new' | 'more' | 'ping'
6export type ControlCommand = 'help' | 'status' | 'stop' | 'new' | 'more' | 'ping' | 'claude' | 'codex'
77
88const ALIASES: Record<string, ControlCommand> = {
99 'help': 'help',
@@ -19,6 +19,10 @@ const ALIASES: Record<string, ControlCommand> = {
1919 'more': 'more',
2020 'continue reply': 'more',
2121 'ping': 'ping',
22 // Switching engines is a whole-message word like the rest, so "codex keeps
23 // timing out on ~/Code/x" is still a task and not a switch.
24 'claude': 'claude',
25 'codex': 'codex',
2226}
2327
2428export function parseControl(text: string): ControlCommand | null {
@@ -33,4 +37,5 @@ export const HELP_TEXT = [
3337 'new - start a fresh conversation',
3438 'more - rest of a long reply',
3539 'ping - check I am alive',
40 'claude / codex - switch this thread to that agent',
3641].join('\n')