Skiller — orientação para agentes
Skiller é um aplicativo desktop multiplataforma (Electron) para instalar, sincronizar e editar skills de agentes de IA em diversos agentes (Claude Code, Cursor, Copilot CLI, etc.). ID do pacote: com.beautyfree.skiller.
Stack
| Camada | Tecnologia |
|---|---|
| Principal / nativo | Electron (src/electron-main/index.ts), Node 20 |
| Interface | React 19, Vite 7 (raiz src/mainview), Tailwind CSS 4, react-router-dom |
| API | tRPC sobre HTTP em 127.0.0.1 + canal push ipcMain para eventos principal→renderizador |
| Build | electron-vite (dev + empacotamento) + electron-builder (empacotamento, assinatura, atualizações automáticas) |
| Atualizador | electron-updater (GitHub Releases, latest-*.yml + blockmaps) |
Estrutura do repositório
| Caminho | Função |
|---|---|
src/electron-main/ | Processo principal do Electron: BrowserWindow, bandeja, servidor tRPC, vibrancy macOS, adaptador de plataforma |
src/preload/ | contextBridge — expõe window.api.{invoke,on,platform} ao renderizador |
src/main/ | Código do lado principal independente de plataforma: observador de skills, roteador tRPC, cache do marketplace, wrapper do atualizador do app, configurações, scanner |
src/mainview/ | Aplicativo Vite: App.tsx, páginas, componentes, index.html, tokens CSS |
src/shared/ | Tipos/esquema RPC compartilhados entre principal e renderizador (incluindo interface AppPlatform) |
agents/ | Metadados de agentes fornecidos (copiados para o app via extraResources em electron-builder.yml) |
assets/icons/ | Ícones em tempo de execução: AppIcon.iconset/, app.icns, app.ico, app/icon-512.png |
assets/icons/Skiller.icon/ | Apenas fonte (Icon Composer): scripts/build-app-icons.py lê Assets/Image.png via icon.json |
build-resources/ | entitlements.mac.plist para o Hardened Runtime |
scripts/ | build-app-icons.py, normalize-skiller-icon-layer.py, repack-dmg.sh |
docs/DEVELOPMENT.md | Configuração, HMR, assinatura, CI, repacotagem DMG — leia antes de alterar release/assinatura |
DESIGN.md | Tokens de interface e notas de design do produto |
Não edite manualmente os ícones gerados em AppIcon.iconset/, app.icns, app.ico ou app/icon-512.png — regenere a partir da fonte (abaixo).
Comandos
bun install
Desenvolvimento
bun run dev— electron-vite dev: monitora main + preload, inicia Vite na porta 5180 para o renderizador com HMR. Abre uma janela Electron carregando a URL do Vite.bun run dev:debug— Igual aodevcomAGENTSKILLS_DEVTOOLS=1(DevTools do renderizador ao abrir).
Verificações
bun run typecheck—tsc --noEmitpara renderizador +tsc -p tsconfig.node.json --noEmitpara main/preload.
Pacote de produção (web + main + preload)
bun run build—electron-vite build→out/{main,preload,renderer}/. Consumido peloelectron-builder.
Instaladores da plataforma (execute no SO alvo; electron-builder não faz cross-compile de módulos nativos)
bun run dist:mac—electron-vite build && electron-builder --mac && bash scripts/repack-dmg.shbun run dist:win—electron-vite build && electron-builder --winbun run dist:linux—electron-vite build && electron-builder --linux
Consulte docs/DEVELOPMENT.md para variáveis de ambiente de assinatura e locais dos artefatos.
Ícones
- Edite a camada canônica:
assets/icons/Skiller.icon/Assets/Image.png(opcionalmente executepython3 scripts/normalize-skiller-icon-layer.py). - Regere os ativos da plataforma:
python3 scripts/build-app-icons.py
AtualizaAppIcon.iconset/,app.ico,app.icns,app/icon-512.png.
O estilo do DMG no macOS usaassets/icons/app.icnsviascripts/repack-dmg.sh.
Convenções para agentes
- Prefira Bun para scripts e execuções locais (
bun,bunx). O Electron main é executado no Node (Node 20 empacotado do Electron) — use apenas APIs compatíveis com Node. - Strings da interface para texto voltado ao usuário: adicione chaves em
src/mainview/i18n/(inglês emen.ts); mantenha comentários de código em inglês. - Siga os padrões existentes: imports
@/a partir desrc/mainview(vejaelectron.vite.config.ts/tsconfig.json). - Evite aumento de escopo: não altere
node_modules/ou caminhos de marketing não relacionados, a menos que a tarefa exija. - Após alterações em RPC ou tipos compartilhados, garanta que ambos os manipuladores do lado principal (
src/main/rpc-handlers.ts) e os chamadores do renderizador permaneçam alinhados (src/shared/ou módulos de esquema locais). - Módulos nativos do Node (
better-sqlite3) precisam deelectron-builder install-app-depspara recompilar contra a ABI do Electron.bun installpor si só não faz isso.
Variáveis de ambiente (não exaustivas)
| Variável | Finalidade |
|---|---|
AGENTSKILLS_TRPC_PORT | Porta HTTP do tRPC (padrão 17888; avança +48 em caso de conflito) |
AGENTSKILLS_DEVTOOLS | Abrir DevTools do renderizador automaticamente na inicialização (apenas dev) |
AGENTSKILLS_DISABLE_WINDOW_BLUR | 1 → força vibrancy desligado no macOS mesmo se as configurações disserem ligado |
CSC_NAME, APPLE_API_KEY, APPLE_API_KEY_ID, APPLE_API_ISSUER, APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD, APPLE_TEAM_ID | Assinatura + notarização macOS. Veja docs/DEVELOPMENT.md. |
Leitura adicional
README.md— visão geral do produto e links de instalação.docs/DEVELOPMENT.md— dev, DMG, atualizador, release do GitHub Actions e GitHub Pages para o landing dadocs/.