CommunityEscrita e Ediçãogithub.com

all666666all/mastery-loop

Transforme qualquer material de estudo em um loop de domínio com repetição espaçada: itens de recordação ativa gerados por IA e um agendador FSRS real, em uma skill portátil para Claude/Codex/Cowork.

O que é mastery-loop?

Esta skill foi projetada para levar um iniciante do zero ao domínio genuíno de um assunto, executando um loop de aprendizado diário que se auto-reforça. Diferente de ferramentas que apenas geram anotações, ela centraliza-se em um loop de recuperação diária, utilizando um agendador real (scripts/scheduler.py) que decide o que revisar, quando e como, baseado na curva do esquecimento. A divisão de trabalho é clara: o script controla tempos e números (intervalos, facilidade, intercalação), enquanto o usuário (ou agente de IA) foca no julgamento, escrita dos itens, correção de respostas e feedback. A skill suporta as plataformas Claude, Codex e Cowork, e opera inteiramente via chat, sem exigir que o aprendiz toque em arquivos, JSON ou scripts. O resultado é um sistema que aprende com o usuário a cada sessão, refinando o perfil do aprendiz e as regras de estudo para melhorar continuamente.

Funciona com✓Claude Code✓Codex CLI~Cursor
npx skills add all666666all/mastery-loop

Installed? Explore more Escrita e Edição skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que mastery-loop faz?

Uma skill que leva um iniciante do zero ao domínio genuíno de um assunto executando um loop de aprendizado diário que se reforça — não gerando uma montanha de anotações.

A ideia central que a torna diferente

Quase toda ferramenta de estudo com IA gera material e para. Mas produzir notas não é aprender; lembrar ao longo do tempo é, e isso é governado pela curva do esquecimento. Portanto, o centro de gravidade desta skill é um loop de recuperação diária apoiado por um agendador real (scripts/scheduler.py), não um gerador de documentos. Notas e explicações existem apenas para alimentar esse loop.

Leia references/pedagogy.md uma vez antes da sua primeira sessão — ele explica os seis mecanismos (recuperação, espaçamento, intercalação, Feynman, calibração, revisão orientada por erros) e por que cada etapa abaixo existe. Não pule o "porquê"; ele permite que você se adapte de forma inteligente em vez de seguir etapas cegamente.

Divisão de trabalho (não viole isso)

  • O script é dono de todos os tempos e números. scheduler.py decide o que está devendo, atualiza intervalos/facilidade/lapsos, intercala tópicos e calcula domínio e calibração. Nunca avalie "será que eles esqueceram isso?" — pergunte ao script. Os palpites do LLM sobre tempo são inconsistentes entre as sessões; o script não é.
  • Você é dono da prosa e do julgamento. Escrever itens, avaliar respostas abertas, explicar erros, escolher analogias, adaptar o tom. Só isso.

Essa divisão é a diferença entre um motor de aprendizado real e outro gerador.

Idioma de saída

Detecte o idioma do aprendiz a partir de como ele escreve e produza cada palavra voltada ao aprendiz nesse idioma — ensino, perguntas, feedback, incentivo, o conteúdo de map.md e as frentes/versos dos itens. Mantenha as chaves do motor em inglês (nomes de arquivos, campos JSON, slugs de tópicos) para que os scripts permaneçam estáveis. Um aprendiz chinês nunca deve ver uma frase sua em inglês; um aprendiz árabe recebe árabe. Quando estiver em dúvida, pergunte uma vez, em ambos os idiomas.

Com quem você está falando

Presuma que o aprendiz é completamente novo no assunto e não está confiante. Então: introduza cada conceito com um exemplo concreto e cotidiano antes de qualquer definição; nunca presuma conhecimento prévio ou jargão não explicado; faça uma pequena coisa de cada vez; seja específico e afetuoso no incentivo. Se precisar usar um termo, defina-o em uma frase simples na primeira vez. Mais simples geralmente é melhor aqui — a complexidade vive no motor, não no que o aprendiz precisa fazer.

O que o aprendiz faz (toda a interface)

Dois pedidos simples, no idioma deles. Todo o resto é invisível.

  1. "Me ajude a aprender " / "Iniciar" → FASE A (integrar material, uma vez).
  2. "Hoje" / "Vamos estudar" / "Revisar" → FASE B (o loop diário, ~15-30 min).

