From ravi-dev
Documenta o sistema de construcao de prompts do Ravi. Use quando precisar: - Entender como system prompts sao montados - Adicionar novas secoes ao prompt - Modificar formatacao por canal - Entender injecao de contexto (grupo, reactions, runtime) - Criar novas regras de output por plataforma
How this skill is triggered — by the user, by Claude, or both
Slash command
/ravi-dev:prompt-builderThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
O prompt builder constroi o system prompt appendix que e injetado em cada chamada do Claude SDK.
O prompt builder constroi o system prompt appendix que e injetado em cada chamada do Claude SDK. Ele adapta o comportamento do agent baseado no canal, grupo, e contexto da mensagem.
Arquivo: src/prompt-builder.ts
// bot.ts - na hora de processar prompt
const systemPromptAppend = buildSystemPrompt(agent.id, prompt.context);
query({
prompt: prompt.prompt,
options: {
systemPrompt: {
type: "preset",
preset: "claude_code",
append: systemPromptAppend, // <-- injetado aqui
},
},
});
O SDK usa o preset claude_code como base e appenda nossas secoes.
class PromptBuilder {
section(title: string, content: string): this;
build(): string; // Retorna "## Title\n\nContent" para cada secao
}
A funcao buildSystemPrompt(agentId, ctx) monta as secoes:
## Identidade
Voce e Ravi.
Protocolo de comandos internos:
[System] Inform: <info> - Avalie a info e decida: silêncio (@@SILENT@@), resposta breve, ou ação com tools[System] Execute: <task> - Execute usando tools[System] Ask: [from: <session>] <question> - Pergunta cross-session[System] Answer: [from: <session>] <response> - Resposta cross-sessionRuntime: agent=main | channel=WhatsApp | capabilities=polls,reactions
Formatacao adaptada por plataforma:
WhatsApp:
Matrix:
TUI:
Instrucoes de quando usar emoji reactions vs texto:
[mid:ID] no header identifica a mensagemVoce esta respondendo no grupo "Familia".
Membros: Joao, Maria, Luis.
Seja seletivo: responda so quando mencionado ou claramente util.
Se nao precisa responder: @@SILENT@@
WhatsApp msg recebida
-> Channel normaliza -> InboundMessage
-> Gateway extrai MessageContext:
{ channelId, channelName, senderId, isGroup, groupName, groupMembers, ... }
-> Emite para bot com context
-> bot.ts chama buildSystemPrompt(agentId, context)
-> Prompt appendix montado com secoes relevantes
-> Passado para Claude SDK
interface MessageContext {
channelId: string; // "whatsapp"
channelName: string; // "WhatsApp"
accountId: string; // "default"
chatId: string; // "5511999999999"
messageId: string; // ID da msg
senderId: string; // Quem mandou
senderName?: string; // Nome do remetente
senderPhone?: string; // Telefone
isGroup: boolean;
groupName?: string;
groupId?: string;
groupMembers?: string[];
timestamp: number;
}
Metadados estaveis que sao salvos na sessao para reuso:
interface ChannelContext {
channelId: string;
channelName: string;
isGroup: boolean;
groupName?: string;
groupId?: string;
groupMembers?: string[];
}
Salvo em sessions.last_context como JSON. Usado pelo cross-send para reconstruir contexto.
export const SILENT_TOKEN = "@@SILENT@@";
Quando o agent responde com este token:
{ type: "silent" } para parar typingprompt-builder.ts:function minhaSecao(ctx: ChannelContext): string {
return `Instrucoes especificas aqui...`;
}
buildSystemPrompt():builder.section("Minha Secao", minhaSecao(ctx));
outputFormattingText():if (channelName === "MeuCanal") {
return `Regras de formatacao para MeuCanal...`;
}
channelType do OmniConsumer (ex: "whatsapp-baileys", "discord", "telegram").O sistema de outbound injeta contexto adicional via prompt._outboundSystemContext:
if (prompt._outboundSystemContext) {
systemPromptAppend += "\n\n" + prompt._outboundSystemContext;
}
Isso inclui:
npx claudepluginhub filipexyz/ravi --plugin ravi-devStructures Claude prompts using behavior/task/knowledge zones, XML tagging, and tone registers for skills, agents, modes, complex tasks, tools, and code generation.
Guides setting up external messaging channels (WhatsApp, Telegram, Discord, iMessage) for Claude Code agents via plugins. Useful for enabling communication outside the CLI.
Generates system prompts for LLM bots, assistants, classifiers, routers, multi-step pipelines. Determines single/multi-prompt architecture and queries missing info.