Agent skill

Deskcomm Extensao

by melgarafael in melgarafael/DeskcommCRM

Guia para criar uma extensão do DeskcommCRM — o pacote declarativo — em vez de abrir um PR no núcleo.

MITAuto-check passedSales & Support

Install Deskcomm Extensao

skills CLI
$ npx skills add melgarafael/DeskcommCRM --skill deskcomm-extensao -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install melgarafael/DeskcommCRM deskcomm-extensao --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/melgarafael/DeskcommCRM.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/deskcomm-extensao .claude/skills/deskcomm-extensao && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
deskcomm-extensao
GitHub stars
4.5k
Token cost
~2.7k tokens
SKILL.md length
1,409 words
Files
10 (incl. scripts, references)
Skills in repo
8
Repo updated
First seen
Licence
MIT

At a glance

Guia para criar uma extensão do DeskcommCRM — o pacote declarativo — em vez de abrir um PR no núcleo.

  • Works in 3 steps: Chave desconhecida recusa o pacote… → Toda capacidade usada tem de estar… → host_api é a janela que você garante. Um…
  • Tasks that involve Pull requests
  • SKILL.md covers Como você age, Passo 1 — isto é núcleo ou…, Passo 2 — o que uma extensão… and Passo 3 — escreva o pacote, plus 4 more sections
  • Runs Shell scripts from its folder; calls bash

What it does

Deskcomm Extensao is an agent skill from melgarafael/DeskcommCRM. Guia para criar uma extensão do DeskcommCRM — o pacote declarativo — em vez de abrir um PR no núcleo. Use SEMPRE que alguém quiser criar extensão, plugin, módulo, tema ou integração de nicho (comanda, comissão, fidelidade, roteiro de clínica, campo só para o meu caso), perguntar "isto é núcleo ou extensão?", "como publico no catálogo?", "dá para adicionar uma tela para o meu segmento?", ou quando a triagem mandar transformar um PR de nicho em extensão. Traz a régua de destino, o contrato do pacote campo a campo…

Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 12 other files, including scripts and reference files (for example `agents/openai.yaml`, `references/contrato-do-pacote.md` and `references/decidir-nucleo-ou-extensao.md`).

It sits in Sales & Support, covering Pull requests. It works with WhatsApp. The repository describes itself as: Open-source AI sales OS — self-hosted CRM with native AI agents + WhatsApp (WAHA). Open alternative to Kommo, Octadesk & Intercom for any business that sells by chat. MCP-ready… The licence is MIT.

When your agent uses it

  • Tasks that involve Pull requests

Example prompts

  • “isto é núcleo ou extensão?”
  • “como publico no catálogo?”
  • “dá para adicionar uma tela para o meu segmento?”
  • “/deskcomm-extensao”

Requirements

  • A Bash shell

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Chave desconhecida recusa o pacote inteiro. Autoria, site, etiqueta e imagem não moram
  2. Toda capacidade usada tem de estar coberta por uma permissão declarada. Usar inbox.open
  3. host_api é a janela que você garante. Um pacote que usa as portas novas declara min 2.

What it can do on your machine

Read from SKILL.md and the folder at commit b3bd604. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • bash

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Deskcomm Extensao loads about 2.7k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 174 tokens; SKILL.md has 1,409 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~174
When it runs · the whole SKILL.md, loaded when a task matches
~2.7k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~11k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from melgarafael/DeskcommCRM at commit b3bd604, republished under its MIT licence (© melgarafael). 1,409 words, ~2,710 tokens.

Download SKILL.mdSave it as .claude/skills/deskcomm-extensao/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.
name
deskcomm-extensao
description
Guia para criar uma extensão do DeskcommCRM — o pacote declarativo — em vez de abrir um PR no núcleo. Use SEMPRE que alguém quiser criar extensão, plugin, módulo, tema ou integração de nicho (comanda, comissão, fidelidade, roteiro de clínica, campo só para o meu caso), perguntar "isto é núcleo ou extensão?", "como publico no catálogo?", "dá para adicionar uma tela para o meu segmento?", ou quando a triagem mandar transformar um PR de nicho em extensão. Traz a régua de destino, o contrato do pacote campo a campo com exemplo válido, o que uma extensão NÃO consegue fazer hoje (sem código, tabela, tela, menu ou ferramenta de IA) e o envio por pull request com revisão humana.
metadata.publico
contribuidor de nicho, agência, criador de pacote
metadata.lei
docs/doctrine/extensoes.md

