Skip to main content
Vibes runs on Deno and Node.js. Install the framework, pick a provider, set your API key, and you’re ready to build agents.

Install the framework

Add the framework to your project:
deno add jsr:@vibesjs/sdk
Then add it to your deno.json import map along with your provider:
{
  "imports": {
    "@vibesjs/sdk": "jsr:@vibesjs/sdk@^1.0",
    "ai": "npm:ai@^6",
    "zod": "npm:zod@^4",
    "@ai-sdk/anthropic": "npm:@ai-sdk/anthropic@^1"
  }
}

How it fits together

Vibes is a thin orchestration layer over the Vercel AI SDK. You install Vibes once and choose any supported AI provider separately.

Choose a provider

Install the provider package that matches your preferred AI service:
ProviderPackageInstall (Deno)Env Variable
Anthropic (Claude)@ai-sdk/anthropicdeno add npm:@ai-sdk/anthropicANTHROPIC_API_KEY
OpenAI (GPT)@ai-sdk/openaideno add npm:@ai-sdk/openaiOPENAI_API_KEY
Google (Gemini)@ai-sdk/googledeno add npm:@ai-sdk/googleGOOGLE_GENERATIVE_AI_API_KEY
Groq@ai-sdk/groqdeno add npm:@ai-sdk/groqGROQ_API_KEY
Mistral@ai-sdk/mistraldeno add npm:@ai-sdk/mistralMISTRAL_API_KEY
Ollama (local)ollama-ai-providerdeno add npm:ollama-ai-provider(none)
OpenAI-compatible@ai-sdk/openaideno add npm:@ai-sdk/openaivaries
These 7 are the most popular choices. Vibes supports 50+ providers via the Vercel AI SDK - see the full provider list.

Set your API key

Export your provider’s API key as an environment variable before running your agent:
export ANTHROPIC_API_KEY="sk-ant-..."
Never commit API keys to source control. Use a .env file locally and your deployment platform’s secret management in production.

Verify the install

Create hello.ts and run it to confirm everything is working:
import { Agent } from "@vibesjs/sdk";
import { anthropic } from "@ai-sdk/anthropic";

const agent = new Agent({
  model: anthropic("claude-haiku-4-5-20251001"),
  systemPrompt: "You are a helpful assistant.",
});

const result = await agent.run("Say exactly: hello from vibes");
console.log(result.output);
// hello from vibes
deno run --allow-env --allow-net hello.ts

Agent skill (Claude Code)

If you use Claude Code, install the @vibesjs/sdk agent skill so your coding assistant can write idiomatic framework code without looking up docs:
mkdir -p .claude/agents && curl -fsSL https://raw.githubusercontent.com/a7ul/vibes/main/packages/sdk/skills/vibes-sdk.md -o .claude/agents/vibes-sdk.md
See the Agent Skill page for global install, manual setup, and details on how it works.

Troubleshooting

Wrong registry: npm:@vibesjs/sdk does nothing

If you import from npm:@vibesjs/sdk instead of jsr:@vibesjs/sdk, the import will resolve silently but produce no useful exports — the npm name is a placeholder stub. Fix: Always use the JSR registry:
// deno.json
{
  "imports": {
    "@vibesjs/sdk": "jsr:@vibesjs/sdk@^1.0"   // ✓ correct
  //  "@vibesjs/sdk": "npm:@vibesjs/sdk"        // ✗ wrong — stub package
  }
}

Zod version mismatch (Zod v3 vs v4)

Vibes requires Zod v4. If you install zod without a version constraint you may get Zod v3, which uses a different API. Symptoms include TypeScript errors on z.object, z.string, etc. Fix:
# Node.js
npm install zod@^4

# Deno — ensure your import map pins the version
"zod": "npm:zod@^4"

Deno cache corruption

If Deno reports an empty module or missing export for a package that exists, its local cache entry may be corrupted. This can happen after a failed download. Detect: The import resolves but the module exports nothing (e.g. import { z } from "zod" gives z is undefined). Fix: Clear the corrupted cache entry and re-run:
# Remove the specific package version from Deno's npm cache
rm -rf ~/Library/Caches/deno/npm/registry.npmjs.org/<package>/<version>

# Then re-run your script — Deno will re-fetch
deno run --allow-env --allow-net hello.ts
Replace <package> and <version> with the affected package (e.g. zod/4.0.0).

Next steps

Hello World Tutorial

Build a complete weather agent with tools, structured output, and tests in one progressive tutorial.

Introduction

Learn the design philosophy and why Vibes was built.