Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions bin/lib/args-parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ export function parseArguments(args: string[]): AgentConfig {
toolResultDisplay: 'compact',
saveLocationType: 'project',
saveDir: null,
squadName: null,
};

for (let i = 0; i < args.length; i++) {
Expand Down Expand Up @@ -169,6 +170,9 @@ export function parseArguments(args: string[]): AgentConfig {
} else if (args[i] === '--save-dir' && args[i + 1]) {
config.saveDir = args[i + 1];
i++;
} else if (args[i] === '--squad-name' && args[i + 1]) {
config.squadName = args[i + 1];
i++;
} else if (!args[i].startsWith('--')) {
config.prompt = args[i];
}
Expand Down
30 changes: 26 additions & 4 deletions bin/lib/prompt-builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,20 +57,41 @@ function getLanguageInstruction(langCode: string | null): string {
* - Emphasizes vibing-nvim MCP tools for LSP operations
* - Provides decision trees for common development scenarios
* - Includes RPC port information for multi-instance safety
* - Includes squad awareness (if this is a squad session)
*
* The prompt is designed to make Claude prioritize vibing.nvim-specific workflows
* when developing vibing.nvim features, reducing the likelihood of using generic
* commands like `git worktree` or Serena LSP tools.
*
* @param prioritizeVibingLsp - Whether to include vibing.nvim-specific guidance
* @param rpcPort - RPC port for this Neovim instance (null if not available)
* @param squadName - Squad name for squad-aware sessions (null for regular sessions)
* @returns Complete system prompt string, or empty string if prioritizeVibingLsp is false
*/
function buildVibingSystemPrompt(prioritizeVibingLsp: boolean, rpcPort: number | null): string {
function buildVibingSystemPrompt(
prioritizeVibingLsp: boolean,
rpcPort: number | null,
squadName: string | null
): string {
if (!prioritizeVibingLsp) {
return '';
}

const squadInfo = squadName
? `

## Squad Awareness

**You are running as part of a Squad: "${squadName}"**

This means:
- You are "${squadName}", a specialized Claude agent in the vibing.nvim squad system
- You can identify yourself as "${squadName}" in conversations
- You can reference your squad name to distinguish from other squads (e.g., "Alpha", "Beta", "Commander")
- You are aware of your identity and role within the multi-agent squad ecosystem
`
: '';

const rpcPortInfo = rpcPort
? `

Expand All @@ -92,7 +113,7 @@ await mcp__vibing-nvim__nvim_list_windows({});
: '';

return `<vibing-nvim-system>
IMPORTANT: You are running inside vibing.nvim, a Neovim plugin with Claude Code integration.${rpcPortInfo}
IMPORTANT: You are running inside vibing.nvim, a Neovim plugin with Claude Code integration.${squadInfo}${rpcPortInfo}

## Self-Development Context

Expand Down Expand Up @@ -284,7 +305,8 @@ await mcp__vibing-nvim__nvim_execute({ command: "bprevious" });
* @returns Complete prompt string ready for Claude Agent SDK
*/
export function buildPrompt(config: AgentConfig): string {
const { prompt, contextFiles, sessionId, prioritizeVibingLsp, language, rpcPort } = config;
const { prompt, contextFiles, sessionId, prioritizeVibingLsp, language, rpcPort, squadName } =
config;

let fullPrompt = prompt;

Expand All @@ -299,7 +321,7 @@ Only reference actual messages within THIS current session.

`;

const vibingSystemPrompt = buildVibingSystemPrompt(prioritizeVibingLsp, rpcPort);
const vibingSystemPrompt = buildVibingSystemPrompt(prioritizeVibingLsp, rpcPort, squadName);

const languageInstruction = getLanguageInstruction(language);
let languageSystemPrompt = '';
Expand Down
1 change: 1 addition & 0 deletions bin/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export interface AgentConfig {
toolResultDisplay: 'none' | 'compact' | 'full';
saveLocationType: 'project' | 'user' | 'custom';
saveDir: string | null;
squadName: string | null;
}

export interface StreamEvent {
Expand Down
Loading
Loading