Communitygithub.com

Construtor de Sistema Operacional de Conteúdo

Construa um 'sistema operacional de conteúdo' local para uma empresa ou várias empresas isoladas (clientes de uma agência), com Next.js, pastas separadas por negócio, IA confinada e aprovação do proprietário.

O que é Construtor de Sistema Operacional de Conteúdo?

Este skill transforma um agente de codificação (Claude Code, Codex, Cursor, etc.) em um construtor de um sistema operacional de conteúdo local completo. Ele é um playbook que orienta o agente a entrevistar o usuário primeiro, para então construir um dashboard que orquestra o ciclo completo de conteúdo: ideia → aprovação → produção → publicação → aprendizado. O sistema suporta dois modos de operação: single-tenant (uma única empresa) ou multi-tenant (várias empresas ou clientes de uma agência, cada um com sua própria pasta, kit de marca, conteúdo e memória, completamente isolados). A arquitetura central usa um único motor Next.js com pastas de inquilino separadas, onde o sistema de arquivos funciona como banco de dados (sem DB ou ORM). Os agentes de IA são invocados de forma headless e confinados por pasta, sem acesso a shell, garantindo que nunca leiam dados de outro inquilino. Durante a construção, o skill segue uma ordem rígida de 14 estágios, cada um com referências e checkpoints, copiando 11 arquivos de ativos críticos (como módulos de segurança, exportação e validação de ideias) e gerando o restante a partir das respostas da entrevista. O resultado é um sistema personalizado, seguro e escalável, que pode ser estendido com módulos opcionais como radar de tendências, assistente de chat com memória, CRM e vault de conhecimento do proprietário.

Funciona com✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/JamalMohafil/claude-skills/tree/HEAD/content-os-builder

Perguntar na sua IA favorita

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

Documentação

O que Construtor de Sistema Operacional de Conteúdo faz?

Você é um agente de codificação de IA com acesso a escrita de arquivos e shell. Você construirá para o usuário um sistema operacional de conteúdo local: um dashboard que gerencia o ciclo ideia → aprovar → produzir → publicar → aprender para uma empresa, ou para várias empresas mantidas estritamente separadas. O usuário geralmente é uma agência gerenciando conteúdo para clientes, ou um criador com mais de uma marca.

Este skill é um playbook, não um template. Você entrevista o usuário e constrói a partir das respostas. Cada nome, cor, regra de voz, concorrente e chave vem da entrevista. Nada neste skill é marca real de ninguém, e nada que você construir pode conter valores que o usuário não forneceu.

O que você está construindo, em um parágrafo

Um motor mais N pastas de negócio. O motor é engine/app (Next.js App Router, React, TypeScript strict, Tailwind v4, pnpm), os scripts confiáveis que ele executa e as ferramentas CLI em engine/tools. Cada negócio é um inquilino: tenants/<id>/, contendo seu manifesto, seu kit de marca, suas ideias e peças, sua memória, suas habilidades e suas próprias chaves de conta. Cada rota de API resolve exatamente um inquilino e lê ou escreve apenas dentro de sua pasta. O sistema de arquivos é o banco de dados: não há DB nem ORM. O trabalho de IA é feito pelo próprio CLI do agente de codificação do usuário (normalmente claude), iniciado headless com cwd definido para a pasta do inquilino, sem shell e com regras de negação inline que o mantêm dentro dessa pasta. O agente apenas escreve palavras e código. O motor faz tudo que executa: scaffolding, exportação, renderização e publicação. Uma instalação single-tenant é o mesmo motor com exatamente uma pasta de inquilino. Não há um caminho de código separado para "marca única".


A regra de ouro: ENTREVISTE PRIMEIRO, CONSTRUA DEPOIS

Não escreva nenhum arquivo até que a entrevista esteja concluída e o usuário tenha confirmado o resumo. O valor do sistema é que ele é deles. Um clone genérico é uma construção falha.

  • Pergunte no idioma do usuário, um grupo de perguntas por vez, com um padrão sensato proposto para cada pergunta para que eles possam responder "sim" ou ajustar.
  • Eles podem dizer "depois" para qualquer pergunta, ou "use os padrões para o resto". Registre um item "depois" como pendente e construa a parte que ele bloqueia em seu estado desabilitado, com um aviso visível "ainda não configurado".
  • Nunca peça segredos no chat. Diga a eles qual variável vai em qual arquivo e deixe-os colá-la lá. Se eles colarem uma de qualquer forma, coloque-a no arquivo correto, nunca a repita, e diga a eles para rotacioná-la.
  • Termine com um resumo compacto e obtenha um sim explícito.

A primeira pergunta é sobre inquilinato:

Este sistema executará uma empresa (single-tenant) ou várias empresas ou clientes, cada um totalmente isolado (multi-tenant)?

  • Single-tenant. Uma marca. O dashboard abre direto nela.
  • Multi-tenant. Uma agência ou uma pessoa com várias marcas. Cada negócio recebe sua própria pasta: seu próprio kit de marca, ideias, conteúdo, memória, chat, canais de publicação e chaves. Seu agente de IA nunca pode ler os arquivos de outro negócio. Um seletor em / alterna entre eles.

Ambos usam o mesmo motor, e single-tenant é simplesmente uma pasta. Adicionar um negócio depois significa adicionar uma pasta; nada precisa ser migrado.

O conjunto completo de perguntas (perguntas do sistema uma vez, depois perguntas por negócio), os padrões e como cada resposta mapeia para um arquivo estão em references/1-interview.md. Leia-o antes de perguntar qualquer coisa.


O que é fornecido como código (assets/)

A maior parte deste sistema você gera a partir das referências. Onze arquivos são copiados na íntegra, porque cada um tem casos extremos que foram medidos em produção (ou é um limite de segurança) e uma nova derivação a partir de prosa os erra silenciosamente. Copie-os inalterados, depois edite apenas os lugares marcados com EDIT: (frases no idioma do proprietário, dados de idioma, a lista de ferramentas de publicação). As referências explicam por que cada um funciona da maneira que funciona; o ativo é como.

AtivoCopiar paraO que é
assets/tenant.mjsengine/app/src/lib/tenant.mjsDescoberta de inquilinos, validação de manifesto + settings por negócio, proteção contra path traversal, env por inquilino (chaves de conta nunca são herdadas)
assets/agent-flags.mjsengine/app/src/lib/agent-flags.mjsO único lugar onde o confinamento do agente é construído: perfis, regras de negação inline, listas de permissão de env
assets/proxy.tsengine/app/src/proxy.tsA proteção de mesma origem na frente de cada rota /api (host de loopback, sem requisições cross-site, apenas corpos JSON ou multipart)
assets/export-project.mjsengine/app/scripts/export-project.mjsO exportador confiável HTML→PNG com um firewall de requisições de negação padrão
assets/shapes.mjsengine/app/src/lib/shapes.mjsOs dois eixos anti-repetição que a deduplicação de texto não vê (forma e lição) + formas iniciais por tipo
assets/ideas-core.mjsengine/app/src/lib/ideas-core.mjsO armazenamento de ideias: validação contra o kit, deduplicação determinística, quarentena, escritas atômicas, o mutex
assets/extract-json.mjsengine/app/src/lib/extract-json.mjsO único leitor JSON tolerante que o verificador de radar e o ingest compartilham
assets/radar-verify.mjsengine/app/src/lib/radar-verify.mjsA verificação de fundamentação do radar: fetch com proteção SSRF, datas de página, shingles de citação, filtro de idioma, números não comprovados
assets/proposals.mjsengine/app/src/lib/proposals.mjsAs propostas de publicação não falsificáveis do chat: vinculadas a uma mensagem, uso único, reivindicação atômica
assets/new-tenant.mjsengine/tools/new-tenant.mjsCria uma pasta de inquilino válida, vazia e bloqueada, tudo ou nada; --from faz uma cópia de teste descartável
assets/sync-tenant.mjsengine/tools/sync-tenant.mjsReaplica as habilidades e configurações do motor aos inquilinos existentes (execute-o após editar qualquer um deles)

ideas-core.mjs importa ./strategy-core.mjs, que você escreve a partir da referência 4 §3. Todo o resto que os ativos importam é outro ativo.


Ordem de construção

Trabalhe de cima para baixo. Antes de cada estágio, leia sua referência. Antes de prosseguir, execute o checkpoint dessa referência. Um estágio que "parece pronto" mas falha em seu checkpoint quebra algo três estágios depois, em algum lugar não relacionado. Após cada estágio, diga ao usuário o que você fez em uma linha.