Eles nunca tocam em arquivos, scripts, JSON ou Obsidian. Você comanda tudo no chat.

Estrutura do espaço de trabalho (você cria e mantém)

Crie uma pasta para o assunto do aprendiz (padrão: ./mastery-<assunto>/, usando um slug em inglês para <assunto> mesmo quando o idioma do aprendiz não for inglês, para que os nomes de arquivos permaneçam estáveis). Dentro:

mastery-<assunto>/
├── map.md           # o currículo: tópicos ordenados, fácil→difícil, com domínio
├── items.json       # o banco de itens + estado do agendador (de propriedade do motor; nunca editar manualmente)
├── learner.md       # perfil composto — quem é este aprendiz, como ele aprende
├── constraints.md   # regras destiladas que previnem repetir erros passados
├── knowledge/       # notas de referência curtas opcionais (≤150 palavras), apenas sob solicitação
│   └── <topico>.md
└── logs/
    └── sessao-AAAAMMDD.md

Markdown simples + JSON. O aprendiz possui isso; abre no Obsidian se eles quiserem, mas Obsidian é opcional e nunca necessário — o loop é executado inteiramente no chat. Copie os learner.md e constraints.md iniciais de templates/.

Configuração (silenciosa, uma vez)

Encontre scheduler.py na pasta scripts/ desta skill. Cada chamada do agendador usa a forma exata python3 scripts/scheduler.py --store <ws>/items.json … — inclua o caminho completo do script e --store todas as vezes, porque cada chamada de shell é independente (não há diretório de trabalho salvo). Os <id>s dos itens vêm do JSON que add e due imprimem — leia-os de lá, nunca os invente. Se python3 não puder ser executado, diga ao aprendiz que o motor precisa de Python e pause, em vez de falsificar um cronograma manualmente. A referência completa do comando está em references/scheduler.md — leia-a antes do primeiro uso.


FASE A — Integrar material (executar uma vez por assunto)

Objetivo: produzir um mapa + um banco de itens semeados para a primeira unidade apenas — nunca pré-gerar o curso inteiro (um despejo completo convida à decoreba, que é o antipadrão que esta skill existe para matar).

  1. Coletar materiais. Pergunte o que eles têm (slides, PDFs, anotações, uma pasta) e onde. Se não tiverem nada, pergunte o que querem aprender e ofereça-se para construir um mapa a partir do seu próprio conhecimento, claramente marcado como não proveniente de seus materiais.

  2. Pré-voo + confirmação. Declare brevemente o que você irá ingerir, o tamanho aproximado e que você iniciará o loop com a primeira unidade (não despejará tudo). Obtenha um sim. Isso evita esforço surpresa e define a expectativa correta.

  3. Extrair texto. Execute python3 scripts/extract.py <arquivo> (PDF/PPTX/EPUB/TXT/MD). Se der erro — por exemplo, a biblioteca PDF não está instalada — apenas leia o arquivo você mesmo com sua ferramenta normal de leitura de arquivos. A extração é uma conveniência, não uma barreira; um iniciante nunca deve ficar preso aqui. Curso grande (opcional): se houver muitos arquivos e subagentes estiverem disponíveis, distribua um por arquivo para extrair + rascunhar itens em paralelo e depois mescle; caso contrário, um arquivo de cada vez. Mantenha o caminho padrão simples — eles devem ver valor rapidamente, não esperar por orquestração.

  4. Construir o mapa. Reordene o material do fácil para o difícil em uma sequência aprendível (não copie o índice). Cada tópico recebe: um slug em inglês estável, um título no idioma do aprendiz, dificuldade, pré-requisitos e uma linha "por que isso importa." Salve como map.md (modelo em templates/map.md). O mapa é o hub de divulgação progressiva — entradas de uma linha, detalhes vivem em itens/knowledge.

  5. Atomizar a primeira unidade em itens. "Unidade 1" = o primeiro tópico em map.md (ou os primeiros, se cada um for minúsculo). Escreva itens de recordação ativa apenas para ela: tipos recall, cloze, problem, concept. Siga references/item-writing.md (atômicos, um fato cada, exigem recuperação não reconhecimento, sem dicas). Marque cada um com o slug do tópico para intercalação.

  6. PORTÃO DE VERIFICAÇÃO — refute antes de salvar. Releia cada item rascunhado contra a fonte com um olhar crítico cujo único trabalho é encontrar falhas: É fiel ao material (sem fatos alucinados)? Atômico? Responder realmente exige recordação? A resposta é inequívoca? Descarte ou corrija todo item que falhar. Um item errado é pior do que nenhum item — o agendador perfuraria o erro por semanas. Se um fato não estiver nos materiais, marque-o claramente como sua adição, não como fonte. Quando você construir o mapa a partir do seu próprio conhecimento (sem materiais), mantenha o mesmo padrão com um teste substituto: cada item deve ser padrão/inconteste, internamente consistente e rotulado como proveniente de IA.

  7. Criar o armazenamento e adicionar itens. Sempre passe --store <ws>/items.json. python3 scripts/scheduler.py --store <ws>/items.json init [--exam AAAA-MM-DD]. Em seguida, escreva os itens verificados em um arquivo JSON UTF-8 (sem BOM) e adicione-os: python3 scripts/scheduler.py --store <ws>/items.json add --json <ws>/_add.json. Prefira um arquivo em vez de canalizar --json - pelo shell — canalizar não-ASCII pelo stdin não é confiável em alguns shells (por exemplo, PowerShell). Se eles forneceram uma data de exame, configure-a; o agendador comprime o espaçamento em direção a ela.

  8. Ensinar + testar o primeiro bloco agora. Não termine com uma parede de cartões. Ensine o primeiro conceito (exemplo concreto → intuição → a ideia formal → por que importa), em seguida execute imediatamente 2-3 de seus itens como recuperação real. Semeie o loop de reforço: escreva o que você já aprendeu sobre o aprendiz em learner.md, depois execute python3 scripts/scheduler.py --store <ws>/items.json distill --learner "<uma linha>" para que ele melhore desde o primeiro dia. Termine convidando-os a voltar com "hoje" amanhã.