Criar uma extensão do DeskcommCRM

Alguém chega com uma ideia de nicho — comanda de barbearia, comissão de vendedor, um roteiro de pós-atendimento de clínica — e o instinto é abrir um PR no núcleo, acrescentando um campo, uma aba, uma regra. O núcleo precisa continuar útil com zero extensões: é isso que mantém o produto genérico enquanto os nichos ganham espaço. Este guia é para onde a triagem manda quem chegou por ali, e para quem já sabe que quer criar um pacote.

A lei é docs/doctrine/extensoes.md. O contrato em vigor é lib/extensions/manifest.ts e lib/extensions/capacidades.ts. Quando este guia e o código discordarem, o código está certo — e todo número aqui vem com o comando que o revela.

Como você age

  • Primeiro classifica, depois ensina. Metade do que chega como "extensão" é núcleo, e a outra metade é uma jornada que o formato atual ainda não constrói. Mandar alguém escrever um pacote que não pode existir custa mais que uma resposta desconfortável.
  • Não anuncia o que não existe. Não há SDK, execução de código de terceiro, marketplace público, avaliação nem contador de downloads. A lei proíbe prometer os quatro antes da prova (não-negociável 11), e prometer a alguém que vai investir uma semana é a pior forma de prometer.
  • Mede na fonte. Limite, vocabulário e versão do host saem de lib/extensions/, nunca de memória.
  • Preserva o trabalho de quem chegou. "Isto não cabe hoje" vem sempre com o que fazer com o que já foi feito.

Passo 1 — isto é núcleo ou extensão?

A pergunta que decide, e ela não é "isto serve a muita gente?":

Se nenhuma organização desta instalação ativar isto, a operação comum continua inteira?

Sim → pode ser extensão. Não, porque identidade, autorização, isolamento, auditoria, contratos ou a cadeia de envio dependem disto → é núcleo.

NúcleoExtensão
contatos, conversas, funis, agendacomanda, comissão, fidelidade
papéis, permissão, isolamento entre organizaçõestema visual, roteiro de um método de vendas
auditoria, recibos, cadeia de envio, opt-outintegração com um ERP de um segmento só
caixa: contas, formas de pagamento, plano de contas, lançamento avulso (decisão do dono, não dedução)o que fica em cima do caixa
corrigir comportamento que já foi distribuídojornada adicional que ninguém precisa ligar

Os dois lados com mais exemplos, o destino "ambos" e o que fazer quando a régua diz extensão mas a ferramenta ainda não existe: references/decidir-nucleo-ou-extensao.md.

Passo 2 — o que uma extensão consegue fazer hoje

O que ela faz: publica até 4 cards de orientação no hub do CRM. Cada card tem título, descrição, blocos de texto e um botão, e esse botão abre uma tela que o CRM já tem. Quem administra a instalação admite o catálogo e instala; quem administra a organização ativa e configura (densidade e mostrar descrição); quem usa lê e clica, dentro do acesso que já tinha. As telas alcançáveis são seis: Tarefas, Conversas, Funil, Contatos, Agenda e Radar.

O que ela não faz — e nenhuma dessas é "ainda não implementei":

Não existePor quê
Código. O pacote é JSON. Sem JavaScript, SQL, shell, expressãonão há executor isolado; a escolha dele é por evidência, e ainda não foi feita
Tabela ou qualquer dado próprio (data só aceita {"mode":"none"})módulo nativo com tabelas é a ADR-0002, aceita em 17/09/2026 e não construída
Tela, rota ou item de menumesma ADR-0002
Ferramenta, instrução ou prompt do agente de IArecusado por escrito na ADR-0003: o motor de instruções caminha pelo conteúdo da sessão, e deixar o pacote escolher o caminho é leitura do que não é dele
Endereço livre (href, prefixo, destino próprio)alcançaria as telas onde a instalação guarda segredo com todos os testes verdes. Recusado para sempre
Imagem, captura de tela, URL de qualquer tipoendereço clicável dentro de pacote de terceiro é porta de engano; o ícone sai de uma lista de três
Ler dado do CRM — tarefa, conversa, contatoa capacidade abre uma porta que o núcleo já tem, com a autorização de sempre; ela não concede leitura
Depender de outra extensãodependencies é []
Marketplace, avaliação, download contado, telemetrianão existem, e a lei proíbe anunciá-los antes da prova

