bingocode 1.1.195 → 1.1.199

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  const { spawn } = require('node:child_process');
4
4
  const path = require('path');
package/bin/claude CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bash
1
+ #!/usr/bin/env bash
2
2
  set -euo pipefail
3
3
 
4
4
  ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  const { spawn } = require('node:child_process');
4
4
  const path = require('path');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bingocode",
3
- "version": "1.1.195",
3
+ "version": "1.1.199",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "claude": "bin/claude-win.cjs",
@@ -16,22 +16,22 @@ export async function call(
16
16
  const arg = (args ?? '').trim().toLowerCase()
17
17
  const enable = arg !== 'off'
18
18
 
19
- const result = updateSettingsForSource('userSettings', { execMode: enable })
19
+ const result = updateSettingsForSource('userSettings', { brainMode: enable })
20
20
  if (result.error) {
21
21
  logError(result.error)
22
- onDone(`Failed to ${enable ? 'enable' : 'disable'} Exec Mode: ${result.error.message}`, { display: 'system' })
22
+ onDone(`Failed to ${enable ? 'enable' : 'disable'} Brain Mode: ${result.error.message}`, { display: 'system' })
23
23
  return null
24
24
  }
25
25
 
26
26
  if (enable) {
27
- context.setAppState(prev => ({ ...prev, execMode: true }))
28
- onDone('✓ Exec Mode enabled', { display: 'system' })
27
+ context.setAppState(prev => ({ ...prev, brainMode: true }))
28
+ onDone('✓ Brain Mode enabled — thinking, deciding, orchestrating.', { display: 'system' })
29
29
  } else {
30
- context.setAppState(prev => ({ ...prev, execMode: false }))
31
- onDone('✗ Exec Mode disabled', { display: 'system' })
30
+ context.setAppState(prev => ({ ...prev, brainMode: false }))
31
+ onDone('✗ Brain Mode disabled — back to full execution.', { display: 'system' })
32
32
  }
33
33
 
34
- logEvent('tengu_exec_mode_toggled', {
34
+ logEvent('tengu_brain_mode_toggled', {
35
35
  enabled: enable,
36
36
  source: 'shortcut' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
37
37
  })
@@ -0,0 +1,14 @@
1
+ import type { Command } from '../../commands.js'
2
+
3
+ const brain = {
4
+ type: 'local-jsx',
5
+ name: 'brain',
6
+ description:
7
+ 'Brain mode — think, decide, orchestrate. Delegate execution to sub-agents.',
8
+ argumentHint: '[off]',
9
+ isEnabled: () => true,
10
+ immediate: true,
11
+ load: () => import('./brain.js'),
12
+ } satisfies Command
13
+
14
+ export default brain
package/src/commands.ts CHANGED
@@ -124,7 +124,7 @@ import thinkbackPlay from './commands/thinkback-play/index.js'
124
124
  import permissions from './commands/permissions/index.js'
125
125
  import plan from './commands/plan/index.js'
126
126
  import fast from './commands/fast/index.js'
127
- import exec from './commands/exec/index.js'
127
+ import brain from './commands/brain/index.js'
128
128
  import passes from './commands/passes/index.js'
129
129
  import privacySettings from './commands/privacy-settings/index.js'
130
130
  import hooks from './commands/hooks/index.js'
@@ -275,7 +275,7 @@ const COMMANDS = memoize((): Command[] => [
275
275
  effort,
276
276
  exit,
277
277
  fast,
278
- exec,
278
+ brain,
279
279
  files,
280
280
  heapDump,
281
281
  help,
@@ -323,7 +323,7 @@ function PromptInput({
323
323
  const mainLoopModelForSession = useAppState(s => s.mainLoopModelForSession);
324
324
  const thinkingEnabled = useAppState(s => s.thinkingEnabled);
325
325
  const isFastMode = useAppState(s => isFastModeEnabled() ? s.fastMode : false);
326
- const isExecMode = useAppState(s => s.execMode ?? false);
326
+ const isBrainMode = useAppState(s => s.brainMode ?? false);
327
327
  const effortValue = useAppState(s => s.effortValue);
328
328
  const viewedTeammate = getViewedTeammateTask(store.getState());
329
329
  const viewingAgentName = viewedTeammate?.identity.agentName;
@@ -2261,7 +2261,7 @@ function PromptInput({
2261
2261
  </Box>
2262
2262
  </Box>
2263
2263
  <Text color={swarmBanner.bgColor}>{'─'.repeat(columns)}</Text>
2264
- </> : <Box flexDirection="row" alignItems="flex-start" justifyContent="flex-start" borderColor={getBorderColor()} borderStyle="round" borderLeft={false} borderRight={false} borderBottom width="100%" borderText={buildBorderText(showFastIcon ?? false, showFastIconHint, fastModeCooldown, isExecMode)}>
2264
+ </> : <Box flexDirection="row" alignItems="flex-start" justifyContent="flex-start" borderColor={getBorderColor()} borderStyle="round" borderLeft={false} borderRight={false} borderBottom width="100%" borderText={buildBorderText(showFastIcon ?? false, showFastIconHint, fastModeCooldown, isBrainMode)}>
2265
2265
  <PromptInputModeIndicator mode={mode} isLoading={isLoading} viewingAgentName={viewingAgentName} viewingAgentColor={viewingAgentColor} />
2266
2266
  <Box flexGrow={1} flexShrink={1} onClick={handleInputClick}>
2267
2267
  {textInputElement}
@@ -2321,13 +2321,13 @@ function getInitialPasteId(messages: Message[]): number {
2321
2321
  }
2322
2322
  return maxId + 1;
2323
2323
  }
2324
- function buildBorderText(showFastIcon: boolean, showFastIconHint: boolean, fastModeCooldown: boolean, isExecMode: boolean): BorderTextOptions | undefined {
2325
- if (!showFastIcon && !isExecMode) return undefined
2324
+ function buildBorderText(showFastIcon: boolean, showFastIconHint: boolean, fastModeCooldown: boolean, isBrainMode: boolean): BorderTextOptions | undefined {
2325
+ if (!showFastIcon && !isBrainMode) return undefined
2326
2326
  const segments: string[] = []
2327
2327
  if (showFastIcon) {
2328
2328
  segments.push(showFastIconHint ? `${getFastIconString(true, fastModeCooldown)} ${chalk.dim('/fast')}` : getFastIconString(true, fastModeCooldown))
2329
2329
  }
2330
- if (isExecMode) {
2330
+ if (isBrainMode) {
2331
2331
  segments.push(chalk.yellow('» EXEC'))
2332
2332
  }
2333
2333
  return { content: ` ${segments.join(' ')} `, position: 'top', align: 'end', offset: 0 }
@@ -564,7 +564,7 @@ ${CYBER_RISK_INSTRUCTION}`,
564
564
  ...(feature('KAIROS') || feature('KAIROS_BRIEF')
565
565
  ? [systemPromptSection('brief', () => getBriefSection())]
566
566
  : []),
567
- DANGEROUS_uncachedSystemPromptSection('exec_policy', () => getExecPolicySection(), 'toggles mid-session via /exec'),
567
+ DANGEROUS_uncachedSystemPromptSection('brain_policy', () => getBrainPolicySection(), 'toggles mid-session via /brain'),
568
568
  ]
569
569
 
570
570
  const resolvedDynamicSections =
@@ -926,15 +926,50 @@ The user context may include a \`terminalFocus\` field indicating whether the us
926
926
  - **Focused**: The user is watching. Be more collaborative — surface choices, ask before committing to large changes, and keep your output concise so it's easy to follow in real time.${BRIEF_PROACTIVE_SECTION && briefToolModule?.isBriefEnabled() ? `\n\n${BRIEF_PROACTIVE_SECTION}` : ''}`
927
927
  }
928
928
 
929
- function getExecPolicySection(): string | null {
929
+ function getBrainPolicySection(): string | null {
930
930
  const settings = getInitialSettings()
931
- if (!settings.execMode) return null
932
- return `# Execution Policy (/exec)
931
+ if (!settings.brainMode) return null
932
+ return `# Brain Mode (/brain)
933
933
 
934
- When /exec is enabled:
934
+ You are the coordinator — the brain, not the hands. Your context window is precious
935
+ strategic real estate. Implementation details are delegated noise; your job is
936
+ thinking, deciding, and orchestrating.
935
937
 
936
- - Dispatch first: prefer sub-agents for implementation, exploration, and research. Reserve coordinator context for decision-making and orchestration.
937
- - Keep coordinator context focused on decisions and task orchestration.
938
- - Compress reports: skip explanations and teaching. Report decisions, blockers, and results.
939
- - Context protection: every token of your output consumes user's context window. Output what's needed, skip what's not.`
938
+ ## Hard Constraints
939
+
940
+ **You MUST NOT execute work directly.** Do NOT use Bash, Read, Grep, Glob, Write,
941
+ Edit, or any other execution tool yourself. Your only tools are Agent (to delegate)
942
+ and AskUserQuestion (to clarify). Everything else is forbidden.
943
+
944
+ **Every task goes through sub-agents.** Even a single file read, even a one-line
945
+ grep — delegate it. Your context must stay clean for strategic reasoning.
946
+
947
+ **When in doubt, spawn an agent.** If you're about to reach for a tool, stop.
948
+ Write a prompt for an agent instead.
949
+
950
+ ## Workflow
951
+
952
+ 1. **Analyze** — understand the user's request at the system level. What's the real
953
+ goal? What decisions need to be made?
954
+ 2. **Decompose** — break into independent workstreams. Each workstream becomes an
955
+ agent prompt with clear scope, context, and expected output.
956
+ 3. **Parallelize** — launch all independent agents simultaneously. Never serialize
957
+ what can run in parallel.
958
+ 4. **Integrate** — synthesize agent results. Make decisions. Report to user.
959
+ 5. **Iterate** — if results reveal new questions, spawn another round of agents.
960
+
961
+ ## Agent Prompt Quality
962
+
963
+ Each agent prompt must include:
964
+ - What we're trying to accomplish and why
965
+ - What's already known / ruled out
966
+ - Specific files, line numbers, commands — never "investigate the bug"
967
+ - Expected output format (short report, code change, test results)
968
+ - Whether to write code or only research
969
+
970
+ ## Output Style
971
+
972
+ Report compressed: decisions made, blockers hit, next steps. Never narrate what
973
+ agents are doing moment-by-moment. "Agent A found X, agent B confirmed Y. Decision:
974
+ rollback needed." is enough.`
940
975
  }
package/src/main.tsx CHANGED
@@ -2640,7 +2640,7 @@ async function run(): Promise<CommanderCommand> {
2640
2640
  ...(isFastModeEnabled() && {
2641
2641
  fastMode: getInitialFastModeSetting(effectiveModel ?? null)
2642
2642
  }),
2643
- execMode: getInitialSettings().execMode === true,
2643
+ brainMode: getInitialSettings().brainMode === true,
2644
2644
  ...(isAdvisorEnabled() && advisorModel && {
2645
2645
  advisorModel
2646
2646
  }),
@@ -421,8 +421,8 @@ export type AppState = DeepImmutable<{
421
421
  activeOverlays: ReadonlySet<string>
422
422
  // Fast mode
423
423
  fastMode?: boolean
424
- // Executor mode
425
- execMode?: boolean
424
+ // Brain mode
425
+ brainMode?: boolean
426
426
  // Advisor model for server-side advisor tool (undefined = disabled).
427
427
  advisorModel?: string
428
428
  // Effort value
@@ -567,6 +567,6 @@ export function getDefaultAppState(): AppState {
567
567
  effortValue: undefined,
568
568
  activeOverlays: new Set<string>(),
569
569
  fastMode: false,
570
- execMode: false,
570
+ brainMode: false,
571
571
  }
572
572
  }
@@ -915,8 +915,8 @@ export async function getAttachments(
915
915
  maybe('critical_system_reminder', () =>
916
916
  Promise.resolve(getCriticalSystemReminderAttachment(toolUseContext)),
917
917
  ),
918
- maybe('exec_mode_reminder', () =>
919
- Promise.resolve(getExecModeReminderAttachment()),
918
+ maybe('brain_mode_reminder', () =>
919
+ Promise.resolve(getBrainModeReminderAttachment()),
920
920
  ),
921
921
  ...(feature('COMPACTION_REMINDERS')
922
922
  ? [
@@ -1593,15 +1593,15 @@ function getCriticalSystemReminderAttachment(
1593
1593
  return [{ type: 'critical_system_reminder', content: reminder }]
1594
1594
  }
1595
1595
 
1596
- function getExecModeReminderAttachment(): Attachment[] {
1597
- if (!getInitialSettings().execMode) {
1596
+ function getBrainModeReminderAttachment(): Attachment[] {
1597
+ if (!getInitialSettings().brainMode) {
1598
1598
  return []
1599
1599
  }
1600
1600
  return [
1601
1601
  {
1602
1602
  type: 'system_reminder' as const,
1603
1603
  content:
1604
- '/exec active — Dispatch first. Protect context. Report decisions, blockers, results.',
1604
+ '/brain active — Only use Agent and AskUserQuestion. Do NOT use Bash/Read/Grep/Glob/Write/Edit directly. Delegate everything.',
1605
1605
  },
1606
1606
  ]
1607
1607
  }
@@ -725,11 +725,11 @@ export const SettingsSchema = lazySchema(() =>
725
725
  .describe(
726
726
  'When true, fast mode does not persist across sessions. Each session starts with fast mode off.',
727
727
  ),
728
- execMode: z
728
+ brainMode: z
729
729
  .boolean()
730
730
  .optional()
731
731
  .describe(
732
- 'Priority dispatch, context protection, compressed reporting.',
732
+ 'Coordinator mode delegates all execution to sub-agents via Agent tool, restricts direct tool use to protect context.',
733
733
  ),
734
734
  promptSuggestionEnabled: z
735
735
  .boolean()
@@ -1,16 +0,0 @@
1
- import type { Command } from '../../commands.js'
2
-
3
- const exec = {
4
- type: 'local-jsx',
5
- name: 'exec',
6
- description:
7
- 'Enable execution policy — dispatch-first, context protection, compressed output',
8
- availability: ['claude-ai', 'console'],
9
- aliases: ['executor'],
10
- argumentHint: '[off]',
11
- isEnabled: () => true,
12
- immediate: true,
13
- load: () => import('./exec.js'),
14
- } satisfies Command
15
-
16
- export default exec