#EstágioReferênciaSempre?
0Teste a máquina, execute a entrevista, confirme o resumo1-interview.mdsim
1Esqueleto do motor: layout do repositório, bootstrap do Next, copie TODOS os ativos, núcleo de inquilinato, new-tenant, as pastas de inquilino2-architecture-and-tenancy.mdsim
2Segurança: confinamento do agente, auxiliar de spawn, proteção de proxy, isolamento de env, verify-tenants; depois sync-tenant --all3-security-and-agents.mdsim
3Kit de marca (esquema, renderizador, entrevista, rascunho de pesquisa, aprovação) e o armazenamento de ideias (+ eixos de forma e lição)4-brand-kit-and-ideas.mdsim
4Shell do dashboard + sistema de design: seletor, shell do inquilino, início, estratégia, ideias, configurações, tokens, RTL, layout para celular5-dashboard-and-design.mdsim
5Produção: trabalhos de geração, scaffolding, exportação confiável, «editar», habilidades do construtor, biblioteca de produtos, as visualizações de produzir/galeria/scripts; depois sync-tenant --all6-production-and-export.mdsim (biblioteca opcional)
6Motores de mídia: postagens de imagem com IA, vídeo com IA, vídeo dirigido por navegador, animações Remotion7-media-engines.mdopcional, por motor
7Radar + concorrentes + transcrições + índice de precedentes + próprias análises + postagem na comunidade8-radar-competitors-and-analytics.mdradar sim; o resto opcional
8Assistente de chat: turnos em streaming, memória, ações do agente, modo de entrevista9-assistant-and-memory.mdfortemente recomendado
9Calendário, publicação (confirmada pelo proprietário), ciclo de crescimento10-publishing-calendar-and-growth.mdcalendário sim; publicação opcional
10CRM + parceiros (empresas de serviço)11-crm-and-partners.mdopcional
11O vault de conhecimento do proprietário ("cérebro") + gráfico 3D12-brain.mdopcional
12Mapas de roteamento, CLAUDE.md / AGENTS.md para o motor, cada inquilino e o vault13-routing-maps-and-agents-md.mdsim
13Verificação: a lista de verificação completa, depois a entrega14-verification.mdsim

Construa apenas os estágios opcionais que a entrevista habilitou. Um módulo que está desligado está desligado no servidor (suas rotas retornam 404 para aquele inquilino), não apenas oculto na barra lateral. Cada visualização é construída no estágio que constrói sua rota (a referência 5 §4 lista quais); o shell trata um 404 de uma rota que está desligada ou ainda não construída como "vazio", nunca como um erro.

Estágio 0: teste, não presuma

Teste cada um destes por conta própria. Eles são independentes:

  1. Node ≥ 20 e pnpm (ou o gerenciador de pacotes que o usuário escolheu). Se o Node estiver faltando, peça ao usuário para instalá-lo (nada aqui funciona sem Node). Se o Node funcionar mas o aplicativo Next não puder ser instalado, use o Modo Lite (abaixo).
  2. Links simbólicos. Crie um em um diretório temporário (ln -s / fs.symlinkSync). No Windows sem Modo de Desenvolvedor ou direitos de administrador, isso falha: new-tenant.mjs então escreve AGENTS.md como uma cópia gerada e liga node_modules com uma junção de diretório, e verify-tenants aceita ambos. Recomende WSL quando disponível; ele se comporta como Linux.
  3. O CLI do agente de runtime. Um processo Node pode iniciá-lo headless (estilo claude --print), e ele está logado? Ele suporta uma lista de ferramentas fechada, configurações inline com regras de negação e um modo de permissão não interativo? A camada de confinamento é escrita para o CLI claude. Para qualquer outro CLI, leia "Adaptando para outro CLI de agente" na referência 3. Se o agente não puder ser confinado, a geração para um sistema multi-tenant deve degradar para transferência de prompt, porque um agente não confinado pode ler todos os negócios.
  4. Ferramentas opcionais, apenas se a entrevista habilitou o módulo que precisa delas: ffmpeg, yt-dlp, o CLI codex, Google Chrome.
  5. Playwright Chromium é testado no checkpoint do Estágio 1, após o bootstrap o instalar. Se ele não instalar, use exportação apenas HTML.

Matriz de degradação (nunca a colapse em um sim/não)

  • Completo. Node, Playwright e um CLI de agente confinável: tudo conforme especificado.
  • Exportação apenas HTML. Playwright não instalará: as peças são escritas como HTML e visualizadas como HTML.
  • Geração por transferência de prompt. O agente não pode ser iniciado headless, ou não pode ser confinado: Geração, Radar e Edição escrevem o prompt composto em <piece>/PROMPT.md e o mostram; o usuário executa seu agente nele, então pressiona "Eu executei, atualize". Todas as outras partes do dashboard funcionam normalmente.
  • Modo Lite. O Node funciona mas o aplicativo Next não pode ser instalado: construa as pastas de inquilino, as bibliotecas centrais sem dependências (tenant.mjs, strategy-core.mjs, strategy-approve.mjs, ideas-core.mjs, shapes.mjs) e suas ferramentas CLI: new-tenant, strategy-block, approve-kit (imprime o sha256 do rascunho, então aprova exatamente esses bytes) e ideas (listar / adicionar / aprovar / rejeitar), todas especificadas na referência 4 §12. A aprovação da marca e o armazenamento de ideias funcionam então a partir do terminal. Diga ao usuário quais partes são baseadas em aplicativo e quais são baseadas em arquivo.

Definição de concluído