Se a sua ideia precisa de uma linha desta tabela, pare aqui e vá para o Passo 6.

Passo 3 — escreva o pacote

Comece pelo exemplo válido: references/pacote-de-exemplo.json — um roteiro de clínica com dois cards, que usa duas portas (Conversas e Agenda). Copie, troque os textos e os slugs, valide.

O esqueleto, com o que cada campo cobra:

json
{
  "format_version": 1, "profile": "declarative",
  "publisher": "slug-minusculo", "name": "slug-minusculo", "version": "1.0.0", "license": "MIT",
  "host_api": { "min": 2, "max": 2 },
  "permissions": ["navigation.inbox", "navigation.agenda"],
  "dependencies": [], "data": { "mode": "none" },
  "display": { "title": {…}, "summary": {…}, "category": "service", "icon": "ListChecks" },
  "configuration": { "density": "comfortable", "show_description": true },
  "contributions": { "crm_cards": [ { "id": "…", "action": { "capability": "inbox.open" } } ] }
}

As três regras que mais recusam pacote:

  1. Chave desconhecida recusa o pacote inteiro. Autoria, site, etiqueta e imagem não moram no manifesto — são metadado de catálogo, o artefato que passa por revisão (ADR-0003, D3).
  2. Toda capacidade usada tem de estar coberta por uma permissão declarada. Usar inbox.open sem declarar navigation.inbox é recusado na instalação, na ativação e na leitura: a lista de permissões é o que a tela mostra antes de alguém aceitar a extensão.
  3. host_api é a janela que você garante. Um pacote que usa as portas novas declara min 2. Confira o host: grep -n "HOST_API_VERSION =" lib/extensions/manifest.ts.

Campo a campo, com os limites e o formato do texto localizado: references/contrato-do-pacote.md. O exemplo explicado, com o que é decisão sua e o que é obrigação: references/exemplo-comentado.md. Quando o parser recusar e não disser por quê: references/erros-do-pacote.md.

Show full SKILL.md (529 more words)Show less

Passo 4 — valide antes de enviar

bash
bash .agents/skills/deskcomm-extensao/scripts/validar-pacote.sh caminho/do/pacote.json

Roda parseManifest() e checkCompatibility() do host — não uma cópia das regras — e, quando passa, imprime a entrada de catálogo com sha256 e byte_length calculados dos seus bytes. Sai 1 quando recusa.

Passar aqui é o piso: o schema não julga se o card vale uma instalação. Os degraus seguintes — o catálogo de ensaio local e a prova pela tela — estão em references/testar-local.md, com a ressalva medida sobre o laboratório, que carrega a própria cópia das regras e pode estar atrás do contrato.

Passo 5 — envie

Por pull request, com revisão humana. Merge não publica: validação automática e revisão proporcional ao perfil antecedem a publicação, e teste verde não é selo.

No corpo do PR: o que a extensão faz em duas frases, para qual nicho, quais portas abre e por quê, a saída do validador (o comando e o resultado, não a conclusão), o destino declarado — "extensão", com a razão medida pela pergunta-raiz, que é o item 18 do Definition of Done — e o que você não mediu. A mecânica de PR deste repositório (branch, identidade, fragmento em .changes/) está na skill deskcomm-contribuir; carregue-a antes de abrir.

O que a revisão olha, em ordem, e o que acontece depois de publicado (nenhuma origem desliga uma extensão numa VPS em silêncio): references/enviar-e-revisao.md.

Usar na sua própria instalação não pede permissão de ninguém — pacote seu, catálogo seu, admitido pela tela. O PR é só para entrar no catálogo oficial.

Passo 6 — o meu caso não cabe no formato

Acontece com a maioria das boas ideias, e a resposta honesta vale mais que um encaminhamento simpático. Na ordem:

  1. Precisa guardar dado, ter tela própria ou entrar no menu? O caminho é o módulo nativo da ADR-0002 — tabelas criadas por uma função provisionadora quando o módulo é instalado na instância. Ela foi aceita em 17/09/2026 e ainda não foi construída. Não há data, e este guia não inventa uma.
  2. Parte do seu trabalho é genérica e o núcleo já usa hoje? Essa parte entra pelo caminho normal de PR, separada do resto.
  3. O que sobra é conteúdo — orientação, roteiro, sequência de passos? Isso é empacotável hoje. Volte ao Passo 3.
  4. Nada disso? Abra uma issue descrevendo a jornada inteira e o que ela precisa guardar. A doutrina é explícita: enquanto a plataforma está em construção, "extensão" é destino, não exigência de usar uma ferramenta que ainda não existe — o trabalho se preserva e a dependência se registra.

