Projetos
Projetos são esforços com um objetivo definido e um estado final — diferentemente de Áreas, que são contínuas. Um projeto é uma pasta no vault pareada com um projeto no backend de tarefas: a pasta guarda o significado do projeto, o backend guarda suas tarefas (tasks.md). Cada chamada de tarefa é uma operação a partir de tasks.md, executada conforme o adaptador para TASKS.
Camada base
Leia antes de agir, cada um como ../../para/<arquivo>.md relativo ao diretório base deste skill — eles contêm as regras compartilhadas, não as repita de memória:
../../para/paths.md— sempre, incluindo «Idioma»: as strings abaixo vêm delang/<LANG>.md../../para/tasks.md— sempre: as operações, pareamento, o que é uma tarefa../../para/find-target.md— paraoverviewetask../../para/note-format.md— paracreate; para cada subcomando, «Campos legados»../../para/project-id.md— paracreate../../para/dod.md— paracreate(escrevendo a seçãoproject.dod) eoverview../../para/thresholds.md— paralisteoverview: ordem dos projetos, inatividade, horizontes, contagens de tarefas, tamanho da saída../../para/confirm.md—createetaskescrevem (Nível 1);listeoverviewnão escrevem nada../../para/move.md— paracreate, antes de escrever uma pasta que possa colidir
Subcomandos
A primeira palavra de $ARGUMENTS escolhe o subcomando: list, create, overview,
task. Se não for nenhum deles, descubra qual é o significado a partir da frase e diga qual você escolheu. $ARGUMENTS vazio → execute list, depois pergunte o que fazer.
Cada subcomando encontra projetos que antecedem o backend de tarefas: status, Tasks/ (note-format.md diz quando isso é legado), nenhum campo tasks_ref. Leia-os como note-format.md «Campos legados» diz — relate, nunca
reescreva.
create <descrição> — iniciar um projeto
Entrada: o que é o projeto, seu objetivo, prazo, primeiros passos. Vazio → pergunte o que é o projeto e seu objetivo.
-
Leia
Templates/Project.mddo disco, literalmente. -
Derive um título conforme
note-format.md. Ele é usado de três formas: comotitlee o H1 sem o prefixo id, e — com o prefixo — como o nome da pasta e o nome do arquivo de visão geral. Proponhashortconformenote-format.md. -
Emita o id conforme
project-id.md. -
Crie a estrutura de pastas sob
Projects/:PROJ-xxxx <título>/ ├── PROJ-xxxx <título>.md ← visão geral, a partir de Templates/Project.md ├── Notes/ ├── Resources/ └── Results/Todas as três subpastas, mesmo vazias. Sem
Tasks/(sobTASKS = fileso adaptador a cria com a primeira tarefa). -
Preencha o frontmatter conforme a linha Projeto em
note-format.md.createdé hoje.deadlinesomente se a descrição fornecer uma.tasks_refpermanece em branco até o passo 7 (sobpairing: noneo campo é omitido). -
Preencha o corpo:
- a seção
project.goal— o objetivo / estado final desejado. Obrigatório. - a seção
project.value— o que o usuário ganha, mensurável ou inequívoca (note-format.md, "Três seções sobre o resultado"). Obrigatório. Se ambos ouproject.goalnão estiverem claros a partir da entrada, pergunte por ambos em uma pergunta (confirm.md, Nível 1.5) antes de escrever. - a seção
project.problem— o que motivou o projeto. - a seção
project.expected_result— os artefatos concretos e onde eles estão. - a seção
project.scope— apenas os itens que o usuário nomeou. Geralmente vazia: a tarefa de pesquisa a preenche (tasks.md«A tarefa de pesquisa»). - a seção
project.dod— caixas de seleção conformedod.md. Se a descrição não permitir derivar verificações reais, pergunte — como para umproject.goalfaltante. - a seção
common.links— wikilinks para notas claramente relacionadas, caso contrário, o-do template.
- a seção
-
Crie o par conforme
tasks.md«Pareamento»:project.createcom o título e o id. Sobpairing: separate, escreva orefretornado emtasks_ref:; se a chamada falhar, diga: a pasta permanece, sem par, e/projects taskoferecerá pareá-lo depois. Sobpairing: nonenão há par e nenhumtasks_ref: pule a escrita. -
Primeiras tarefas no novo projeto, sem datas:
- a tarefa de pesquisa conforme
tasks.md«A tarefa de pesquisa», sempre, a menos que o usuário já tenha nomeado o escopo completo — nesse caso, escreva-a na seçãoproject.scope; - passos que o usuário nomeou explicitamente, adicionados com
task.adde redigidos conforme «O que é uma tarefa». Um passo que não possa ser redigido como uma ação é uma pergunta para a pesquisa, não uma tarefa.
Nunca invente passos que o usuário não nomeou.
- a tarefa de pesquisa conforme
-
Relate o caminho da pasta, id, título,
short(oferecendo para alterá-lo), prazo, objetivo, a linha de valor, o nome do projeto no backend e as tarefas criadas.
Se a entrada descrever uma responsabilidade contínua sem fim, isso não é um projeto —
diga e ofereça /areas create em vez disso. Se for uma ideia que o usuário ainda não decidiu
assumir, diga que ainda não é um projeto (tasks.md «Pareamento») e ofereça
deixá-la na caixa de entrada (inbox.name).
task <projeto> <tarefa> — adicionar uma tarefa
- Encontre o projeto conforme
find-target.md, operação «Adicionar uma tarefa a um projeto». O alvo também pode ser um projeto de área deAREA_TASK_PROJECTSemareas.md— corresponda-o pelo nome. - Resolva para onde vai: um projeto de área →
area; caso contrário, otasks_refda visão geral →project_ref(sobpairing: nonea pasta do projeto é orefe este passo é apenas o projeto).pairing: separatee nenhumtasks_refna visão geral → diga a stringtask.unpairede ofereça criá-lo (passo 7 decreate). Se sim, crie o par, depois continue. Nunca escreva a tarefa no vault em vez disso.
- Redija a tarefa conforme
tasks.md«O que é uma tarefa». Se a redação do usuário já se encaixar, mantenha-a; caso contrário, proponha a versão reescrita no anúncio. Se não puder ser uma ação, pergunte pelo próximo passo (Nível 1.5). task.addcomproject_refouarea(sobTASKS = filesum nome base já existente é uma colisão:note-format.md«Colisões de nome», pergunte, sem sufixo silencioso): o texto, uma descrição para qualquer coisa mais longa,durationapenas se fornecido. A regra de data étasks.md«Campos».- Relate a tarefa e o projeto.
overview <projeto> — onde o projeto está
Somente leitura. Não escreve nada — nem no vault, nem no backend. Se o resumo revelar algo que vale a pena consertar, diga e deixe o usuário decidir.
-
Encontre o projeto conforme
find-target.md, operação "Relatar sobre". Sem argumento, liste os projetos e pergunte. -
Leia a nota de visão geral: frontmatter e as seções
project.goal,project.value,project.expected_result,project.dod,common.links. Um campo em branco é relatado como em branco, nunca preenchido por inferência. -
Leia as tarefas (
task.list, abertas): suas datas e durações. Compute as contagens conformethresholds.md«Contagens de tarefas». Sobpairing: separate, sem par → pule, e diga a stringtask.unpaired. -
Leia
Notes/(eResults/, se tiver alguma coisa) por inteiro, até o limite emthresholds.md— é aqui que decisões e riscos realmente estão. -
Legado. Se a visão geral carregar
status/priority/value/estimate, ou a pasta tiver umTasks/legado (note-format.md), adicione uma linha, a stringoverview.legacycom{fields}comostatus, Tasks/ (3 arquivos)(a contagem de pastas é a stringoverview.legacy_tasks), nomeando apenas o que está presente. Não leia notas de tarefas para progresso; a migração decide o que sobrevive. -
Sinais — relate apenas aqueles que disparam:
- o
deadlinedo projeto passado, ou dentro do horizonte emthresholds.md; - tarefas atrasadas — diga por quantos dias;
- nada agendado enquanto o prazo está dentro do horizonte;
- tarefas com data mas sem duração;
- inatividade maior que o limite do projeto em
thresholds.md, medida como ele diz (project.activityquando pareado, mtime caso contrário, conformethresholds.md); - wikilinks pendentes na seção
common.links; - todo critério de aceitação marcado enquanto o projeto ainda está em
Projects/— concluído e não fechado.
- o
-
Renderize para o chat, em
LANG. Os rótulos são strings delang/<LANG>.md, nomeados no template abaixo pela chave entre chaves; mostrados aqui com as strings em inglês:## PROJ-0001 · Projeto A **{overview.area}** Área A · **{overview.deadline}** 2026-10-31 — 14 dias **{overview.tasks}** {count.scheduled} 3 · {count.overdue} 1 · {count.backlog} 6 **{overview.acceptance}** ☑☐☐ 1/3 ### {overview.essence} <O objetivo, 1–2 frases.> <O resultado esperado — uma linha.> <O valor — uma linha.> ### {overview.scheduled} - **Escrever um e-mail para o fornecedor** — Ter 21-10, 30 min - **Preencher o formulário** — atrasado por 2 dias, 1 h ### {overview.backlog} - Marcar uma consulta - …e mais 3 ### {overview.digest} - <Uma decisão ou conclusão chave de Notes/ — em suas próprias palavras.> ### {overview.signals} - Prazo em 14 dias, nada agendadoAs chaves entre chaves são chaves, não texto literal: imprima a string que cada chave representa. As datas estão no formato
common.date(2026-10-31;10-31na forma abreviadacommon.date_short, usada com um dia da semana decommon.weekdaysem uma linha de tarefa); os dias até o prazo sãocommon.days; as abreviações de unidade sãocommon.unit.*; uma tarefa atrasada carrega a stringtask.overdue_by; o restante do backlog é a stringoverview.backlog_more({n}= tarefas não mostradas). A seçãooverview.backlogmostra as tarefas mais antigas sem data até o limite emthresholds.md. Remova qualquer seção ou campo que estaria vazio. UmResults/vazio é um estado normal.
list — os projetos
Somente leitura. Uma linha por projeto — o índice, não um resumo: nunca abre Notes/.
-
Enumere as pastas diretamente sob
Projects/. Projetos arquivados não são listados — isso é/archive list. -
Leia o frontmatter da visão geral:
id,title,area,deadline, e sobpairing: separatetasks_ref. Uma pasta sem frontmatter é pré-convenção — imprima-a pelo nome da pasta com a stringcommon.no_metadata. -
Leia as tarefas de cada projeto que tem um
ref(task.listcomproject_ref, abertas), contadas conformethresholds.md«Contagens de tarefas». -
Ordene conforme
thresholds.md«Ordem dos projetos». -
Renderize, em
LANG, com as stringslist.*,count.*etask.unpaired— a linha é compacta, então a contagem do backlog écount.backlog_short(cabeçalholist.header, prazolist.untilcom a data emcommon.date_shorte, dentro do horizonte dethresholds.md,(14 d)depois dela: os dias restantes ecommon.unit.day); mostrado aqui com as strings em inglês:**Projetos (4)** 1. PROJ-0008 Projeto A — Área A · até 10-31 (14 d) · agendadas 2 · backlog 3 2. PROJ-0020 Projeto B — até 10-31 (14 d) · agendadas 0 · backlog 3 3. PROJ-0009 Projeto C — Área B · até 02-28 · sem par no gerenciador de tarefas · formato antigo 4. PROJ-0027 Projeto D — backlog vazio Sem par no vault: «Projeto E»- Um prazo passado: a string
list.deadline_passed. - A string
list.legacyquando campos legados estão presentes, ou umTasks/legado está. - Um projeto cujo backlog está vazio: a string
list.backlog_empty. - A última linha (
list.orphans) nomeia projetos do backend que nenhuma visão geral aponta, encontrados comotasks.md«Notas sobre a tabela»,project.list, diz. Remova-a quando vazia ou quando o adaptador não suportaproject.list. - Remova qualquer campo em branco em vez de imprimir um espaço reservado. Um
Projects/vazio é uma resposta válida: diga-o claramente.
- Um prazo passado: a string
Projetos arquivados e pré-convenção
Projetos em Archive/ podem anteceder as convenções: sem frontmatter, sem prefixo PROJ-xxxx,
sem subpastas. Leia a seção project.goal da nota, pule a seção de tarefas
overview.acceptance e overview.acceptance, e declare claramente que está arquivado e no formato antigo.
Notas
- Compute, não estime: contagens de dias, contagens de tarefas e prazos de atraso vêm do backend, dos arquivos e da data do sistema de hoje. Se algo não puder ser computado porque um campo está em branco, diga que está em branco em vez de adivinhar.
- Um resumo relata o estado; ele não julga o usuário. "atrasado por 5 dias", não "você abandonou o projeto".
- Tudo em
LANG, tarefas incluídas.