zilmate 1.7.8 → 1.8.1
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/skills/agent-browser/SKILL.md +55 -0
- package/.agents/skills/agentmail/SKILL.md +282 -0
- package/.agents/skills/agentmail/references/webhooks.md +220 -0
- package/.agents/skills/agentmail/references/websockets.md +263 -0
- package/.agents/skills/ai-elements/SKILL.md +160 -0
- package/.agents/skills/ai-elements/references/agent.md +134 -0
- package/.agents/skills/ai-elements/references/artifact.md +84 -0
- package/.agents/skills/ai-elements/references/attachments.md +190 -0
- package/.agents/skills/ai-elements/references/audio-player.md +134 -0
- package/.agents/skills/ai-elements/references/canvas.md +34 -0
- package/.agents/skills/ai-elements/references/chain-of-thought.md +81 -0
- package/.agents/skills/ai-elements/references/checkpoint.md +183 -0
- package/.agents/skills/ai-elements/references/code-block.md +170 -0
- package/.agents/skills/ai-elements/references/commit.md +177 -0
- package/.agents/skills/ai-elements/references/confirmation.md +262 -0
- package/.agents/skills/ai-elements/references/connection.md +34 -0
- package/.agents/skills/ai-elements/references/context.md +126 -0
- package/.agents/skills/ai-elements/references/controls.md +32 -0
- package/.agents/skills/ai-elements/references/conversation.md +224 -0
- package/.agents/skills/ai-elements/references/edge.md +52 -0
- package/.agents/skills/ai-elements/references/environment-variables.md +102 -0
- package/.agents/skills/ai-elements/references/file-tree.md +72 -0
- package/.agents/skills/ai-elements/references/image.md +146 -0
- package/.agents/skills/ai-elements/references/inline-citation.md +299 -0
- package/.agents/skills/ai-elements/references/jsx-preview.md +104 -0
- package/.agents/skills/ai-elements/references/message.md +237 -0
- package/.agents/skills/ai-elements/references/mic-selector.md +189 -0
- package/.agents/skills/ai-elements/references/model-selector.md +112 -0
- package/.agents/skills/ai-elements/references/node.md +73 -0
- package/.agents/skills/ai-elements/references/open-in-chat.md +67 -0
- package/.agents/skills/ai-elements/references/package-info.md +95 -0
- package/.agents/skills/ai-elements/references/panel.md +33 -0
- package/.agents/skills/ai-elements/references/persona.md +166 -0
- package/.agents/skills/ai-elements/references/plan.md +79 -0
- package/.agents/skills/ai-elements/references/prompt-input.md +579 -0
- package/.agents/skills/ai-elements/references/queue.md +172 -0
- package/.agents/skills/ai-elements/references/reasoning.md +238 -0
- package/.agents/skills/ai-elements/references/sandbox.md +129 -0
- package/.agents/skills/ai-elements/references/schema-display.md +102 -0
- package/.agents/skills/ai-elements/references/shimmer.md +48 -0
- package/.agents/skills/ai-elements/references/snippet.md +64 -0
- package/.agents/skills/ai-elements/references/sources.md +209 -0
- package/.agents/skills/ai-elements/references/speech-input.md +163 -0
- package/.agents/skills/ai-elements/references/stack-trace.md +224 -0
- package/.agents/skills/ai-elements/references/suggestion.md +124 -0
- package/.agents/skills/ai-elements/references/task.md +222 -0
- package/.agents/skills/ai-elements/references/terminal.md +103 -0
- package/.agents/skills/ai-elements/references/test-results.md +157 -0
- package/.agents/skills/ai-elements/references/tool.md +285 -0
- package/.agents/skills/ai-elements/references/toolbar.md +32 -0
- package/.agents/skills/ai-elements/references/transcription.md +120 -0
- package/.agents/skills/ai-elements/references/voice-selector.md +241 -0
- package/.agents/skills/ai-elements/references/web-preview.md +200 -0
- package/.agents/skills/ai-elements/scripts/agent.tsx +61 -0
- package/.agents/skills/ai-elements/scripts/artifact.tsx +127 -0
- package/.agents/skills/ai-elements/scripts/attachments-inline.tsx +128 -0
- package/.agents/skills/ai-elements/scripts/attachments-list.tsx +95 -0
- package/.agents/skills/ai-elements/scripts/attachments.tsx +85 -0
- package/.agents/skills/ai-elements/scripts/audio-player-remote.tsx +35 -0
- package/.agents/skills/ai-elements/scripts/audio-player.tsx +68 -0
- package/.agents/skills/ai-elements/scripts/chain-of-thought.tsx +82 -0
- package/.agents/skills/ai-elements/scripts/checkpoint.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/code-block-dark.tsx +46 -0
- package/.agents/skills/ai-elements/scripts/code-block.tsx +120 -0
- package/.agents/skills/ai-elements/scripts/commit.tsx +94 -0
- package/.agents/skills/ai-elements/scripts/confirmation-accepted.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/confirmation-rejected.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/confirmation-request.tsx +54 -0
- package/.agents/skills/ai-elements/scripts/confirmation.tsx +55 -0
- package/.agents/skills/ai-elements/scripts/context.tsx +45 -0
- package/.agents/skills/ai-elements/scripts/conversation.tsx +177 -0
- package/.agents/skills/ai-elements/scripts/environment-variables.tsx +62 -0
- package/.agents/skills/ai-elements/scripts/file-tree-basic.tsx +18 -0
- package/.agents/skills/ai-elements/scripts/file-tree-expanded.tsx +21 -0
- package/.agents/skills/ai-elements/scripts/file-tree-selection.tsx +24 -0
- package/.agents/skills/ai-elements/scripts/file-tree.tsx +42 -0
- package/.agents/skills/ai-elements/scripts/image.tsx +20 -0
- package/.agents/skills/ai-elements/scripts/inline-citation.tsx +97 -0
- package/.agents/skills/ai-elements/scripts/jsx-preview.tsx +104 -0
- package/.agents/skills/ai-elements/scripts/message.tsx +365 -0
- package/.agents/skills/ai-elements/scripts/mic-selector.tsx +49 -0
- package/.agents/skills/ai-elements/scripts/model-selector.tsx +365 -0
- package/.agents/skills/ai-elements/scripts/open-in-chat.tsx +33 -0
- package/.agents/skills/ai-elements/scripts/package-info.tsx +51 -0
- package/.agents/skills/ai-elements/scripts/persona-command.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-glint.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-halo.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-mana.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-obsidian.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-opal.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/plan.tsx +65 -0
- package/.agents/skills/ai-elements/scripts/prompt-input-cursor.tsx +502 -0
- package/.agents/skills/ai-elements/scripts/prompt-input-tooltip.tsx +44 -0
- package/.agents/skills/ai-elements/scripts/prompt-input.tsx +267 -0
- package/.agents/skills/ai-elements/scripts/queue-prompt-input.tsx +394 -0
- package/.agents/skills/ai-elements/scripts/queue.tsx +295 -0
- package/.agents/skills/ai-elements/scripts/reasoning.tsx +71 -0
- package/.agents/skills/ai-elements/scripts/sandbox.tsx +178 -0
- package/.agents/skills/ai-elements/scripts/schema-display-basic.tsx +9 -0
- package/.agents/skills/ai-elements/scripts/schema-display-body.tsx +20 -0
- package/.agents/skills/ai-elements/scripts/schema-display-nested.tsx +23 -0
- package/.agents/skills/ai-elements/scripts/schema-display-params.tsx +16 -0
- package/.agents/skills/ai-elements/scripts/schema-display.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/shimmer-duration.tsx +31 -0
- package/.agents/skills/ai-elements/scripts/shimmer-elements.tsx +43 -0
- package/.agents/skills/ai-elements/scripts/shimmer.tsx +17 -0
- package/.agents/skills/ai-elements/scripts/snippet-plain.tsx +19 -0
- package/.agents/skills/ai-elements/scripts/snippet.tsx +25 -0
- package/.agents/skills/ai-elements/scripts/sources-custom.tsx +39 -0
- package/.agents/skills/ai-elements/scripts/sources.tsx +32 -0
- package/.agents/skills/ai-elements/scripts/speech-input.tsx +84 -0
- package/.agents/skills/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
- package/.agents/skills/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
- package/.agents/skills/ai-elements/scripts/stack-trace.tsx +58 -0
- package/.agents/skills/ai-elements/scripts/suggestion-input.tsx +144 -0
- package/.agents/skills/ai-elements/scripts/suggestion.tsx +32 -0
- package/.agents/skills/ai-elements/scripts/task.tsx +59 -0
- package/.agents/skills/ai-elements/scripts/terminal-basic.tsx +7 -0
- package/.agents/skills/ai-elements/scripts/terminal-clear.tsx +19 -0
- package/.agents/skills/ai-elements/scripts/terminal-streaming.tsx +38 -0
- package/.agents/skills/ai-elements/scripts/terminal.tsx +82 -0
- package/.agents/skills/ai-elements/scripts/test-results-basic.tsx +27 -0
- package/.agents/skills/ai-elements/scripts/test-results-errors.tsx +51 -0
- package/.agents/skills/ai-elements/scripts/test-results-suites.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/test-results.tsx +102 -0
- package/.agents/skills/ai-elements/scripts/tool-input-available.tsx +31 -0
- package/.agents/skills/ai-elements/scripts/tool-input-streaming.tsx +30 -0
- package/.agents/skills/ai-elements/scripts/tool-output-available.tsx +80 -0
- package/.agents/skills/ai-elements/scripts/tool-output-error.tsx +44 -0
- package/.agents/skills/ai-elements/scripts/tool.tsx +222 -0
- package/.agents/skills/ai-elements/scripts/transcription.tsx +290 -0
- package/.agents/skills/ai-elements/scripts/voice-selector.tsx +245 -0
- package/.agents/skills/ai-elements/scripts/web-preview.tsx +115 -0
- package/.agents/skills/ai-sdk/SKILL.md +78 -0
- package/.agents/skills/ai-sdk/references/ai-gateway.md +66 -0
- package/.agents/skills/ai-sdk/references/common-errors.md +443 -0
- package/.agents/skills/ai-sdk/references/devtools.md +52 -0
- package/.agents/skills/ai-sdk/references/type-safe-agents.md +204 -0
- package/.agents/skills/chat-sdk/SKILL.md +240 -0
- package/.agents/skills/composio/AGENTS.md +404 -0
- package/.agents/skills/composio/SKILL.md +55 -0
- package/.agents/skills/composio/rules/_template.md +38 -0
- package/.agents/skills/composio/rules/app-auth-configs.md +224 -0
- package/.agents/skills/composio/rules/app-auth-popup-ui.md +143 -0
- package/.agents/skills/composio/rules/app-connected-accounts.md +240 -0
- package/.agents/skills/composio/rules/app-custom-tools.md +220 -0
- package/.agents/skills/composio/rules/app-execute-tools.md +202 -0
- package/.agents/skills/composio/rules/app-fetch-tools.md +292 -0
- package/.agents/skills/composio/rules/app-modifiers.md +148 -0
- package/.agents/skills/composio/rules/app-tool-versions.md +343 -0
- package/.agents/skills/composio/rules/app-toolkits.md +184 -0
- package/.agents/skills/composio/rules/app-user-context.md +222 -0
- package/.agents/skills/composio/rules/building-with-composio.md +134 -0
- package/.agents/skills/composio/rules/composio-cli.md +223 -0
- package/.agents/skills/composio/rules/setup-api-keys.md +230 -0
- package/.agents/skills/composio/rules/tr-auth-auto.md +110 -0
- package/.agents/skills/composio/rules/tr-auth-connections.md +167 -0
- package/.agents/skills/composio/rules/tr-auth-manual.md +161 -0
- package/.agents/skills/composio/rules/tr-building-chat-ui.md +348 -0
- package/.agents/skills/composio/rules/tr-framework-ai-sdk.md +240 -0
- package/.agents/skills/composio/rules/tr-framework-integration.md +818 -0
- package/.agents/skills/composio/rules/tr-framework-mastra.md +185 -0
- package/.agents/skills/composio/rules/tr-mcp-vs-native.md +248 -0
- package/.agents/skills/composio/rules/tr-session-basic.md +82 -0
- package/.agents/skills/composio/rules/tr-session-config.md +172 -0
- package/.agents/skills/composio/rules/tr-session-lifecycle.md +385 -0
- package/.agents/skills/composio/rules/tr-toolkit-query.md +135 -0
- package/.agents/skills/composio/rules/tr-userid-best-practices.md +476 -0
- package/.agents/skills/composio/rules/triggers-create.md +246 -0
- package/.agents/skills/composio/rules/triggers-manage.md +275 -0
- package/.agents/skills/composio/rules/triggers-subscribe.md +173 -0
- package/.agents/skills/composio/rules/triggers-webhook.md +227 -0
- package/.agents/skills/create-auth-skill/SKILL.md +321 -0
- package/.agents/skills/design-md/README.md +34 -0
- package/.agents/skills/design-md/SKILL.md +172 -0
- package/.agents/skills/design-md/examples/DESIGN.md +154 -0
- package/.agents/skills/expo-tailwind-setup/SKILL.md +480 -0
- package/.agents/skills/expo-tailwind-setup/agents/openai.yaml +4 -0
- package/.agents/skills/find-skills/SKILL.md +142 -0
- package/.agents/skills/firecrawl/SKILL.md +321 -0
- package/.agents/skills/firecrawl/rules/install.md +85 -0
- package/.agents/skills/firecrawl/rules/security.md +26 -0
- package/.agents/skills/frontend-design/LICENSE.txt +177 -0
- package/.agents/skills/frontend-design/SKILL.md +55 -0
- package/.agents/skills/linkup-search/SKILL.md +298 -0
- package/.agents/skills/mcp-builder/LICENSE.txt +202 -0
- package/.agents/skills/mcp-builder/SKILL.md +236 -0
- package/.agents/skills/mcp-builder/reference/evaluation.md +602 -0
- package/.agents/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/.agents/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/.agents/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/.agents/skills/mcp-builder/scripts/connections.py +151 -0
- package/.agents/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/.agents/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/.agents/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/.agents/skills/mobile-android-design/SKILL.md +101 -0
- package/.agents/skills/mobile-android-design/references/android-navigation.md +698 -0
- package/.agents/skills/mobile-android-design/references/compose-components.md +796 -0
- package/.agents/skills/mobile-android-design/references/details.md +337 -0
- package/.agents/skills/mobile-android-design/references/material3-theming.md +604 -0
- package/.agents/skills/mobile-ios-design/SKILL.md +259 -0
- package/.agents/skills/mobile-ios-design/references/hig-patterns.md +529 -0
- package/.agents/skills/mobile-ios-design/references/ios-navigation.md +556 -0
- package/.agents/skills/mobile-ios-design/references/swiftui-components.md +575 -0
- package/.agents/skills/neon-drizzle/SKILL.md +81 -0
- package/.agents/skills/neon-drizzle/guides/existing-project.md +398 -0
- package/.agents/skills/neon-drizzle/guides/new-project.md +312 -0
- package/.agents/skills/neon-drizzle/guides/schema-only.md +415 -0
- package/.agents/skills/neon-drizzle/guides/troubleshooting.md +539 -0
- package/.agents/skills/neon-drizzle/references/adapters.md +478 -0
- package/.agents/skills/neon-drizzle/references/migrations.md +652 -0
- package/.agents/skills/neon-drizzle/references/query-patterns.md +761 -0
- package/.agents/skills/neon-drizzle/scripts/generate-schema.ts +77 -0
- package/.agents/skills/neon-drizzle/scripts/run-migration.ts +133 -0
- package/.agents/skills/neon-drizzle/templates/db-http.ts +6 -0
- package/.agents/skills/neon-drizzle/templates/db-websocket.ts +24 -0
- package/.agents/skills/neon-drizzle/templates/drizzle-config.ts +96 -0
- package/.agents/skills/neon-drizzle/templates/schema-example.ts +231 -0
- package/.agents/skills/neon-postgres/SKILL.md +376 -0
- package/.agents/skills/next-best-practices/SKILL.md +152 -0
- package/.agents/skills/next-best-practices/async-patterns.md +87 -0
- package/.agents/skills/next-best-practices/bundling.md +180 -0
- package/.agents/skills/next-best-practices/data-patterns.md +297 -0
- package/.agents/skills/next-best-practices/debug-tricks.md +105 -0
- package/.agents/skills/next-best-practices/directives.md +73 -0
- package/.agents/skills/next-best-practices/error-handling.md +227 -0
- package/.agents/skills/next-best-practices/file-conventions.md +140 -0
- package/.agents/skills/next-best-practices/font.md +245 -0
- package/.agents/skills/next-best-practices/functions.md +108 -0
- package/.agents/skills/next-best-practices/hydration-error.md +91 -0
- package/.agents/skills/next-best-practices/image.md +173 -0
- package/.agents/skills/next-best-practices/metadata.md +301 -0
- package/.agents/skills/next-best-practices/parallel-routes.md +287 -0
- package/.agents/skills/next-best-practices/route-handlers.md +146 -0
- package/.agents/skills/next-best-practices/rsc-boundaries.md +159 -0
- package/.agents/skills/next-best-practices/runtime-selection.md +39 -0
- package/.agents/skills/next-best-practices/scripts.md +141 -0
- package/.agents/skills/next-best-practices/self-hosting.md +371 -0
- package/.agents/skills/next-best-practices/suspense-boundaries.md +67 -0
- package/.agents/skills/playwright-best-practices/SKILL.md +303 -0
- package/.agents/skills/playwright-cli/SKILL.md +404 -0
- package/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
- package/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
- package/.agents/skills/playwright-cli/references/running-code.md +241 -0
- package/.agents/skills/playwright-cli/references/session-management.md +225 -0
- package/.agents/skills/playwright-cli/references/spec-driven-testing.md +305 -0
- package/.agents/skills/playwright-cli/references/storage-state.md +275 -0
- package/.agents/skills/playwright-cli/references/test-generation.md +134 -0
- package/.agents/skills/playwright-cli/references/tracing.md +139 -0
- package/.agents/skills/playwright-cli/references/video-recording.md +143 -0
- package/.agents/skills/prisma-client-api/SKILL.md +216 -0
- package/.agents/skills/prisma-client-api/references/client-methods.md +223 -0
- package/.agents/skills/prisma-client-api/references/constructor.md +208 -0
- package/.agents/skills/prisma-client-api/references/filters.md +256 -0
- package/.agents/skills/prisma-client-api/references/model-queries.md +281 -0
- package/.agents/skills/prisma-client-api/references/query-options.md +276 -0
- package/.agents/skills/prisma-client-api/references/raw-queries.md +194 -0
- package/.agents/skills/prisma-client-api/references/relations.md +308 -0
- package/.agents/skills/prisma-client-api/references/transactions.md +184 -0
- package/.agents/skills/prisma-database-setup/SKILL.md +192 -0
- package/.agents/skills/prisma-database-setup/references/cockroachdb.md +89 -0
- package/.agents/skills/prisma-database-setup/references/mongodb.md +90 -0
- package/.agents/skills/prisma-database-setup/references/mysql.md +126 -0
- package/.agents/skills/prisma-database-setup/references/postgresql.md +92 -0
- package/.agents/skills/prisma-database-setup/references/prisma-client-setup.md +47 -0
- package/.agents/skills/prisma-database-setup/references/prisma-postgres.md +130 -0
- package/.agents/skills/prisma-database-setup/references/sqlite.md +106 -0
- package/.agents/skills/prisma-database-setup/references/sqlserver.md +94 -0
- package/.agents/skills/prisma-postgres/SKILL.md +127 -0
- package/.agents/skills/prisma-postgres/references/console-and-connections.md +67 -0
- package/.agents/skills/prisma-postgres/references/create-db-cli.md +136 -0
- package/.agents/skills/prisma-postgres/references/management-api-sdk.md +56 -0
- package/.agents/skills/prisma-postgres/references/management-api.md +61 -0
- package/.agents/skills/remotion-best-practices/SKILL.md +340 -0
- package/.agents/skills/remotion-best-practices/rules/3d.md +86 -0
- package/.agents/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/.agents/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.agents/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/.agents/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/.agents/skills/remotion-best-practices/rules/audio.md +169 -0
- package/.agents/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/.agents/skills/remotion-best-practices/rules/compositions.md +133 -0
- package/.agents/skills/remotion-best-practices/rules/display-captions.md +184 -0
- package/.agents/skills/remotion-best-practices/rules/ffmpeg.md +34 -0
- package/.agents/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.agents/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.agents/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/.agents/skills/remotion-best-practices/rules/gifs.md +141 -0
- package/.agents/skills/remotion-best-practices/rules/google-fonts.md +72 -0
- package/.agents/skills/remotion-best-practices/rules/html-in-canvas.md +122 -0
- package/.agents/skills/remotion-best-practices/rules/images.md +71 -0
- package/.agents/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/.agents/skills/remotion-best-practices/rules/light-leaks.md +73 -0
- package/.agents/skills/remotion-best-practices/rules/local-fonts.md +65 -0
- package/.agents/skills/remotion-best-practices/rules/lottie.md +70 -0
- package/.agents/skills/remotion-best-practices/rules/maplibre.md +458 -0
- package/.agents/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/.agents/skills/remotion-best-practices/rules/measuring-text.md +140 -0
- package/.agents/skills/remotion-best-practices/rules/parameters.md +109 -0
- package/.agents/skills/remotion-best-practices/rules/sequencing.md +144 -0
- package/.agents/skills/remotion-best-practices/rules/sfx.md +30 -0
- package/.agents/skills/remotion-best-practices/rules/silence-detection.md +71 -0
- package/.agents/skills/remotion-best-practices/rules/subtitles.md +36 -0
- package/.agents/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/.agents/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/.agents/skills/remotion-best-practices/rules/timing.md +136 -0
- package/.agents/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/.agents/skills/remotion-best-practices/rules/transitions.md +197 -0
- package/.agents/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/.agents/skills/remotion-best-practices/rules/trimming.md +51 -0
- package/.agents/skills/remotion-best-practices/rules/videos.md +171 -0
- package/.agents/skills/remotion-best-practices/rules/voiceover.md +99 -0
- package/.agents/skills/remotion-render/SKILL.md +212 -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/stripe-best-practices/SKILL.md +54 -0
- package/.agents/skills/stripe-best-practices/references/billing.md +58 -0
- package/.agents/skills/stripe-best-practices/references/connect.md +173 -0
- package/.agents/skills/stripe-best-practices/references/payments.md +79 -0
- package/.agents/skills/stripe-best-practices/references/security.md +109 -0
- package/.agents/skills/stripe-best-practices/references/tax.md +37 -0
- package/.agents/skills/stripe-best-practices/references/treasury.md +16 -0
- package/.agents/skills/stripe-projects/SKILL.md +132 -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/supermemory/LICENSE +201 -0
- package/.agents/skills/supermemory/README.md +221 -0
- package/.agents/skills/supermemory/SKILL.md +172 -0
- package/.agents/skills/supermemory/references/api-reference.md +591 -0
- package/.agents/skills/supermemory/references/architecture.md +557 -0
- package/.agents/skills/supermemory/references/quickstart.md +293 -0
- package/.agents/skills/supermemory/references/sdk-guide.md +655 -0
- package/.agents/skills/supermemory/references/use-cases.md +1033 -0
- package/.agents/skills/supermemory-cli/SKILL.md +490 -0
- package/.agents/skills/tdd/SKILL.md +108 -0
- package/.agents/skills/tdd/mocking.md +59 -0
- package/.agents/skills/tdd/refactoring.md +10 -0
- package/.agents/skills/tdd/tests.md +61 -0
- package/.agents/skills/ui-ux-pro-max/SKILL.md +661 -0
- package/.agents/skills/ui-ux-pro-max/data +1 -0
- package/.agents/skills/ui-ux-pro-max/scripts +1 -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/web-design-guidelines/SKILL.md +39 -0
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +19 -4
- package/dist/cli/update.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/tools/daytona-browser.tool.js +1 -1
- package/dist/tools/daytona-browser.tool.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,818 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Integrate Tool Router with AI Frameworks
|
|
3
|
+
impact: HIGH
|
|
4
|
+
description: Connect Tool Router sessions with popular AI frameworks using MCP or native tools
|
|
5
|
+
tags: [tool-router, frameworks, integration, vercel, openai, langchain, claude, crewai]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Integrate Tool Router with AI Frameworks
|
|
9
|
+
|
|
10
|
+
Tool Router works with any AI framework through two methods: **Native Tools** (recommended for speed) or **MCP** (for framework flexibility). Choose native tools when available for better performance and control.
|
|
11
|
+
|
|
12
|
+
## Integration Methods
|
|
13
|
+
|
|
14
|
+
| Method | Pros | Cons | When to Use |
|
|
15
|
+
|--------|------|------|-------------|
|
|
16
|
+
| **Native Tools** | ✅ Faster execution<br>✅ Full control with modifiers<br>✅ No MCP overhead | ❌ Framework lock-in | Single framework, production apps |
|
|
17
|
+
| **MCP** | ✅ Framework independent<br>✅ Works with any MCP client<br>✅ Easy framework switching | ⚠️ Slower (extra API roundtrip)<br>⚠️ Less control | Multi-framework, prototyping |
|
|
18
|
+
|
|
19
|
+
## MCP Headers Configuration
|
|
20
|
+
|
|
21
|
+
When using MCP, the `session.mcp.headers` object contains the authentication headers required to connect to the Composio MCP server:
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
{
|
|
25
|
+
"x-api-key": "your_composio_api_key"
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Using with MCP Clients
|
|
30
|
+
|
|
31
|
+
When configuring MCP clients (like Claude Desktop), you need to provide the Composio API key in the headers:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"mcpServers": {
|
|
36
|
+
"composio": {
|
|
37
|
+
"type": "http",
|
|
38
|
+
"url": "https://mcp.composio.dev/session/your_session_id",
|
|
39
|
+
"headers": {
|
|
40
|
+
"x-api-key": "your_composio_api_key"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Where to find your Composio API key:**
|
|
48
|
+
- Login to [Composio Platform](https://platform.composio.dev)
|
|
49
|
+
- Select your project
|
|
50
|
+
- Navigate to Settings to find your API keys
|
|
51
|
+
- Or set it via environment variable: `COMPOSIO_API_KEY`
|
|
52
|
+
|
|
53
|
+
> 📖 **See [Setting Up API Keys](./setup-api-keys.md)** for detailed instructions on configuring Composio, OpenAI, and Anthropic API keys for your project.
|
|
54
|
+
|
|
55
|
+
When using Tool Router sessions programmatically, the headers are automatically included in `session.mcp.headers`.
|
|
56
|
+
|
|
57
|
+
## ❌ Incorrect - Using Tools Without Tool Router
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
// DON'T: Use tools directly without session isolation
|
|
61
|
+
import { Composio } from '@composio/core';
|
|
62
|
+
import { VercelProvider } from '@composio/vercel';
|
|
63
|
+
|
|
64
|
+
const composio = new Composio({ provider: new VercelProvider() });
|
|
65
|
+
|
|
66
|
+
// ❌ No user isolation
|
|
67
|
+
// ❌ Tools not scoped per user
|
|
68
|
+
// ❌ All users share same tools
|
|
69
|
+
const tools = await composio.tools.get('default', {
|
|
70
|
+
toolkits: ['gmail']
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
# DON'T: Use tools directly without session isolation
|
|
76
|
+
from composio import Composio
|
|
77
|
+
from composio_openai_agents import OpenAIAgentsProvider
|
|
78
|
+
|
|
79
|
+
composio = Composio(provider=OpenAIAgentsProvider())
|
|
80
|
+
|
|
81
|
+
# ❌ No user isolation
|
|
82
|
+
# ❌ Tools not scoped per user
|
|
83
|
+
# ❌ All users share same tools
|
|
84
|
+
tools = composio.tools.get(
|
|
85
|
+
user_id="default",
|
|
86
|
+
toolkits=["gmail"]
|
|
87
|
+
)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## ✅ Correct - Vercel AI SDK (Native Tools)
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
// DO: Use Tool Router with native tools for best performance
|
|
94
|
+
import { openai } from '@ai-sdk/openai';
|
|
95
|
+
import { Composio } from '@composio/core';
|
|
96
|
+
import { VercelProvider } from '@composio/vercel';
|
|
97
|
+
import { streamText } from 'ai';
|
|
98
|
+
|
|
99
|
+
// Initialize Composio with Vercel provider
|
|
100
|
+
const composio = new Composio({
|
|
101
|
+
provider: new VercelProvider()
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
async function runAgent(userId: string, prompt: string) {
|
|
105
|
+
// Create isolated session for user
|
|
106
|
+
const session = await composio.create(userId, {
|
|
107
|
+
toolkits: ['gmail'],
|
|
108
|
+
manageConnections: true
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// Get native Vercel-formatted tools
|
|
112
|
+
const tools = await session.tools();
|
|
113
|
+
|
|
114
|
+
// Stream response with tools
|
|
115
|
+
const stream = await streamText({
|
|
116
|
+
model: openai('gpt-5.2'),
|
|
117
|
+
prompt,
|
|
118
|
+
tools,
|
|
119
|
+
maxSteps: 10
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
// ✅ Fast execution (no MCP overhead)
|
|
123
|
+
// ✅ User-isolated tools
|
|
124
|
+
// ✅ Native Vercel format
|
|
125
|
+
|
|
126
|
+
for await (const textPart of stream.textStream) {
|
|
127
|
+
process.stdout.write(textPart);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
await runAgent('user_123', 'Fetch my last email from Gmail');
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
```python
|
|
135
|
+
# DO: Use Tool Router with native tools for best performance
|
|
136
|
+
from composio import Composio
|
|
137
|
+
from composio_vercel import VercelProvider
|
|
138
|
+
from ai import streamText, openai
|
|
139
|
+
|
|
140
|
+
# Initialize Composio with Vercel provider
|
|
141
|
+
composio = Composio(provider=VercelProvider())
|
|
142
|
+
|
|
143
|
+
async def run_agent(user_id: str, prompt: str):
|
|
144
|
+
# Create isolated session for user
|
|
145
|
+
session = composio.create(
|
|
146
|
+
user_id=user_id,
|
|
147
|
+
toolkits=["gmail"],
|
|
148
|
+
manage_connections=True
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
# Get native Vercel-formatted tools
|
|
152
|
+
tools = session.tools()
|
|
153
|
+
|
|
154
|
+
# Stream response with tools
|
|
155
|
+
stream = streamText(
|
|
156
|
+
model=openai("gpt-5.2"),
|
|
157
|
+
prompt=prompt,
|
|
158
|
+
tools=tools,
|
|
159
|
+
max_steps=10
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
# ✅ Fast execution (no MCP overhead)
|
|
163
|
+
# ✅ User-isolated tools
|
|
164
|
+
# ✅ Native Vercel format
|
|
165
|
+
|
|
166
|
+
async for text_part in stream.text_stream:
|
|
167
|
+
print(text_part, end="")
|
|
168
|
+
|
|
169
|
+
await run_agent("user_123", "Fetch my last email from Gmail")
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## ✅ Correct - Vercel AI SDK (MCP)
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
// DO: Use MCP when framework flexibility is needed
|
|
176
|
+
import { openai } from '@ai-sdk/openai';
|
|
177
|
+
import { experimental_createMCPClient as createMCPClient } from '@ai-sdk/mcp';
|
|
178
|
+
import { Composio } from '@composio/core';
|
|
179
|
+
import { streamText } from 'ai';
|
|
180
|
+
|
|
181
|
+
const composio = new Composio();
|
|
182
|
+
|
|
183
|
+
async function runAgentMCP(userId: string, prompt: string) {
|
|
184
|
+
// Create session (MCP URL only, no provider needed)
|
|
185
|
+
const session = await composio.create(userId, {
|
|
186
|
+
toolkits: ['gmail'],
|
|
187
|
+
manageConnections: true
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
// Create MCP client
|
|
191
|
+
const client = await createMCPClient({
|
|
192
|
+
transport: {
|
|
193
|
+
type: 'http',
|
|
194
|
+
url: session.mcp.url,
|
|
195
|
+
headers: session.mcp.headers
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
// Get tools from MCP server
|
|
200
|
+
const tools = await client.tools();
|
|
201
|
+
|
|
202
|
+
// Stream response
|
|
203
|
+
const stream = await streamText({
|
|
204
|
+
model: openai('gpt-5.2'),
|
|
205
|
+
prompt,
|
|
206
|
+
tools,
|
|
207
|
+
maxSteps: 10
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
// ✅ Framework independent
|
|
211
|
+
// ✅ User-isolated tools
|
|
212
|
+
// ⚠️ Slower (MCP overhead)
|
|
213
|
+
|
|
214
|
+
for await (const textPart of stream.textStream) {
|
|
215
|
+
process.stdout.write(textPart);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
await runAgentMCP('user_123', 'Fetch my last email');
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## ✅ Correct - OpenAI Agents SDK (Native Tools)
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
// DO: Use native tools with OpenAI Agents
|
|
226
|
+
import { Composio } from '@composio/core';
|
|
227
|
+
import { OpenAIAgentsProvider } from '@composio/openai-agents';
|
|
228
|
+
import { Agent, run } from '@openai/agents';
|
|
229
|
+
|
|
230
|
+
const composio = new Composio({
|
|
231
|
+
provider: new OpenAIAgentsProvider()
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
async function createAssistant(userId: string) {
|
|
235
|
+
// Create session with native tools
|
|
236
|
+
const session = await composio.create(userId, {
|
|
237
|
+
toolkits: ['gmail', 'slack']
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
// Get native OpenAI Agents formatted tools
|
|
241
|
+
const tools = await session.tools();
|
|
242
|
+
|
|
243
|
+
// Create agent with tools
|
|
244
|
+
const agent = new Agent({
|
|
245
|
+
name: 'Personal Assistant',
|
|
246
|
+
model: 'gpt-5.2',
|
|
247
|
+
instructions: 'You are a helpful assistant. Use tools to help users.',
|
|
248
|
+
tools
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
// ✅ Fast execution
|
|
252
|
+
// ✅ Native OpenAI Agents format
|
|
253
|
+
// ✅ Full control
|
|
254
|
+
|
|
255
|
+
return agent;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const agent = await createAssistant('user_123');
|
|
259
|
+
const result = await run(agent, 'Check my emails and send a summary to Slack');
|
|
260
|
+
console.log(result.finalOutput);
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
```python
|
|
264
|
+
# DO: Use native tools with OpenAI Agents
|
|
265
|
+
from composio import Composio
|
|
266
|
+
from composio_openai_agents import OpenAIAgentsProvider
|
|
267
|
+
from agents import Agent, Runner
|
|
268
|
+
|
|
269
|
+
composio = Composio(provider=OpenAIAgentsProvider())
|
|
270
|
+
|
|
271
|
+
async def create_assistant(user_id: str):
|
|
272
|
+
# Create session with native tools
|
|
273
|
+
session = composio.create(
|
|
274
|
+
user_id=user_id,
|
|
275
|
+
toolkits=["gmail", "slack"]
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
# Get native OpenAI Agents formatted tools
|
|
279
|
+
tools = session.tools()
|
|
280
|
+
|
|
281
|
+
# Create agent with tools
|
|
282
|
+
agent = Agent(
|
|
283
|
+
name="Personal Assistant",
|
|
284
|
+
model="gpt-5.2",
|
|
285
|
+
instructions="You are a helpful assistant. Use tools to help users.",
|
|
286
|
+
tools=tools
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
# ✅ Fast execution
|
|
290
|
+
# ✅ Native OpenAI Agents format
|
|
291
|
+
# ✅ Full control
|
|
292
|
+
|
|
293
|
+
return agent
|
|
294
|
+
|
|
295
|
+
agent = await create_assistant("user_123")
|
|
296
|
+
result = await Runner.run(
|
|
297
|
+
starting_agent=agent,
|
|
298
|
+
input="Check my emails and send a summary to Slack"
|
|
299
|
+
)
|
|
300
|
+
print(result.final_output)
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## ✅ Correct - OpenAI Agents SDK (MCP)
|
|
304
|
+
|
|
305
|
+
```typescript
|
|
306
|
+
// DO: Use MCP with OpenAI Agents for flexibility
|
|
307
|
+
import { Composio } from '@composio/core';
|
|
308
|
+
import { Agent, run, hostedMcpTool } from '@openai/agents';
|
|
309
|
+
|
|
310
|
+
const composio = new Composio();
|
|
311
|
+
|
|
312
|
+
async function createAssistantMCP(userId: string) {
|
|
313
|
+
// Create session
|
|
314
|
+
const { mcp } = await composio.create(userId, {
|
|
315
|
+
toolkits: ['gmail']
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
// Create agent with MCP tool
|
|
319
|
+
const agent = new Agent({
|
|
320
|
+
name: 'Gmail Assistant',
|
|
321
|
+
model: 'gpt-5.2',
|
|
322
|
+
instructions: 'Help users manage their Gmail.',
|
|
323
|
+
tools: [
|
|
324
|
+
hostedMcpTool({
|
|
325
|
+
serverLabel: 'composio',
|
|
326
|
+
serverUrl: mcp.url,
|
|
327
|
+
headers: mcp.headers
|
|
328
|
+
})
|
|
329
|
+
]
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
// ✅ Framework independent
|
|
333
|
+
// ⚠️ Slower execution
|
|
334
|
+
|
|
335
|
+
return agent;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
const agent = await createAssistantMCP('user_123');
|
|
339
|
+
const result = await run(agent, 'Fetch my last email');
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
```python
|
|
343
|
+
# DO: Use MCP with OpenAI Agents for flexibility
|
|
344
|
+
from composio import Composio
|
|
345
|
+
from agents import Agent, Runner, HostedMCPTool
|
|
346
|
+
|
|
347
|
+
composio = Composio()
|
|
348
|
+
|
|
349
|
+
def create_assistant_mcp(user_id: str):
|
|
350
|
+
# Create session
|
|
351
|
+
session = composio.create(user_id=user_id, toolkits=["gmail"])
|
|
352
|
+
|
|
353
|
+
# Create agent with MCP tool
|
|
354
|
+
composio_mcp = HostedMCPTool(
|
|
355
|
+
tool_config={
|
|
356
|
+
"type": "mcp",
|
|
357
|
+
"server_label": "composio",
|
|
358
|
+
"server_url": session.mcp.url,
|
|
359
|
+
"require_approval": "never",
|
|
360
|
+
"headers": session.mcp.headers
|
|
361
|
+
}
|
|
362
|
+
)
|
|
363
|
+
|
|
364
|
+
agent = Agent(
|
|
365
|
+
name="Gmail Assistant",
|
|
366
|
+
instructions="Help users manage their Gmail.",
|
|
367
|
+
tools=[composio_mcp]
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
# ✅ Framework independent
|
|
371
|
+
# ⚠️ Slower execution
|
|
372
|
+
|
|
373
|
+
return agent
|
|
374
|
+
|
|
375
|
+
agent = create_assistant_mcp("user_123")
|
|
376
|
+
result = Runner.run_sync(starting_agent=agent, input="Fetch my last email")
|
|
377
|
+
print(result.final_output)
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
## ✅ Correct - LangChain (MCP)
|
|
381
|
+
|
|
382
|
+
```typescript
|
|
383
|
+
// DO: Use LangChain with MCP
|
|
384
|
+
import { MultiServerMCPClient } from '@langchain/mcp-adapters';
|
|
385
|
+
import { ChatOpenAI } from '@langchain/openai';
|
|
386
|
+
import { createAgent } from 'langchain';
|
|
387
|
+
import { Composio } from '@composio/core';
|
|
388
|
+
|
|
389
|
+
const composio = new Composio();
|
|
390
|
+
|
|
391
|
+
async function createLangChainAgent(userId: string) {
|
|
392
|
+
// Create session
|
|
393
|
+
const session = await composio.create(userId, {
|
|
394
|
+
toolkits: ['gmail']
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
// Create MCP client
|
|
398
|
+
const client = new MultiServerMCPClient({
|
|
399
|
+
composio: {
|
|
400
|
+
transport: 'http',
|
|
401
|
+
url: session.mcp.url,
|
|
402
|
+
headers: session.mcp.headers
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
// Get tools
|
|
407
|
+
const tools = await client.getTools();
|
|
408
|
+
|
|
409
|
+
// Create agent
|
|
410
|
+
const llm = new ChatOpenAI({ model: 'gpt-5.2' });
|
|
411
|
+
|
|
412
|
+
const agent = createAgent({
|
|
413
|
+
name: 'Gmail Assistant',
|
|
414
|
+
systemPrompt: 'You help users manage their Gmail.',
|
|
415
|
+
model: llm,
|
|
416
|
+
tools
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
return agent;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
const agent = await createLangChainAgent('user_123');
|
|
423
|
+
const result = await agent.invoke({
|
|
424
|
+
messages: [{ role: 'user', content: 'Fetch my last email' }]
|
|
425
|
+
});
|
|
426
|
+
console.log(result);
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
```python
|
|
430
|
+
# DO: Use LangChain with MCP
|
|
431
|
+
from composio import Composio
|
|
432
|
+
from langchain_mcp_adapters.client import MultiServerMCPClient
|
|
433
|
+
from langchain.agents import create_agent
|
|
434
|
+
from langchain_openai.chat_models import ChatOpenAI
|
|
435
|
+
|
|
436
|
+
composio = Composio()
|
|
437
|
+
|
|
438
|
+
async def create_langchain_agent(user_id: str):
|
|
439
|
+
# Create session
|
|
440
|
+
session = composio.create(user_id=user_id, toolkits=["gmail"])
|
|
441
|
+
|
|
442
|
+
# Create MCP client
|
|
443
|
+
mcp_client = MultiServerMCPClient({
|
|
444
|
+
"composio": {
|
|
445
|
+
"transport": "streamable_http",
|
|
446
|
+
"url": session.mcp.url,
|
|
447
|
+
"headers": session.mcp.headers
|
|
448
|
+
}
|
|
449
|
+
})
|
|
450
|
+
|
|
451
|
+
# Get tools
|
|
452
|
+
tools = await mcp_client.get_tools()
|
|
453
|
+
|
|
454
|
+
# Create agent
|
|
455
|
+
agent = create_agent(
|
|
456
|
+
tools=tools,
|
|
457
|
+
model=ChatOpenAI(model="gpt-5.2")
|
|
458
|
+
)
|
|
459
|
+
|
|
460
|
+
return agent
|
|
461
|
+
|
|
462
|
+
agent = await create_langchain_agent("user_123")
|
|
463
|
+
result = await agent.ainvoke({
|
|
464
|
+
"messages": [
|
|
465
|
+
{"role": "user", "content": "Fetch my last email"}
|
|
466
|
+
]
|
|
467
|
+
})
|
|
468
|
+
print(result)
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
## ✅ Correct - Claude Agent SDK (Native Tools)
|
|
472
|
+
|
|
473
|
+
```typescript
|
|
474
|
+
// DO: Use Claude Agent SDK with native tools
|
|
475
|
+
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
476
|
+
import { Composio } from '@composio/core';
|
|
477
|
+
import { ClaudeAgentSDKProvider } from '@composio/claude-agent-sdk';
|
|
478
|
+
|
|
479
|
+
const composio = new Composio({
|
|
480
|
+
provider: new ClaudeAgentSDKProvider()
|
|
481
|
+
});
|
|
482
|
+
|
|
483
|
+
async function runClaudeAgent(userId: string, prompt: string) {
|
|
484
|
+
// Create session with native tools
|
|
485
|
+
const session = await composio.create(userId, {
|
|
486
|
+
toolkits: ['gmail']
|
|
487
|
+
});
|
|
488
|
+
|
|
489
|
+
// Get native Claude tools format
|
|
490
|
+
const tools = await session.tools();
|
|
491
|
+
|
|
492
|
+
// Query with tools
|
|
493
|
+
const stream = await query({
|
|
494
|
+
prompt,
|
|
495
|
+
options: {
|
|
496
|
+
model: 'claude-sonnet-4-5-20250929',
|
|
497
|
+
permissionMode: 'bypassPermissions',
|
|
498
|
+
tools
|
|
499
|
+
}
|
|
500
|
+
});
|
|
501
|
+
|
|
502
|
+
for await (const event of stream) {
|
|
503
|
+
if (event.type === 'result' && event.subtype === 'success') {
|
|
504
|
+
process.stdout.write(event.result);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
await runClaudeAgent('user_123', 'Fetch my last email');
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
```python
|
|
513
|
+
# DO: Use Claude Agent SDK with native tools
|
|
514
|
+
from composio import Composio
|
|
515
|
+
from composio_claude_agent_sdk import ClaudeAgentSDKProvider
|
|
516
|
+
from claude_agent_sdk import query, ClaudeAgentOptions
|
|
517
|
+
|
|
518
|
+
composio = Composio(provider=ClaudeAgentSDKProvider())
|
|
519
|
+
|
|
520
|
+
async def run_claude_agent(user_id: str, prompt: str):
|
|
521
|
+
# Create session with native tools
|
|
522
|
+
session = composio.create(user_id=user_id, toolkits=["gmail"])
|
|
523
|
+
|
|
524
|
+
# Get native Claude tools format
|
|
525
|
+
tools = session.tools()
|
|
526
|
+
|
|
527
|
+
# Query with tools
|
|
528
|
+
options = ClaudeAgentOptions(
|
|
529
|
+
model="claude-sonnet-4-5-20250929",
|
|
530
|
+
permission_mode="bypassPermissions",
|
|
531
|
+
tools=tools
|
|
532
|
+
)
|
|
533
|
+
|
|
534
|
+
async for message in query(prompt=prompt, options=options):
|
|
535
|
+
print(message, end="")
|
|
536
|
+
|
|
537
|
+
await run_claude_agent("user_123", "Fetch my last email")
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
## ✅ Correct - Claude Agent SDK (MCP)
|
|
541
|
+
|
|
542
|
+
```typescript
|
|
543
|
+
// DO: Use Claude Agent SDK with MCP
|
|
544
|
+
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
545
|
+
import { Composio } from '@composio/core';
|
|
546
|
+
|
|
547
|
+
const composio = new Composio();
|
|
548
|
+
|
|
549
|
+
async function runClaudeAgentMCP(userId: string, prompt: string) {
|
|
550
|
+
// Create session
|
|
551
|
+
const session = await composio.create(userId, {
|
|
552
|
+
toolkits: ['gmail']
|
|
553
|
+
});
|
|
554
|
+
|
|
555
|
+
// Query with MCP server
|
|
556
|
+
const stream = await query({
|
|
557
|
+
prompt,
|
|
558
|
+
options: {
|
|
559
|
+
model: 'claude-sonnet-4-5-20250929',
|
|
560
|
+
permissionMode: 'bypassPermissions',
|
|
561
|
+
mcpServers: {
|
|
562
|
+
composio: {
|
|
563
|
+
type: 'http',
|
|
564
|
+
url: session.mcp.url,
|
|
565
|
+
headers: session.mcp.headers
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
});
|
|
570
|
+
|
|
571
|
+
for await (const event of stream) {
|
|
572
|
+
if (event.type === 'result' && event.subtype === 'success') {
|
|
573
|
+
process.stdout.write(event.result);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
await runClaudeAgentMCP('user_123', 'Fetch my last email');
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
```python
|
|
582
|
+
# DO: Use Claude Agent SDK with MCP
|
|
583
|
+
from composio import Composio
|
|
584
|
+
from claude_agent_sdk import query, ClaudeAgentOptions
|
|
585
|
+
|
|
586
|
+
composio = Composio()
|
|
587
|
+
|
|
588
|
+
async def run_claude_agent_mcp(user_id: str, prompt: str):
|
|
589
|
+
# Create session
|
|
590
|
+
session = composio.create(user_id=user_id, toolkits=["gmail"])
|
|
591
|
+
|
|
592
|
+
# Query with MCP server
|
|
593
|
+
options = ClaudeAgentOptions(
|
|
594
|
+
model="claude-sonnet-4-5-20250929",
|
|
595
|
+
permission_mode="bypassPermissions",
|
|
596
|
+
mcp_servers={
|
|
597
|
+
"composio": {
|
|
598
|
+
"type": session.mcp.type,
|
|
599
|
+
"url": session.mcp.url,
|
|
600
|
+
"headers": session.mcp.headers
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
)
|
|
604
|
+
|
|
605
|
+
async for message in query(prompt=prompt, options=options):
|
|
606
|
+
print(message, end="")
|
|
607
|
+
|
|
608
|
+
await run_claude_agent_mcp("user_123", "Fetch my last email")
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
## ✅ Correct - CrewAI (MCP)
|
|
612
|
+
|
|
613
|
+
```python
|
|
614
|
+
# DO: Use CrewAI with MCP
|
|
615
|
+
from crewai import Agent, Task, Crew
|
|
616
|
+
from crewai.mcp import MCPServerHTTP
|
|
617
|
+
from composio import Composio
|
|
618
|
+
|
|
619
|
+
composio = Composio()
|
|
620
|
+
|
|
621
|
+
def create_crewai_agent(user_id: str):
|
|
622
|
+
# Create session
|
|
623
|
+
session = composio.create(user_id=user_id, toolkits=["gmail"])
|
|
624
|
+
|
|
625
|
+
# Create agent with MCP server
|
|
626
|
+
agent = Agent(
|
|
627
|
+
role="Gmail Assistant",
|
|
628
|
+
goal="Help with Gmail related queries",
|
|
629
|
+
backstory="You are a helpful assistant.",
|
|
630
|
+
mcps=[
|
|
631
|
+
MCPServerHTTP(
|
|
632
|
+
url=session.mcp.url,
|
|
633
|
+
headers=session.mcp.headers
|
|
634
|
+
)
|
|
635
|
+
]
|
|
636
|
+
)
|
|
637
|
+
|
|
638
|
+
return agent
|
|
639
|
+
|
|
640
|
+
# Create agent
|
|
641
|
+
agent = create_crewai_agent("user_123")
|
|
642
|
+
|
|
643
|
+
# Define task
|
|
644
|
+
task = Task(
|
|
645
|
+
description="Find the last email and summarize it.",
|
|
646
|
+
expected_output="A summary including sender, subject, and key points.",
|
|
647
|
+
agent=agent
|
|
648
|
+
)
|
|
649
|
+
|
|
650
|
+
# Execute
|
|
651
|
+
crew = Crew(agents=[agent], tasks=[task])
|
|
652
|
+
result = crew.kickoff()
|
|
653
|
+
print(result)
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
## Using Modifiers with Native Tools
|
|
657
|
+
|
|
658
|
+
```typescript
|
|
659
|
+
// Add logging and telemetry with modifiers
|
|
660
|
+
import { Composio } from '@composio/core';
|
|
661
|
+
import { VercelProvider } from '@composio/vercel';
|
|
662
|
+
import { SessionExecuteMetaModifiers } from '@composio/core';
|
|
663
|
+
|
|
664
|
+
const composio = new Composio({
|
|
665
|
+
provider: new VercelProvider()
|
|
666
|
+
});
|
|
667
|
+
|
|
668
|
+
async function getToolsWithLogging(userId: string) {
|
|
669
|
+
const session = await composio.create(userId, {
|
|
670
|
+
toolkits: ['gmail']
|
|
671
|
+
});
|
|
672
|
+
|
|
673
|
+
// Add modifiers for logging
|
|
674
|
+
const modifiers: SessionExecuteMetaModifiers = {
|
|
675
|
+
beforeExecute: ({ toolSlug, sessionId, params }) => {
|
|
676
|
+
console.log(`[${sessionId}] Executing ${toolSlug}`);
|
|
677
|
+
console.log('Parameters:', JSON.stringify(params, null, 2));
|
|
678
|
+
return params;
|
|
679
|
+
},
|
|
680
|
+
afterExecute: ({ toolSlug, sessionId, result }) => {
|
|
681
|
+
console.log(`[${sessionId}] Completed ${toolSlug}`);
|
|
682
|
+
console.log('Success:', result.successful);
|
|
683
|
+
return result;
|
|
684
|
+
}
|
|
685
|
+
};
|
|
686
|
+
|
|
687
|
+
// Get tools with modifiers
|
|
688
|
+
const tools = await session.tools(modifiers);
|
|
689
|
+
|
|
690
|
+
return tools;
|
|
691
|
+
}
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
```python
|
|
695
|
+
# Add logging and telemetry with modifiers
|
|
696
|
+
from composio import Composio, before_execute, after_execute
|
|
697
|
+
from composio_openai_agents import OpenAIAgentsProvider
|
|
698
|
+
from composio.types import ToolExecuteParams, ToolExecutionResponse
|
|
699
|
+
|
|
700
|
+
composio = Composio(provider=OpenAIAgentsProvider())
|
|
701
|
+
|
|
702
|
+
async def get_tools_with_logging(user_id: str):
|
|
703
|
+
session = composio.create(user_id=user_id, toolkits=["gmail"])
|
|
704
|
+
|
|
705
|
+
# Define logging modifiers
|
|
706
|
+
@before_execute(tools=[])
|
|
707
|
+
def log_before(
|
|
708
|
+
tool: str,
|
|
709
|
+
toolkit: str,
|
|
710
|
+
params: ToolExecuteParams
|
|
711
|
+
) -> ToolExecuteParams:
|
|
712
|
+
print(f"🔧 Executing {toolkit}.{tool}")
|
|
713
|
+
print(f" Arguments: {params.get('arguments', {})}")
|
|
714
|
+
return params
|
|
715
|
+
|
|
716
|
+
@after_execute(tools=[])
|
|
717
|
+
def log_after(
|
|
718
|
+
tool: str,
|
|
719
|
+
toolkit: str,
|
|
720
|
+
response: ToolExecutionResponse
|
|
721
|
+
) -> ToolExecutionResponse:
|
|
722
|
+
print(f"✅ Completed {toolkit}.{tool}")
|
|
723
|
+
if "data" in response:
|
|
724
|
+
print(f" Response: {response['data']}")
|
|
725
|
+
return response
|
|
726
|
+
|
|
727
|
+
# Get tools with modifiers
|
|
728
|
+
tools = session.tools(modifiers=[log_before, log_after])
|
|
729
|
+
|
|
730
|
+
return tools
|
|
731
|
+
```
|
|
732
|
+
|
|
733
|
+
## Framework Comparison
|
|
734
|
+
|
|
735
|
+
| Framework | Native Tools | MCP | Provider Package | Best For |
|
|
736
|
+
|-----------|--------------|-----|------------------|----------|
|
|
737
|
+
| **Vercel AI SDK** | ✅ | ✅ | `@composio/vercel` | Modern web apps, streaming |
|
|
738
|
+
| **OpenAI Agents SDK** | ✅ | ✅ | `@composio/openai-agents` | Production agents |
|
|
739
|
+
| **LangChain** | ❌ | ✅ | N/A (MCP only) | Complex chains, memory |
|
|
740
|
+
| **Claude Agent SDK** | ✅ | ✅ | `@composio/claude-agent-sdk` | Claude-specific features |
|
|
741
|
+
| **CrewAI** | ❌ | ✅ | N/A (MCP only) | Multi-agent teams |
|
|
742
|
+
|
|
743
|
+
## Pattern: Framework Switching
|
|
744
|
+
|
|
745
|
+
```typescript
|
|
746
|
+
// Same session, different frameworks
|
|
747
|
+
const composio = new Composio();
|
|
748
|
+
const session = await composio.create('user_123', { toolkits: ['gmail'] });
|
|
749
|
+
|
|
750
|
+
// Use with Vercel AI SDK
|
|
751
|
+
const client1 = await createMCPClient({
|
|
752
|
+
transport: { type: 'http', url: session.mcp.url, headers: session.mcp.headers }
|
|
753
|
+
});
|
|
754
|
+
|
|
755
|
+
// Use with LangChain
|
|
756
|
+
const client2 = new MultiServerMCPClient({
|
|
757
|
+
composio: { transport: 'http', url: session.mcp.url, headers: session.mcp.headers }
|
|
758
|
+
});
|
|
759
|
+
|
|
760
|
+
// Use with OpenAI Agents
|
|
761
|
+
const client3 = hostedMcpTool({
|
|
762
|
+
serverUrl: session.mcp.url,
|
|
763
|
+
headers: session.mcp.headers
|
|
764
|
+
});
|
|
765
|
+
|
|
766
|
+
// ✅ Same tools, different frameworks
|
|
767
|
+
// ✅ Framework flexibility with MCP
|
|
768
|
+
```
|
|
769
|
+
|
|
770
|
+
## Best Practices
|
|
771
|
+
|
|
772
|
+
### 1. **Choose Native Tools When Available**
|
|
773
|
+
- Faster execution (no MCP overhead)
|
|
774
|
+
- Better performance for production
|
|
775
|
+
- Full control with modifiers
|
|
776
|
+
|
|
777
|
+
### 2. **Use MCP for Flexibility**
|
|
778
|
+
- When using multiple frameworks
|
|
779
|
+
- During prototyping phase
|
|
780
|
+
- When native tools unavailable
|
|
781
|
+
|
|
782
|
+
### 3. **Always Create User Sessions**
|
|
783
|
+
- Never share sessions across users
|
|
784
|
+
- Use proper user IDs (not 'default')
|
|
785
|
+
- Isolate tools per user
|
|
786
|
+
|
|
787
|
+
### 4. **Enable Connection Management**
|
|
788
|
+
- Set `manageConnections: true`
|
|
789
|
+
- Let agent handle authentication
|
|
790
|
+
- Better user experience
|
|
791
|
+
|
|
792
|
+
### 5. **Add Logging with Modifiers**
|
|
793
|
+
- Use beforeExecute/afterExecute
|
|
794
|
+
- Track tool execution
|
|
795
|
+
- Debug agent behavior
|
|
796
|
+
|
|
797
|
+
### 6. **Handle Streaming Properly**
|
|
798
|
+
- Use framework's streaming APIs
|
|
799
|
+
- Process events as they arrive
|
|
800
|
+
- Better UX for long operations
|
|
801
|
+
|
|
802
|
+
## Key Principles
|
|
803
|
+
|
|
804
|
+
1. **Native tools recommended** - Faster and more control
|
|
805
|
+
2. **MCP for flexibility** - Framework independent
|
|
806
|
+
3. **User isolation** - Create sessions per user
|
|
807
|
+
4. **Connection management** - Enable auto-authentication
|
|
808
|
+
5. **Logging and monitoring** - Use modifiers for observability
|
|
809
|
+
6. **Framework agnostic** - Same session works with any framework
|
|
810
|
+
|
|
811
|
+
## Reference
|
|
812
|
+
|
|
813
|
+
- [Tool Router Documentation](https://docs.composio.dev/sdk/typescript/api/tool-router)
|
|
814
|
+
- [Vercel AI SDK](https://sdk.vercel.ai)
|
|
815
|
+
- [OpenAI Agents SDK](https://github.com/openai/agents)
|
|
816
|
+
- [LangChain](https://langchain.com)
|
|
817
|
+
- [Claude Agent SDK](https://github.com/anthropics/anthropic-sdk-typescript)
|
|
818
|
+
- [CrewAI](https://www.crewai.com)
|