O que você nunca faz

  • Prometer SDK, execução de código, marketplace público, avaliações ou downloads — nem "em breve".
  • Inventar um caminho de pasta para o pacote no repositório: onde a loja mora ainda não está decidido (ADR-0003, "o que esta ADR não decide").
  • Sugerir que o contribuidor amplie o perfil declarativo por dentro para caber o caso dele. Quem propõe um item da coluna "ainda não existe" segue a coluna "o que pede antes", que é prova.
  • Recomendar que alguém extraia do núcleo um recurso já distribuído porque "seria extensão": isso exige equivalência demonstrada e migração explícita.
  • Aceitar publisher que se parece com marca alheia, ou texto que descreve uma extensão que o pacote não é.

© melgarafael, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 9 other files (scripts, references) in .agents/skills/deskcomm-extensao of melgarafael/DeskcommCRM.

  • SKILL.md
  • agents/openai.yaml
  • references/contrato-do-pacote.md
  • references/decidir-nucleo-ou-extensao.md
  • references/enviar-e-revisao.md
  • references/erros-do-pacote.md
  • references/exemplo-comentado.md
  • references/pacote-de-exemplo.json
  • references/testar-local.md
  • scripts/validar-pacote.sh

Open the folder on GitHubat commit b3bd604

Compare with similar skills

Deskcomm Extensao next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Deskcomm Extensao compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Deskcomm Extensao this skillmelgarafael/DeskcommCRM4.5k—~2.7kAutomated safety check: PassMIT
B2b Sdr AgentiPythoning/b2b-sdr-agent-template190—~744Automated safety check: PassMIT-0
Pulse Faq Syncevolution-foundation/evo-nexus545—~1.9kAutomated safety check: PassCustom licence
Lead DiscoveryiPythoning/b2b-sdr-agent-template190—~961Automated safety check: PassMIT
Cashclaw Whatsapp Managerertugrulakben/cashclaw303—~2.5kAutomated safety check: PassMIT
Service Omni Channel Inventory Analyzeforcedotcom/sf-skills1.1k—~1.2kAutomated safety check: NotesApache-2.0

Similar skills

  • B2b Sdr Agent

    iPythoning/b2b-sdr-agent-template

    Open-source B2B AI SDR template. An agent skill from iPythoning/b2b-sdr-agent-template.

    190 GitHub stars~744 tokensUpdated 11 days ago
    Sales & SupportAuto-check passed
  • Pulse Faq Sync

    evolution-foundation/evo-nexus

    Sync and update the community FAQ from Discord conversations, WhatsApp groups, and GitHub issues.

    545 GitHub stars~1.9k tokensUpdated 5 mo ago
    Sales & SupportAuto-check passed
  • Lead Discovery

    iPythoning/b2b-sdr-agent-template

    AI-driven lead discovery for B2B export. An agent skill from iPythoning/b2b-sdr-agent-template.

    190 GitHub stars~961 tokensUpdated 11 days ago
    Sales & SupportAuto-check passed
  • Cashclaw Whatsapp Manager

    ertugrulakben/cashclaw

    Sets up and manages WhatsApp Business accounts including auto-response systems, client communication workflows, FAQ templates, and broadcast campaigns.

    303 GitHub stars~2.5k tokensUpdated 5 days ago
    Sales & SupportAuto-check passed
  • A skill your agent uses to inventory configured Omni-Channel instances across Voice, Email, Chat, SMS, Facebook, WhatsApp, and In-App, including each channel's Queue, Flow, or Other routing target…

    1.1k GitHub stars~1.2k tokensUpdated yesterday
    Sales & SupportAuto-check: notes
  • Marketing Message Test

    forcedotcom/sf-skills

    Salesforce Marketing Cloud / Engagement 360 message preview and test-send.

    1.1k GitHub stars~5.1k tokensUpdated yesterday
    Sales & SupportAuto-check passed

More from melgarafael/DeskcommCRM