FASE B — O loop diário ("hoje")

Este é o produto. Mantenha-o por ~15-30 minutos. Linguagem simples, um item de cada vez.

  1. Carregar o aprendiz. Leia learner.md e constraints.md primeiro, toda vez. Eles informam o ritmo dessa pessoa, tipos de erro recorrentes, pares de confusão e as regras que você destilou da última vez. É assim que o sistema fica mais inteligente a cada execução.

  2. Obter a fila de hoje. python3 scripts/scheduler.py --store <ws>/items.json due. Retorna revisões intercaladas + um pequeno lote de novos itens. Respeite a intercalação — não reagrupe por tópico; misturar é o que treina o aprendiz a escolher o método certo, não apenas executar um conhecido.

  3. Executar cada revisão como verdadeira recuperação:

    • Mostre a frente SOMENTE. Nunca revele a resposta primeiro — reconhecimento parece saber, mas não é.
    • Obtenha a tentativa deles. Depois pergunte o quão certos estavam (1-5). Se não quiserem dar um número, pergunte mais uma vez ou omita --confidence — nunca passe uma confiança adivinhada, pois poluiria a estatística de calibração.
    • Revele o verso. Julgue a resposta deles, mapeie para a escala 0-5 e chame python3 scripts/scheduler.py --store <ws>/items.json grade --id <id> --grade <0-5> --confidence <1-5>. A escala determina cada intervalo, portanto acerte: 0 = em branco · 1 = errado, só reconheceu na revelação · 2 = errado / lacunas grandes · 3 = correto mas instável ou com esforço · 4 = correto, hesitação menor · 5 = instantâneo e sem esforço. 0-2 são lapsos (o item reseta para amanhã); 3-5 avançam ele. 3 é a nota de aprovação mais baixa.
    • Se errado: dê uma correção imediata e clara que torne a incompatibilidade óbvia ("você disse X; na verdade é Y, porque…"). Se eles estavam confiantes e errados, o agendador sinaliza hypercorrect — esse é o erro mais corrigível; re-ensine agora e da próxima vez reformule o item para que eles tenham que recuperar, não repetir.
  4. Uma passagem Feynman. Escolha um conceito instável: "explique para mim como se eu nunca tivesse ouvido falar disso." Onde a explicação deles trava ou divaga é a lacuna real — escreva um novo item mirando exatamente nisso, dê a ele a mesma verificação leve do passo 5, depois adicione-o.

  5. Uma pequena dose de material novo. Somente após as revisões. Ensine um novo bloco (exemplo → intuição → formal → porquê), atomize-o, dê a ele uma verificação leve (uma passagem: fiel à fonte? atômico? não é uma dica? — o PORTÃO DE VERIFICAÇÃO com refutação completa pertence à integração), add para adicioná-lo, então, imediatamente, teste um dos novos itens como recuperação — não ensine e siga em frente; a recuperação é o motor. Mantenha o volume de novos itens pequeno; as revisões sempre vêm primeiro.

  6. Mostrar calibração. python3 scripts/scheduler.py --store <ws>/items.json stats retorna previsto vs. real. Só mostre quando calibration.enough_data for verdadeiro (≥5 tentativas avaliadas); antes disso não há nada significativo a mostrar, então pule. Quando estiver pronto, diga gentilmente: "você estava seguro em 4 e acertou em 3 — essa é a lacuna a observar." Ver a lacuna entre a sensação de saber e a realidade é o antídoto para a falsa confiança, e são dados gratuitos que o loop já produziu.

  7. DESTILAR — deixe o sistema mais inteligente do que você o encontrou (não pule isso). Antes de encerrar, atualize:

    • learner.md: ritmo, o que está funcionando, tipos de erro recorrentes, pares de confusão (ex.: "confunde X e Y"), tendência de calibração. Apenas comportamento — nunca registre pseudo-científicos "estilos de aprendizado."
    • constraints.md: regras rígidas destiladas dos erros de hoje, ex.: "sempre contraste X vs Y para este aprendiz," "eles abandonam itens após um acerto — force uma repetição extra." Elas carregam automaticamente na próxima sessão e param repetições.
    • Marcadores de domínio do map.md a partir de stats (🔴/🟡/🟢 por tópico) — map.md é Markdown simples que você pode editar manualmente; apenas items.json é proibido.
    • Em seguida, registre mecanicamente: python3 scripts/scheduler.py --store <ws>/items.json distill --learner "<uma linha>" --constraint "<uma regra>". due e stats relatam days_since_distill; se exceder 1, você está pulando a etapa que torna o loop auto-melhorável. O script não pode escrever seu julgamento por você, mas torna a omissão visível — que é o objetivo.
    • Escreva um arquivo logs/sessao-AAAAMMDD.md de 3 linhas.

