/**
* Self MCP Server - Prompts
* Templates de prompts para guiar a IA nas conversas
*/
import db from "../db/index.js";
/**
* Definição de todos os prompts do MCP
*/
export const promptDefinitions = [
{
name: "create_self",
description:
"Guia o usuário na criação do seu Self completo através de uma conversa estruturada",
arguments: [
{
name: "style",
description:
"Estilo do Self: personal (pessoal) ou business (profissional/negócios)",
required: false,
},
],
},
{
name: "daily_guardian",
description:
"Ativa o modo Guardião Diário para check-in matinal, log noturno ou reconexão",
arguments: [
{
name: "mode",
description:
"Modo do guardião: morning (check-in matinal), evening (log noturno) ou reconnect (reconexão)",
required: false,
},
],
},
];
/**
* Retorna o conteúdo de um prompt
*/
export function getPrompt(name, args = {}) {
switch (name) {
case "create_self":
return getCreateSelfPrompt(args.style);
case "daily_guardian":
return getDailyGuardianPrompt(args.mode);
default:
throw new Error(`Prompt não encontrado: ${name}`);
}
}
function getCreateSelfPrompt(style = "personal") {
const isEmpty = db.isEmpty();
const existingProfile = isEmpty ? null : db.getFullProfile();
let systemContext = "";
if (!isEmpty) {
systemContext = `
O usuário já possui um Self parcialmente preenchido. Aqui está o estado atual:
- Fundamentos: ${existingProfile.foundations.length} itens
- Intenções: ${existingProfile.intentions.length} itens
- Missões: ${existingProfile.missions.length} itens
- Metas: ${existingProfile.goals.length} itens
- Projetos: ${existingProfile.projects.length} itens
Continue de onde parou ou ajude a completar/atualizar o que já existe.
`;
}
const styleContext =
style === "business"
? "Foque em objetivos profissionais, carreira e negócios."
: "Inclua aspectos pessoais, profissionais e de vida.";
return {
messages: [
{
role: "user",
content: {
type: "text",
text: `Você é um **Self Coach**. Guie-me na criação do meu Self - um documento vivo que conecta minhas ações diárias ao que realmente me move.
${styleContext}
${systemContext}
**Regras:**
1. Faça **uma pergunta por vez** — não despeje tudo de uma vez
2. Após cada resposta, **parafraseie** para confirmar entendimento
3. Seja **direto** — evite explicações longas
4. Use as **tools do MCP** para salvar cada resposta imediatamente:
- \`set_foundation\` para valores e identidade
- \`add_intention\` para problemas/curiosidades/etc
- \`add_mission\` para missões
- \`add_goal\` para metas
- \`add_project\` para projetos
- \`add_obstacle\` para obstáculos
5. Ao final, use \`export_markdown\` para gerar o arquivo
---
## Roteiro de Perguntas
### 1. Fundamentos
> "Antes de falar sobre o que você quer fazer, vamos falar sobre quem você é."
- "Cite 3 valores que guiam suas decisões. O que você nunca negociaria?"
- "Em uma frase: quem você quer ser daqui a 10 anos?"
### 2. Intenção
> "Agora vamos descobrir o que te move. Existem 4 portas de entrada — escolha a que faz mais sentido para você:"
**Opção A — Problema:**
- "Qual dor no mundo te incomoda a ponto de querer fazer algo?"
**Opção B — Curiosidade:**
- "O que te fascina? O que você passaria horas explorando?"
**Opção C — Identidade:**
- "Quem você quer se tornar? Que tipo de pessoa quer ser?"
**Opção D — Experiência:**
- "O que você quer viver? Qual experiência você sonha ter?"
### 3. Missões
> "Agora vamos transformar frustração em ação."
- "Para cada problema: qual seria sua contribuição de longo prazo para resolvê-lo?"
- "Comece com um verbo de ação (Construir, Ensinar, Proteger, Criar...)"
### 4. Metas
> "Missões são para a vida. Metas são para este ano."
- "Para sua missão principal: qual resultado específico você quer alcançar nos próximos 12 meses?"
- "Como você vai medir se conseguiu?"
### 5. Projetos
> "Projetos são o que você faz esta semana para avançar."
- "Quais projetos ativos você tem agora que avançam suas metas?"
- "Se não tem nenhum: qual seria o primeiro passo concreto?"
### 6. Obstáculos (opcional)
- "O que te trava? Seja honesto — interno ou externo."
- "Para cada obstáculo: qual sua estratégia para contorná-lo?"
---
Comece agora! Faça a primeira pergunta.`,
},
},
],
};
}
function getDailyGuardianPrompt(mode = "morning") {
const profile = db.getFullProfile();
const hasProfile = !db.isEmpty();
if (!hasProfile) {
return {
messages: [
{
role: "user",
content: {
type: "text",
text: `Você é meu Guardião do Self, mas eu ainda não criei meu Self!
Antes de fazer o check-in diário, preciso definir meus valores, missões e metas.
Use o prompt \`create_self\` para me ajudar a criar meu Self primeiro.`,
},
},
],
};
}
// Monta contexto do Self
const values = profile.foundations
.filter((f) => f.type === "value")
.map((f) => f.content)
.join(", ");
const identity =
profile.foundations.find((f) => f.type === "identity")?.content ||
"Não definida";
const missions = profile.missions
.map((m) => `${m.code}: ${m.content}`)
.join("\n");
const goals = profile.goals
.filter((g) => g.year === new Date().getFullYear())
.map((g) => `${g.code}: ${g.content}`)
.join("\n");
const selfContext = `
## Meu Self
**Valores:** ${values || "Não definidos"}
**Identidade futura:** "${identity}"
**Missões:**
${missions || "Nenhuma missão definida"}
**Metas (${new Date().getFullYear()}):**
${goals || "Nenhuma meta definida"}
`;
let modeInstructions = "";
switch (mode) {
case "morning":
modeInstructions = `
## ☀️ Morning Check-in
**Seu trabalho:**
1. Receba minha lista de tarefas para o dia
2. Para cada tarefa, pergunte: "Isso avança qual M ou G?"
3. Se não avança nenhuma, questione se é necessário
4. Reordene por impacto nas missões
5. Retorne uma lista priorizada
**Formato de saída:**
\`\`\`
## Plano do Dia (alinhado ao Self)
1. [Tarefa] → avança G1
2. [Tarefa] → avança G2
3. [Tarefa] → ⚠️ não conectada — considere eliminar ou delegar
💡 Sugestão: [algo que você deveria fazer mas não listou]
\`\`\`
Pergunte quais são minhas tarefas para hoje.`;
break;
case "evening":
modeInstructions = `
## 🌙 Evening Log
**Seu trabalho:**
1. Peça que eu conte como foi o dia
2. Resuma em 1-2 linhas o que aconteceu
3. Classifique como [Vitória], [Aprendizado] ou [Desvio]
4. Use a tool \`add_daily\` para registrar no banco
5. Gere uma entrada formatada
**Formato de saída:**
\`\`\`
## Entrada para o Registro Diário
- **${
new Date().toISOString().split("T")[0]
}:** [Vitória] Descrição concisa. (→M1)
\`\`\`
Pergunte como foi meu dia.`;
break;
case "reconnect":
default:
modeInstructions = `
## 🧭 Reconexão
O usuário disse que está perdido, desmotivado ou sem foco.
**Seu trabalho:**
1. Cite o **Problema/Intenção** original — a dor que me move
2. Relembre minha **Missão** — o que eu escolhi fazer
3. Sugira **uma única ação** para hoje que reconecte com o propósito
4. Seja empático mas direto
Comece reconhecendo o momento difícil e ajude-me a reconectar.`;
break;
}
return {
messages: [
{
role: "user",
content: {
type: "text",
text: `Você é meu **Guardião do Self** — um coach de execução focado em alinhamento.
**Seu trabalho:**
- Garantir que minhas ações diárias avancem minhas **Missões (M)** e **Metas (G)**
- Me alertar quando eu estiver no "trabalho ocupado" que não leva a lugar nenhum
- Ser direto e implacável, mas construtivo
${selfContext}
---
${modeInstructions}`,
},
},
],
};
}
export default { promptDefinitions, getPrompt };