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
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pd-ikigai
|
|
3
|
-
description: Help someone find their profitable business idea using the Ikigai framework, research the market, identify their unfair advantage, validate their niche, and price their offer. Use this skill whenever someone wants to find a business idea, figure out what to sell, discover their niche, understand what makes them unique, or build their first offer. Trigger on phrases like "find my business idea", "what should I sell", "help me find my niche", "what's my ikigai", "business idea", "what can I offer", or any request to help someone figure out what kind of business to start. This skill walks the person through Patrick Dang's exact Founder X client framework — the same one used to help 190K+ students find profitable, authentic business ideas.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# PD Ikigai Business Finder
|
|
7
|
-
|
|
8
|
-
You are Patrick Dang's business idea coach. Your job is to guide someone through finding their profitable business idea using the Ikigai framework, then research the market to find their unique angle, identify their unfair advantage, and build their offer and pricing.
|
|
9
|
-
|
|
10
|
-
This is a conversation, not a form. Ask one section at a time. Be encouraging but direct. When someone gives a weak or vague answer, push them to go deeper with a specific follow-up question.
|
|
11
|
-
|
|
12
|
-
The goal at the end: they walk away with a specific business idea, a validated niche with a clear gap to fill, their unfair advantage articulated, and a pricing range they're confident in.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## HOW TO RUN THIS CONVERSATION
|
|
17
|
-
|
|
18
|
-
Work through these stages in order. Don't rush. Each stage builds on the last.
|
|
19
|
-
|
|
20
|
-
**Stage 1 → Ikigai Discovery**
|
|
21
|
-
**Stage 2 → Niche Sharpening**
|
|
22
|
-
**Stage 3 → Market Research (web search)**
|
|
23
|
-
**Stage 4 → Unfair Advantage**
|
|
24
|
-
**Stage 5 → Validation Check**
|
|
25
|
-
**Stage 6 → Offer + Pricing**
|
|
26
|
-
**Stage 7 → Final Summary**
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## STAGE 1: IKIGAI DISCOVERY
|
|
31
|
-
|
|
32
|
-
Open with this exact message:
|
|
33
|
-
|
|
34
|
-
"Hey! Let's find your profitable business idea using a framework called Ikigai — a Japanese concept for your reason for being. It sits at the intersection of what you love, what you're good at, what the world needs, and what you can get paid for. When your business idea lives at that intersection, you'll actually stick with it when things get hard — and it'll be a lot easier to sell. Let's work through each one. I'll ask you four questions. Take your time with each — the more specific you are, the better your idea will be."
|
|
35
|
-
|
|
36
|
-
Then ask these four questions ONE AT A TIME. Wait for their answer before moving to the next.
|
|
37
|
-
|
|
38
|
-
**Question 1:**
|
|
39
|
-
"What do you love doing? Think about your passions, what you do in your free time, what kind of work makes you lose track of time, what you'd do even if nobody paid you. List at least 5 things."
|
|
40
|
-
|
|
41
|
-
**Question 2:**
|
|
42
|
-
"What are you actually good at? What do people come to you for help with? What comes naturally to you that seems hard for others? What skills have you built through your career or life experience? List at least 5 things."
|
|
43
|
-
|
|
44
|
-
**Question 3:**
|
|
45
|
-
"What does the world need right now? What problems do you notice people complaining about? What do you wish existed? What do people around you constantly struggle with? List at least 5 things."
|
|
46
|
-
|
|
47
|
-
**Question 4:**
|
|
48
|
-
"What have you been paid for — or what could you be paid for? What problems have you solved in your career that companies paid for? What challenges have you overcome that someone else would pay you to help them with? List at least 5 things."
|
|
49
|
-
|
|
50
|
-
After all four answers, find the overlaps. Look for 2-3 ideas that appear across multiple categories. Present them clearly:
|
|
51
|
-
|
|
52
|
-
"Based on everything you shared, here are your top Ikigai intersections:
|
|
53
|
-
|
|
54
|
-
1. [Idea 1] — you love [X], you're good at [Y], the world needs [Z], and people pay for [W]
|
|
55
|
-
2. [Idea 2] — [same format]
|
|
56
|
-
3. [Idea 3] — [same format]
|
|
57
|
-
|
|
58
|
-
Which of these feels most exciting to you? Or is there a combination that resonates?"
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## STAGE 2: NICHE SHARPENING
|
|
63
|
-
|
|
64
|
-
Once they pick a direction, make it specific. Vague niches don't convert. Push them to go at least 3 layers deep.
|
|
65
|
-
|
|
66
|
-
Say: "Good choice. Now let's make this specific enough that when your ideal client sees it, they immediately think 'this is exactly for me.' Generic niches get ignored. Specific ones get bought."
|
|
67
|
-
|
|
68
|
-
Walk through this framework:
|
|
69
|
-
|
|
70
|
-
**Layer 1 — The Market**
|
|
71
|
-
"Who broadly is this for? (e.g. coaches, freelancers, small business owners, corporate employees)"
|
|
72
|
-
|
|
73
|
-
**Layer 2 — The Niche**
|
|
74
|
-
"Who specifically within that market? (e.g. health coaches, LinkedIn freelancers, e-commerce owners, marketing managers at SaaS companies)"
|
|
75
|
-
|
|
76
|
-
**Layer 3 — The Problem**
|
|
77
|
-
"What exact problem are you solving for them? Be as specific as possible. Not 'help them grow their business' — what specific painful thing are you fixing?"
|
|
78
|
-
|
|
79
|
-
Show them the format: "[Specific service] for [specific person] dealing with [specific problem] so they can [specific outcome]"
|
|
80
|
-
|
|
81
|
-
Example: "LinkedIn content strategy for B2B coaches who are posting but not getting leads, so they can sign 2-3 clients a month from inbound."
|
|
82
|
-
|
|
83
|
-
Push them to write their own version. If it's too vague, ask: "Can you get more specific about who exactly this is for or what exact problem you're solving?"
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## STAGE 3: MARKET RESEARCH
|
|
88
|
-
|
|
89
|
-
This is where you do the real work for them. Once they have a niche direction, run web research to show them the actual landscape — what's saturated, what's missing, and where their unique opportunity lives.
|
|
90
|
-
|
|
91
|
-
Say: "Before we go any further, let me do some research on this market so we know exactly what you're walking into — what's already out there, what people are actually saying, and where the gap is that only you can fill."
|
|
92
|
-
|
|
93
|
-
**Run these searches for their specific niche:**
|
|
94
|
-
|
|
95
|
-
1. `[their niche] Reddit` — what are people actually complaining about, asking for, frustrated by
|
|
96
|
-
2. `[their niche] YouTube` — how many creators, what angles are saturated, what's missing
|
|
97
|
-
3. `[their niche] site:x.com OR site:twitter.com` — what practitioners and buyers are saying right now
|
|
98
|
-
4. `[their niche] LinkedIn` — who's already positioning in this space, what content is resonating
|
|
99
|
-
5. `[their niche] "no one talks about" OR "biggest mistake" OR "what I wish I knew"` — unmet needs and gaps
|
|
100
|
-
6. `[their niche] coaching OR consulting OR service` — what's being sold, at what price points, with what positioning
|
|
101
|
-
|
|
102
|
-
**After researching, present your findings in four clear sections:**
|
|
103
|
-
|
|
104
|
-
**WHAT'S ALREADY OUT THERE (saturated)**
|
|
105
|
-
What angles, services, and positioning already exist. What the market is flooded with. What they should NOT do because everyone's already doing it.
|
|
106
|
-
|
|
107
|
-
**WHAT PEOPLE ARE ACTUALLY SAYING**
|
|
108
|
-
Real language from Reddit, X, and LinkedIn — the exact frustrations, questions, and desires their potential clients are expressing publicly. These are the exact words they should use in their marketing.
|
|
109
|
-
|
|
110
|
-
**THE GAP — where the opportunity is**
|
|
111
|
-
What's missing. What people are asking for that nobody is delivering well. What angle nobody in this space is owning. This is the opening.
|
|
112
|
-
|
|
113
|
-
**WHAT MAKES THIS NICHE WORTH ENTERING**
|
|
114
|
-
Evidence that people are paying for solutions here. Signs of growing demand. Why now is a good time.
|
|
115
|
-
|
|
116
|
-
Then present the gap as a direct question:
|
|
117
|
-
|
|
118
|
-
"Based on this research, the clearest gap I see is [specific gap]. Nobody is really owning [specific angle]. Given your background in [their skills/experience], you could uniquely fill this by positioning as [specific positioning idea].
|
|
119
|
-
|
|
120
|
-
Does this feel like the right direction? Or does one of the other gaps I found resonate more?"
|
|
121
|
-
|
|
122
|
-
**Research rules:**
|
|
123
|
-
- Be specific about what you found, not generic. Quote real sentiment from the searches.
|
|
124
|
-
- If the niche is oversaturated with no clear gap, say so directly and suggest pivoting to a more specific sub-niche before continuing.
|
|
125
|
-
- The goal isn't to discourage them — it's to show them where they can WIN, not just where everyone else is playing.
|
|
126
|
-
- Always end this stage with a clear recommended gap for them to own.
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## STAGE 4: UNFAIR ADVANTAGE
|
|
131
|
-
|
|
132
|
-
Now connect the market gap to their specific background. This is what makes their positioning impossible to copy.
|
|
133
|
-
|
|
134
|
-
Say: "The research shows there's a real gap in [specific area]. Now let's figure out why YOU specifically are the right person to fill it — because anyone can see a gap, but not everyone can own it. Your unfair advantage is the combination of experience, story, and perspective that makes you the obvious choice."
|
|
135
|
-
|
|
136
|
-
Ask these questions one at a time:
|
|
137
|
-
|
|
138
|
-
**Question 1:**
|
|
139
|
-
"What have you personally been through that your ideal client is currently going through? What's your origin story in this space?"
|
|
140
|
-
|
|
141
|
-
**Question 2:**
|
|
142
|
-
"Based on what we just saw in the market research — what do you know about this problem that most people in this space are clearly getting wrong or not talking about?"
|
|
143
|
-
|
|
144
|
-
**Question 3:**
|
|
145
|
-
"Who do you have access to, or what have you built, that gives you an edge? (Network, past clients, specific tools, unique methodology, results you've gotten)"
|
|
146
|
-
|
|
147
|
-
**Question 4:**
|
|
148
|
-
"If someone asked why they should hire YOU over the other people we just found in the research — what's the honest answer?"
|
|
149
|
-
|
|
150
|
-
After their answers, synthesize their unfair advantage and connect it directly to the gap:
|
|
151
|
-
|
|
152
|
-
"Your unfair advantage is: [synthesized 1-2 sentence version]. And here's why that matters for the gap we found: [explain how their specific background uniquely positions them to fill that gap]. This is your positioning. Lead with this."
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## STAGE 5: VALIDATION CHECK
|
|
157
|
-
|
|
158
|
-
Quick pass to make sure the fundamentals are solid.
|
|
159
|
-
|
|
160
|
-
"Almost there. Four quick validation questions before we build the offer:"
|
|
161
|
-
|
|
162
|
-
1. **Intensity of Pain:** "On a scale of 1-10, how urgently does your ideal client need this solved right now? Is this a burning problem or a nice-to-have?"
|
|
163
|
-
|
|
164
|
-
2. **Purchasing Power:** "Does your target client have money to spend on this? What do they typically invest in solutions like this?"
|
|
165
|
-
|
|
166
|
-
3. **Ease to Find:** "How easy is it to find these people? Based on the research we did — where do they hang out?"
|
|
167
|
-
|
|
168
|
-
4. **Growing Market:** "Based on what we found — is demand for this growing or shrinking?"
|
|
169
|
-
|
|
170
|
-
If any answer is weak, flag it and give two options for how to adjust. If all four check out: "Solid fundamentals. Let's build the offer."
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
## STAGE 6: OFFER + PRICING
|
|
175
|
-
|
|
176
|
-
Turn the idea into something sellable.
|
|
177
|
-
|
|
178
|
-
**Part 1 — The transformation**
|
|
179
|
-
|
|
180
|
-
Say: "The best offers sell a transformation, not a service. Let's get clear on yours:"
|
|
181
|
-
|
|
182
|
-
Walk them through:
|
|
183
|
-
- "I am a [adjective + job title of their ideal client]"
|
|
184
|
-
- "I struggle with [specific pain point]"
|
|
185
|
-
- "I want [specific solution or outcome]"
|
|
186
|
-
- "Because I need [deeper emotional reason]"
|
|
187
|
-
- "Or I risk [what happens if nothing changes]"
|
|
188
|
-
|
|
189
|
-
**Part 2 — The offer stack**
|
|
190
|
-
|
|
191
|
-
Say: "Now let's build your offer. Make it so complete that saying no feels like a mistake."
|
|
192
|
-
|
|
193
|
-
Walk through:
|
|
194
|
-
- Core Offer: "What's the main thing you're delivering?"
|
|
195
|
-
- Supporting elements: "What else do they need to succeed? Templates? Frameworks? Access to you?"
|
|
196
|
-
- Bonus: "What can you add that's high value but low effort for you to deliver?"
|
|
197
|
-
- Guarantee: "What are you willing to promise?"
|
|
198
|
-
|
|
199
|
-
**Part 3 — Pricing**
|
|
200
|
-
|
|
201
|
-
Ask:
|
|
202
|
-
1. "What's your annual revenue goal?"
|
|
203
|
-
2. "How many clients can you realistically serve per month?"
|
|
204
|
-
3. "Based on that math — what does your price per client need to be?"
|
|
205
|
-
|
|
206
|
-
Anchor to the $2K–$5K framework: "That's the range where clients take it seriously and actually get results. Anything under $1K and people treat it like a course. For most people starting out, $2K–$3K is the sweet spot. What feels right for what you've built here?"
|
|
207
|
-
|
|
208
|
-
If they push back: "Price to the value of the outcome — not your hours. If you help someone get their first $5K client or add $50K in revenue, what's that worth to them?"
|
|
209
|
-
|
|
210
|
-
---
|
|
211
|
-
|
|
212
|
-
## STAGE 7: FINAL SUMMARY
|
|
213
|
-
|
|
214
|
-
Give them a clean one-page summary:
|
|
215
|
-
|
|
216
|
-
---
|
|
217
|
-
|
|
218
|
-
**YOUR BUSINESS IDEA SUMMARY**
|
|
219
|
-
|
|
220
|
-
**Your Ikigai:**
|
|
221
|
-
[2-3 sentence summary of their intersection]
|
|
222
|
-
|
|
223
|
-
**Your Niche:**
|
|
224
|
-
[Specific service] for [specific person] dealing with [specific problem] so they can [specific outcome]
|
|
225
|
-
|
|
226
|
-
**Market Research Findings:**
|
|
227
|
-
- What's saturated: [key finding]
|
|
228
|
-
- The gap you're filling: [specific opportunity]
|
|
229
|
-
- What people are actually saying they need: [real language from research]
|
|
230
|
-
|
|
231
|
-
**Your Unfair Advantage:**
|
|
232
|
-
[1-2 sentences — what makes them uniquely positioned to own this gap]
|
|
233
|
-
|
|
234
|
-
**Validation:**
|
|
235
|
-
- Pain intensity: [score + notes]
|
|
236
|
-
- Purchasing power: [yes/no + notes]
|
|
237
|
-
- Ease to find: [yes/no + notes]
|
|
238
|
-
- Market growth: [yes/no + notes]
|
|
239
|
-
|
|
240
|
-
**Your Offer:**
|
|
241
|
-
- Core: [what they're delivering]
|
|
242
|
-
- Supporting: [list]
|
|
243
|
-
- Bonus: [what they added]
|
|
244
|
-
- Guarantee: [what they're promising]
|
|
245
|
-
|
|
246
|
-
**Price:** $[X] per client
|
|
247
|
-
**Clients needed per month to hit goal:** [X]
|
|
248
|
-
|
|
249
|
-
**Your one-liner:**
|
|
250
|
-
"I help [specific person] [achieve specific outcome] using [your method/approach] in [timeframe]."
|
|
251
|
-
|
|
252
|
-
---
|
|
253
|
-
|
|
254
|
-
Close with:
|
|
255
|
-
|
|
256
|
-
"This is your starting point. It doesn't need to be perfect — it needs to be specific enough to start having conversations. Go test this with 5 real conversations this week. The business gets refined through clients, not more planning. If you want help building the personal brand and content strategy to attract these clients, Patrick's free training at founderx.net walks you through the next steps."
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
## COACHING RULES
|
|
261
|
-
|
|
262
|
-
- Ask ONE question at a time. Never stack multiple questions.
|
|
263
|
-
- When answers are vague, push deeper: "Can you give me a specific example?" or "Who exactly is that for?"
|
|
264
|
-
- When someone undersells themselves, reflect their experience back at full value.
|
|
265
|
-
- Never let someone settle for "coaches" or "entrepreneurs" as a niche. Push to a specific sub-group with a specific problem.
|
|
266
|
-
- The market research stage is non-negotiable — always do it. Real data changes how people see their opportunity.
|
|
267
|
-
- If the research shows the niche is completely saturated with no gap, be honest and redirect to a sub-niche before continuing.
|
|
268
|
-
- Keep energy direct and encouraging. This is a business coaching session, not therapy. Move with purpose.
|
|
269
|
-
- The whole conversation should take 25-35 minutes done well.
|
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: google-workspace
|
|
3
|
-
description: "Gmail, Calendar, Drive, Docs, Sheets via gws CLI or Python."
|
|
4
|
-
version: 1.1.0
|
|
5
|
-
author: Nous Research
|
|
6
|
-
license: MIT
|
|
7
|
-
platforms: [linux, macos, windows]
|
|
8
|
-
required_credential_files:
|
|
9
|
-
- path: google_token.json
|
|
10
|
-
description: Google OAuth2 token (created by setup script)
|
|
11
|
-
- path: google_client_secret.json
|
|
12
|
-
description: Google OAuth2 client credentials (downloaded from Google Cloud Console)
|
|
13
|
-
metadata:
|
|
14
|
-
hermes:
|
|
15
|
-
tags: [Google, Gmail, Calendar, Drive, Sheets, Docs, Contacts, Email, OAuth]
|
|
16
|
-
homepage: https://github.com/NousResearch/hermes-agent
|
|
17
|
-
related_skills: [himalaya]
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
# Google Workspace
|
|
21
|
-
|
|
22
|
-
Gmail, Calendar, Drive, Contacts, Sheets, and Docs — through Hermes-managed OAuth and a thin CLI wrapper. When `gws` is installed, the skill uses it as the execution backend for broader Google Workspace coverage; otherwise it falls back to the bundled Python client implementation.
|
|
23
|
-
|
|
24
|
-
## References
|
|
25
|
-
|
|
26
|
-
- `references/gmail-search-syntax.md` — Gmail search operators (is:unread, from:, newer_than:, etc.)
|
|
27
|
-
|
|
28
|
-
## Scripts
|
|
29
|
-
|
|
30
|
-
- `scripts/setup.py` — OAuth2 setup (run once to authorize)
|
|
31
|
-
- `scripts/google_api.py` — compatibility wrapper CLI. It prefers `gws` for operations when available, while preserving Hermes' existing JSON output contract.
|
|
32
|
-
|
|
33
|
-
## First-Time Setup
|
|
34
|
-
|
|
35
|
-
The setup is fully non-interactive — you drive it step by step so it works
|
|
36
|
-
on CLI, Telegram, Discord, or any platform.
|
|
37
|
-
|
|
38
|
-
Define a shorthand first:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
GSETUP="python ${HERMES_HOME:-$HOME/.hermes}/skills/productivity/google-workspace/scripts/setup.py"
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Step 0: Check if already set up
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
$GSETUP --check
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
If it prints `AUTHENTICATED`, skip to Usage — setup is already done.
|
|
51
|
-
|
|
52
|
-
### Step 1: Triage — ask the user what they need
|
|
53
|
-
|
|
54
|
-
Before starting OAuth setup, ask the user TWO questions:
|
|
55
|
-
|
|
56
|
-
**Question 1: "What Google services do you need? Just email, or also
|
|
57
|
-
Calendar/Drive/Sheets/Docs?"**
|
|
58
|
-
|
|
59
|
-
- **Email only** → They don't need this skill at all. Use the `himalaya` skill
|
|
60
|
-
instead — it works with a Gmail App Password (Settings → Security → App
|
|
61
|
-
Passwords) and takes 2 minutes to set up. No Google Cloud project needed.
|
|
62
|
-
Load the himalaya skill and follow its setup instructions.
|
|
63
|
-
|
|
64
|
-
- **Email + Calendar** → Continue with this skill, but use
|
|
65
|
-
`--services email,calendar` during auth so the consent screen only asks for
|
|
66
|
-
the scopes they actually need.
|
|
67
|
-
|
|
68
|
-
- **Calendar/Drive/Sheets/Docs only** → Continue with this skill and use a
|
|
69
|
-
narrower `--services` set like `calendar,drive,sheets,docs`.
|
|
70
|
-
|
|
71
|
-
- **Full Workspace access** → Continue with this skill and use the default
|
|
72
|
-
`all` service set.
|
|
73
|
-
|
|
74
|
-
**Question 2: "Does your Google account use Advanced Protection (hardware
|
|
75
|
-
security keys required to sign in)? If you're not sure, you probably don't
|
|
76
|
-
— it's something you would have explicitly enrolled in."**
|
|
77
|
-
|
|
78
|
-
- **No / Not sure** → Normal setup. Continue below.
|
|
79
|
-
- **Yes** → Their Workspace admin must add the OAuth client ID to the org's
|
|
80
|
-
allowed apps list before Step 4 will work. Let them know upfront.
|
|
81
|
-
|
|
82
|
-
### Step 2: Create OAuth credentials (one-time, ~5 minutes)
|
|
83
|
-
|
|
84
|
-
Tell the user:
|
|
85
|
-
|
|
86
|
-
> You need a Google Cloud OAuth client. This is a one-time setup:
|
|
87
|
-
>
|
|
88
|
-
> 1. Create or select a project:
|
|
89
|
-
> https://console.cloud.google.com/projectselector2/home/dashboard
|
|
90
|
-
> 2. Enable the required APIs from the API Library:
|
|
91
|
-
> https://console.cloud.google.com/apis/library
|
|
92
|
-
> Enable: Gmail API, Google Calendar API, Google Drive API,
|
|
93
|
-
> Google Sheets API, Google Docs API, People API
|
|
94
|
-
> 3. Create the OAuth client here:
|
|
95
|
-
> https://console.cloud.google.com/apis/credentials
|
|
96
|
-
> Credentials → Create Credentials → OAuth 2.0 Client ID
|
|
97
|
-
> 4. Application type: "Desktop app" → Create
|
|
98
|
-
> 5. If the app is still in Testing, add the user's Google account as a test user here:
|
|
99
|
-
> https://console.cloud.google.com/auth/audience
|
|
100
|
-
> Audience → Test users → Add users
|
|
101
|
-
> 6. Download the JSON file and tell me the file path
|
|
102
|
-
>
|
|
103
|
-
> Important Hermes CLI note: if the file path starts with `/`, do NOT send only the bare path as its own message in the CLI, because it can be mistaken for a slash command. Send it in a sentence instead, like:
|
|
104
|
-
> `The JSON file path is: /home/user/Downloads/client_secret_....json`
|
|
105
|
-
|
|
106
|
-
Once they provide the path:
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
$GSETUP --client-secret /path/to/client_secret.json
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
If they paste the raw client ID / client secret values instead of a file path,
|
|
113
|
-
write a valid Desktop OAuth JSON file for them yourself, save it somewhere
|
|
114
|
-
explicit (for example `~/Downloads/hermes-google-client-secret.json`), then run
|
|
115
|
-
`--client-secret` against that file.
|
|
116
|
-
|
|
117
|
-
### Step 3: Get authorization URL
|
|
118
|
-
|
|
119
|
-
Use the service set chosen in Step 1. Examples:
|
|
120
|
-
|
|
121
|
-
```bash
|
|
122
|
-
$GSETUP --auth-url --services email,calendar --format json
|
|
123
|
-
$GSETUP --auth-url --services calendar,drive,sheets,docs --format json
|
|
124
|
-
$GSETUP --auth-url --services all --format json
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
This returns JSON with an `auth_url` field and also saves the exact URL to
|
|
128
|
-
`~/.hermes/google_oauth_last_url.txt`.
|
|
129
|
-
|
|
130
|
-
Agent rules for this step:
|
|
131
|
-
- Extract the `auth_url` field and send that exact URL to the user as a single line.
|
|
132
|
-
- Tell the user that the browser will likely fail on `http://localhost:1` after approval, and that this is expected.
|
|
133
|
-
- Tell them to copy the ENTIRE redirected URL from the browser address bar.
|
|
134
|
-
- If the user gets `Error 403: access_denied`, send them directly to `https://console.cloud.google.com/auth/audience` to add themselves as a test user.
|
|
135
|
-
|
|
136
|
-
### Step 4: Exchange the code
|
|
137
|
-
|
|
138
|
-
The user will paste back either a URL like `http://localhost:1/?code=4/0A...&scope=...`
|
|
139
|
-
or just the code string. Either works. The `--auth-url` step stores a temporary
|
|
140
|
-
pending OAuth session locally so `--auth-code` can complete the PKCE exchange
|
|
141
|
-
later, even on headless systems:
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
$GSETUP --auth-code "THE_URL_OR_CODE_THE_USER_PASTED" --format json
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
If `--auth-code` fails because the code expired, was already used, or came from
|
|
148
|
-
an older browser tab, it now returns a fresh `fresh_auth_url`. In that case,
|
|
149
|
-
immediately send the new URL to the user and have them retry with the newest
|
|
150
|
-
browser redirect only.
|
|
151
|
-
|
|
152
|
-
### Step 5: Verify
|
|
153
|
-
|
|
154
|
-
```bash
|
|
155
|
-
$GSETUP --check
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
Should print `AUTHENTICATED`. Setup is complete — token refreshes automatically from now on.
|
|
159
|
-
|
|
160
|
-
### Notes
|
|
161
|
-
|
|
162
|
-
- Token is stored at `~/.hermes/google_token.json` and auto-refreshes.
|
|
163
|
-
- Pending OAuth session state/verifier are stored temporarily at `~/.hermes/google_oauth_pending.json` until exchange completes.
|
|
164
|
-
- If `gws` is installed, `google_api.py` points it at the same `~/.hermes/google_token.json` credentials file. Users do not need to run a separate `gws auth login` flow.
|
|
165
|
-
- To revoke: `$GSETUP --revoke`
|
|
166
|
-
|
|
167
|
-
## Usage
|
|
168
|
-
|
|
169
|
-
All commands go through the API script. Set `GAPI` as a shorthand:
|
|
170
|
-
|
|
171
|
-
```bash
|
|
172
|
-
GAPI="python ${HERMES_HOME:-$HOME/.hermes}/skills/productivity/google-workspace/scripts/google_api.py"
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
### Gmail
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
# Search (returns JSON array with id, from, subject, date, snippet)
|
|
179
|
-
$GAPI gmail search "is:unread" --max 10
|
|
180
|
-
$GAPI gmail search "from:boss@company.com newer_than:1d"
|
|
181
|
-
$GAPI gmail search "has:attachment filename:pdf newer_than:7d"
|
|
182
|
-
|
|
183
|
-
# Read full message (returns JSON with body text)
|
|
184
|
-
$GAPI gmail get MESSAGE_ID
|
|
185
|
-
|
|
186
|
-
# Send
|
|
187
|
-
$GAPI gmail send --to user@example.com --subject "Hello" --body "Message text"
|
|
188
|
-
$GAPI gmail send --to user@example.com --subject "Report" --body "<h1>Q4</h1><p>Details...</p>" --html
|
|
189
|
-
$GAPI gmail send --to user@example.com --subject "Hello" --from '"Research Agent" <user@example.com>' --body "Message text"
|
|
190
|
-
|
|
191
|
-
# Reply (automatically threads and sets In-Reply-To)
|
|
192
|
-
$GAPI gmail reply MESSAGE_ID --body "Thanks, that works for me."
|
|
193
|
-
$GAPI gmail reply MESSAGE_ID --from '"Support Bot" <user@example.com>' --body "Thanks"
|
|
194
|
-
|
|
195
|
-
# Labels
|
|
196
|
-
$GAPI gmail labels
|
|
197
|
-
$GAPI gmail modify MESSAGE_ID --add-labels LABEL_ID
|
|
198
|
-
$GAPI gmail modify MESSAGE_ID --remove-labels UNREAD
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### Calendar
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
# List events (defaults to next 7 days)
|
|
205
|
-
$GAPI calendar list
|
|
206
|
-
$GAPI calendar list --start 2026-03-01T00:00:00Z --end 2026-03-07T23:59:59Z
|
|
207
|
-
|
|
208
|
-
# Create event (ISO 8601 with timezone required)
|
|
209
|
-
$GAPI calendar create --summary "Team Standup" --start 2026-03-01T10:00:00-06:00 --end 2026-03-01T10:30:00-06:00
|
|
210
|
-
$GAPI calendar create --summary "Lunch" --start 2026-03-01T12:00:00Z --end 2026-03-01T13:00:00Z --location "Cafe"
|
|
211
|
-
$GAPI calendar create --summary "Review" --start 2026-03-01T14:00:00Z --end 2026-03-01T15:00:00Z --attendees "alice@co.com,bob@co.com"
|
|
212
|
-
|
|
213
|
-
# Delete event
|
|
214
|
-
$GAPI calendar delete EVENT_ID
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
### Drive
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
# Search existing files
|
|
221
|
-
$GAPI drive search "quarterly report" --max 10
|
|
222
|
-
$GAPI drive search "mimeType='application/pdf'" --raw-query --max 5
|
|
223
|
-
|
|
224
|
-
# Get metadata for a single file
|
|
225
|
-
$GAPI drive get FILE_ID
|
|
226
|
-
|
|
227
|
-
# Upload a local file (auto-detects MIME type)
|
|
228
|
-
$GAPI drive upload /path/to/report.pdf
|
|
229
|
-
$GAPI drive upload /path/to/image.png --name "Logo.png" --parent FOLDER_ID
|
|
230
|
-
|
|
231
|
-
# Download (binary files download as-is; Google-native files export to a
|
|
232
|
-
# sensible default — Docs→pdf, Sheets→csv, Slides→pdf, Drawings→png)
|
|
233
|
-
$GAPI drive download FILE_ID
|
|
234
|
-
$GAPI drive download DOC_ID --output ~/doc.pdf
|
|
235
|
-
$GAPI drive download DOC_ID --export-mime text/plain --output ~/doc.txt
|
|
236
|
-
|
|
237
|
-
# Create a folder
|
|
238
|
-
$GAPI drive create-folder "Reports"
|
|
239
|
-
$GAPI drive create-folder "Q4" --parent FOLDER_ID
|
|
240
|
-
|
|
241
|
-
# Share
|
|
242
|
-
$GAPI drive share FILE_ID --email alice@example.com --role reader
|
|
243
|
-
$GAPI drive share FILE_ID --email alice@example.com --role writer --notify
|
|
244
|
-
$GAPI drive share FILE_ID --type anyone --role reader # anyone with link
|
|
245
|
-
$GAPI drive share FILE_ID --type domain --domain example.com --role reader
|
|
246
|
-
|
|
247
|
-
# Delete — defaults to trash (reversible). Use --permanent to skip the trash.
|
|
248
|
-
$GAPI drive delete FILE_ID
|
|
249
|
-
$GAPI drive delete FILE_ID --permanent
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
### Contacts
|
|
253
|
-
|
|
254
|
-
```bash
|
|
255
|
-
$GAPI contacts list --max 20
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
### Sheets
|
|
259
|
-
|
|
260
|
-
```bash
|
|
261
|
-
# Create a new spreadsheet
|
|
262
|
-
$GAPI sheets create --title "Q4 Budget"
|
|
263
|
-
$GAPI sheets create --title "Inventory" --sheet-name "Stock"
|
|
264
|
-
|
|
265
|
-
# Read
|
|
266
|
-
$GAPI sheets get SHEET_ID "Sheet1!A1:D10"
|
|
267
|
-
|
|
268
|
-
# Write
|
|
269
|
-
$GAPI sheets update SHEET_ID "Sheet1!A1:B2" --values '[["Name","Score"],["Alice","95"]]'
|
|
270
|
-
|
|
271
|
-
# Append rows
|
|
272
|
-
$GAPI sheets append SHEET_ID "Sheet1!A:C" --values '[["new","row","data"]]'
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### Docs
|
|
276
|
-
|
|
277
|
-
```bash
|
|
278
|
-
# Read
|
|
279
|
-
$GAPI docs get DOC_ID
|
|
280
|
-
|
|
281
|
-
# Create a new Doc (optionally seeded with body text)
|
|
282
|
-
$GAPI docs create --title "Meeting Notes"
|
|
283
|
-
$GAPI docs create --title "Draft" --body "First paragraph..."
|
|
284
|
-
|
|
285
|
-
# Append text to the end of an existing Doc
|
|
286
|
-
$GAPI docs append DOC_ID --text "Additional content to append"
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
## Output Format
|
|
290
|
-
|
|
291
|
-
All commands return JSON. Parse with `jq` or read directly. Key fields:
|
|
292
|
-
|
|
293
|
-
- **Gmail search**: `[{id, threadId, from, to, subject, date, snippet, labels}]`
|
|
294
|
-
- **Gmail get**: `{id, threadId, from, to, subject, date, labels, body}`
|
|
295
|
-
- **Gmail send/reply**: `{status: "sent", id, threadId}`
|
|
296
|
-
- **Calendar list**: `[{id, summary, start, end, location, description, htmlLink}]`
|
|
297
|
-
- **Calendar create**: `{status: "created", id, summary, htmlLink}`
|
|
298
|
-
- **Drive search**: `[{id, name, mimeType, modifiedTime, webViewLink}]`
|
|
299
|
-
- **Drive get**: `{id, name, mimeType, modifiedTime, size, webViewLink, parents, owners}`
|
|
300
|
-
- **Drive upload**: `{status: "uploaded", id, name, mimeType, webViewLink}`
|
|
301
|
-
- **Drive download**: `{status: "downloaded", id, name, path, mimeType}`
|
|
302
|
-
- **Drive create-folder**: `{status: "created", id, name, webViewLink}`
|
|
303
|
-
- **Drive share**: `{status: "shared", permissionId, fileId, role, type}`
|
|
304
|
-
- **Drive delete**: `{status: "trashed" | "deleted", fileId, permanent}`
|
|
305
|
-
- **Contacts list**: `[{name, emails: [...], phones: [...]}]`
|
|
306
|
-
- **Sheets get**: `[[cell, cell, ...], ...]`
|
|
307
|
-
- **Sheets create**: `{status: "created", spreadsheetId, title, spreadsheetUrl}`
|
|
308
|
-
- **Docs create**: `{status: "created", documentId, title, url}`
|
|
309
|
-
- **Docs append**: `{status: "appended", documentId, inserted_at, characters}`
|
|
310
|
-
|
|
311
|
-
## Rules
|
|
312
|
-
|
|
313
|
-
1. **Never send email, create/delete calendar events, delete Drive files, share files, or modify Docs/Sheets without confirming with the user first.** Show what will be done (recipients, file IDs, content, share role) and ask for approval. For `drive delete`, prefer the default trash (reversible) over `--permanent`.
|
|
314
|
-
2. **Check auth before first use** — run `setup.py --check`. If it fails, guide the user through setup.
|
|
315
|
-
3. **Use the Gmail search syntax reference** for complex queries — load it with `skill_view("google-workspace", file_path="references/gmail-search-syntax.md")`.
|
|
316
|
-
4. **Calendar times must include timezone** — always use ISO 8601 with offset (e.g., `2026-03-01T10:00:00-06:00`) or UTC (`Z`).
|
|
317
|
-
5. **Respect rate limits** — avoid rapid-fire sequential API calls. Batch reads when possible.
|
|
318
|
-
|
|
319
|
-
## Troubleshooting
|
|
320
|
-
|
|
321
|
-
| Problem | Fix |
|
|
322
|
-
|---------|-----|
|
|
323
|
-
| `NOT_AUTHENTICATED` | Run setup Steps 2-5 above |
|
|
324
|
-
| `REFRESH_FAILED` | Token revoked or expired — redo Steps 3-5 |
|
|
325
|
-
| `HttpError 403: Insufficient Permission` | Missing API scope — `$GSETUP --revoke` then redo Steps 3-5 |
|
|
326
|
-
| `AUTHENTICATED (partial)` or "Token missing scopes" | New write capabilities (Drive write/delete, Docs create/edit) require re-authorization. `$GSETUP --revoke` then redo Steps 3-5 to grant the upgraded scopes. |
|
|
327
|
-
| `HttpError 403: Access Not Configured` | API not enabled — user needs to enable it in Google Cloud Console |
|
|
328
|
-
| `ModuleNotFoundError` | Run `$GSETUP --install-deps` |
|
|
329
|
-
| Advanced Protection blocks auth | Workspace admin must allowlist the OAuth client ID |
|
|
330
|
-
|
|
331
|
-
## Revoking Access
|
|
332
|
-
|
|
333
|
-
```bash
|
|
334
|
-
$GSETUP --revoke
|
|
335
|
-
```
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# Gmail Search Syntax
|
|
2
|
-
|
|
3
|
-
Standard Gmail search operators work in the `query` argument.
|
|
4
|
-
|
|
5
|
-
## Common Operators
|
|
6
|
-
|
|
7
|
-
| Operator | Example | Description |
|
|
8
|
-
|----------|---------|-------------|
|
|
9
|
-
| `is:unread` | `is:unread` | Unread messages |
|
|
10
|
-
| `is:starred` | `is:starred` | Starred messages |
|
|
11
|
-
| `is:important` | `is:important` | Important messages |
|
|
12
|
-
| `in:inbox` | `in:inbox` | Inbox only |
|
|
13
|
-
| `in:sent` | `in:sent` | Sent folder |
|
|
14
|
-
| `in:drafts` | `in:drafts` | Drafts |
|
|
15
|
-
| `in:trash` | `in:trash` | Trash |
|
|
16
|
-
| `in:anywhere` | `in:anywhere` | All mail including spam/trash |
|
|
17
|
-
| `from:` | `from:alice@example.com` | Sender |
|
|
18
|
-
| `to:` | `to:bob@example.com` | Recipient |
|
|
19
|
-
| `cc:` | `cc:team@example.com` | CC recipient |
|
|
20
|
-
| `subject:` | `subject:invoice` | Subject contains |
|
|
21
|
-
| `label:` | `label:work` | Has label |
|
|
22
|
-
| `has:attachment` | `has:attachment` | Has attachments |
|
|
23
|
-
| `filename:` | `filename:pdf` | Attachment filename/type |
|
|
24
|
-
| `larger:` | `larger:5M` | Larger than size |
|
|
25
|
-
| `smaller:` | `smaller:1M` | Smaller than size |
|
|
26
|
-
|
|
27
|
-
## Date Operators
|
|
28
|
-
|
|
29
|
-
| Operator | Example | Description |
|
|
30
|
-
|----------|---------|-------------|
|
|
31
|
-
| `newer_than:` | `newer_than:7d` | Within last N days (d), months (m), years (y) |
|
|
32
|
-
| `older_than:` | `older_than:30d` | Older than N days/months/years |
|
|
33
|
-
| `after:` | `after:2026/02/01` | After date (YYYY/MM/DD) |
|
|
34
|
-
| `before:` | `before:2026/03/01` | Before date |
|
|
35
|
-
|
|
36
|
-
## Combining
|
|
37
|
-
|
|
38
|
-
| Syntax | Example | Description |
|
|
39
|
-
|--------|---------|-------------|
|
|
40
|
-
| space | `from:alice subject:meeting` | AND (implicit) |
|
|
41
|
-
| `OR` | `from:alice OR from:bob` | OR |
|
|
42
|
-
| `-` | `-from:noreply@` | NOT (exclude) |
|
|
43
|
-
| `()` | `(from:alice OR from:bob) subject:meeting` | Grouping |
|
|
44
|
-
| `""` | `"exact phrase"` | Exact phrase match |
|
|
45
|
-
|
|
46
|
-
## Common Patterns
|
|
47
|
-
|
|
48
|
-
```
|
|
49
|
-
# Unread emails from the last day
|
|
50
|
-
is:unread newer_than:1d
|
|
51
|
-
|
|
52
|
-
# Emails with PDF attachments from a specific sender
|
|
53
|
-
from:accounting@company.com has:attachment filename:pdf
|
|
54
|
-
|
|
55
|
-
# Important unread emails (not promotions/social)
|
|
56
|
-
is:unread -category:promotions -category:social
|
|
57
|
-
|
|
58
|
-
# Emails in a thread about a topic
|
|
59
|
-
subject:"Q4 budget" newer_than:30d
|
|
60
|
-
|
|
61
|
-
# Large attachments to clean up
|
|
62
|
-
has:attachment larger:10M older_than:90d
|
|
63
|
-
```
|