All 8 skills in this repo
  • Deskcomm Contribuir

    melgarafael/DeskcommCRM

    Guia de contribuição ao DeskcommCRM para quem vai mexer no código e abrir um pull request, sobretudo de um fork.

    4.5k GitHub stars~3.6k tokensUpdated today
    Auto-check: notes
  • Deskcomm Metricas

    melgarafael/DeskcommCRM

    Guia de análise das métricas de uma instalação do DeskcommCRM como um analista de dados experiente — conversão, funil, tempo de resposta, handoff, follow-ups, custo de IA, motivos de perda, horários…

    4.5k GitHub stars~1.6k tokensUpdated today
    Auto-check: notes
  • Sistema Vivo

    melgarafael/DeskcommCRM

    Doutrina de arquitetura do Sistema Vivo — o método para construir software em que nada morre por falta de resposta, resolução ou visibilidade.

    4.5k GitHub stars~2.3k tokensUpdated today
    Auto-check passed
  • Deskcomm Cliente Novo

    melgarafael/DeskcommCRM

    Guia para montar um cliente novo no DeskcommCRM por nicho — clínica, imobiliária, serviços/agência, curso/infoproduto, loja, escritório de advocacia — criando os agentes de IA, roteadores…

    4.5k GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Deskcomm Operacao

    melgarafael/DeskcommCRM

    Guia de operação diária do DeskcommCRM para quem já tem o sistema instalado e precisa encontrar telas, entender fluxos, configurar recursos correntes e resolver dúvidas de uso sem mexer no código.

    4.5k GitHub stars~826 tokensUpdated today
    Auto-check passed
  • Deskcomm Prompt

    melgarafael/DeskcommCRM

    Guia para afinar o prompt de um agente de IA do DeskcommCRM que não está performando — como um engenheiro de prompt sênior de atendimento e vendas, com dados da operação, não achismo.

    4.5k GitHub stars~1.4k tokensUpdated today
    Auto-check passed

Works with

Questions about Deskcomm Extensao

What does Deskcomm Extensao do?

Guia para criar uma extensão do DeskcommCRM — o pacote declarativo — em vez de abrir um PR no núcleo. Deskcomm Extensao is an agent skill from melgarafael/DeskcommCRM. Guia para criar uma extensão do DeskcommCRM — o pacote declarativo — em vez de abrir um PR no núcleo.

When should I use Deskcomm Extensao?

Deskcomm Extensao fits situations like: tasks that involve Pull requests.

How do I install Deskcomm Extensao in Claude Code?

Run `npx skills add melgarafael/DeskcommCRM --skill deskcomm-extensao -a claude-code`. Or copy the skill folder (.agents/skills/deskcomm-extensao in melgarafael/DeskcommCRM) into .claude/skills/deskcomm-extensao in your project. Claude Code loads it when a task matches its description.

How do I install Deskcomm Extensao in Codex?

Run `npx skills add melgarafael/DeskcommCRM --skill deskcomm-extensao -a codex`. Or copy the skill folder (.agents/skills/deskcomm-extensao in melgarafael/DeskcommCRM) into .agents/skills/deskcomm-extensao in your project. Codex loads it when a task matches its description.

Can I use Deskcomm Extensao in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add melgarafael/DeskcommCRM --skill deskcomm-extensao -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/deskcomm-extensao, .gemini/skills/deskcomm-extensao, .github/skills/deskcomm-extensao and .opencode/skills/deskcomm-extensao in your project.

What does Deskcomm Extensao need to run?

Going by SKILL.md and its folder, Deskcomm Extensao needs a shell for the scripts in its folder and the command-line tools its instructions call (bash). Our summary lists: A Bash shell.

Does Deskcomm Extensao access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Deskcomm Extensao safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Deskcomm Extensao use?

Deskcomm Extensao is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Deskcomm Extensao use?

About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 8.1k tokens, read only when the agent opens those files.

What are the alternatives to Deskcomm Extensao?

Skills that share tags, products or a category with Deskcomm Extensao: B2b Sdr Agent (iPythoning/b2b-sdr-agent-template, 190 stars), Pulse Faq Sync (evolution-foundation/evo-nexus, 545 stars), Lead Discovery (iPythoning/b2b-sdr-agent-template, 190 stars) and Cashclaw Whatsapp Manager (ertugrulakben/cashclaw, 303 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Deskcomm Extensao?

melgarafael (a GitHub user) maintains it in melgarafael/DeskcommCRM, which has 4,530 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 11, 2026.

Source: melgarafael/DeskcommCRM on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.