Você está concluído apenas quando a lista de verificação da referência 14 passa: verificação de tipos, lint, build, testes unitários, verify-tenants (com seus canários de CLI real), verify-publishing-safety quando a publicação existe, uma geração real a partir de uma ideia aprovada e capturas de tela das telas principais. Relate honestamente quais itens passaram. Nunca relate uma construção como concluída enquanto uma etapa com falha permanece não mencionada.


Single-tenant vs multi-tenant: o que realmente muda

AspectoMulti-tenantSingle-tenant
Layout de pastastenants/<id>/ × N (geralmente o próprio workspace da agência + um por cliente)tenants/<id>/ × 1 (o mesmo layout, então adicionar um segundo negócio depois não custa nada)
/Seletor: um cartão por negócio (+ o cartão do vault)Redireciona para /<only-id> quando exatamente um inquilino válido existe
CabeçalhoAlternador de workspaceApenas o nome do negócio, sem menu suspenso
Confinamento do agente, regras de negação, sem shellObrigatórioAinda obrigatório: mantém o agente fora do código-fonte do motor, dos segredos da raiz do repositório e das configurações
Chaves de conta.env.local próprio de cada inquilinoAinda o .env.local do inquilino, nunca o env do motor, então um segundo negócio nunca pode herdá-las
Ferramentas CLI--tenant <id> obrigatório, sem padrãoAinda obrigatório (um alias de shell é aceitável)
CanáriosInquilino real = vítima, zz-canary descartável = atacanteMesmo: o verificador cria seu próprio atacante

Na interface do usuário, um inquilino é chamado de "workspace" (no idioma do usuário), nunca "inquilino".


Inegociáveis

Carregue cada um destes no que você gerar. Cada um tem sua razão, porque uma regra sem razão acaba sendo "simplificada" e removida.

  • ⭐ Personalização apenas. Cada valor vem da entrevista. Nunca deixe um valor de um exemplo, deste skill ou de outro negócio em padrões de código, prompts ou templates. Um padrão em código silenciosamente marca cada inquilino cujo kit omite esse campo. Números por negócio (frescura, limites, moeda, tetos de crédito, o idioma de publicação) vivem em tenant.json settings; os únicos padrões em código são os operacionais neutros que a entrevista propõe (DEFAULT_SETTINGS), e qualquer coisa que o proprietário não foi perguntado permanece não definida, nunca adivinhada.
  • ⭐ Nenhum inquilino padrão, em lugar nenhum. Rotas, ferramentas CLI e o cron devem nomear um inquilino. Um inquilino esquecido deve falhar ruidosamente; a alternativa é ler ou escrever silenciosamente os dados de outro negócio.
  • ⭐ Nenhum agente gerado jamais recebe um shell. Um processo filho como node é executado com o acesso completo ao sistema de arquivos do operador, e nenhum sinalizador CLI o confina. Isso foi medido: um agente inquilino com um shell leu os arquivos de outro inquilino. Então a rota faz o scaffolding antes do spawn e executa o exportador ou renderizador confiável depois. O agente escreve palavras e código; o motor executa. Nunca emita --dangerously-skip-permissi... (truncado por brevidade, mas a regra é clara: sem shell) e nunca confie em um sinalizador --allow-read para isolar inquilinos; um sinalizador de negação que corresponde ao caminho do inquilino bloqueia o acesso de leitura a pastas vizinhas -- mas apenas em chamadas de API explícitas. Um spawn com shell é uma brecha.

Segurança primeiro: o modelo de confinamento

Quatro camadas, na ordem:

  1. Isolamento de pasta. O new-tenant.mjs cria um .env.local separado, uma AGENTS.md com regras de negação que impedem o agente de IA de ler fora de tenants/<id>/. Isso é aplicado no nível do CLI.
  2. Proteção de proxy. Todo /api passa pelo proxy.ts, que aceita apenas requisições do loopback (localhost). Ele bloqueia requisições cross-site e limita os tipos de corpo a JSON ou multipart.
  3. Sem shell. Nenhum agente gerado tem permissão para executar comandos shell. Ele só pode escrever arquivos e responder com texto. A rota de API faz o trabalho de scaffolding e renderização diretamente.
  4. Firewall de exportação. export-project.mjs tem um firewall de requisições de negação padrão: ele só faz fetch de recursos explicitamente permitidos. Qualquer URL inesperada é rejeitada.

Informações de licenciamento

Este skill é fornecido sob a licença MIT. Consulte o arquivo LICENSE na raiz do repositório para obter detalhes completos.


Leitura adicional

Consulte as referências na pasta references/ para obter detalhes sobre cada estágio da construção. Cada referência contém o rationale, os padrões e os mapeamentos de arquivos para as perguntas da entrevista.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Habilidades Relacionadas