K
Kodama Vault
knowledge hub
Vault
HomeBoardMap of ContentChatConversasAuditoria
Agentes
AgentsIssuesCriar IssueTerminalPreviews
Sistema
MCPSetup MCPSettings
Brain
amazon-arb-scoutcode-standards-auditordesign-master (subagent)erica-nardi-auditorfeature-auditorGlobal agent instructionskodama-hub-auditorAgente: kodama-hub-launch-qalanding-page-architect (subagent spec)meta-campaign-builder (subagent spec)need-context-auditorprospek-blog-auditor — gate editorial do blog do Prospekprospek-blog-author — autor do blog do Prospekprospek-campaign-manager — gerente de campanhas do Prospekprospek-content-director — diretor de conteúdo diário do blogProspek Demo RecorderSubagent — prospek-marketing-creativeprospek-qaprospek-social-producerprospek-social-publisherprospek-social-strategistroblox-sim-buildersageland-auditor (subagent spec)seo-geo-optimizerteam-leadervek1-auditor — subagent specvek1-styleguide-auditor
Análise custos migração — evitar senha no payloadLevantamento fluxo registro + duplicados StripeRelatório segurança + pentes finos (Cláudio)Revisão security concerns e race conditionsMagic link / esqueceu senha via SupabaseCorrigir erros pós-upgrade TypeScriptTestar PRs do agente Vault para mergeAnálise de 3 issues para iniciarErro no terminal do VSCodePR #173 — aguardando aprovação do LeoTestar fluxo ponta a ponta — criação de clients no StripePR #172 — testar e subir correção de funções deprecatedPitch de vendas SaaS — agendar call de conversãoOrganizar issues e bugs rápidos para a semanaMerge PR cadastro-novo — funcionalidades e correçõesCorrigir bugs PR #173 e #172 — image domainsPR mesosóico — página de acesso mobile + segurança OTPRefatoração de códigos — PR #202Ajustes em PRs abertos de ontemEstudo de jornada de compra e técnicas de fechamentoDefinir preço e entregável do produtoProspecção de reuniões para esta semanaAgente anti AI slop — centralização de conhecimento ConnfitPR #179 — resolver conflitos e erros de teste CLIAlinhamento de preços e usos da ConffitFix adicional para PR #183 — perfil do usuárioCorrigir estilização da Connfit para identidade visualSubir modificações no copy da ConnfitCriação de 4 campanhas no Meta AdsRevisão de PRs do GilinesExploração do Roblox EditorRelatório João — devolutiva TikTok ShopReunião presencial Zassi Uniformes — diagnóstico automaçõesCriar repositório de diagnósticos e relatórios de entrevistasDiagnóstico da ZassiGeração de relatórios para reuniões de fechamentoProposta Zassi — apresentação amanhãProspecção — Clínica Odontológica Dr. ButAlinhamento com ADRIANO sobre produtos e simulaçãoCombinar com Lauro os produtos do diagnósticoSolicitar recursos (vbucks) à INEDIA/ObiettoAnálise de issues do Kodama-Hub e início pelo vaultIssue KH03 — estudo de abordagem DockerKH-12 — script de correção e PR no kodama-hubTeste de despacho e agentes da vaultRemover issues 7, 9 e 10 do fluxo de trabalhoKH-15 — testar e preparar para Gilini testar em prod (Kodama Hub)VEK-1 — testar no WhatsAppBot local — testar localmenteEscrever issues para replicação do modelo de LPSwarm — modelar landing pages para tecnologias concorrentes (Google Ads)Configurar Docker no Windows para tarefas do Hub LisaLP de Suplementos — iniciar issue #96 (Vek)PR #93 git — subir para testar em prodPR #94 git — despachar agents pelo vaultTestes e documentação de bugs no site VEKPR #98 de LP — cosméticosRemover issues concluídas do board (#5, #10, #11, #12, #13)PRs de comparação vek1 vs LPs — correções e mergeDocumentação de uso e bugs na Vek1Criação de issues via Vault — bugs VekFix bug redirect botão Produtos na sidebar colapsada (vek)Planejamento de issues e mini sprint no site da Vek1facilitabusca — cron de fetch parado desde 05/08 (RESOLVIDO 11/08)
kodama-watchdog — self-heal + alerta pra todos os projetos da VPS HermesVPS Hermes — acesso e estrutura
Memory namespacing (multi-user)
OpenSpec -- Spec-Driven Development no VaultPlano de Teste — OpenSpec Vault Persistence
CaumzitoNyxzZanini
Sessions — kodama-aiKodama AI — galeria realtime + agent desktop
Amazon Arb (atacado→varejo BR)
Claude Code — Setup MCP VaultClaude Desktop — Setup MCP Vault (remote)VS Code + Copilot — Setup MCP Vault
Skill — Carousel Designer (Paper Style)carousel-paperPlugin marketing-skills (coreyhaines31/marketingskills)
Standup 2026-05-14Standup 2026-05-15Standup 2026-05-16Standup 2026-05-17Standup 2026-05-18Standup 2026-05-19Standup 2026-05-20Standup 2026-05-21Standup 2026-05-22Standup 2026-05-25Standup 2026-05-26Standup 2026-05-27Standup 2026-05-28Standup 2026-05-29Standup 2026-06-01Standup 2026-06-02Standup 2026-06-03Standup 2026-06-05Standup 2026-06-11Standup 2026-06-15Standup 2026-06-16Standup 2026-06-17Standup 2026-06-18Standup 2026-06-22Standup 2026-06-23Standup 2026-06-29Standup 2026-06-30Standup 2026-07-01Standup 2026-07-02Standup 2026-07-03Standup 2026-07-06Standup 2026-07-07Standup 2026-07-08Standup 2026-07-09Standup 2026-07-10Standup 2026-07-13Standup 2026-07-14Standup 2026-07-15Standup 2026-07-16Standup 2026-07-17Standup 2026-07-21Standup 2026-07-22Standup 2026-07-23Standup 2026-07-28Standup 2026-07-29Standup 2026-07-30Standup 2026-07-31Standup 2026-08-03Standup 2026-08-06Standup 2026-08-07Standup 2026-08-10Standup 2026-08-11Standup 2026-08-12Standups
MOCStandup 2026 07 23Welcome
v0.3
K
Kodama Vault
brain / projects / kodama-ai

