@olives/devos 2.1.0
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/.agents/AGENTS.md +316 -0
- package/.agents/README.md +55 -0
- package/.agents/agents/architect.md +18 -0
- package/.agents/agents/dba.md +25 -0
- package/.agents/agents/developer.md +40 -0
- package/.agents/agents/devops.md +18 -0
- package/.agents/agents/memory-manager.md +38 -0
- package/.agents/agents/orchestrator.md +92 -0
- package/.agents/agents/qa.md +53 -0
- package/.agents/agents/release-manager.md +41 -0
- package/.agents/agents/researcher.md +19 -0
- package/.agents/agents/security.md +27 -0
- package/.agents/agents/tester.md +21 -0
- package/.agents/commands/README.md +42 -0
- package/.agents/commands/architect.md +16 -0
- package/.agents/commands/commit.md +15 -0
- package/.agents/commands/deploy.md +18 -0
- package/.agents/commands/fix.md +19 -0
- package/.agents/commands/refactor.md +19 -0
- package/.agents/commands/research.md +19 -0
- package/.agents/commands/review.md +21 -0
- package/.agents/commands/secure.md +23 -0
- package/.agents/commands/status.md +16 -0
- package/.agents/commands/test.md +16 -0
- package/.agents/scripts/commit.sh +73 -0
- package/.agents/scripts/install-hooks.sh +72 -0
- package/.agents/skills/agent-browser/SKILL.md +50 -0
- package/.agents/skills/agent-development/SKILL.md +415 -0
- package/.agents/skills/agent-development/examples/agent-creation-prompt.md +238 -0
- package/.agents/skills/agent-development/examples/complete-agent-examples.md +427 -0
- package/.agents/skills/agent-development/references/agent-creation-system-prompt.md +207 -0
- package/.agents/skills/agent-development/references/system-prompt-design.md +411 -0
- package/.agents/skills/agent-development/references/triggering-examples.md +491 -0
- package/.agents/skills/agent-development/scripts/validate-agent.sh +217 -0
- package/.agents/skills/backend-dev-guidelines/SKILL.md +352 -0
- package/.agents/skills/backend-dev-guidelines/resources/architecture-overview.md +451 -0
- package/.agents/skills/backend-dev-guidelines/resources/async-and-errors.md +307 -0
- package/.agents/skills/backend-dev-guidelines/resources/complete-examples.md +638 -0
- package/.agents/skills/backend-dev-guidelines/resources/configuration.md +275 -0
- package/.agents/skills/backend-dev-guidelines/resources/database-patterns.md +224 -0
- package/.agents/skills/backend-dev-guidelines/resources/middleware-guide.md +213 -0
- package/.agents/skills/backend-dev-guidelines/resources/routing-and-controllers.md +756 -0
- package/.agents/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +336 -0
- package/.agents/skills/backend-dev-guidelines/resources/services-and-repositories.md +789 -0
- package/.agents/skills/backend-dev-guidelines/resources/testing-guide.md +235 -0
- package/.agents/skills/backend-dev-guidelines/resources/validation-patterns.md +754 -0
- package/.agents/skills/backend-development/SKILL.md +156 -0
- package/.agents/skills/backend-patterns/SKILL.md +562 -0
- package/.agents/skills/brainstorming/SKILL.md +159 -0
- package/.agents/skills/brainstorming/scripts/frame-template.html +213 -0
- package/.agents/skills/brainstorming/scripts/helper.js +167 -0
- package/.agents/skills/brainstorming/scripts/server.cjs +723 -0
- package/.agents/skills/brainstorming/scripts/start-server.sh +209 -0
- package/.agents/skills/brainstorming/scripts/stop-server.sh +120 -0
- package/.agents/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/.agents/skills/brainstorming/visual-companion.md +291 -0
- package/.agents/skills/code-reviewer/SKILL.md +65 -0
- package/.agents/skills/content-strategy/SKILL.md +365 -0
- package/.agents/skills/content-strategy/evals/evals.json +90 -0
- package/.agents/skills/content-strategy/references/headless-cms.md +194 -0
- package/.agents/skills/deploy-to-vercel/SKILL.md +296 -0
- package/.agents/skills/deploy-to-vercel/resources/deploy-codex.sh +301 -0
- package/.agents/skills/deploy-to-vercel/resources/deploy.sh +301 -0
- package/.agents/skills/deployment-checklist/SKILL.md +119 -0
- package/.agents/skills/design/SKILL.md +170 -0
- package/.agents/skills/design-an-interface/SKILL.md +94 -0
- package/.agents/skills/expose-localhost/SKILL.md +211 -0
- package/.agents/skills/expose-localhost/references/TROUBLESHOOTING.md +27 -0
- package/.agents/skills/find-skills/SKILL.md +142 -0
- package/.agents/skills/frontend-ui-engineering/SKILL.md +328 -0
- package/.agents/skills/git-commit/SKILL.md +124 -0
- package/.agents/skills/git-ops/SKILL.md +53 -0
- package/.agents/skills/git-workflow/SKILL.md +167 -0
- package/.agents/skills/google-agents-cli-adk-code/SKILL.md +72 -0
- package/.agents/skills/google-agents-cli-adk-code/references/adk-python.md +937 -0
- package/.agents/skills/google-agents-cli-adk-code/references/adk-workflows.md +507 -0
- package/.agents/skills/google-agents-cli-workflow/SKILL.md +310 -0
- package/.agents/skills/google-agents-cli-workflow/references/commands.md +12 -0
- package/.agents/skills/google-agents-cli-workflow/references/internals.md +24 -0
- package/.agents/skills/google-agents-cli-workflow/references/samples.md +59 -0
- package/.agents/skills/google-agents-cli-workflow/references/spec-template.md +25 -0
- package/.agents/skills/google-agents-cli-workflow/references/terminology.md +11 -0
- package/.agents/skills/grill-me/SKILL.md +47 -0
- package/.agents/skills/grill-with-docs/SKILL.md +7 -0
- package/.agents/skills/human-checkpoint/SKILL.md +21 -0
- package/.agents/skills/image/SKILL.md +340 -0
- package/.agents/skills/image/evals/evals.json +89 -0
- package/.agents/skills/image/references/ai-image-prompting.md +229 -0
- package/.agents/skills/image-generation/SKILL.md +374 -0
- package/.agents/skills/imagegen/LICENSE.txt +201 -0
- package/.agents/skills/imagegen/SKILL.md +279 -0
- package/.agents/skills/imagegen/agents/openai.yaml +6 -0
- package/.agents/skills/imagegen/assets/imagegen-small.svg +5 -0
- package/.agents/skills/imagegen/assets/imagegen.png +0 -0
- package/.agents/skills/imagegen/references/cli.md +160 -0
- package/.agents/skills/imagegen/references/codex-network.md +33 -0
- package/.agents/skills/imagegen/references/image-api.md +49 -0
- package/.agents/skills/imagegen/references/prompting.md +98 -0
- package/.agents/skills/imagegen/references/sample-prompts.md +376 -0
- package/.agents/skills/imagegen/scripts/image_gen.py +926 -0
- package/.agents/skills/imagegen-frontend-web/SKILL.md +987 -0
- package/.agents/skills/laravel-security/SKILL.md +948 -0
- package/.agents/skills/laravel-specialist/SKILL.md +264 -0
- package/.agents/skills/laravel-specialist/references/eloquent.md +351 -0
- package/.agents/skills/laravel-specialist/references/livewire.md +512 -0
- package/.agents/skills/laravel-specialist/references/queues.md +423 -0
- package/.agents/skills/laravel-specialist/references/routing.md +362 -0
- package/.agents/skills/laravel-specialist/references/testing.md +522 -0
- package/.agents/skills/laravel-tdd/SKILL.md +675 -0
- package/.agents/skills/laravel-verification/SKILL.md +180 -0
- package/.agents/skills/modern-web-guidance/SKILL.md +114 -0
- package/.agents/skills/modern-web-guidance/guides/accessibility/accessibility.md +463 -0
- package/.agents/skills/modern-web-guidance/guides/accessibility/accessible-error-announcement.md +207 -0
- package/.agents/skills/modern-web-guidance/guides/built-in-ai/language-detection.md +89 -0
- package/.agents/skills/modern-web-guidance/guides/built-in-ai/language-model.md +189 -0
- package/.agents/skills/modern-web-guidance/guides/built-in-ai/prompt-api.md +189 -0
- package/.agents/skills/modern-web-guidance/guides/built-in-ai/summarizer.md +154 -0
- package/.agents/skills/modern-web-guidance/guides/built-in-ai/translator.md +162 -0
- package/.agents/skills/modern-web-guidance/guides/css/css.md +527 -0
- package/.agents/skills/modern-web-guidance/guides/css/highlight-text-ranges.md +128 -0
- package/.agents/skills/modern-web-guidance/guides/css-layout/css-layout.md +305 -0
- package/.agents/skills/modern-web-guidance/guides/forms/animated-select-picker.md +178 -0
- package/.agents/skills/modern-web-guidance/guides/forms/autofill-address-form.md +75 -0
- package/.agents/skills/modern-web-guidance/guides/forms/autofill-highlight-inputs.md +45 -0
- package/.agents/skills/modern-web-guidance/guides/forms/autofill-payment-form.md +125 -0
- package/.agents/skills/modern-web-guidance/guides/forms/autofill-sign-in-form.md +135 -0
- package/.agents/skills/modern-web-guidance/guides/forms/autofill-sign-up-form.md +145 -0
- package/.agents/skills/modern-web-guidance/guides/forms/brand-consistent-forms.md +255 -0
- package/.agents/skills/modern-web-guidance/guides/forms/branded-select-styling.md +114 -0
- package/.agents/skills/modern-web-guidance/guides/forms/custom-select-picker-layouts.md +103 -0
- package/.agents/skills/modern-web-guidance/guides/forms/form-fields-automatically-fit-contents.md +121 -0
- package/.agents/skills/modern-web-guidance/guides/forms/forms.md +372 -0
- package/.agents/skills/modern-web-guidance/guides/forms/required-field-feedback.md +214 -0
- package/.agents/skills/modern-web-guidance/guides/forms/rich-media-picker.md +132 -0
- package/.agents/skills/modern-web-guidance/guides/forms/select-menu-interaction.md +180 -0
- package/.agents/skills/modern-web-guidance/guides/forms/validate-input-after-interaction.md +258 -0
- package/.agents/skills/modern-web-guidance/guides/html/html.md +407 -0
- package/.agents/skills/modern-web-guidance/guides/passkeys/passkey-authentication.md +205 -0
- package/.agents/skills/modern-web-guidance/guides/passkeys/passkey-conditional-create.md +134 -0
- package/.agents/skills/modern-web-guidance/guides/passkeys/passkey-management.md +211 -0
- package/.agents/skills/modern-web-guidance/guides/passkeys/passkey-reauthentication.md +128 -0
- package/.agents/skills/modern-web-guidance/guides/passkeys/passkey-registration.md +181 -0
- package/.agents/skills/modern-web-guidance/guides/passkeys/passkeys.md +38 -0
- package/.agents/skills/modern-web-guidance/guides/performance/batch-analytics-events.md +154 -0
- package/.agents/skills/modern-web-guidance/guides/performance/break-up-long-tasks.md +60 -0
- package/.agents/skills/modern-web-guidance/guides/performance/calculate-total-foreground-time.md +69 -0
- package/.agents/skills/modern-web-guidance/guides/performance/conditional-async-dependencies.md +71 -0
- package/.agents/skills/modern-web-guidance/guides/performance/defer-rendering-heavy-content.md +106 -0
- package/.agents/skills/modern-web-guidance/guides/performance/defer-work-until-scroll-ends.md +78 -0
- package/.agents/skills/modern-web-guidance/guides/performance/deprioritize-background-fetches.md +37 -0
- package/.agents/skills/modern-web-guidance/guides/performance/detect-initial-visibility-state.md +99 -0
- package/.agents/skills/modern-web-guidance/guides/performance/efficient-background-processing.md +117 -0
- package/.agents/skills/modern-web-guidance/guides/performance/faster-spa-view-transitions.md +79 -0
- package/.agents/skills/modern-web-guidance/guides/performance/full-session-analytics.md +135 -0
- package/.agents/skills/modern-web-guidance/guides/performance/identify-heavy-scripts.md +69 -0
- package/.agents/skills/modern-web-guidance/guides/performance/identify-inp-causes.md +73 -0
- package/.agents/skills/modern-web-guidance/guides/performance/improve-next-page-load-performance.md +119 -0
- package/.agents/skills/modern-web-guidance/guides/performance/interactions-in-complex-layouts.md +78 -0
- package/.agents/skills/modern-web-guidance/guides/performance/optimize-image-priority.md +61 -0
- package/.agents/skills/modern-web-guidance/guides/performance/optimize-preload-priority.md +41 -0
- package/.agents/skills/modern-web-guidance/guides/performance/optimize-script-priority.md +38 -0
- package/.agents/skills/modern-web-guidance/guides/performance/performance.md +366 -0
- package/.agents/skills/modern-web-guidance/guides/performance/resolution-optimized-pseudo-elements.md +47 -0
- package/.agents/skills/modern-web-guidance/guides/performance/schedule-tasks-by-priority.md +59 -0
- package/.agents/skills/modern-web-guidance/guides/performance/sequence-distributed-events.md +76 -0
- package/.agents/skills/modern-web-guidance/guides/privacy/privacy.md +247 -0
- package/.agents/skills/modern-web-guidance/guides/security/security.md +350 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/adapt-scrollbar-to-contrast-preferences.md +74 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/anchor-positioning-tab-underline.md +95 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/animate-element-entry-exit.md +131 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/animate-to-from-top-layer.md +140 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/animate-to-intrinsic-sizes.md +127 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/apply-webgl-shaders.md +239 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/calculate-event-differentials.md +85 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/calculate-with-intrinsic-sizes.md +196 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/capture-location-agnostic-data.md +63 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/carousel-slide-effects.md +187 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/carousel-snap-highlights.md +136 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/child-state-based-styling.md +101 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/complex-shapes.md +73 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/component-specific-light-dark-theme.md +179 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/consistent-cross-document-transitions.md +226 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/content-based-styling.md +118 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/coordinate-global-events.md +79 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/cross-document-transitions.md +127 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/custom-button-actions.md +173 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/customize-scrollbar-color-and-thickness.md +59 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/dark-mode.md +295 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/declarative-dialog-popover-control.md +238 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/deliver-optimized-decorative-images.md +49 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/design-token-reactivity.md +174 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/directional-navigation-transitions.md +125 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/dynamic-sibling-animations.md +54 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/dynamic-sibling-styling.md +98 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/export-html-media-from-canvas.md +256 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/expose-canvas-content-to-browser-features.md +401 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/flicker-free-client-side-ab-testing.md +168 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/fluid-scaling.md +78 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/format-human-readable-durations.md +87 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/group-element-transitions.md +124 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/improve-text-layout-and-legibility.md +76 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/individual-transform-properties.md +92 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/interactive-content-in-3d-scenes.md +383 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/interactive-content-reveal.md +118 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/interest-triggered-action-previews.md +79 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/interest-triggered-tooltips.md +132 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/light-dismiss-a-dialog.md +84 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/manage-recurring-intervals.md +73 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/model-partial-time-concepts.md +96 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/move-dom-element-without-losing-state.md +57 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/navigation-drawer.md +357 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/overflow-clipping-control.md +180 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/parallax-scroll-effects.md +230 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/persistent-app-tours.md +112 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/persistent-toast-notifications.md +30 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/persistent-top-layer-ui.md +48 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/physics-based-easing.md +118 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/platform-controls-dismiss-dialog.md +38 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/position-aware-tooltips.md +154 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/precise-text-alignment.md +99 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/prevent-text-wrapping.md +62 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/pull-to-reveal.md +83 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/reduce-style-repetition.md +87 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/resilient-context-menus-and-nested-dropdowns.md +102 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/same-document-transitions.md +177 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/scroll-entry-exit-effects.md +173 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/scroll-position-aware-elements.md +128 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/scroll-progress-indicator.md +133 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/scroll-snap-realtime-feedback.md +153 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/scroll-snap-state-sync.md +93 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/scroll-target-on-load.md +56 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/scrollability-affordance-hints.md +124 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/scrollytelling.md +181 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/search-hidden-content.md +136 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/shaped-cutouts.md +146 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/shrinking-header-on-scroll.md +126 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/size-aware-styling.md +104 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/soft-edge-content-fade.md +62 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/stabilize-reactive-state.md +72 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/stack-drill-down.md +680 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/style-parent-with-has.md +199 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/support-global-calendar-systems.md +107 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/swipe-to-remove.md +527 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/visually-stable-font-fallbacks.md +49 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/visually-stable-mixed-fonts.md +61 -0
- package/.agents/skills/modern-web-guidance/guides/user-experience/visually-texture-content.md +76 -0
- package/.agents/skills/modern-web-guidance/guides/webmcp/agentic-forms.md +116 -0
- package/.agents/skills/modern-web-guidance/guides/webmcp/agentic-javascript-tools.md +116 -0
- package/.agents/skills/modern-web-guidance/guides/webmcp/webmcp.md +43 -0
- package/.agents/skills/nextjs-app-router-patterns/SKILL.md +114 -0
- package/.agents/skills/nextjs-app-router-patterns/references/details.md +428 -0
- package/.agents/skills/nextjs-developer/SKILL.md +145 -0
- package/.agents/skills/nextjs-developer/references/app-router.md +311 -0
- package/.agents/skills/nextjs-developer/references/data-fetching.md +482 -0
- package/.agents/skills/nextjs-developer/references/deployment.md +545 -0
- package/.agents/skills/nextjs-developer/references/server-actions.md +462 -0
- package/.agents/skills/nextjs-developer/references/server-components.md +384 -0
- package/.agents/skills/nextjs-supabase-auth/SKILL.md +313 -0
- package/.agents/skills/nodejs-backend-patterns/SKILL.md +45 -0
- package/.agents/skills/nodejs-backend-patterns/references/advanced-patterns.md +430 -0
- package/.agents/skills/nodejs-backend-patterns/references/details.md +599 -0
- package/.agents/skills/performance-engineer/SKILL.md +181 -0
- package/.agents/skills/project-requirements/SKILL.md +43 -0
- package/.agents/skills/qa/SKILL.md +130 -0
- package/.agents/skills/security-review/LICENSE +22 -0
- package/.agents/skills/security-review/SKILL.md +312 -0
- package/.agents/skills/security-review/infrastructure/docker.md +432 -0
- package/.agents/skills/security-review/languages/javascript.md +387 -0
- package/.agents/skills/security-review/languages/python.md +363 -0
- package/.agents/skills/security-review/references/api-security.md +519 -0
- package/.agents/skills/security-review/references/authentication.md +353 -0
- package/.agents/skills/security-review/references/authorization.md +372 -0
- package/.agents/skills/security-review/references/business-logic.md +443 -0
- package/.agents/skills/security-review/references/cryptography.md +329 -0
- package/.agents/skills/security-review/references/csrf.md +398 -0
- package/.agents/skills/security-review/references/data-protection.md +378 -0
- package/.agents/skills/security-review/references/deserialization.md +410 -0
- package/.agents/skills/security-review/references/error-handling.md +436 -0
- package/.agents/skills/security-review/references/file-security.md +457 -0
- package/.agents/skills/security-review/references/injection.md +259 -0
- package/.agents/skills/security-review/references/logging.md +433 -0
- package/.agents/skills/security-review/references/misconfiguration.md +435 -0
- package/.agents/skills/security-review/references/modern-threats.md +475 -0
- package/.agents/skills/security-review/references/ssrf.md +413 -0
- package/.agents/skills/security-review/references/supply-chain.md +405 -0
- package/.agents/skills/security-review/references/xss.md +336 -0
- package/.agents/skills/seo-aeo-best-practices/SKILL.md +37 -0
- package/.agents/skills/seo-aeo-best-practices/references/aeo-considerations.md +159 -0
- package/.agents/skills/seo-aeo-best-practices/references/eeat-principles.md +127 -0
- package/.agents/skills/seo-aeo-best-practices/references/structured-data.md +183 -0
- package/.agents/skills/seo-aeo-best-practices/references/technical-seo.md +188 -0
- package/.agents/skills/seo-geo/.claude-plugin/plugin.json +29 -0
- package/.agents/skills/seo-geo/SKILL.md +250 -0
- package/.agents/skills/seo-geo/examples/opc-skills-case-study.md +330 -0
- package/.agents/skills/seo-geo/references/geo-research.md +319 -0
- package/.agents/skills/seo-geo/references/google-docs-summary.md +65 -0
- package/.agents/skills/seo-geo/references/platform-algorithms.md +354 -0
- package/.agents/skills/seo-geo/references/schema-templates.md +517 -0
- package/.agents/skills/seo-geo/references/seo-checklist.md +249 -0
- package/.agents/skills/seo-geo/references/tools-and-apis.md +313 -0
- package/.agents/skills/seo-geo/scripts/autocomplete_ideas.py +74 -0
- package/.agents/skills/seo-geo/scripts/backlinks.py +37 -0
- package/.agents/skills/seo-geo/scripts/competitor_gap.py +80 -0
- package/.agents/skills/seo-geo/scripts/credential.py +12 -0
- package/.agents/skills/seo-geo/scripts/dataforseo_api.py +104 -0
- package/.agents/skills/seo-geo/scripts/domain_overview.py +44 -0
- package/.agents/skills/seo-geo/scripts/keyword_research.py +38 -0
- package/.agents/skills/seo-geo/scripts/related_keywords.py +84 -0
- package/.agents/skills/seo-geo/scripts/seo_audit.py +151 -0
- package/.agents/skills/seo-geo/scripts/serp_analysis.py +41 -0
- package/.agents/skills/shadcn-ui/README.md +248 -0
- package/.agents/skills/shadcn-ui/SKILL.md +326 -0
- package/.agents/skills/shadcn-ui/examples/auth-layout.tsx +177 -0
- package/.agents/skills/shadcn-ui/examples/data-table.tsx +313 -0
- package/.agents/skills/shadcn-ui/examples/form-pattern.tsx +177 -0
- package/.agents/skills/shadcn-ui/resources/component-catalog.md +481 -0
- package/.agents/skills/shadcn-ui/resources/customization-guide.md +516 -0
- package/.agents/skills/shadcn-ui/resources/migration-guide.md +463 -0
- package/.agents/skills/shadcn-ui/resources/setup-guide.md +412 -0
- package/.agents/skills/shadcn-ui/scripts/verify-setup.sh +134 -0
- package/.agents/skills/skill-creator/LICENSE.txt +202 -0
- package/.agents/skills/skill-creator/SKILL.md +485 -0
- package/.agents/skills/skill-creator/agents/analyzer.md +274 -0
- package/.agents/skills/skill-creator/agents/comparator.md +202 -0
- package/.agents/skills/skill-creator/agents/grader.md +223 -0
- package/.agents/skills/skill-creator/assets/eval_review.html +146 -0
- package/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/.agents/skills/skill-creator/references/schemas.md +430 -0
- package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
- package/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
- package/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
- package/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
- package/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
- package/.agents/skills/skill-creator/scripts/utils.py +47 -0
- package/.agents/skills/stacks/SKILL.md +21 -0
- package/.agents/skills/stacks/django.md +187 -0
- package/.agents/skills/stacks/express.md +16 -0
- package/.agents/skills/stacks/fastapi.md +17 -0
- package/.agents/skills/stacks/laravel.md +18 -0
- package/.agents/skills/stacks/nextjs.md +20 -0
- package/.agents/skills/stacks/react-native.md +170 -0
- package/.agents/skills/supabase/CHANGELOG.md +35 -0
- package/.agents/skills/supabase/SKILL.md +135 -0
- package/.agents/skills/supabase/assets/feedback-issue-template.md +17 -0
- package/.agents/skills/supabase/references/skill-feedback.md +17 -0
- package/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +29 -0
- package/.agents/skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_template.md +34 -0
- package/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
- package/.agents/skills/task-contract/SKILL.md +29 -0
- package/.agents/skills/token-optimization/SKILL.md +40 -0
- package/.agents/skills/ui-designer/SKILL.md +76 -0
- package/.agents/skills/ui-ux-pro-max/SKILL.md +704 -0
- package/.agents/skills/ui-ux-pro-max/data/_sync_all.py +414 -0
- package/.agents/skills/ui-ux-pro-max/data/app-interface.csv +31 -0
- package/.agents/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/.agents/skills/ui-ux-pro-max/data/colors.csv +162 -0
- package/.agents/skills/ui-ux-pro-max/data/design.csv +1776 -0
- package/.agents/skills/ui-ux-pro-max/data/draft.csv +1779 -0
- package/.agents/skills/ui-ux-pro-max/data/google-fonts.csv +1924 -0
- package/.agents/skills/ui-ux-pro-max/data/icons.csv +106 -0
- package/.agents/skills/ui-ux-pro-max/data/landing.csv +35 -0
- package/.agents/skills/ui-ux-pro-max/data/motion.csv +17 -0
- package/.agents/skills/ui-ux-pro-max/data/products.csv +162 -0
- package/.agents/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/angular.csv +51 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/laravel.csv +51 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/threejs.csv +54 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.agents/skills/ui-ux-pro-max/data/styles.csv +85 -0
- package/.agents/skills/ui-ux-pro-max/data/typography.csv +74 -0
- package/.agents/skills/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
- package/.agents/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.agents/skills/ui-ux-pro-max/scripts/core.py +274 -0
- package/.agents/skills/ui-ux-pro-max/scripts/design_system.py +1329 -0
- package/.agents/skills/ui-ux-pro-max/scripts/search.py +127 -0
- package/.agents/skills/vercel-cli-with-tokens/SKILL.md +353 -0
- package/.agents/skills/vercel-composition-patterns/AGENTS.md +946 -0
- package/.agents/skills/vercel-composition-patterns/README.md +60 -0
- package/.agents/skills/vercel-composition-patterns/SKILL.md +89 -0
- package/.agents/skills/vercel-composition-patterns/metadata.json +11 -0
- package/.agents/skills/vercel-composition-patterns/rules/_sections.md +29 -0
- package/.agents/skills/vercel-composition-patterns/rules/_template.md +24 -0
- package/.agents/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/.agents/skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- package/.agents/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/.agents/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/.agents/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/.agents/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/.agents/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/.agents/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/.agents/skills/vercel-optimize/AGENTS.md +48 -0
- package/.agents/skills/vercel-optimize/CONTRIBUTING.md +41 -0
- package/.agents/skills/vercel-optimize/README.md +91 -0
- package/.agents/skills/vercel-optimize/SKILL.md +322 -0
- package/.agents/skills/vercel-optimize/lib/auth-route.mjs +23 -0
- package/.agents/skills/vercel-optimize/lib/budget-summary.mjs +182 -0
- package/.agents/skills/vercel-optimize/lib/citations.mjs +139 -0
- package/.agents/skills/vercel-optimize/lib/cost-coverage.mjs +143 -0
- package/.agents/skills/vercel-optimize/lib/dedup-recs.mjs +325 -0
- package/.agents/skills/vercel-optimize/lib/deep-dive.mjs +350 -0
- package/.agents/skills/vercel-optimize/lib/display-labels.mjs +185 -0
- package/.agents/skills/vercel-optimize/lib/extract-claims.mjs +550 -0
- package/.agents/skills/vercel-optimize/lib/framework-support.mjs +67 -0
- package/.agents/skills/vercel-optimize/lib/gates/build-minutes-fanout.mjs +69 -0
- package/.agents/skills/vercel-optimize/lib/gates/cold-start.mjs +66 -0
- package/.agents/skills/vercel-optimize/lib/gates/contract.mjs +79 -0
- package/.agents/skills/vercel-optimize/lib/gates/cwv-poor.mjs +87 -0
- package/.agents/skills/vercel-optimize/lib/gates/external-api-slow.mjs +55 -0
- package/.agents/skills/vercel-optimize/lib/gates/hard-gates.mjs +73 -0
- package/.agents/skills/vercel-optimize/lib/gates/index.mjs +45 -0
- package/.agents/skills/vercel-optimize/lib/gates/isr-overrevalidation.mjs +62 -0
- package/.agents/skills/vercel-optimize/lib/gates/middleware-heavy.mjs +51 -0
- package/.agents/skills/vercel-optimize/lib/gates/observability-events-attribution.mjs +56 -0
- package/.agents/skills/vercel-optimize/lib/gates/platform-bot-protection.mjs +115 -0
- package/.agents/skills/vercel-optimize/lib/gates/platform-fluid-compute.mjs +83 -0
- package/.agents/skills/vercel-optimize/lib/gates/region-misconfig.mjs +64 -0
- package/.agents/skills/vercel-optimize/lib/gates/route-errors.mjs +80 -0
- package/.agents/skills/vercel-optimize/lib/gates/scanner-driven.mjs +122 -0
- package/.agents/skills/vercel-optimize/lib/gates/select-candidates.mjs +134 -0
- package/.agents/skills/vercel-optimize/lib/gates/slow-route.mjs +88 -0
- package/.agents/skills/vercel-optimize/lib/gates/types.d.ts +38 -0
- package/.agents/skills/vercel-optimize/lib/gates/uncached-route.mjs +93 -0
- package/.agents/skills/vercel-optimize/lib/gates/usage-spike-triage.mjs +121 -0
- package/.agents/skills/vercel-optimize/lib/grade-recommendation.mjs +155 -0
- package/.agents/skills/vercel-optimize/lib/impact-label.mjs +126 -0
- package/.agents/skills/vercel-optimize/lib/impact-magnitude.mjs +60 -0
- package/.agents/skills/vercel-optimize/lib/investigation-brief.mjs +610 -0
- package/.agents/skills/vercel-optimize/lib/observation-safety.mjs +174 -0
- package/.agents/skills/vercel-optimize/lib/project-facts.mjs +99 -0
- package/.agents/skills/vercel-optimize/lib/queries.mjs +315 -0
- package/.agents/skills/vercel-optimize/lib/reconcile-candidates.mjs +372 -0
- package/.agents/skills/vercel-optimize/lib/render-report.mjs +955 -0
- package/.agents/skills/vercel-optimize/lib/repo-root.mjs +86 -0
- package/.agents/skills/vercel-optimize/lib/route-normalize.mjs +220 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/bot-protection-certainty.mjs +38 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/cache-tag-invalidation-certainty.mjs +30 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/count-correct.mjs +52 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/function-duration-invocations.mjs +38 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/index.mjs +79 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/middleware-conflict.mjs +36 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/missing-citation.mjs +16 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/pre-release.mjs +74 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/rate-limit.mjs +67 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/rendering-mode-mislabel.mjs +38 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/undeclared-dep.mjs +78 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/vercel-directive-strip.mjs +37 -0
- package/.agents/skills/vercel-optimize/lib/sanitizers/window-units.mjs +32 -0
- package/.agents/skills/vercel-optimize/lib/scanners/cache-components-suspense-dedupe.mjs +109 -0
- package/.agents/skills/vercel-optimize/lib/scanners/edge-heavy-import.mjs +94 -0
- package/.agents/skills/vercel-optimize/lib/scanners/force-dynamic.mjs +42 -0
- package/.agents/skills/vercel-optimize/lib/scanners/headers-in-page.mjs +44 -0
- package/.agents/skills/vercel-optimize/lib/scanners/index.mjs +35 -0
- package/.agents/skills/vercel-optimize/lib/scanners/large-static-asset.mjs +92 -0
- package/.agents/skills/vercel-optimize/lib/scanners/max-age-without-s-maxage.mjs +42 -0
- package/.agents/skills/vercel-optimize/lib/scanners/middleware-broad-matcher.mjs +55 -0
- package/.agents/skills/vercel-optimize/lib/scanners/missing-cache-headers.mjs +90 -0
- package/.agents/skills/vercel-optimize/lib/scanners/prisma-include-tree.mjs +42 -0
- package/.agents/skills/vercel-optimize/lib/scanners/region-pin-in-config.mjs +88 -0
- package/.agents/skills/vercel-optimize/lib/scanners/source-maps-production.mjs +36 -0
- package/.agents/skills/vercel-optimize/lib/scanners/sveltekit-prerender-missing.mjs +43 -0
- package/.agents/skills/vercel-optimize/lib/scanners/turbo-force-bypass.mjs +129 -0
- package/.agents/skills/vercel-optimize/lib/scanners/unoptimized-image.mjs +113 -0
- package/.agents/skills/vercel-optimize/lib/scanners/use-cache-date-stamp.mjs +106 -0
- package/.agents/skills/vercel-optimize/lib/support-topics.mjs +355 -0
- package/.agents/skills/vercel-optimize/lib/throttle.mjs +273 -0
- package/.agents/skills/vercel-optimize/lib/util.mjs +17 -0
- package/.agents/skills/vercel-optimize/lib/vercel.mjs +864 -0
- package/.agents/skills/vercel-optimize/lib/verify-claim.mjs +1296 -0
- package/.agents/skills/vercel-optimize/lib/workspace-resolver.mjs +521 -0
- package/.agents/skills/vercel-optimize/metadata.json +14 -0
- package/.agents/skills/vercel-optimize/references/candidates.md +176 -0
- package/.agents/skills/vercel-optimize/references/data-collection.md +218 -0
- package/.agents/skills/vercel-optimize/references/docs-library.json +683 -0
- package/.agents/skills/vercel-optimize/references/doctrine.md +105 -0
- package/.agents/skills/vercel-optimize/references/observability-plus.md +108 -0
- package/.agents/skills/vercel-optimize/references/playbooks/README.md +53 -0
- package/.agents/skills/vercel-optimize/references/playbooks/ai-application.md +32 -0
- package/.agents/skills/vercel-optimize/references/playbooks/api-service.md +30 -0
- package/.agents/skills/vercel-optimize/references/playbooks/content-site.md +30 -0
- package/.agents/skills/vercel-optimize/references/playbooks/ecommerce.md +30 -0
- package/.agents/skills/vercel-optimize/references/playbooks/marketing.md +30 -0
- package/.agents/skills/vercel-optimize/references/playbooks/saas.md +31 -0
- package/.agents/skills/vercel-optimize/references/playbooks/sveltekit.md +75 -0
- package/.agents/skills/vercel-optimize/references/recommendations.md +203 -0
- package/.agents/skills/vercel-optimize/references/scanner-patterns.md +251 -0
- package/.agents/skills/vercel-optimize/references/scoring.md +205 -0
- package/.agents/skills/vercel-optimize/references/support-topics/README.md +46 -0
- package/.agents/skills/vercel-optimize/references/support-topics/astro-edge-middleware-scope.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/astro-output-mode-and-isr.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/auth-preserving-parallelization.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/bot-protection-product-guardrails.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/build-minutes-monorepo-fanout.md +23 -0
- package/.agents/skills/vercel-optimize/references/support-topics/cache-components-static-shell-boundaries.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/cache-components-suspense-dedupe-pitfall.md +23 -0
- package/.agents/skills/vercel-optimize/references/support-topics/cdn-cache-auth-safety.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/cold-start-initialization-bundle.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/core-web-vitals-client-bottlenecks.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/database-egress-pooling-region.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/dynamic-rendering-traps.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/external-api-critical-path-platform.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/external-api-critical-path.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/fast-data-transfer-payloads.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/fluid-compute-caveats.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/function-duration-io-and-after.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/function-invocation-reduction.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/function-region-misconfiguration-ttfb.md +23 -0
- package/.agents/skills/vercel-optimize/references/support-topics/image-optimization-cost-control.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/isr-revalidation-static-generation.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/middleware-proxy-edge-cost.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/next-fetch-revalidate-floor.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/next-font-cls-self-hosting.md +23 -0
- package/.agents/skills/vercel-optimize/references/support-topics/next-heavy-ui-lazy-load-boundaries.md +23 -0
- package/.agents/skills/vercel-optimize/references/support-topics/next-image-lcp-preload-sizes.md +23 -0
- package/.agents/skills/vercel-optimize/references/support-topics/next-route-handler-get-cache-defaults.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/next-script-third-party-strategy.md +23 -0
- package/.agents/skills/vercel-optimize/references/support-topics/nextjs-version-cache-semantics.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/not-found-catchall-request-waste.md +23 -0
- package/.agents/skills/vercel-optimize/references/support-topics/nuxt-route-rules-cache-isr.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/observability-events-cost-attribution.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/post-response-work-waituntil.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/route-error-durable-offload.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/route-error-runtime-limits.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/runtime-cache-reusable-data.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/sveltekit-isr-prerender-safety.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/sveltekit-split-cold-start-tradeoff.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/usage-spike-triage.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/use-cache-date-stamp-isr-write-amplifier.md +23 -0
- package/.agents/skills/vercel-optimize/references/support-topics/use-cache-remote-shared-origin-data.md +22 -0
- package/.agents/skills/vercel-optimize/references/support-topics/workflow-resumable-stream-routes.md +23 -0
- package/.agents/skills/vercel-optimize/references/verification.md +102 -0
- package/.agents/skills/vercel-optimize/references/voice.md +76 -0
- package/.agents/skills/vercel-optimize/scripts/budget-summary.mjs +56 -0
- package/.agents/skills/vercel-optimize/scripts/build-docs.mjs +74 -0
- package/.agents/skills/vercel-optimize/scripts/check-citations.mjs +81 -0
- package/.agents/skills/vercel-optimize/scripts/check-docs-fresh.mjs +93 -0
- package/.agents/skills/vercel-optimize/scripts/collect-signals.mjs +576 -0
- package/.agents/skills/vercel-optimize/scripts/collect-sub-agent-outputs.mjs +296 -0
- package/.agents/skills/vercel-optimize/scripts/deep-dive.mjs +319 -0
- package/.agents/skills/vercel-optimize/scripts/gate-investigations.mjs +166 -0
- package/.agents/skills/vercel-optimize/scripts/merge-signals.mjs +192 -0
- package/.agents/skills/vercel-optimize/scripts/prepare-investigation-brief.mjs +231 -0
- package/.agents/skills/vercel-optimize/scripts/reconcile-candidates.mjs +62 -0
- package/.agents/skills/vercel-optimize/scripts/render-report.mjs +437 -0
- package/.agents/skills/vercel-optimize/scripts/scan-codebase.mjs +313 -0
- package/.agents/skills/vercel-optimize/scripts/verify-and-regen.mjs +346 -0
- package/.agents/skills/vercel-optimize/scripts/verify-finding.mjs +19 -0
- package/.agents/skills/vercel-react-best-practices/AGENTS.md +3810 -0
- package/.agents/skills/vercel-react-best-practices/README.md +123 -0
- package/.agents/skills/vercel-react-best-practices/SKILL.md +149 -0
- package/.agents/skills/vercel-react-best-practices/metadata.json +15 -0
- package/.agents/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/.agents/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/.agents/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/.agents/skills/vercel-react-native-skills/AGENTS.md +2897 -0
- package/.agents/skills/vercel-react-native-skills/README.md +165 -0
- package/.agents/skills/vercel-react-native-skills/SKILL.md +121 -0
- package/.agents/skills/vercel-react-native-skills/metadata.json +16 -0
- package/.agents/skills/vercel-react-native-skills/rules/_sections.md +86 -0
- package/.agents/skills/vercel-react-native-skills/rules/_template.md +28 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-derived-value.md +53 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-gesture-detector-press.md +95 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-gpu-properties.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/design-system-compound-components.md +66 -0
- package/.agents/skills/vercel-react-native-skills/rules/fonts-config-plugin.md +71 -0
- package/.agents/skills/vercel-react-native-skills/rules/imports-design-system-folder.md +68 -0
- package/.agents/skills/vercel-react-native-skills/rules/js-hoist-intl.md +61 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-callbacks.md +44 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-function-references.md +132 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-images.md +53 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-inline-objects.md +97 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-expensive.md +94 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-memo.md +82 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-types.md +104 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-virtualize.md +67 -0
- package/.agents/skills/vercel-react-native-skills/rules/monorepo-native-deps-in-app.md +46 -0
- package/.agents/skills/vercel-react-native-skills/rules/monorepo-single-dependency-versions.md +63 -0
- package/.agents/skills/vercel-react-native-skills/rules/navigation-native-navigators.md +188 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-compiler-destructure-functions.md +50 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-compiler-reanimated-shared-values.md +48 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-dispatcher.md +91 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-fallback.md +56 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-minimize.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/rendering-no-falsy-and.md +74 -0
- package/.agents/skills/vercel-react-native-skills/rules/rendering-text-in-text-component.md +36 -0
- package/.agents/skills/vercel-react-native-skills/rules/scroll-position-no-state.md +82 -0
- package/.agents/skills/vercel-react-native-skills/rules/state-ground-truth.md +80 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-expo-image.md +66 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-image-gallery.md +104 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-measure-views.md +78 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-menus.md +174 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-native-modals.md +77 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-pressable.md +61 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-safe-area-scroll.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-scrollview-content-inset.md +45 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-styling.md +87 -0
- package/.agents/skills/vercel-react-view-transitions/AGENTS.md +955 -0
- package/.agents/skills/vercel-react-view-transitions/README.md +42 -0
- package/.agents/skills/vercel-react-view-transitions/SKILL.md +320 -0
- package/.agents/skills/vercel-react-view-transitions/metadata.json +12 -0
- package/.agents/skills/vercel-react-view-transitions/references/css-recipes.md +242 -0
- package/.agents/skills/vercel-react-view-transitions/references/implementation.md +182 -0
- package/.agents/skills/vercel-react-view-transitions/references/nextjs.md +176 -0
- package/.agents/skills/vercel-react-view-transitions/references/patterns.md +262 -0
- package/.agents/skills/web-design-guidelines/SKILL.md +39 -0
- package/.agents/skills/workflow-metrics/SKILL.md +18 -0
- package/.agents/skills/writing-guidelines/SKILL.md +39 -0
- package/CODING_STANDARDS.md +49 -0
- package/LICENSE +21 -0
- package/README.md +556 -0
- package/VERSION +1 -0
- package/bin/devos.js +893 -0
- package/docs/.gitkeep +0 -0
- package/docs/ARCHITECTURE.md +114 -0
- package/docs/CHANGELOG.md +61 -0
- package/docs/CURRENT_STATE.md +39 -0
- package/docs/FIELD_REPORT_2026-08-20.md +130 -0
- package/docs/GETTING_STARTED.md +130 -0
- package/docs/LESSONS.md +24 -0
- package/docs/PRE_COMMIT_HOOK.md +152 -0
- package/docs/SLASH_COMMANDS.md +116 -0
- package/docs/TUTORIAL.md +75 -0
- package/package.json +54 -0
- package/scripts/smoke-test.js +167 -0
|
@@ -0,0 +1,937 @@
|
|
|
1
|
+
# ADK Python Cheatsheet
|
|
2
|
+
|
|
3
|
+
## 1. Core Concepts & Project Structure
|
|
4
|
+
|
|
5
|
+
### Essential Primitives
|
|
6
|
+
|
|
7
|
+
* **`Agent`**: The core intelligent unit. Can be `LlmAgent` (LLM-driven) or `BaseAgent` (custom/workflow).
|
|
8
|
+
* **`Tool`**: Callable function providing external capabilities (`FunctionTool`, `AgentTool`, etc.).
|
|
9
|
+
* **`Session`**: A stateful conversation thread with history (`events`) and short-term memory (`state`).
|
|
10
|
+
* **`State`**: Key-value dictionary within a `Session` for transient conversation data.
|
|
11
|
+
* **`Runner`**: The execution engine; orchestrates agent activity and event flow.
|
|
12
|
+
* **`Event`**: Atomic unit of communication; carries content and side-effect `actions`.
|
|
13
|
+
|
|
14
|
+
### Standard Project Layout
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
your_project_root/
|
|
18
|
+
├── <agent_name>/ or app/ # Agent code directory
|
|
19
|
+
│ ├── __init__.py
|
|
20
|
+
│ ├── agent.py # Contains root_agent definition
|
|
21
|
+
│ ├── tools.py # Custom tool functions
|
|
22
|
+
│ └── .env # Environment variables
|
|
23
|
+
├── tests/
|
|
24
|
+
│ ├── eval/
|
|
25
|
+
│ │ ├── eval_config.yaml # Eval criteria and thresholds
|
|
26
|
+
│ │ └── datasets/ # Eval datasets (JSON)
|
|
27
|
+
│ ├── integration/
|
|
28
|
+
│ └── unit/
|
|
29
|
+
└── pyproject.toml or requirements.txt
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 2. Agent Definitions (`LlmAgent`)
|
|
35
|
+
|
|
36
|
+
### Basic Setup
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from google.adk.agents import Agent
|
|
40
|
+
|
|
41
|
+
def get_weather(city: str) -> dict:
|
|
42
|
+
"""Returns weather for a city."""
|
|
43
|
+
return {"status": "success", "weather": "sunny", "temp": 72}
|
|
44
|
+
|
|
45
|
+
my_agent = Agent(
|
|
46
|
+
name="weather_agent",
|
|
47
|
+
model="gemini-flash-latest",
|
|
48
|
+
instruction="You help users check the weather. Use the get_weather tool.",
|
|
49
|
+
description="Provides weather information.", # Important for multi-agent delegation
|
|
50
|
+
tools=[get_weather]
|
|
51
|
+
)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Key Configuration Options
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
from google.genai import types as genai_types
|
|
58
|
+
from google.adk.agents import Agent
|
|
59
|
+
|
|
60
|
+
agent = Agent(
|
|
61
|
+
name="my_agent",
|
|
62
|
+
model="gemini-flash-latest",
|
|
63
|
+
instruction="Your instructions here. Use {state_key} for dynamic injection.",
|
|
64
|
+
description="Description for delegation.",
|
|
65
|
+
|
|
66
|
+
# LLM generation parameters
|
|
67
|
+
generate_content_config=genai_types.GenerateContentConfig(
|
|
68
|
+
temperature=0.2,
|
|
69
|
+
max_output_tokens=1024,
|
|
70
|
+
),
|
|
71
|
+
|
|
72
|
+
# Save final output to state
|
|
73
|
+
output_key="agent_response",
|
|
74
|
+
|
|
75
|
+
# Control history sent to LLM
|
|
76
|
+
include_contents='default', # 'default' or 'none'
|
|
77
|
+
|
|
78
|
+
# Delegation control
|
|
79
|
+
disallow_transfer_to_parent=False,
|
|
80
|
+
disallow_transfer_to_peers=False,
|
|
81
|
+
|
|
82
|
+
# Sub-agents for delegation
|
|
83
|
+
sub_agents=[specialist_agent],
|
|
84
|
+
|
|
85
|
+
# Tools
|
|
86
|
+
tools=[my_tool],
|
|
87
|
+
|
|
88
|
+
# Callbacks
|
|
89
|
+
before_agent_callback=my_callback,
|
|
90
|
+
after_agent_callback=my_callback,
|
|
91
|
+
before_model_callback=my_callback,
|
|
92
|
+
after_model_callback=my_callback,
|
|
93
|
+
before_tool_callback=my_callback,
|
|
94
|
+
after_tool_callback=my_callback,
|
|
95
|
+
)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Structured Output with Pydantic
|
|
99
|
+
|
|
100
|
+
> **Warning**: Using `output_schema` disables tool calling and delegation.
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
from pydantic import BaseModel, Field
|
|
104
|
+
from typing import Literal
|
|
105
|
+
|
|
106
|
+
class Evaluation(BaseModel):
|
|
107
|
+
grade: Literal["pass", "fail"] = Field(description="The evaluation result.")
|
|
108
|
+
comment: str = Field(description="Explanation of the grade.")
|
|
109
|
+
|
|
110
|
+
evaluator = Agent(
|
|
111
|
+
name="evaluator",
|
|
112
|
+
model="gemini-flash-latest",
|
|
113
|
+
instruction="Evaluate the input and provide structured feedback.",
|
|
114
|
+
output_schema=Evaluation,
|
|
115
|
+
output_key="evaluation_result",
|
|
116
|
+
)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Instruction Best Practices
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
# Use dynamic state injection with {state_key} placeholders
|
|
123
|
+
instruction = """
|
|
124
|
+
You are a {role} assistant.
|
|
125
|
+
User preferences: {user_preferences}
|
|
126
|
+
|
|
127
|
+
Rules:
|
|
128
|
+
- Always use tools when available
|
|
129
|
+
- Never make up information
|
|
130
|
+
"""
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 3. Orchestration with Workflow Agents
|
|
136
|
+
|
|
137
|
+
Workflow agents provide deterministic control flow without LLM orchestration.
|
|
138
|
+
|
|
139
|
+
> These are `BaseAgent`-family composites (`SequentialAgent`, `ParallelAgent`, `LoopAgent`). For the new graph-based Workflow API introduced in ADK 2.0, see `references/adk-workflows.md`.
|
|
140
|
+
|
|
141
|
+
### SequentialAgent
|
|
142
|
+
|
|
143
|
+
Executes sub-agents in order. State changes propagate to subsequent agents.
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
from google.adk.agents import SequentialAgent, Agent
|
|
147
|
+
|
|
148
|
+
summarizer = Agent(
|
|
149
|
+
name="summarizer",
|
|
150
|
+
model="gemini-flash-latest",
|
|
151
|
+
instruction="Summarize the input.",
|
|
152
|
+
output_key="summary"
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
question_gen = Agent(
|
|
156
|
+
name="question_generator",
|
|
157
|
+
model="gemini-flash-latest",
|
|
158
|
+
instruction="Generate questions based on: {summary}"
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
pipeline = SequentialAgent(
|
|
162
|
+
name="pipeline",
|
|
163
|
+
sub_agents=[summarizer, question_gen],
|
|
164
|
+
)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### ParallelAgent
|
|
168
|
+
|
|
169
|
+
Executes sub-agents concurrently. Use distinct `output_key`s to avoid race conditions.
|
|
170
|
+
|
|
171
|
+
```python
|
|
172
|
+
from google.adk.agents import ParallelAgent, SequentialAgent, Agent
|
|
173
|
+
|
|
174
|
+
fetch_a = Agent(name="fetch_a", ..., output_key="data_a")
|
|
175
|
+
fetch_b = Agent(name="fetch_b", ..., output_key="data_b")
|
|
176
|
+
|
|
177
|
+
merger = Agent(
|
|
178
|
+
name="merger",
|
|
179
|
+
instruction="Combine data_a: {data_a} and data_b: {data_b}"
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
pipeline = SequentialAgent(
|
|
183
|
+
name="full_pipeline",
|
|
184
|
+
sub_agents=[
|
|
185
|
+
ParallelAgent(name="fetchers", sub_agents=[fetch_a, fetch_b]),
|
|
186
|
+
merger
|
|
187
|
+
]
|
|
188
|
+
)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### LoopAgent
|
|
192
|
+
|
|
193
|
+
Repeats sub-agents until `max_iterations` or an event with `escalate=True`.
|
|
194
|
+
|
|
195
|
+
```python
|
|
196
|
+
from google.adk.agents import LoopAgent
|
|
197
|
+
|
|
198
|
+
refinement_loop = LoopAgent(
|
|
199
|
+
name="refinement_loop",
|
|
200
|
+
sub_agents=[evaluator, refiner, escalation_checker],
|
|
201
|
+
max_iterations=5,
|
|
202
|
+
)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
For a production LoopAgent with EscalationChecker, BuiltInPlanner, and grounding citations, see `/google-agents-cli-workflow` Phase 1.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 4. Multi-Agent Systems & Communication
|
|
210
|
+
|
|
211
|
+
### Communication Methods
|
|
212
|
+
|
|
213
|
+
1. **Shared State**: Agents read/write `session.state`. Use `output_key` for convenience.
|
|
214
|
+
|
|
215
|
+
2. **LLM Delegation**: Agent transfers control to a sub-agent based on reasoning.
|
|
216
|
+
```python
|
|
217
|
+
coordinator = Agent(
|
|
218
|
+
name="coordinator",
|
|
219
|
+
instruction="Route to sales_agent for sales, support_agent for help.",
|
|
220
|
+
sub_agents=[sales_agent, support_agent],
|
|
221
|
+
)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
3. **AgentTool**: Invoke another agent as a tool (parent stays in control).
|
|
225
|
+
```python
|
|
226
|
+
from google.adk.tools import AgentTool
|
|
227
|
+
|
|
228
|
+
root = Agent(
|
|
229
|
+
name="root",
|
|
230
|
+
tools=[AgentTool(specialist_agent)],
|
|
231
|
+
)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
4. **Task Delegation (ADK 2.0)**: Set `mode` on a sub-agent for structured, schema-typed delegation — the coordinator gets a `request_task_{name}` tool; the sub-agent returns typed output via the auto-injected `finish_task` tool.
|
|
235
|
+
```python
|
|
236
|
+
from pydantic import BaseModel
|
|
237
|
+
|
|
238
|
+
class ResearchOutput(BaseModel):
|
|
239
|
+
summary: str
|
|
240
|
+
|
|
241
|
+
researcher = Agent(
|
|
242
|
+
name="researcher",
|
|
243
|
+
model="gemini-flash-latest",
|
|
244
|
+
mode="task", # 'chat' (default) | 'task' | 'single_turn'
|
|
245
|
+
output_schema=ResearchOutput,
|
|
246
|
+
description="Researches a topic.", # required for delegation
|
|
247
|
+
instruction="Research the topic, then call finish_task.",
|
|
248
|
+
)
|
|
249
|
+
coordinator = Agent(name="coordinator", model="gemini-flash-latest", sub_agents=[researcher])
|
|
250
|
+
```
|
|
251
|
+
Modes: `task` (multi-turn, structured I/O) · `single_turn` (autonomous, no user turn). Sub-agents need a `description`; default I/O schemas (`goal`/`background` in, `result` out) are used if none set. Disabled inside graph `Workflow`s.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 5. Building Custom Agents (`BaseAgent`)
|
|
256
|
+
|
|
257
|
+
For custom orchestration logic beyond workflow agents.
|
|
258
|
+
|
|
259
|
+
```python
|
|
260
|
+
from google.adk.agents import BaseAgent
|
|
261
|
+
from google.adk.agents.invocation_context import InvocationContext
|
|
262
|
+
from google.adk.events import Event, EventActions
|
|
263
|
+
from typing import AsyncGenerator
|
|
264
|
+
|
|
265
|
+
class ConditionalRouter(BaseAgent):
|
|
266
|
+
async def _run_async_impl(
|
|
267
|
+
self, ctx: InvocationContext
|
|
268
|
+
) -> AsyncGenerator[Event, None]:
|
|
269
|
+
# Read state
|
|
270
|
+
user_type = ctx.session.state.get("user_type", "regular")
|
|
271
|
+
|
|
272
|
+
# Custom routing logic
|
|
273
|
+
if user_type == "premium":
|
|
274
|
+
agent = self.premium_agent
|
|
275
|
+
else:
|
|
276
|
+
agent = self.regular_agent
|
|
277
|
+
|
|
278
|
+
# Run selected agent
|
|
279
|
+
async for event in agent.run_async(ctx):
|
|
280
|
+
yield event
|
|
281
|
+
|
|
282
|
+
class EscalationChecker(BaseAgent):
|
|
283
|
+
"""Stops a LoopAgent when condition is met."""
|
|
284
|
+
async def _run_async_impl(
|
|
285
|
+
self, ctx: InvocationContext
|
|
286
|
+
) -> AsyncGenerator[Event, None]:
|
|
287
|
+
result = ctx.session.state.get("evaluation")
|
|
288
|
+
if result and result.get("grade") == "pass":
|
|
289
|
+
yield Event(author=self.name, actions=EventActions(escalate=True))
|
|
290
|
+
else:
|
|
291
|
+
yield Event(author=self.name)
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## 6. Models Configuration
|
|
297
|
+
|
|
298
|
+
### Google Gemini (Default)
|
|
299
|
+
|
|
300
|
+
```python
|
|
301
|
+
# AI Studio (dev): in the project .env, comment the GOOGLE_* lines and
|
|
302
|
+
# uncomment GEMINI_API_KEY (GOOGLE_API_KEY is also accepted).
|
|
303
|
+
|
|
304
|
+
# Vertex AI (prod)
|
|
305
|
+
# Set: GOOGLE_CLOUD_PROJECT, GOOGLE_CLOUD_LOCATION, GOOGLE_GENAI_USE_VERTEXAI=True
|
|
306
|
+
|
|
307
|
+
agent = Agent(model="gemini-flash-latest", ...)
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Other Models via LiteLLM
|
|
311
|
+
|
|
312
|
+
```python
|
|
313
|
+
from google.adk.models.lite_llm import LiteLlm
|
|
314
|
+
|
|
315
|
+
agent = Agent(model=LiteLlm(model="openai/gpt-4o"), ...)
|
|
316
|
+
agent = Agent(model=LiteLlm(model="anthropic/claude-sonnet-4-20250514"), ...)
|
|
317
|
+
agent = Agent(model=LiteLlm(model="ollama_chat/llama3:instruct"), ...)
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Vertex AI Native Models
|
|
321
|
+
|
|
322
|
+
```python
|
|
323
|
+
from google.adk.models import Gemini
|
|
324
|
+
|
|
325
|
+
# Vertex AI hosted Gemini (set GOOGLE_GENAI_USE_VERTEXAI=True)
|
|
326
|
+
agent = Agent(model=Gemini(model="gemini-flash-latest"), ...)
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Provider guides: [Anthropic](https://adk.dev/agents/models/anthropic/index.md), [Ollama](https://adk.dev/agents/models/ollama/index.md), [vLLM](https://adk.dev/agents/models/vllm/index.md), [LiteLLM](https://adk.dev/agents/models/litellm/index.md)
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## 7. Tools: The Agent's Capabilities
|
|
334
|
+
|
|
335
|
+
### Function Tool Basics
|
|
336
|
+
|
|
337
|
+
```python
|
|
338
|
+
from google.adk.tools import ToolContext
|
|
339
|
+
|
|
340
|
+
def search_database(
|
|
341
|
+
query: str,
|
|
342
|
+
limit: int,
|
|
343
|
+
tool_context: ToolContext # Optional, for state access
|
|
344
|
+
) -> dict:
|
|
345
|
+
"""Searches the database for records matching the query.
|
|
346
|
+
|
|
347
|
+
Args:
|
|
348
|
+
query: The search query string.
|
|
349
|
+
limit: Maximum number of results to return.
|
|
350
|
+
|
|
351
|
+
Returns:
|
|
352
|
+
dict with 'status' and 'results' keys.
|
|
353
|
+
"""
|
|
354
|
+
# Access state if needed
|
|
355
|
+
user_id = tool_context.state.get("user_id")
|
|
356
|
+
|
|
357
|
+
# Tool logic here
|
|
358
|
+
results = db.search(query, limit=limit, user=user_id)
|
|
359
|
+
|
|
360
|
+
return {"status": "success", "results": results}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
**Tool Rules:**
|
|
364
|
+
- Use clear docstrings (sent to LLM)
|
|
365
|
+
- Type hints required, NO default values
|
|
366
|
+
- Return a dict (JSON-serializable)
|
|
367
|
+
- Don't mention `tool_context` in docstring
|
|
368
|
+
|
|
369
|
+
### ToolContext Capabilities
|
|
370
|
+
|
|
371
|
+
```python
|
|
372
|
+
async def my_tool(query: str, tool_context: ToolContext) -> dict:
|
|
373
|
+
# Read/write state
|
|
374
|
+
tool_context.state["key"] = "value"
|
|
375
|
+
|
|
376
|
+
# Trigger escalation (stops LoopAgent)
|
|
377
|
+
tool_context.actions.escalate = True
|
|
378
|
+
|
|
379
|
+
# Artifacts — see Artifacts section below for full API
|
|
380
|
+
await tool_context.save_artifact("file.txt", part)
|
|
381
|
+
|
|
382
|
+
# Memory search
|
|
383
|
+
results = await tool_context.search_memory("query")
|
|
384
|
+
|
|
385
|
+
return {"status": "success"}
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### Built-in Tools
|
|
389
|
+
|
|
390
|
+
```python
|
|
391
|
+
from google.adk.tools import google_search
|
|
392
|
+
from google.adk.tools import VertexAiSearchTool
|
|
393
|
+
from google.adk.tools.load_web_page import load_web_page
|
|
394
|
+
from google.adk.code_executors import BuiltInCodeExecutor
|
|
395
|
+
|
|
396
|
+
# Google Search grounding
|
|
397
|
+
agent = Agent(tools=[google_search], ...)
|
|
398
|
+
|
|
399
|
+
# Agent Platform Search grounding (your own data)
|
|
400
|
+
agent = Agent(tools=[VertexAiSearchTool(data_store_id="projects/P/locations/L/collections/default_collection/dataStores/DS")], ...)
|
|
401
|
+
|
|
402
|
+
# Web page loading
|
|
403
|
+
agent = Agent(tools=[load_web_page], ...)
|
|
404
|
+
|
|
405
|
+
# Code execution (model-internal)
|
|
406
|
+
agent = Agent(code_executor=BuiltInCodeExecutor(), ...)
|
|
407
|
+
|
|
408
|
+
# Managed sandbox (Vertex AI Code Interpreter) — see /google-agents-cli-workflow Phase 1
|
|
409
|
+
# from google.adk.code_executors import VertexAiCodeExecutor
|
|
410
|
+
# agent = Agent(code_executor=VertexAiCodeExecutor(optimize_data_file=True, stateful=True), ...)
|
|
411
|
+
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
> **`google_search` is model-internal grounding, not a regular tool.** Mixing it with FunctionTools disables Automatic Function Calling (AFC) for all tools. If you need search alongside custom tools, consider a sub-agent architecture or a custom search function — see the [deep-search sample](https://github.com/google/adk-samples/tree/main/python/agents/deep-search) for a working pattern. For eval implications, see the eval guide's `builtin-tools-eval` reference.
|
|
415
|
+
|
|
416
|
+
### Tool Confirmation
|
|
417
|
+
|
|
418
|
+
```python
|
|
419
|
+
from google.adk.tools import FunctionTool
|
|
420
|
+
|
|
421
|
+
# Simple confirmation
|
|
422
|
+
sensitive_tool = FunctionTool(delete_record, require_confirmation=True)
|
|
423
|
+
|
|
424
|
+
# Conditional confirmation
|
|
425
|
+
def needs_approval(amount: float, **kwargs) -> bool:
|
|
426
|
+
return amount > 1000
|
|
427
|
+
|
|
428
|
+
transfer_tool = FunctionTool(transfer_money, require_confirmation=needs_approval)
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### Human-in-the-Loop (pause & resume)
|
|
432
|
+
|
|
433
|
+
Pause a run to ask the user something, then resume. This is a general runtime feature (not workflow-specific). Enable resumption at the app level:
|
|
434
|
+
|
|
435
|
+
```python
|
|
436
|
+
from google.adk.apps import App, ResumabilityConfig
|
|
437
|
+
|
|
438
|
+
app = App(name="my_app", root_agent=root_agent,
|
|
439
|
+
resumability_config=ResumabilityConfig(is_resumable=True))
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
- **Let the model ask:** add the built-in `request_input` tool (`from google.adk.tools import request_input`) to `tools=` — the model calls it when it needs clarification.
|
|
443
|
+
- **Approval gate inside a tool:** `tool_context.request_confirmation(hint="Approve this transfer?")`, or `FunctionTool(fn, require_confirmation=...)` (above).
|
|
444
|
+
- **Custom long-running tool:** wrap a function with `LongRunningFunctionTool(fn)` to pause until an external result arrives.
|
|
445
|
+
|
|
446
|
+
The user's reply is read from `ctx.resume_inputs` (available on `ToolContext` and `CallbackContext`). Inside graph workflows the same mechanism is node-based — see `adk-workflows.md` §7.
|
|
447
|
+
|
|
448
|
+
### Tool Authentication
|
|
449
|
+
|
|
450
|
+
| Auth Type | Pattern |
|
|
451
|
+
|-----------|---------|
|
|
452
|
+
| API Key | `token_to_scheme_credential("apikey", "query", "apikey", "KEY")` → `auth_scheme, auth_credential` |
|
|
453
|
+
| Service Account | `service_account_dict_to_scheme_credential(config, scopes=[...])` → `auth_scheme, auth_credential` |
|
|
454
|
+
| OAuth2 / OIDC | `AuthCredential(auth_type=AuthCredentialTypes.OAUTH2, oauth2=OAuth2Auth(client_id=..., client_secret=...))` |
|
|
455
|
+
| Custom FunctionTool | `tool_context.request_credential(AuthConfig(...))` to initiate, `tool_context.get_auth_response(AuthConfig(...))` to retrieve |
|
|
456
|
+
|
|
457
|
+
Helpers: `from google.adk.tools.openapi_tool.auth.auth_helpers import token_to_scheme_credential, service_account_dict_to_scheme_credential`. Pass `auth_scheme` + `auth_credential` to `OpenAPIToolset(...)`. [Full docs](https://adk.dev/tools-custom/authentication/)
|
|
458
|
+
|
|
459
|
+
### OpenAPI Tools
|
|
460
|
+
|
|
461
|
+
```python
|
|
462
|
+
from google.adk.tools.openapi_tool.openapi_spec_parser.openapi_toolset import OpenAPIToolset
|
|
463
|
+
|
|
464
|
+
toolset = OpenAPIToolset(spec_str=open("openapi.json").read(), spec_str_type="json")
|
|
465
|
+
agent = Agent(name="api_agent", tools=[toolset], ...)
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
Pass `auth_scheme` + `auth_credential` from the auth helpers above for authenticated APIs. Tool names derive from `operationId` (snake_case, max 60 chars). [Full docs](https://adk.dev/tools-custom/openapi-tools/index.md)
|
|
469
|
+
|
|
470
|
+
### MCP Tools
|
|
471
|
+
|
|
472
|
+
Connect to MCP servers to use external tools. Use `StdioConnectionParams` for local dev, `SseConnectionParams` for production.
|
|
473
|
+
|
|
474
|
+
```python
|
|
475
|
+
from google.adk.tools.mcp_tool import McpToolset
|
|
476
|
+
from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams, SseConnectionParams
|
|
477
|
+
from mcp import StdioServerParameters
|
|
478
|
+
|
|
479
|
+
# Local MCP server via stdio
|
|
480
|
+
agent = Agent(
|
|
481
|
+
name="my_agent",
|
|
482
|
+
tools=[
|
|
483
|
+
McpToolset(
|
|
484
|
+
connection_params=StdioConnectionParams(
|
|
485
|
+
server_params=StdioServerParameters(
|
|
486
|
+
command="npx",
|
|
487
|
+
args=["-y", "@modelcontextprotocol/server-filesystem", "/absolute/path"],
|
|
488
|
+
),
|
|
489
|
+
),
|
|
490
|
+
tool_filter=["list_directory", "read_file"], # optional: restrict exposed tools
|
|
491
|
+
)
|
|
492
|
+
],
|
|
493
|
+
...
|
|
494
|
+
)
|
|
495
|
+
|
|
496
|
+
# Remote MCP server via SSE (production)
|
|
497
|
+
McpToolset(
|
|
498
|
+
connection_params=SseConnectionParams(url="https://mcp.example.com/sse"),
|
|
499
|
+
)
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
**Gotchas:**
|
|
503
|
+
- Paths must be absolute, not relative.
|
|
504
|
+
- Agent definition must be synchronous (not async) for deployment.
|
|
505
|
+
- Node.js/npx required for npm-based MCP servers — add to Dockerfile if containerizing.
|
|
506
|
+
|
|
507
|
+
---
|
|
508
|
+
|
|
509
|
+
## 8. Context, State, and Memory
|
|
510
|
+
|
|
511
|
+
| Need | Solution |
|
|
512
|
+
|---|---|
|
|
513
|
+
| Within one conversation (task data, form state) | Session state — see [State Prefixes](#state-prefixes) and [Session Service Options](#session-service-options) below |
|
|
514
|
+
| Across conversations (remember interactions, learn over time) | Memory Bank — see [Memory](#memory-long-term-knowledge) below |
|
|
515
|
+
|
|
516
|
+
### State Prefixes
|
|
517
|
+
|
|
518
|
+
```python
|
|
519
|
+
# Session-specific (default)
|
|
520
|
+
state["booking_step"] = 2
|
|
521
|
+
|
|
522
|
+
# User-persistent (across sessions)
|
|
523
|
+
state["user:preferred_language"] = "en"
|
|
524
|
+
|
|
525
|
+
# App-wide (all users)
|
|
526
|
+
state["app:total_queries"] = 1000
|
|
527
|
+
|
|
528
|
+
# Temporary (current invocation only)
|
|
529
|
+
state["temp:intermediate_result"] = data
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
### Session Service Options
|
|
533
|
+
|
|
534
|
+
```python
|
|
535
|
+
from google.adk.sessions import InMemorySessionService
|
|
536
|
+
# For dev: InMemorySessionService()
|
|
537
|
+
# For prod: VertexAiSessionService(), DatabaseSessionService()
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
### Session Rewind
|
|
541
|
+
|
|
542
|
+
Roll back a session to the state before a specific invocation (useful for debugging or user-initiated undo):
|
|
543
|
+
|
|
544
|
+
```python
|
|
545
|
+
from google.adk.runners import InMemoryRunner
|
|
546
|
+
|
|
547
|
+
runner = InMemoryRunner(agent=root_agent, app_name="my_app")
|
|
548
|
+
|
|
549
|
+
# Rewind to state before a given invocation
|
|
550
|
+
await runner.rewind_async(
|
|
551
|
+
user_id=user_id,
|
|
552
|
+
session_id=session.id,
|
|
553
|
+
rewind_before_invocation_id=invocation_id, # exclusive: state before this call
|
|
554
|
+
)
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
> **Note**: Restores session-level state and artifacts only; app/user-scoped state is unaffected.
|
|
558
|
+
|
|
559
|
+
### Artifacts (File Storage)
|
|
560
|
+
|
|
561
|
+
Store and retrieve binary data (PDFs, images, audio) scoped to session or user:
|
|
562
|
+
|
|
563
|
+
```python
|
|
564
|
+
from google.adk.artifacts import InMemoryArtifactService, GcsArtifactService
|
|
565
|
+
from google.genai import types
|
|
566
|
+
|
|
567
|
+
# Configure runner with artifact service
|
|
568
|
+
runner = Runner(
|
|
569
|
+
agent=root_agent,
|
|
570
|
+
app_name="app",
|
|
571
|
+
session_service=session_service,
|
|
572
|
+
artifact_service=InMemoryArtifactService(), # or GcsArtifactService(bucket_name="my-bucket")
|
|
573
|
+
)
|
|
574
|
+
|
|
575
|
+
# In a tool or callback:
|
|
576
|
+
async def save_file(data: bytes, tool_context: ToolContext) -> dict:
|
|
577
|
+
part = types.Part(inline_data=types.Blob(mime_type="application/pdf", data=data))
|
|
578
|
+
version = await tool_context.save_artifact("report.pdf", part) # session-scoped
|
|
579
|
+
await tool_context.save_artifact("user:profile.png", part) # user-scoped
|
|
580
|
+
artifact = await tool_context.load_artifact("report.pdf") # latest version
|
|
581
|
+
artifact_v0 = await tool_context.load_artifact("report.pdf", version=0)
|
|
582
|
+
names = await tool_context.list_artifacts()
|
|
583
|
+
return {"status": "saved", "version": version}
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
**Namespace prefixes:** plain name = session-scoped · `"user:"` = persistent across sessions
|
|
587
|
+
|
|
588
|
+
### Memory (Long-term Knowledge)
|
|
589
|
+
|
|
590
|
+
#### InMemoryMemoryService (Dev)
|
|
591
|
+
|
|
592
|
+
In-memory implementation for local development. Memories don't persist across restarts.
|
|
593
|
+
|
|
594
|
+
```python
|
|
595
|
+
from google.adk.memory import InMemoryMemoryService
|
|
596
|
+
|
|
597
|
+
memory_service = InMemoryMemoryService()
|
|
598
|
+
# Add session to memory after conversation
|
|
599
|
+
await memory_service.add_session_to_memory(session)
|
|
600
|
+
# Search later
|
|
601
|
+
results = await memory_service.search_memory(app_name=app_name, user_id=user_id, query="query")
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
#### Memory Bank (Long-term Memory)
|
|
605
|
+
|
|
606
|
+
Managed cross-session memory that persists user preferences, remembers facts across sessions, and learns from conversations over time. See the [`memory-bank` sample](https://github.com/google/adk-samples/tree/main/python/agents/memory-bank) for a complete implementation.
|
|
607
|
+
|
|
608
|
+
```python
|
|
609
|
+
from google.adk.agents.callback_context import CallbackContext
|
|
610
|
+
from google.adk.tools.preload_memory_tool import PreloadMemoryTool
|
|
611
|
+
|
|
612
|
+
# PreloadMemoryTool retrieves memories at the start of each turn and injects
|
|
613
|
+
# them into the system instruction. Alternative: LoadMemoryTool() — the model
|
|
614
|
+
# calls it on-demand when it decides memories are needed.
|
|
615
|
+
root_agent = Agent(
|
|
616
|
+
...,
|
|
617
|
+
tools=[PreloadMemoryTool()],
|
|
618
|
+
after_agent_callback=generate_memories_callback,
|
|
619
|
+
)
|
|
620
|
+
|
|
621
|
+
# Alternative: callback_context.add_events_to_memory(events=...) to send only
|
|
622
|
+
# a subset of events, which is better for incremental processing.
|
|
623
|
+
async def generate_memories_callback(callback_context: CallbackContext):
|
|
624
|
+
"""Sends the session's events to Memory Bank for memory generation."""
|
|
625
|
+
await callback_context.add_session_to_memory()
|
|
626
|
+
return None
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
### Context Caching
|
|
630
|
+
|
|
631
|
+
Cache large context windows (system prompt + docs) to reduce latency and cost. Transparent to agent code.
|
|
632
|
+
|
|
633
|
+
```python
|
|
634
|
+
from google.adk.apps import App
|
|
635
|
+
from google.adk.agents.context_cache_config import ContextCacheConfig
|
|
636
|
+
|
|
637
|
+
app = App(
|
|
638
|
+
name="my_app",
|
|
639
|
+
root_agent=root_agent,
|
|
640
|
+
context_cache_config=ContextCacheConfig(
|
|
641
|
+
min_tokens=2048, # only cache if context exceeds this
|
|
642
|
+
ttl_seconds=1800, # cache lifetime (default 1800)
|
|
643
|
+
cache_intervals=10, # re-cache every N invocations
|
|
644
|
+
),
|
|
645
|
+
)
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
### Context Compaction
|
|
649
|
+
|
|
650
|
+
Prevent context overflow on long sessions by summarizing older events in a sliding window:
|
|
651
|
+
|
|
652
|
+
```python
|
|
653
|
+
from google.adk.apps import App
|
|
654
|
+
from google.adk.apps.app import EventsCompactionConfig
|
|
655
|
+
from google.adk.apps.llm_event_summarizer import LlmEventSummarizer
|
|
656
|
+
from google.adk.models import Gemini
|
|
657
|
+
|
|
658
|
+
app = App(
|
|
659
|
+
name="my_app",
|
|
660
|
+
root_agent=root_agent,
|
|
661
|
+
events_compaction_config=EventsCompactionConfig(
|
|
662
|
+
compaction_interval=20, # summarize every 20 events
|
|
663
|
+
overlap_size=3, # include last 3 events in next window for continuity
|
|
664
|
+
# Optional: custom summarizer model
|
|
665
|
+
summarizer=LlmEventSummarizer(llm=Gemini(model="gemini-flash-latest")),
|
|
666
|
+
),
|
|
667
|
+
)
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
### App Name
|
|
671
|
+
|
|
672
|
+
The `App(name=...)` parameter **must match the agent directory name** (default: `app`). A mismatch causes "Session not found" errors during evaluation because the runner infers the app name from the directory path.
|
|
673
|
+
|
|
674
|
+
```python
|
|
675
|
+
# CORRECT — matches the "app" directory
|
|
676
|
+
app = App(name="app", root_agent=root_agent)
|
|
677
|
+
|
|
678
|
+
# WRONG — causes eval failures
|
|
679
|
+
app = App(name="my_custom_agent", root_agent=root_agent)
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
---
|
|
683
|
+
|
|
684
|
+
## 9. Callbacks
|
|
685
|
+
|
|
686
|
+
### Callback Types
|
|
687
|
+
|
|
688
|
+
```python
|
|
689
|
+
from google.adk.agents.callback_context import CallbackContext
|
|
690
|
+
from google.adk.models.llm_request import LlmRequest
|
|
691
|
+
from google.adk.models.llm_response import LlmResponse
|
|
692
|
+
from google.adk.tools import BaseTool, ToolContext
|
|
693
|
+
from google.genai import types as genai_types
|
|
694
|
+
|
|
695
|
+
# Callbacks are invoked by keyword — parameter names must match exactly.
|
|
696
|
+
|
|
697
|
+
# Agent lifecycle
|
|
698
|
+
async def before_agent_callback(callback_context: CallbackContext) -> None:
|
|
699
|
+
callback_context.state["started"] = True
|
|
700
|
+
|
|
701
|
+
async def after_agent_callback(callback_context: CallbackContext) -> genai_types.Content | None:
|
|
702
|
+
# Return None to continue, or Content to override
|
|
703
|
+
return None
|
|
704
|
+
|
|
705
|
+
# Model interaction
|
|
706
|
+
async def before_model_callback(callback_context: CallbackContext, llm_request: LlmRequest) -> LlmResponse | None:
|
|
707
|
+
# Return None to continue, or LlmResponse to skip model call
|
|
708
|
+
return None
|
|
709
|
+
|
|
710
|
+
async def after_model_callback(callback_context: CallbackContext, llm_response: LlmResponse) -> LlmResponse | None:
|
|
711
|
+
# Return None to continue, or modified LlmResponse
|
|
712
|
+
return None
|
|
713
|
+
|
|
714
|
+
# Tool execution
|
|
715
|
+
async def before_tool_callback(tool: BaseTool, args: dict, tool_context: ToolContext) -> dict | None:
|
|
716
|
+
# Return None to continue, or dict to skip tool and use as result
|
|
717
|
+
return None
|
|
718
|
+
|
|
719
|
+
async def after_tool_callback(tool: BaseTool, args: dict, tool_context: ToolContext, tool_response: dict) -> dict | None:
|
|
720
|
+
# Return None to continue, or modified dict
|
|
721
|
+
return None
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
### Common Pattern
|
|
725
|
+
|
|
726
|
+
```python
|
|
727
|
+
# Initialize state before agent runs
|
|
728
|
+
async def init_state(callback_context: CallbackContext) -> None:
|
|
729
|
+
if "preferences" not in callback_context.state:
|
|
730
|
+
callback_context.state["preferences"] = {}
|
|
731
|
+
|
|
732
|
+
agent = Agent(before_agent_callback=init_state, ...)
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
---
|
|
736
|
+
|
|
737
|
+
## 10. Plugins
|
|
738
|
+
|
|
739
|
+
Global callback hooks across all agents/tools/LLMs. Use for cross-cutting concerns (logging, guardrails); use callbacks for per-agent logic.
|
|
740
|
+
|
|
741
|
+
```python
|
|
742
|
+
from google.adk.plugins.base_plugin import BasePlugin
|
|
743
|
+
from google.adk.apps import App
|
|
744
|
+
|
|
745
|
+
class MyPlugin(BasePlugin):
|
|
746
|
+
async def before_model_callback(self, *, callback_context, llm_request):
|
|
747
|
+
return None # return None to observe, return value to intervene
|
|
748
|
+
|
|
749
|
+
# Register via App — plugins run BEFORE agent-level callbacks
|
|
750
|
+
app = App(name="my_app", root_agent=root_agent, plugins=[MyPlugin()])
|
|
751
|
+
runner = Runner(app=app, session_service=...)
|
|
752
|
+
```
|
|
753
|
+
|
|
754
|
+
Built-in plugins: `ReflectAndRetryToolPlugin` (retry failed tools), `BigQueryAgentAnalyticsPlugin` (log to BQ), `ContextFilterPlugin` (reduce context size), `GlobalInstructionPlugin` (shared system prompt), `SaveFilesAsArtifactsPlugin`, `LoggingPlugin`, `DebugLoggingPlugin`, `MultimodalToolResultsPlugin`.
|
|
755
|
+
|
|
756
|
+
Hooks: `before/after_agent_callback`, `before/after_model_callback`, `before/after_tool_callback`, `on_model_error_callback`, `on_tool_error_callback`, `on_user_message_callback`, `before/after_run_callback`, `on_event_callback`. [Full docs](https://adk.dev/plugins/index.md)
|
|
757
|
+
|
|
758
|
+
### Safety Guardrails
|
|
759
|
+
|
|
760
|
+
Use `before_model_callback` to filter input or `after_model_callback` to filter output. Return `None` to pass through, or return a modified `LlmResponse` to block/replace. Evaluate with the `safety` metric. [Full docs](https://adk.dev/safety/index.md)
|
|
761
|
+
|
|
762
|
+
---
|
|
763
|
+
|
|
764
|
+
## 11. A2A Protocol
|
|
765
|
+
|
|
766
|
+
Requires `pip install google-adk[a2a]`.
|
|
767
|
+
|
|
768
|
+
```python
|
|
769
|
+
# Expose an agent as an A2A service
|
|
770
|
+
# Prefer scaffolding over manual code — scaffold a normal `adk` agent; A2A is built in (see /google-agents-cli-scaffold)
|
|
771
|
+
from google.adk.a2a.utils.agent_to_a2a import to_a2a
|
|
772
|
+
from a2a.types import AgentCard
|
|
773
|
+
to_a2a(root_agent, port=8001)
|
|
774
|
+
|
|
775
|
+
# Consume a remote A2A agent
|
|
776
|
+
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent, AGENT_CARD_WELL_KNOWN_PATH
|
|
777
|
+
remote = RemoteA2aAgent(
|
|
778
|
+
name="remote_agent",
|
|
779
|
+
description="...",
|
|
780
|
+
agent_card=f"http://remote-host:8001{AGENT_CARD_WELL_KNOWN_PATH}",
|
|
781
|
+
)
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
### A2UI
|
|
785
|
+
|
|
786
|
+
Agents can return declarative UI via [a2ui](https://github.com/google/A2UI) (cards, forms, charts; rendered client-side over A2A) instead of plain text. Public preview; current release v0.9.1 (v1.0 release candidate). Docs: https://github.com/google/A2UI/tree/main/docs · ADK guide: https://adk.dev/integrations/a2ui/index.md
|
|
787
|
+
|
|
788
|
+
```python
|
|
789
|
+
# pip install a2ui-agent-sdk
|
|
790
|
+
from a2ui.core.schema.manager import A2uiSchemaManager
|
|
791
|
+
from a2ui.basic_catalog.provider import BasicCatalog
|
|
792
|
+
from a2ui.a2a import create_a2ui_part, parse_response_to_parts
|
|
793
|
+
|
|
794
|
+
# 1. Build the system prompt from a component catalog
|
|
795
|
+
manager = A2uiSchemaManager(...) # loads catalog(s) + few-shot examples
|
|
796
|
+
instruction = manager.generate_system_prompt(...)
|
|
797
|
+
|
|
798
|
+
# 2. Use it as the agent instruction
|
|
799
|
+
root_agent = Agent(name="ui_agent", model="gemini-flash-latest", instruction=instruction)
|
|
800
|
+
|
|
801
|
+
# 3. Validate the model's JSON output, then wrap as an A2A DataPart
|
|
802
|
+
# (MIME application/a2ui+json) via a2ui.a2a before streaming to the client.
|
|
803
|
+
```
|
|
804
|
+
|
|
805
|
+
Runnable samples: https://github.com/google/A2UI/tree/main/samples/agent/adk
|
|
806
|
+
|
|
807
|
+
---
|
|
808
|
+
|
|
809
|
+
## 12. Event-Driven / Ambient Agents
|
|
810
|
+
|
|
811
|
+
Ambient agents process events (Pub/Sub, Eventarc, schedules) autonomously. ADK provides built-in trigger endpoints that handle payload decoding, session creation, concurrency, and retries.
|
|
812
|
+
|
|
813
|
+
> **Deployment:** `trigger_sources` registers `/apps/{app}/trigger/*` on the standard FastAPI app, so it works on **all** targets. On **Cloud Run** / **GKE** the endpoints are public HTTP routes you point a Pub/Sub push subscription or Eventarc trigger at. On **Agent Runtime** the same routes are reachable through Agent Engine's `/api` passthrough (`https://{location}-aiplatform.googleapis.com/reasoningEngines/v1/{resource}/api/apps/{app}/trigger/pubsub`). The scaffolded `fast_api_app.py` does not pass `trigger_sources` by default — add it to enable these endpoints.
|
|
814
|
+
|
|
815
|
+
```python
|
|
816
|
+
from google.adk.cli.fast_api import get_fast_api_app
|
|
817
|
+
|
|
818
|
+
app = get_fast_api_app(
|
|
819
|
+
agents_dir=AGENTS_DIR,
|
|
820
|
+
web=False,
|
|
821
|
+
trigger_sources=["pubsub", "eventarc"], # enables /apps/{app}/trigger/pubsub and /apps/{app}/trigger/eventarc
|
|
822
|
+
)
|
|
823
|
+
```
|
|
824
|
+
|
|
825
|
+
```bash
|
|
826
|
+
# CLI equivalent for local dev
|
|
827
|
+
adk api_server --trigger_sources "pubsub,eventarc" path/to/your/agent
|
|
828
|
+
```
|
|
829
|
+
|
|
830
|
+
Trigger endpoints handle: base64 decoding, CloudEvent parsing, per-event session creation (UUID), concurrency semaphore, and exponential backoff on transient errors.
|
|
831
|
+
|
|
832
|
+
| Setting | Default | Environment Variable |
|
|
833
|
+
|---------|---------|----------------------|
|
|
834
|
+
| Max concurrent invocations | 10 | `ADK_TRIGGER_MAX_CONCURRENT` |
|
|
835
|
+
| Max retry attempts | 3 | `ADK_TRIGGER_MAX_RETRIES` |
|
|
836
|
+
| Base backoff delay | 1.0s | `ADK_TRIGGER_RETRY_BASE_DELAY` |
|
|
837
|
+
| Max backoff delay | 30.0s | `ADK_TRIGGER_RETRY_MAX_DELAY` |
|
|
838
|
+
|
|
839
|
+
Sessions are ephemeral by default (`InMemorySessionService`); use `DatabaseSessionService` for audit trails. Pub/Sub and Eventarc have a 10-minute processing limit. For non-GCP sources, use `adk api_server --auto_create_session` with the `/run` endpoint instead.
|
|
840
|
+
|
|
841
|
+
**Scheduled / cron execution:** Use Cloud Scheduler to publish to a Pub/Sub topic on a cron schedule, then connect the topic to the agent's `/apps/{app}/trigger/pubsub` endpoint. This is how you implement "run daily at 8 PM" — no custom scheduling code needed.
|
|
842
|
+
|
|
843
|
+
Since ambient agents have no interactive user, route outputs via structured logging (JSON stdout → Cloud Logging → Cloud Monitoring alerts), Pub/Sub, or tool-based integrations (email, Jira, Slack).
|
|
844
|
+
|
|
845
|
+
**Before implementing an ambient agent, clone and study the production sample** — it covers trigger wiring, middleware, structured logging, and Terraform. See the Notable Samples catalog in `/google-agents-cli-workflow` Phase 1. [Full docs](https://adk.dev/runtime/ambient-agents/).
|
|
846
|
+
|
|
847
|
+
---
|
|
848
|
+
|
|
849
|
+
## Quick Reference
|
|
850
|
+
|
|
851
|
+
### Running Agents Programmatically
|
|
852
|
+
|
|
853
|
+
```python
|
|
854
|
+
from google.adk.runners import Runner
|
|
855
|
+
from google.adk.sessions import InMemorySessionService
|
|
856
|
+
from google.genai import types
|
|
857
|
+
|
|
858
|
+
session_service = InMemorySessionService()
|
|
859
|
+
await session_service.create_session(app_name="app", user_id="user", session_id="s1")
|
|
860
|
+
runner = Runner(agent=my_agent, app_name="app", session_service=session_service)
|
|
861
|
+
|
|
862
|
+
async for event in runner.run_async(
|
|
863
|
+
user_id="user", session_id="s1",
|
|
864
|
+
new_message=types.Content(role="user", parts=[types.Part.from_text(text="Hello!")]),
|
|
865
|
+
):
|
|
866
|
+
if event.is_final_response():
|
|
867
|
+
print(event.content.parts[0].text)
|
|
868
|
+
```
|
|
869
|
+
|
|
870
|
+
|
|
871
|
+
### ADK Built-in Tool Imports (Precision Required)
|
|
872
|
+
|
|
873
|
+
```python
|
|
874
|
+
# CORRECT - imports the tool instance
|
|
875
|
+
from google.adk.tools.load_web_page import load_web_page
|
|
876
|
+
|
|
877
|
+
# WRONG - imports the module, not the tool
|
|
878
|
+
from google.adk.tools import load_web_page
|
|
879
|
+
```
|
|
880
|
+
|
|
881
|
+
Pass the imported tool directly to `tools=[load_web_page]`, not `tools=[load_web_page.load_web_page]`.
|
|
882
|
+
|
|
883
|
+
### Factory Functions for Sub-agents
|
|
884
|
+
|
|
885
|
+
Use factory functions (not module-level instances) to avoid "agent already has a parent" errors. Always **call** the factory — passing the function reference fails with `ValidationError: Input should be a valid dictionary or instance of BaseAgent`.
|
|
886
|
+
|
|
887
|
+
```python
|
|
888
|
+
def create_researcher():
|
|
889
|
+
return Agent(name="researcher", ...)
|
|
890
|
+
|
|
891
|
+
root_agent = SequentialAgent(
|
|
892
|
+
sub_agents=[create_researcher(), create_analyst()], # call the functions!
|
|
893
|
+
...
|
|
894
|
+
)
|
|
895
|
+
```
|
|
896
|
+
|
|
897
|
+
Data flows between sequential sub-agents via conversation history and `output_key` state.
|
|
898
|
+
|
|
899
|
+
### Further Reading
|
|
900
|
+
|
|
901
|
+
- [ADK Documentation](https://adk.dev/llms.txt)
|
|
902
|
+
- [ADK Samples](https://github.com/google/adk-samples)
|
|
903
|
+
- `/google-agents-cli-workflow` Phase 1 — curated production patterns (VertexAiCodeExecutor, BuiltInPlanner, grounding metadata, rate limiting, state capture)
|
|
904
|
+
|
|
905
|
+
---
|
|
906
|
+
|
|
907
|
+
## Inspecting ADK Source Code
|
|
908
|
+
|
|
909
|
+
When you need to look up ADK internals, inspect the installed package directly:
|
|
910
|
+
|
|
911
|
+
```bash
|
|
912
|
+
# Find the ADK package location (use "uv run python" if using uv)
|
|
913
|
+
python -c "import google.adk; print(google.adk.__path__[0])"
|
|
914
|
+
```
|
|
915
|
+
|
|
916
|
+
### ADK Package Directory Map
|
|
917
|
+
|
|
918
|
+
```
|
|
919
|
+
google/adk/
|
|
920
|
+
├── agents/ # Agent types (LlmAgent, BaseAgent, SequentialAgent, etc.)
|
|
921
|
+
├── tools/ # Tool implementations (FunctionTool, google_search, etc.)
|
|
922
|
+
├── sessions/ # Session services (InMemory, Database, VertexAI)
|
|
923
|
+
├── memory/ # Memory services
|
|
924
|
+
├── runners.py # Runner and execution engine
|
|
925
|
+
├── events/ # Event types and actions
|
|
926
|
+
├── models/ # Model integrations (Gemini, LiteLLM, etc.)
|
|
927
|
+
├── code_executors/ # Code execution (BuiltInCodeExecutor, etc.)
|
|
928
|
+
├── evaluation/ # Eval framework (criteria, evaluators, etc.)
|
|
929
|
+
├── cli/ # ADK CLI internals (used by agents-cli playground, eval, etc.)
|
|
930
|
+
├── flows/ # LLM flow implementations
|
|
931
|
+
├── artifacts/ # Artifact services
|
|
932
|
+
└── auth/ # Authentication helpers
|
|
933
|
+
```
|
|
934
|
+
|
|
935
|
+
Use Glob/Grep/Read on the installed package to find exact implementations, method signatures, and configuration options.
|
|
936
|
+
|
|
937
|
+
For the full ADK documentation index, use `curl https://adk.dev/llms.txt`.
|