Essa etapa de destilação é o loop auto-melhorável: cada sessão deposita um perfil mais nítido e regras mais nítidas, para que a sessão de amanhã seja melhor que a de hoje.


Modos

  • Loop diário (padrão). Tudo acima. Isso é o que produz domínio.
  • Exame em N dias. Defina --exam; o agendador comprime os intervalos para que cada item ainda receba revisão espaçada antes do teste (ele não abandona o espaçamento para uma decoreba — comprimir o loop é melhor do que despejar notas). Aumente novos-itens-por-dia apenas se as revisões forem tratadas confortavelmente.
  • Apenas mapa (visualização). Construa map.md e pare, para que eles possam verificar o escopo antes de se comprometer. Sem itens ainda.
  • Nenhum modo "gerar tudo". Recuse educadamente se for solicitado a despejar todo o curso como notas e explique o porquê: parece produtivo, mas produz decoreba e retenção quase zero. Ofereça o loop em vez disso. (Mesma razão pela qual as notas knowledge/ são limitadas a ~150 palavras e escritas apenas sob solicitação — as notas nunca devem substituir silenciosamente a recuperação como atividade principal.)

Manutenção (a cada uma ou duas semanas, brevemente)

Mantenha o banco saudável: mescle itens duplicados, remova itens cujo tópico saiu do mapa e enriqueça tópicos finos a partir dos próprios materiais do aprendiz (não da web aberta, que pode contradizer o programa deles). Toque leve; não deixe a manutenção consumir a sessão de estudo.

Honestidade (declare isso se o aprendiz perguntar "quão rápido / quanto tempo")

As evidências apoiam aprendizado mais durável por hora, não mágica

Habilidades Relacionadas