Kodama AI — galeria realtime + agent desktop

Kodama AI

Pipeline: extensão de browser scrapeia TikTok/Instagram → faz upload da mídia pra API → web e desktop mostram em tempo real (card de imagem entra com animação). Mais um app desktop que embute o Claude Agent SDK pra pedir tarefas via OAuth da assinatura.

  • Web (público): https://ai.kodama.solutions — galeria realtime (v1: só imagens) + botão Instalar extensão
  • API: https://api-ai.kodama.solutions — REST + upload + WebSocket + Swagger em /docs
  • Repo: https://github.com/kodama1/kodama-ai (privado)
  • Local: C:\Users\User\kodama-ai (monorepo bun workspaces apps/*)
  • Deploy: VPS Hermes 187.127.24.217, Docker Compose + nginx nativo + certbot — ver infra/vps-hermes

Arquitetura

Extensão (offscreen) ──POST /api/upload (x-upload-token)──▶ API (Elysia/Bun)
                                                             │ grava arquivo em disco (/files/<id>.<ext>)
                                                             │ insere row no Postgres (Drizzle)
                                                             │ publish "media:new" no tópico WS
                                                             ▼
                  Web (Next 16) / Desktop (Tauri) ◀──WS /ws── card novo entra (framer-motion)

Realtime = WebSocket nativo do Bun/Elysia com pub/sub (socket.io NÃO integra limpo em Bun — decisão deliberada). Cliente usa WebSocket puro, sem dep.

Monorepo (apps/)

App Stack Papel
api Elysia (Bun), Drizzle, postgres.js, @elysiajs/{cors,static,swagger} upload multipart (token), GET /api/media, serve /files, WS /ws, /docs. Schema criado no boot (ensureSchema, sem migrate manual)
web Next 16 (standalone), framer-motion, tailwind v4 galeria masonry dark, card animado (scale+blur+spring), WS live + reconnect, botão Instalar extensão (modal + download /kodama-ai-extension.zip)
extension MV3 puro (sem build) scraper TikTok/IG → POST /api/upload. Carregar via Load unpacked. Ver apps/extension/README.md
desktop Tauri v2 (Rust) + React/Vite + framer-motion aba Tarefas (agent console) + aba Galeria (mesma do web)
desktop/agent Bun + @anthropic-ai/claude-agent-sdk sidecar: roda tarefa agêntica, stream de mensagens em JSON-lines via stdout

Desktop — como o agent funciona

  • Rust (src-tauri/src/lib.rs): comando run_task faz spawn de bun agent.ts <prompt> injetando CLAUDE_CODE_OAUTH_TOKEN, e faz stream do stdout pro front via evento agent-event. Token guardado no Windows Credential Manager (crate keyring, comandos save_token/has_token/clear_token).
  • Auth: OAuth da assinatura (claude setup-token → sk-ant-oat01-…, pool de créditos Agent SDK do Max/Pro). Fallback = ANTHROPIC_API_KEY. Anthropic proíbe "Sign in with Claude" pra terceiros — ok porque é app pessoal.
  • Tools liberadas (conservador): Read, Glob, Grep, Bash, Edit, Write, WebSearch, WebFetch. permissionMode: acceptEdits.

Extensão (TikTok & Instagram Downloader)

  • Versionada no main: apps/extension (MV3, reconstruída 2026-06-27 — PR #1 merged). Original (não versionada) ainda em C:\Users\User\tiktok-downloader no Windows + zip Desktop\tiktok-downloader.zip.
  • Arquivos: content.js (extrai mídia do post: TikTok __UNIVERSAL_DATA_FOR_REHYDRATION__ photo+video; IG walk no JSON embutido + DOM + og:), offscreen.js (fetch dos bytes + POST /api/upload), background.js (orquestra), popup.html/js (config + captura + progresso), rules.json (DNR reescreve Referer), tools/gen-icons.mjs (ícones sem deps).
  • Resolve mídia dentro da aba (mesma origem, sessão real) pra furar anti-bot; baixa bytes no offscreen document (host-permission, sem CORS, Referer via DNR) → vira blob local → chrome.downloads (403 impossível) e POST pra API.
  • Baixa todo media: vídeo + imagem + carrossel/slideshow (TikTok /video/ e /photo/, IG /p/ /reel/ /tv/).
  • Popup ⚙: API URL https://api-ai.kodama.solutions + UPLOAD_TOKEN (em chrome.storage.local).
  • Distribuição via web: scripts/zip-extension.mjs empacota apps/extension → apps/web/public/kodama-ai-extension.zip (commitado); a galeria oferece como download no botão Instalar extensão. Token NÃO é exibido na página pública (só API URL). Rodar o script de novo se a extensão mudar, antes do docker compose build.
  • ⚠️ A reconstrução não foi testada contra páginas live — seletores do TikTok/IG mudam muito e podem precisar de calibração; carrossel do IG pode pegar só o slide visível.

Deploy / infra (Hermes)

  • Código no VPS: /home/kodama-ai (NÃO é repo git — transferido via git archive origin/main | ssh hermes "tar -x -C /home/kodama-ai", preserva .env e data/ que são gitignored). Sem GitHub auth no VPS.
  • docker compose up -d --build [web|api]: serviços db (postgres 16), api, web. Containers kodama-ai-{db,api,web}-1.
  • Portas remapeadas: web 127.0.0.1:3015, api 127.0.0.1:3016 (3000 já é do lunacrm-web).
  • nginx: sites-available/{ai,api-ai}.kodama.solutions + symlink em sites-enabled. client_max_body_size 300m, proxy_buffering off + upgrade headers (WS). Cloudflare na frente.
  • TLS: certbot Let's Encrypt nos 2 domínios (auto-renova, expira 2026-09-25).
  • .env no VPS (/home/kodama-ai/.env, chmod 600): POSTGRES_PASSWORD (openssl), UPLOAD_TOKEN, PUBLIC_FILES_URL, CORS_ORIGIN, NEXT_PUBLIC_API_URL, NEXT_PUBLIC_WS_URL.
  • Acesso SSH: este Mac (chave ~/.ssh/id_rsa, alias hermes) foi autorizado no VPS em 2026-06-28 — ssh hermes funciona sem senha. (A id_ed25519 tem passphrase, por isso usa-se a id_rsa.)

Config / secrets

  • UPLOAD_TOKEN (extensão ↔ API): U--Rkh1oT3i40khWb78iE3LGzPMv8M2AmJGwYdmRPsk (no .env do VPS e no popup da extensão). Baixo impacto: só permite upload de mídia.
  • OAuth token do agent: gerado por claude setup-token, guardado no Credential Manager pelo app desktop — nunca em arquivo.

Status (2026-06-28) — LIVE, verificado end-to-end

  • ✅ web 200, api /health {"ok":true}, upload→DB→list roundtrip, /files serve, WS 101 Switching Protocols, /docs 200, TLS ativo.
  • ✅ desktop compila (cargo + tsc/vite) e roda (bun run tauri dev).
  • ✅ extensão versionada no main (PR #1 merged) + botão Instalar extensão no web deployado e live: https://ai.kodama.solutions/kodama-ai-extension.zip → 200 (16140 bytes), botão presente no HTML.
  • 🔵 Pendente: testar/calibrar seletores da extensão contra páginas live do TikTok/IG.

Gotchas aprendidos

  • socket.io ✗ em Bun → WebSocket nativo Elysia.
  • npm quebra no bun workspace (Cannot read properties of null) → usar bun install/bun run. tauri.conf usa bun run dev/build.
  • Tauri precisa Rust + VS C++ Build Tools (instalados via winget; rustup stable-msvc). WebView2 já vem no Win11.
  • vite escuta localhost (IPv6 ::1) — checar saúde por IPv4 127.0.0.1 dá falso negativo.
  • Porta 3000 ocupada no Hermes (lunacrm) → kodama usa 3015/3016.
  • cargo não no PATH em sessão/processo que não recarregou env após winget → terminal novo resolve, ou prefixar ~/.cargo/bin.
  • Navegador não instala extensão via JS (inline install removido em 2018) → botão da web só baixa o .zip + guia de Load unpacked.
  • VPS sem zip → o .zip da extensão é commitado no repo (gerado localmente), não gerado no servidor.

Próximos passos

  • Testar a extensão contra TikTok/IG live; calibrar seletores (content.js) se preciso.
  • Vídeo na galeria (hoje v1 só imagem; schema e upload já guardam vídeo).
  • Aprovar tools do agent na UI (em vez de acceptEdits automático) + seletor de pasta de trabalho por tarefa.
  • Sidecar do agent compilado (bun build --compile) como externalBin do Tauri pra distribuir sem depender de bun/claude instalados.
  • Deploy do site automatizado (GitHub Actions) em vez de git archive + docker compose manual.

Relacionado: infra/vps-hermes · projects/mimic/ (também TikTok-driven) · memory/MEMORY

notas relacionadas
carregando…