invos 1.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -28
- package/bin/invos.js +33 -27
- package/kit/.agents/skills/abrir/SKILL.md +41 -0
- package/kit/.agents/skills/analisar-dados/SKILL.md +95 -0
- package/kit/.agents/skills/anuncio-google/SKILL.md +174 -0
- package/kit/.agents/skills/aprovar-post/SKILL.md +151 -0
- package/kit/.agents/skills/atualizar/SKILL.md +57 -0
- package/kit/.agents/skills/canvas-design/LICENSE.txt +202 -0
- package/kit/.agents/skills/canvas-design/SKILL.md +134 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/kit/.agents/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/kit/.agents/skills/carrossel/SKILL.md +272 -0
- package/kit/.agents/skills/email-profissional/SKILL.md +70 -0
- package/kit/.agents/skills/frontend-design/LICENSE.txt +177 -0
- package/kit/.agents/skills/frontend-design/SKILL.md +55 -0
- package/kit/.agents/skills/instalar/SKILL.md +170 -0
- package/kit/.agents/skills/mapear-rotinas/SKILL.md +75 -0
- package/kit/.agents/skills/notion/SKILL.md +134 -0
- package/kit/.agents/skills/novo-projeto/SKILL.md +94 -0
- package/kit/.agents/skills/publicar-tema/SKILL.md +154 -0
- package/kit/.agents/skills/relatorio-ads/SKILL.md +163 -0
- package/kit/.agents/skills/responder-avaliacoes/SKILL.md +100 -0
- package/kit/.agents/skills/salvar/SKILL.md +49 -0
- package/kit/.agents/skills/seo/SKILL.md +310 -0
- package/kit/.agents/skills/youtube-summarizer/SKILL.md +223 -0
- package/kit/.agents/squads/README.md +84 -0
- package/kit/.agents/squads/hormozi-squad/README.md +1 -2
- package/kit/AGENTS.md +96 -137
- package/kit/INVOS.json +28 -20
- package/kit/{.agents/skills/stop-slop/LICENSE → LICENSE} +1 -1
- package/kit/README.md +87 -399
- package/kit/_memoria/empresa.md +18 -0
- package/kit/_memoria/estrategia.md +25 -0
- package/kit/_memoria/preferencias.md +12 -0
- package/kit/dados/README.md +15 -0
- package/kit/marca/design-guide.md +59 -0
- package/kit/marketing/README.md +44 -0
- package/kit/saidas/README.md +29 -0
- package/kit/scripts/README.md +51 -0
- package/kit/templates/perfis/agents-agencia.md +70 -0
- package/kit/templates/perfis/agents-empresa.md +75 -0
- package/kit/templates/perfis/agents-freelancer.md +68 -0
- package/kit/templates/perfis/agents-solopreneur.md +68 -0
- package/package.json +6 -11
- package/src/commands/doctor.js +63 -78
- package/src/commands/init.js +35 -24
- package/src/commands/install.js +16 -20
- package/src/commands/update.js +28 -66
- package/src/lock.js +9 -11
- package/src/manifest.js +1 -1
- package/src/resolve-kit.js +27 -12
- package/src/symlinks.js +36 -53
- package/src/utils.js +43 -66
- package/kit/.agents/skills/apple/DESCRIPTION.md +0 -2
- package/kit/.agents/skills/apple/apple-notes/SKILL.md +0 -90
- package/kit/.agents/skills/apple/apple-reminders/SKILL.md +0 -130
- package/kit/.agents/skills/audit/SKILL.md +0 -177
- package/kit/.agents/skills/design-marca/SKILL.md +0 -92
- package/kit/.agents/skills/instagram-carrossel/SKILL.md +0 -79
- package/kit/.agents/skills/instagram-carrossel/references/fetch-assets.md +0 -77
- package/kit/.agents/skills/instagram-carrossel/references/publish.md +0 -48
- package/kit/.agents/skills/instagram-carrossel/references/render-png.md +0 -147
- package/kit/.agents/skills/instagram-carrossel/scripts/publish.js +0 -165
- package/kit/.agents/skills/llm-wiki/SKILL.md +0 -507
- package/kit/.agents/skills/onboard/SKILL.md +0 -152
- package/kit/.agents/skills/pd-ikigai/SKILL.md +0 -269
- package/kit/.agents/skills/productivity/DESCRIPTION.md +0 -3
- package/kit/.agents/skills/productivity/google-workspace/SKILL.md +0 -335
- package/kit/.agents/skills/productivity/google-workspace/references/gmail-search-syntax.md +0 -63
- package/kit/.agents/skills/productivity/google-workspace/scripts/_hermes_home.py +0 -42
- package/kit/.agents/skills/productivity/google-workspace/scripts/google_api.py +0 -1225
- package/kit/.agents/skills/productivity/google-workspace/scripts/gws_bridge.py +0 -111
- package/kit/.agents/skills/productivity/google-workspace/scripts/setup.py +0 -481
- package/kit/.agents/skills/productivity/nano-pdf/SKILL.md +0 -52
- package/kit/.agents/skills/productivity/notion/SKILL.md +0 -448
- package/kit/.agents/skills/productivity/notion/references/block-types.md +0 -112
- package/kit/.agents/skills/productivity/ocr-and-documents/DESCRIPTION.md +0 -3
- package/kit/.agents/skills/productivity/ocr-and-documents/SKILL.md +0 -172
- package/kit/.agents/skills/productivity/ocr-and-documents/scripts/extract_marker.py +0 -87
- package/kit/.agents/skills/productivity/ocr-and-documents/scripts/extract_pymupdf.py +0 -98
- package/kit/.agents/skills/productivity/powerpoint/LICENSE.txt +0 -30
- package/kit/.agents/skills/productivity/powerpoint/SKILL.md +0 -237
- package/kit/.agents/skills/productivity/powerpoint/editing.md +0 -205
- package/kit/.agents/skills/productivity/powerpoint/pptxgenjs.md +0 -420
- package/kit/.agents/skills/productivity/powerpoint/scripts/__init__.py +0 -0
- package/kit/.agents/skills/productivity/powerpoint/scripts/add_slide.py +0 -195
- package/kit/.agents/skills/productivity/powerpoint/scripts/clean.py +0 -286
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/helpers/__init__.py +0 -0
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/helpers/merge_runs.py +0 -199
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/helpers/simplify_redlines.py +0 -197
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/pack.py +0 -159
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ecma/fourth-edition/opc-contentTypes.xsd +0 -42
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ecma/fourth-edition/opc-coreProperties.xsd +0 -50
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ecma/fourth-edition/opc-digSig.xsd +0 -49
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/ecma/fourth-edition/opc-relationships.xsd +0 -33
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/mce/mc.xsd +0 -75
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/kit/.agents/skills/productivity/powerpoint/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/kit/.agents/skills/proposta/SKILL.md +0 -159
- package/kit/.agents/skills/proposta/references/proposta-avancada.md +0 -17
- package/kit/.agents/skills/proposta/references/proposta.html +0 -187
- package/kit/.agents/skills/session-checkpoint/SKILL.md +0 -80
- package/kit/.agents/skills/session-end/SKILL.md +0 -166
- package/kit/.agents/skills/session-start/SKILL.md +0 -149
- package/kit/.agents/skills/social-content/SKILL.md +0 -119
- package/kit/.agents/skills/stop-slop/CHANGELOG.md +0 -24
- package/kit/.agents/skills/stop-slop/README.md +0 -62
- package/kit/.agents/skills/stop-slop/SKILL.md +0 -68
- package/kit/.agents/skills/stop-slop/references/examples.md +0 -59
- package/kit/.agents/skills/stop-slop/references/phrases.md +0 -128
- package/kit/.agents/skills/stop-slop/references/structures.md +0 -134
- package/kit/.agents/squads/index.md +0 -14
- package/kit/.agents/squads/instagram-carrossel/DEPENDENCIES.md +0 -75
- package/kit/.agents/squads/instagram-carrossel/README.md +0 -52
- package/kit/.agents/squads/instagram-carrossel/RUN.md +0 -115
- package/kit/.agents/squads/instagram-carrossel/_memory/memories.md +0 -16
- package/kit/.agents/squads/instagram-carrossel/agents/copywriter/tasks/create-slides.md +0 -96
- package/kit/.agents/squads/instagram-carrossel/agents/copywriter/tasks/generate-angles.md +0 -111
- package/kit/.agents/squads/instagram-carrossel/agents/copywriter/tasks/optimize-copy.md +0 -81
- package/kit/.agents/squads/instagram-carrossel/agents/copywriter.custom.md +0 -73
- package/kit/.agents/squads/instagram-carrossel/agents/image-designer/tasks/create-slides.md +0 -132
- package/kit/.agents/squads/instagram-carrossel/agents/image-designer/tasks/propose-visual-identities.md +0 -89
- package/kit/.agents/squads/instagram-carrossel/agents/image-designer/tasks/render-export.md +0 -100
- package/kit/.agents/squads/instagram-carrossel/agents/image-designer.custom.md +0 -47
- package/kit/.agents/squads/instagram-carrossel/agents/publisher/tasks/validate-publish.md +0 -50
- package/kit/.agents/squads/instagram-carrossel/agents/publisher.custom.md +0 -26
- package/kit/.agents/squads/instagram-carrossel/agents/researcher/tasks/find-and-rank-news.md +0 -105
- package/kit/.agents/squads/instagram-carrossel/agents/researcher.custom.md +0 -46
- package/kit/.agents/squads/instagram-carrossel/agents/reviewer/tasks/generate-feedback.md +0 -91
- package/kit/.agents/squads/instagram-carrossel/agents/reviewer/tasks/score-content.md +0 -103
- package/kit/.agents/squads/instagram-carrossel/agents/reviewer.custom.md +0 -53
- package/kit/.agents/squads/instagram-carrossel/output/.gitkeep +0 -0
- package/kit/.agents/squads/instagram-carrossel/output/slides/.gitkeep +0 -0
- package/kit/.agents/squads/instagram-carrossel/output/slides/rendered/.gitkeep +0 -0
- package/kit/.agents/squads/instagram-carrossel/pipeline/data/anti-patterns.md +0 -125
- package/kit/.agents/squads/instagram-carrossel/pipeline/data/domain-framework.md +0 -92
- package/kit/.agents/squads/instagram-carrossel/pipeline/data/instagram-feed-best-practices.md +0 -235
- package/kit/.agents/squads/instagram-carrossel/pipeline/data/output-examples.md +0 -244
- package/kit/.agents/squads/instagram-carrossel/pipeline/data/quality-criteria.md +0 -120
- package/kit/.agents/squads/instagram-carrossel/pipeline/data/research-brief.md +0 -135
- package/kit/.agents/squads/instagram-carrossel/pipeline/data/tone-of-voice.md +0 -32
- package/kit/.agents/squads/instagram-carrossel/pipeline/pipeline.yaml +0 -136
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-01-input-content.md +0 -38
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-02-find-news.md +0 -42
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-03-select-story.md +0 -59
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-04-generate-angles.md +0 -45
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-05-select-angle.md +0 -64
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-06-create-copy.md +0 -51
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-07-approve-copy.md +0 -52
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-08-propose-visuals.md +0 -42
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-09-select-visual.md +0 -61
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-10-create-slides.md +0 -55
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-11-approve-images.md +0 -60
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-12-review.md +0 -55
- package/kit/.agents/squads/instagram-carrossel/pipeline/steps/step-13-publish.md +0 -79
- package/kit/.agents/squads/instagram-carrossel/squad-party.csv +0 -6
- package/kit/.agents/squads/instagram-carrossel/squad.yaml +0 -70
- package/kit/COMECE-AQUI.md +0 -207
- package/kit/MEMORY.md +0 -31
- package/kit/SECURITY.md +0 -39
- package/kit/clientes/README.md +0 -72
- package/kit/clientes/_index.md +0 -32
- package/kit/clientes/_template/arquivos/.gitkeep +0 -0
- package/kit/clientes/_template/contexto.md +0 -21
- package/kit/clientes/_template/entregas.md +0 -20
- package/kit/clientes/_template/perfil.md +0 -47
- package/kit/clientes/_template/propostas/.gitkeep +0 -0
- package/kit/conteudo/README.md +0 -12
- package/kit/conteudo/_fila.md +0 -12
- package/kit/conteudo/carrosseis/.gitkeep +0 -0
- package/kit/conteudo/publicados/.gitkeep +0 -0
- package/kit/docs/audit-enxugamento-sieve.md +0 -187
- package/kit/docs/cli.md +0 -62
- package/kit/docs/hotmart-webhook.md +0 -96
- package/kit/docs/lab-user.md +0 -35
- package/kit/docs/prd-invos-cli.md +0 -264
- package/kit/integracoes/README.md +0 -31
- package/kit/integracoes/composio/README.md +0 -128
- package/kit/integracoes/composio/marketing-tools.md +0 -61
- package/kit/marca/README.md +0 -13
- package/kit/marca/assets/.gitkeep +0 -0
- package/kit/marca/marca.md +0 -57
- package/kit/memoria/ativo.md +0 -18
- package/kit/memoria/decisoes.md +0 -26
- package/kit/memoria/empresa.md +0 -46
- package/kit/memoria/historico/README.md +0 -8
- package/kit/memoria/insights.md +0 -11
- package/kit/memoria/perfil.md +0 -29
- package/kit/memoria/projetos.md +0 -27
- package/kit/memoria/regras/_TEMPLATE-exemplo.md +0 -15
- package/kit/memoria/regras/task-com-dono.md +0 -18
- package/kit/scripts/smoke-estado.sh +0 -32
- package/kit/scripts/validar.sh +0 -206
package/README.md
CHANGED
|
@@ -1,39 +1,32 @@
|
|
|
1
|
-
# invos
|
|
2
|
-
|
|
3
|
-
CLI do **INVOS** — sistema de memória multi-agente em arquivos (prioridade, clientes, proposta, conteúdo).
|
|
4
|
-
|
|
5
|
-
## Install
|
|
1
|
+
# invos (CLI) — INVOS v2
|
|
6
2
|
|
|
7
3
|
```bash
|
|
8
|
-
npx invos
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
invos
|
|
4
|
+
npx invos init --name meu-negocio
|
|
5
|
+
npx invos install
|
|
6
|
+
npx invos update # sem token — kit no npm
|
|
7
|
+
npx invos doctor
|
|
12
8
|
```
|
|
13
9
|
|
|
14
|
-
##
|
|
15
|
-
|
|
16
|
-
| Command | What it does |
|
|
17
|
-
|---------|----------------|
|
|
18
|
-
| `invos init [dir]` | Cria pasta nova com o kit |
|
|
19
|
-
| `invos install` | Injeta INVOS no diretório atual (repo existente) |
|
|
20
|
-
| `invos update` | Atualiza skills/sistema; **não** mexe em `memoria/` / clientes reais |
|
|
21
|
-
| `invos doctor` | Valida instalação |
|
|
22
|
-
|
|
23
|
-
## After init
|
|
10
|
+
## Release (você)
|
|
24
11
|
|
|
25
12
|
```bash
|
|
26
|
-
cd
|
|
27
|
-
|
|
28
|
-
|
|
13
|
+
cd packages/cli
|
|
14
|
+
npm run bundle-kit # empacota raiz InvOS.v2 → kit/
|
|
15
|
+
npm version patch
|
|
16
|
+
npm publish --access public
|
|
29
17
|
```
|
|
30
18
|
|
|
31
|
-
|
|
19
|
+
Comunidade: `npx invos@latest update`
|
|
32
20
|
|
|
33
|
-
|
|
34
|
-
|-----|-----|
|
|
35
|
-
| `INVOS_KIT_PATH` | Override do kit (dev / kit custom) |
|
|
21
|
+
## O que o update não toca
|
|
36
22
|
|
|
37
|
-
|
|
23
|
+
`_memoria/`, `marca/*` (conteúdo), `clientes/`, `marketing/*` gerado, `saidas/`, `dados/` real, `.env`
|
|
38
24
|
|
|
39
|
-
|
|
25
|
+
## Dev
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
cd packages/cli
|
|
29
|
+
npm run bundle-kit
|
|
30
|
+
node bin/invos.js init --name smoke /tmp/invos-v2-smoke
|
|
31
|
+
node bin/invos.js doctor --dir /tmp/invos-v2-smoke
|
|
32
|
+
```
|
package/bin/invos.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { readFileSync } from 'node:fs';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
3
|
import { dirname, resolve } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import { init } from '../src/commands/init.js';
|
|
6
6
|
import { install } from '../src/commands/install.js';
|
|
7
7
|
import { update } from '../src/commands/update.js';
|
|
@@ -10,15 +10,14 @@ import { loadManifest } from '../src/manifest.js';
|
|
|
10
10
|
import { resolveKitRoot } from '../src/resolve-kit.js';
|
|
11
11
|
|
|
12
12
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
-
|
|
14
13
|
const cmd = process.argv[2];
|
|
15
14
|
const args = process.argv.slice(3);
|
|
16
15
|
|
|
17
|
-
function extractDir(
|
|
18
|
-
const idx =
|
|
19
|
-
if (idx !== -1 &&
|
|
20
|
-
const dir = resolve(process.cwd(),
|
|
21
|
-
|
|
16
|
+
function extractDir(list) {
|
|
17
|
+
const idx = list.indexOf('--dir');
|
|
18
|
+
if (idx !== -1 && list[idx + 1]) {
|
|
19
|
+
const dir = resolve(process.cwd(), list[idx + 1]);
|
|
20
|
+
list.splice(idx, 2);
|
|
22
21
|
return dir;
|
|
23
22
|
}
|
|
24
23
|
return null;
|
|
@@ -26,53 +25,60 @@ function extractDir(args) {
|
|
|
26
25
|
|
|
27
26
|
function help() {
|
|
28
27
|
console.log(`
|
|
29
|
-
INVOS CLI — npx invos <command>
|
|
28
|
+
INVOS v2 CLI — npx invos <command>
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
doctor [--dir <p>] Validate installation
|
|
30
|
+
init [--name <slug>] [dir] Novo projeto (kit completo)
|
|
31
|
+
install [--dir <p>] Instala no projeto atual
|
|
32
|
+
update [--dir <p>] Atualiza PRODUCT (preserva memória)
|
|
33
|
+
doctor [--dir <p>] [--fix] Valida instalação
|
|
36
34
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
Update: kit bundled no npm — sem token, sem GitHub.
|
|
36
|
+
1) Você: npm run bundle-kit && npm publish
|
|
37
|
+
2) Aluno: npx invos@latest update
|
|
38
|
+
|
|
39
|
+
--help --version update --dry-run
|
|
40
40
|
`);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
async function main() {
|
|
44
|
-
if (!cmd || cmd === '--help' || cmd === '-h') {
|
|
44
|
+
if (!cmd || cmd === '--help' || cmd === '-h') {
|
|
45
|
+
help();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
45
48
|
if (cmd === '--version' || cmd === '-v') {
|
|
46
|
-
const pkg = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), '
|
|
49
|
+
const pkg = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf8'));
|
|
47
50
|
console.log(pkg.version);
|
|
48
51
|
return;
|
|
49
52
|
}
|
|
50
53
|
|
|
51
|
-
const
|
|
52
|
-
const kit = loadManifest(resolve(
|
|
54
|
+
const kitRoot = resolveKitRoot();
|
|
55
|
+
const kit = loadManifest(resolve(kitRoot, 'INVOS.json'));
|
|
53
56
|
if (!kit) {
|
|
54
|
-
console.error('INVOS.json
|
|
57
|
+
console.error('INVOS.json missing in kit:', kitRoot);
|
|
55
58
|
process.exit(1);
|
|
56
59
|
}
|
|
57
60
|
|
|
58
61
|
switch (cmd) {
|
|
59
62
|
case 'init':
|
|
60
|
-
await init(kit,
|
|
63
|
+
await init(kit, kitRoot, args);
|
|
61
64
|
break;
|
|
62
65
|
case 'install':
|
|
63
|
-
await install(kit,
|
|
66
|
+
await install(kit, kitRoot, extractDir(args) || process.cwd(), args);
|
|
64
67
|
break;
|
|
65
68
|
case 'update':
|
|
66
|
-
await update(kit,
|
|
69
|
+
await update(kit, kitRoot, extractDir(args) || process.cwd(), args);
|
|
67
70
|
break;
|
|
68
71
|
case 'doctor':
|
|
69
|
-
await doctor(kit,
|
|
72
|
+
await doctor(kit, kitRoot, extractDir(args) || process.cwd(), args);
|
|
70
73
|
break;
|
|
71
74
|
default:
|
|
72
|
-
console.error('Unknown
|
|
75
|
+
console.error('Unknown:', cmd);
|
|
73
76
|
help();
|
|
74
77
|
process.exit(1);
|
|
75
78
|
}
|
|
76
79
|
}
|
|
77
80
|
|
|
78
|
-
main().catch(
|
|
81
|
+
main().catch(e => {
|
|
82
|
+
console.error(e.message || e);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: abrir
|
|
3
|
+
description: >
|
|
4
|
+
Abre uma sessão de trabalho carregando a memória do negócio (empresa, preferências, estratégia, marca)
|
|
5
|
+
e devolve um resumo curto pro usuário. Use quando o usuário disser "abrir",
|
|
6
|
+
"começar o dia", "/abrir" ou no primeiro turno de uma sessão depois do /instalar.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /abrir — Abertura de sessão
|
|
10
|
+
|
|
11
|
+
Curto e direto. O objetivo é carregar contexto e devolver uma síntese de uma frase pra o usuário começar a trabalhar.
|
|
12
|
+
|
|
13
|
+
## Workflow
|
|
14
|
+
|
|
15
|
+
1. Ler, em ordem:
|
|
16
|
+
- `_memoria/empresa.md`
|
|
17
|
+
- `_memoria/preferencias.md`
|
|
18
|
+
- `_memoria/estrategia.md`
|
|
19
|
+
- `marca/design-guide.md` (só pra saber se está preenchido ou em branco)
|
|
20
|
+
|
|
21
|
+
2. Se algum dos três primeiros estiver em branco (placeholder), responder:
|
|
22
|
+
> "Vi que `_memoria/<arquivo>.md` ainda não foi preenchido. Quer rodar `/instalar` agora?"
|
|
23
|
+
E parar.
|
|
24
|
+
|
|
25
|
+
3. Se tudo estiver preenchido, devolver UMA mensagem curta no formato:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
[Nome do negócio] — [o que faz em 5-8 palavras]
|
|
29
|
+
Foco atual: [prioridade da estratégia, em uma frase]
|
|
30
|
+
Tom: [resumo de 3-4 palavras do tom de voz]
|
|
31
|
+
|
|
32
|
+
Pronto. O que vamos fazer?
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
4. Não listar quais arquivos foram lidos. Não confirmar leitura. Só usar o contexto.
|
|
36
|
+
|
|
37
|
+
## Regras
|
|
38
|
+
|
|
39
|
+
- Resposta tem que caber em 5 linhas no terminal
|
|
40
|
+
- Não fazer perguntas além de "o que vamos fazer?"
|
|
41
|
+
- Se o `design-guide.md` estiver em branco, não mencionar — só vira problema quando alguma skill visual for chamada
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: analisar-dados
|
|
3
|
+
description: >
|
|
4
|
+
Analisa um arquivo de dados (CSV, Excel, TXT, JSON) e gera um resumo executivo
|
|
5
|
+
com os principais insights, tendências e recomendações.
|
|
6
|
+
Use quando o usuário disser "analisa esse arquivo", "o que mostram esses dados",
|
|
7
|
+
"resume esses resultados", "analisa esse relatório", ou arrastar um arquivo de dados.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# /analisar-dados — Análise de Arquivo
|
|
11
|
+
|
|
12
|
+
## Dependências
|
|
13
|
+
|
|
14
|
+
- **Contexto do negócio:** `_memoria/empresa.md` (pra entender o que os dados representam)
|
|
15
|
+
- **Tom de voz:** `_memoria/preferencias.md`
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Workflow
|
|
20
|
+
|
|
21
|
+
### Passo 1 — Entender o contexto
|
|
22
|
+
|
|
23
|
+
Antes de analisar, perguntar se não estiver claro:
|
|
24
|
+
- "O que é esse arquivo? (vendas, anúncios, métricas, respostas de pesquisa...)"
|
|
25
|
+
- "Qual é a pergunta principal que você quer responder com esses dados?"
|
|
26
|
+
|
|
27
|
+
Se o contexto estiver óbvio pelo nome do arquivo ou pelo conteúdo, prossegue sem perguntar.
|
|
28
|
+
|
|
29
|
+
### Passo 2 — Ler o arquivo
|
|
30
|
+
|
|
31
|
+
Ler o arquivo fornecido. Se for Excel (.xlsx), ler com as ferramentas disponíveis pra extrair o conteúdo das células.
|
|
32
|
+
|
|
33
|
+
### Passo 3 — Análise
|
|
34
|
+
|
|
35
|
+
Identificar e reportar:
|
|
36
|
+
|
|
37
|
+
**O que está bom:**
|
|
38
|
+
- Métricas acima da média ou em crescimento
|
|
39
|
+
- Padrões positivos nos dados
|
|
40
|
+
- Top performers (produtos, campanhas, períodos, etc)
|
|
41
|
+
|
|
42
|
+
**O que preocupa:**
|
|
43
|
+
- Quedas, anomalias ou tendências negativas
|
|
44
|
+
- O que está abaixo do esperado
|
|
45
|
+
- Gargalos ou desperdícios visíveis
|
|
46
|
+
|
|
47
|
+
**Comparações:**
|
|
48
|
+
- Período atual vs período anterior (se houver)
|
|
49
|
+
- Top vs bottom performers
|
|
50
|
+
- Distribuição entre categorias
|
|
51
|
+
|
|
52
|
+
**Insights não óbvios:**
|
|
53
|
+
- Correlações interessantes
|
|
54
|
+
- Padrões que não aparecem na leitura superficial
|
|
55
|
+
|
|
56
|
+
### Passo 4 — Output
|
|
57
|
+
|
|
58
|
+
Gerar um resumo executivo em prosa (não só bullet points):
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
# Análise — [Nome do Arquivo/Relatório]
|
|
62
|
+
*[Data da análise]*
|
|
63
|
+
|
|
64
|
+
## O que esses dados mostram
|
|
65
|
+
[2-3 parágrafos com o panorama geral]
|
|
66
|
+
|
|
67
|
+
## O que está funcionando
|
|
68
|
+
[lista com contexto]
|
|
69
|
+
|
|
70
|
+
## O que merece atenção
|
|
71
|
+
[lista com contexto]
|
|
72
|
+
|
|
73
|
+
## 3 recomendações
|
|
74
|
+
1. [ação concreta]
|
|
75
|
+
2. [ação concreta]
|
|
76
|
+
3. [ação concreta]
|
|
77
|
+
|
|
78
|
+
## Números-chave
|
|
79
|
+
| Métrica | Valor | Contexto |
|
|
80
|
+
|---------|-------|---------|
|
|
81
|
+
| ... | ... | ... |
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Salvar em `estudos/analise-[nome]-[data].md` ou na pasta mais adequada pro perfil do usuário.
|
|
85
|
+
|
|
86
|
+
Perguntar se quer exportar o resumo em HTML pra compartilhar ou apresentar.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Regras
|
|
91
|
+
|
|
92
|
+
- Análise em prosa, não só listas — o usuário deve poder ler e entender sem abrir o arquivo original
|
|
93
|
+
- Nunca inventar dados que não estão no arquivo
|
|
94
|
+
- Se os dados estiverem incompletos ou com problemas, mencionar antes de analisar
|
|
95
|
+
- Tom conforme `_memoria/preferencias.md`
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: anuncio-google
|
|
3
|
+
description: >
|
|
4
|
+
Cria estrutura completa de campanha do Google Ads a partir de um briefing ou da pesquisa SEO.
|
|
5
|
+
Gera CSV pronto pra importar no Google Ads Editor com campanhas Search organizadas por cluster
|
|
6
|
+
de palavras-chave, grupos de anúncios, RSAs (Responsive Search Ads), extensões e palavras-chave
|
|
7
|
+
negativas. Lê o briefing de _memoria/empresa.md e da pesquisa SEO se existir.
|
|
8
|
+
Use quando o usuário pedir "criar campanha google ads", "anúncio google", "google ads",
|
|
9
|
+
"csv pro google ads", ou /anuncio-google.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# /anuncio-google — Estrutura de campanha Google Ads
|
|
13
|
+
|
|
14
|
+
Skill que monta a campanha inteira em CSV pronto pra importar no Google Ads Editor. Sai do briefing direto pro CSV — sem montar grupo por grupo na mão na interface do Google.
|
|
15
|
+
|
|
16
|
+
## Dependências
|
|
17
|
+
|
|
18
|
+
- **Contexto do negócio:** `_memoria/empresa.md` (produto/serviço, público, região, diferenciais)
|
|
19
|
+
- **Tom de voz:** `_memoria/preferencias.md`
|
|
20
|
+
- **Pesquisa SEO (se existir):** `marketing/seo/01-pesquisa-demanda.md`, `06-google-ads.md` — usar como insumo
|
|
21
|
+
- **Outputs vão em:** `marketing/campanhas/google-ads-<YYYY-MM-DD>/`
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
### Passo 1 — Briefing
|
|
28
|
+
|
|
29
|
+
Se o usuário não passou briefing, perguntar:
|
|
30
|
+
|
|
31
|
+
1. **Produto/serviço a anunciar?** (1-3 linhas)
|
|
32
|
+
2. **Quem é o público?** (perfil, dor que resolve)
|
|
33
|
+
3. **Região:** raio em km a partir de qual cidade?
|
|
34
|
+
4. **Orçamento diário?** (R$/dia)
|
|
35
|
+
5. **Objetivo:** ligações / WhatsApp / formulário / visita?
|
|
36
|
+
6. **Site/landing page** existe? URL?
|
|
37
|
+
|
|
38
|
+
Se já existe `marketing/seo/06-google-ads.md` (criado pelo `/seo`), usar como base — pular as perguntas que já foram respondidas lá.
|
|
39
|
+
|
|
40
|
+
### Passo 2 — Pesquisa de palavras-chave
|
|
41
|
+
|
|
42
|
+
Se já existe `marketing/seo/01-pesquisa-demanda.md`, usar o top 10-20 de termos prioritários (intenção transacional + comercial).
|
|
43
|
+
|
|
44
|
+
Se não existe, gerar:
|
|
45
|
+
- 30-50 termos-semente baseados no briefing
|
|
46
|
+
- WebSearch pra cada grupo: ver concorrência, sazonalidade
|
|
47
|
+
- Filtrar pelos de **intenção comercial/transacional** (descartar informacionais)
|
|
48
|
+
- Agrupar em **clusters** (ex: "feijoada-buffet", "feijoada-restaurante", "feijoada-evento")
|
|
49
|
+
|
|
50
|
+
### Passo 3 — Estrutura de campanha
|
|
51
|
+
|
|
52
|
+
**Padrão recomendado pra B2B local:**
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
Campanha 1: <Negócio> — Search Geral
|
|
56
|
+
├── Grupo: <Cluster 1>
|
|
57
|
+
│ ├── 10-15 keywords (mix de exata, frase, ampla modificada)
|
|
58
|
+
│ ├── 3 RSAs (15 headlines + 4 descriptions cada)
|
|
59
|
+
│ └── 10-15 keywords negativas no grupo
|
|
60
|
+
├── Grupo: <Cluster 2>
|
|
61
|
+
│ └── ...
|
|
62
|
+
└── ... (1 grupo por cluster do Passo 2)
|
|
63
|
+
|
|
64
|
+
Campanha 2: <Negócio> — Local (opcional)
|
|
65
|
+
├── Anúncios pra Google Maps
|
|
66
|
+
└── Segmentação por proximidade
|
|
67
|
+
|
|
68
|
+
Lista de negativas globais: termos genéricos descartados, marcas concorrentes
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Passo 4 — Copies (RSAs)
|
|
72
|
+
|
|
73
|
+
Pra cada grupo, gerar 3 RSAs (Responsive Search Ads):
|
|
74
|
+
|
|
75
|
+
**15 headlines** por anúncio:
|
|
76
|
+
- 5 com keyword principal
|
|
77
|
+
- 3 com diferenciais concretos (certificações, prazo, garantia)
|
|
78
|
+
- 3 com CTA ("Solicite cotação", "Peça pelo WhatsApp", "Fale agora")
|
|
79
|
+
- 2 com prova social (anos no mercado, número de clientes)
|
|
80
|
+
- 2 com proposta de valor genérica
|
|
81
|
+
|
|
82
|
+
**4 descriptions** (90 caracteres cada):
|
|
83
|
+
- 1 institucional + CTA
|
|
84
|
+
- 1 com diferencial técnico + CTA
|
|
85
|
+
- 1 com urgência/escassez (se aplicável)
|
|
86
|
+
- 1 com prova social + CTA
|
|
87
|
+
|
|
88
|
+
**Restrições do Google:**
|
|
89
|
+
- Headline: 30 caracteres
|
|
90
|
+
- Description: 90 caracteres
|
|
91
|
+
- Sem emojis, sem caps lock, sem repetição de palavras
|
|
92
|
+
- Sem afirmações superlativas não-comprovadas ("o melhor", "número 1") sem fonte
|
|
93
|
+
|
|
94
|
+
Seguir `_memoria/preferencias.md` pra tom.
|
|
95
|
+
|
|
96
|
+
### Passo 5 — Extensões
|
|
97
|
+
|
|
98
|
+
Gerar CSVs separados pra cada tipo de extensão:
|
|
99
|
+
|
|
100
|
+
- **Sitelinks** (4-6): "Sobre nós", "Catálogo", "Cases", "WhatsApp", "Localização"
|
|
101
|
+
- **Chamadas** (telefone): puxar de `_memoria/empresa.md`
|
|
102
|
+
- **Snippets estruturados:** lista de serviços, categorias de produto
|
|
103
|
+
- **Preço** (se aplicável): faixas de preço dos serviços principais
|
|
104
|
+
- **Promoção** (se aplicável): desconto, condição especial
|
|
105
|
+
|
|
106
|
+
### Passo 6 — Configurações da campanha
|
|
107
|
+
|
|
108
|
+
Gerar arquivo `configuracoes.md` com:
|
|
109
|
+
|
|
110
|
+
- **Estratégia de lance:** "Maximizar conversões" pra começar (depois migrar pra "Maximizar conversões com tCPA" quando tiver 30+ conversões)
|
|
111
|
+
- **Orçamento diário:** conforme briefing
|
|
112
|
+
- **Segmentação geográfica:** raio em km a partir do endereço
|
|
113
|
+
- **Idioma:** Português
|
|
114
|
+
- **Dispositivos:** ajustes de lance recomendados (mobile +0%, desktop +0%, tablet -20%)
|
|
115
|
+
- **Programação:** dias e horários conforme negócio
|
|
116
|
+
- **Conversões a configurar:** clique no WhatsApp, envio de formulário, ligação telefônica, tempo no site
|
|
117
|
+
|
|
118
|
+
### Passo 7 — Gerar os CSVs
|
|
119
|
+
|
|
120
|
+
Estrutura de pastas final:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
marketing/campanhas/google-ads-<YYYY-MM-DD>/
|
|
124
|
+
campanhas.csv ← linha por campanha
|
|
125
|
+
grupos.csv ← linha por grupo de anúncio
|
|
126
|
+
keywords.csv ← keywords + match type
|
|
127
|
+
keywords-negativas.csv ← negativas por grupo + lista global
|
|
128
|
+
anuncios.csv ← RSAs (headlines + descriptions)
|
|
129
|
+
extensoes-sitelinks.csv
|
|
130
|
+
extensoes-chamadas.csv
|
|
131
|
+
extensoes-snippets.csv
|
|
132
|
+
extensoes-preco.csv (se aplicável)
|
|
133
|
+
configuracoes.md ← config + checklist de import
|
|
134
|
+
README.md ← passo a passo pra importar no Google Ads Editor
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Formato dos CSVs:** seguir o padrão de importação do Google Ads Editor (colunas: Campaign, Ad group, Keyword, Match type, Status, Max CPC, etc.).
|
|
138
|
+
|
|
139
|
+
### Passo 8 — Resumo + próximos passos
|
|
140
|
+
|
|
141
|
+
Mostrar pro usuário:
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
✓ Campanha pronta: marketing/campanhas/google-ads-<YYYY-MM-DD>/
|
|
145
|
+
|
|
146
|
+
Estrutura:
|
|
147
|
+
- <N> campanhas
|
|
148
|
+
- <N> grupos de anúncio
|
|
149
|
+
- <N> palavras-chave (positivas)
|
|
150
|
+
- <N> palavras-chave negativas
|
|
151
|
+
- <N> RSAs
|
|
152
|
+
|
|
153
|
+
Pra subir:
|
|
154
|
+
1. Abrir Google Ads Editor (desktop)
|
|
155
|
+
2. Conta → Importar → CSV
|
|
156
|
+
3. Subir campanhas.csv primeiro, depois grupos, keywords, anúncios, extensões
|
|
157
|
+
4. Revisar status (tudo "pausado" inicialmente — ativar manualmente)
|
|
158
|
+
5. Conferir conversões configuradas no Google Tag Manager
|
|
159
|
+
6. Ativar campanha quando estiver tudo OK
|
|
160
|
+
|
|
161
|
+
Sugestão de orçamento inicial: R$<X>/dia por <Y> dias antes de avaliar.
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Regras
|
|
167
|
+
|
|
168
|
+
- **Nunca inventar dados de CPC.** Se o cliente perguntar quanto vai custar, falar que depende da concorrência real e dar uma faixa baseada em WebSearch.
|
|
169
|
+
- **Sempre começar pausado.** Cliente revisa, ativa quando aprovar.
|
|
170
|
+
- **Não anunciar pra termos informacionais.** "Como fazer X" raramente converte — deixar pra SEO orgânico.
|
|
171
|
+
- **Match type:** começar com Phrase Match na maioria. Exact pra termos premium. Broad só com dados consistentes.
|
|
172
|
+
- **Lista de negativas global** é obrigatória — sem ela, queima dinheiro em buscas irrelevantes.
|
|
173
|
+
- **Conversões antes de tudo.** Sem conversão configurada, o Google não otimiza — relatar isso e pedir setup antes de ativar.
|
|
174
|
+
- Copies seguem `_memoria/preferencias.md` estritamente. Sem jargão de marketing se o público não usa.
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aprovar-post
|
|
3
|
+
description: >
|
|
4
|
+
Aprova e publica um post da fila — flipa o blog de draft pra published, copia os PNGs do
|
|
5
|
+
carrossel pro public folder do site, faz commit e push (Netlify/Vercel deploya), aguarda
|
|
6
|
+
o deploy, e posta o carrossel no Instagram + Facebook via Meta Graph API. Use quando o
|
|
7
|
+
usuário disser "aprovar post X", "publicar o post do tema Y", "/aprovar-post X", ou quando
|
|
8
|
+
quiser disparar a publicação automática de um conteúdo já criado pela skill /publicar-tema.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# /aprovar-post — Pipeline de aprovação e publicação automática
|
|
12
|
+
|
|
13
|
+
Faz a ponte entre o conteúdo aprovado (blog + carrossel + legendas, criado por `/publicar-tema`)
|
|
14
|
+
e a publicação real no feed (site + Instagram + Facebook).
|
|
15
|
+
|
|
16
|
+
## Quando NÃO usar
|
|
17
|
+
|
|
18
|
+
- Conteúdo ainda não foi criado → use `/publicar-tema` primeiro
|
|
19
|
+
- Usuário ainda está revisando → não rodar até ele dizer "aprovado" / "pode postar"
|
|
20
|
+
- Site não está deployado / Meta API não configurada → seguir setup abaixo
|
|
21
|
+
|
|
22
|
+
## Pré-requisitos (uma vez só)
|
|
23
|
+
|
|
24
|
+
- `.env` na raiz com:
|
|
25
|
+
- `META_PAGE_ACCESS_TOKEN` — token de longa duração da Página FB
|
|
26
|
+
- `META_PAGE_ID` — ID da Página FB
|
|
27
|
+
- `META_IG_USER_ID` — ID da conta Insta Business
|
|
28
|
+
- `SITE_URL` — ex: `https://exemplo.com.br`
|
|
29
|
+
- Site com deploy automático a partir do `main` do GitHub (Netlify, Vercel, etc.)
|
|
30
|
+
- Conta Insta Business conectada à Página FB
|
|
31
|
+
- Página FB com permissões corretas no Meta App
|
|
32
|
+
- Scripts `scripts/postar-instagram.js` e `scripts/postar-facebook.js` configurados
|
|
33
|
+
|
|
34
|
+
Se algo disso faltar: parar e apontar pro guia de setup (criar `marketing/automacao-meta-setup.md` se ainda não existir).
|
|
35
|
+
|
|
36
|
+
## Argumento
|
|
37
|
+
|
|
38
|
+
`/aprovar-post <slug>` — onde `<slug>` é o nome do arquivo do blog **sem `.md`**.
|
|
39
|
+
|
|
40
|
+
Exemplo: `/aprovar-post como-conservar-produto`
|
|
41
|
+
|
|
42
|
+
Se o usuário não passou slug, listar os blogs em draft (arquivos com `draft: true`) e perguntar qual.
|
|
43
|
+
|
|
44
|
+
## Workflow
|
|
45
|
+
|
|
46
|
+
### Passo 1 — Localizar arquivos
|
|
47
|
+
|
|
48
|
+
- Blog: `site/.../blog/<slug>.md` (caminho depende do stack — Astro, Hugo, etc.)
|
|
49
|
+
- Carrossel: procurar `marketing/conteudo/<slug>-*` (a pasta tem sufixo de data)
|
|
50
|
+
- Validar que existem PNGs em `<pasta-carrossel>/instagram/slide-XX.png` (2 a 10)
|
|
51
|
+
- Validar que existem `legenda.md` e `legenda-linkedin.md`
|
|
52
|
+
|
|
53
|
+
Se faltar qualquer um, parar e relatar.
|
|
54
|
+
|
|
55
|
+
### Passo 2 — Mostrar resumo + pedir confirmação final
|
|
56
|
+
|
|
57
|
+
Mostrar pro usuário:
|
|
58
|
+
- Título do blog
|
|
59
|
+
- Quantos slides do carrossel
|
|
60
|
+
- Primeiras 200 chars da legenda
|
|
61
|
+
- URL final que vai ser publicada
|
|
62
|
+
|
|
63
|
+
Perguntar: **"Confirma publicação? (sim/não)"**. Só seguir se ele disser sim.
|
|
64
|
+
|
|
65
|
+
### Passo 3 — Flipar draft pra false
|
|
66
|
+
|
|
67
|
+
Editar o frontmatter do blog: `draft: true` → `draft: false`.
|
|
68
|
+
|
|
69
|
+
### Passo 4 — Copiar PNGs pro public folder do site
|
|
70
|
+
|
|
71
|
+
- Origem: `marketing/conteudo/<slug>-<data>/instagram/slide-*.png`
|
|
72
|
+
- Destino: `site/.../public/img/posts/<slug>/slide-*.png`
|
|
73
|
+
- Criar pasta de destino se não existir
|
|
74
|
+
- Sobrescrever se já existir (caso seja re-publicação)
|
|
75
|
+
|
|
76
|
+
### Passo 5 — Commit + push
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
git add site/<caminho>/blog/<slug>.md site/<caminho>/public/img/posts/<slug>/
|
|
80
|
+
git commit -m "publicar: <título do blog>"
|
|
81
|
+
git push origin main
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Esperar push terminar com sucesso.
|
|
85
|
+
|
|
86
|
+
### Passo 6 — Aguardar deploy
|
|
87
|
+
|
|
88
|
+
Deploy automático (Netlify/Vercel) leva ~1-2 min. Validar que o post está no ar:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
curl -sf -o /dev/null -w "%{http_code}" "$SITE_URL/blog/$slug/"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Aguardar HTTP 200 (com timeout de 5 min). Também checar que pelo menos `slide-01.png` está acessível:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
curl -sf -o /dev/null -w "%{http_code}" "$SITE_URL/img/posts/$slug/slide-01.png"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Sem isso, a Meta API vai falhar — ela busca a imagem por URL pública.
|
|
101
|
+
|
|
102
|
+
### Passo 7 — Postar no Instagram
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
node --env-file=.env scripts/postar-instagram.js marketing/conteudo/<slug>-<data>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Capturar o post id retornado. Se falhar, **não seguir pra Facebook** — relatar e parar.
|
|
109
|
+
|
|
110
|
+
### Passo 8 — Postar no Facebook
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
node --env-file=.env scripts/postar-facebook.js marketing/conteudo/<slug>-<data>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Capturar o post id retornado.
|
|
117
|
+
|
|
118
|
+
### Passo 9 — LinkedIn
|
|
119
|
+
|
|
120
|
+
LinkedIn é manual por enquanto (API de empresa precisa de aprovação demorada). Mostrar pro usuário:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
LinkedIn: cole esse texto manualmente em https://linkedin.com/in/<seu-perfil>:
|
|
124
|
+
<conteúdo de legenda-linkedin.md>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Passo 10 — Resumo
|
|
128
|
+
|
|
129
|
+
Mostrar:
|
|
130
|
+
```
|
|
131
|
+
✓ Post publicado: <título>
|
|
132
|
+
|
|
133
|
+
Site: <SITE_URL>/blog/<slug>/
|
|
134
|
+
Instagram: <link do post>
|
|
135
|
+
Facebook: <link do post>
|
|
136
|
+
LinkedIn: pendente — texto pronto em legenda-linkedin.md (postar manual)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Tratamento de erro
|
|
140
|
+
|
|
141
|
+
- Push falhou: rollback do `draft: false` (restaura `draft: true`), relata e para
|
|
142
|
+
- Deploy não subiu em 5 min: relata, pergunta se quer continuar mesmo assim ou abortar
|
|
143
|
+
- Insta API falhou: para e relata. Site já está no ar, blog publicado — só o post no feed que não foi
|
|
144
|
+
- FB falhou mas Insta OK: relata, sugere tentar de novo só o FB depois
|
|
145
|
+
|
|
146
|
+
## Princípios
|
|
147
|
+
|
|
148
|
+
1. **Confirmação humana antes de qualquer coisa irreversível.** Nunca pular o passo 2.
|
|
149
|
+
2. **Idempotente onde possível.** Re-rodar com mesmo slug deve detectar publicação prévia (blog não-draft, PNGs já no public/) e perguntar se é pra re-postar ou só atualizar.
|
|
150
|
+
3. **Falha cedo, falha alto.** Qualquer pré-requisito faltando = abortar e explicar o que falta.
|
|
151
|
+
4. **Logar tudo.** Cada passo imprime o que está fazendo e o resultado.
|