Helps work with the b00t datum system - TOML-based configuration for AI models, providers, and services. Datums are stored in ~/.dotfiles/_b00t_/ and specify WHICH environment variables are required (not the values). Enables DRY approach by centralizing configuration in Rust, exposed to Python via PyO3.
Manages b00t's TOML-based datum system for AI providers and models. Creates and validates datums that specify required environment variables (not values), enabling DRY configuration via Rust PyO3 bindings. Activates when creating provider/model datums, validating environment setup, or listing available AI services.
/plugin marketplace add elasticdotventures/_b00t_/plugin install elasticdotventures-b00t@elasticdotventures/_b00t_This skill is limited to using the following tools:
The b00t datum system provides declarative TOML-based configuration for AI models, providers, and other services. This skill helps you:
Activate this skill when you see phrases like:
Provider Datums (~/.dotfiles/_b00t_/*.ai.toml):
Model Datums (~/.dotfiles/_b00t_/*.ai_model.toml):
[env]
# Required: Must be present in .env file
required = ["PROVIDER_API_KEY"]
# Optional: Default values for non-secret configuration
defaults = { PROVIDER_API_BASE = "https://api.provider.com" }
NEVER store actual API keys in datums - only specify WHICH variables are needed.
Actual values go in .env file, loaded via direnv.
openrouter.ai.toml)[b00t]
name = "openrouter"
type = "ai"
hint = "OpenRouter multi-model gateway - access 200+ models via single API"
[models.qwen-2_5-72b-instruct]
capabilities = "text,chat,code,reasoning,multilingual"
context_length = 32768
cost_per_1k_input_tokens = 0.00035
cost_per_1k_output_tokens = 0.00040
max_tokens = 4096
[models.claude-3-5-sonnet]
capabilities = "text,chat,code,vision,reasoning"
context_length = 200000
cost_per_1k_input_tokens = 0.003
cost_per_1k_output_tokens = 0.015
max_tokens = 8192
[env]
required = ["OPENROUTER_API_KEY"]
defaults = { OPENROUTER_API_BASE = "https://openrouter.ai/api/v1" }
qwen-2.5-72b.ai_model.toml)[b00t]
name = "qwen-2.5-72b"
type = "ai_model"
hint = "Alibaba's Qwen 2.5 72B - strong reasoning and multilingual capabilities"
[ai_model]
provider = "openrouter"
size = "large"
capabilities = ["chat", "code", "reasoning"]
litellm_model = "openrouter/qwen/qwen-2.5-72b-instruct"
api_base = "https://openrouter.ai/api/v1"
api_key_env = "OPENROUTER_API_KEY"
rpm_limit = 60
context_window = 32768
enabled = true
access_groups = ["default"]
[ai_model.parameters]
max_tokens = 4096
temperature = 0.7
[ai_model.metadata]
family = "qwen-2.5"
provider_model_id = "qwen/qwen-2.5-72b-instruct"
cost_per_1k_input = 0.35
cost_per_1k_output = 0.40
from b00t_j0b_py import create_pydantic_agent
# Create agent from datum (validates env automatically)
agent = create_pydantic_agent(
model_datum_name="qwen-2.5-72b",
system_prompt="You are a helpful assistant"
)
result = await agent.run("What is the capital of France?")
import b00t_py
# Load datum from Rust (DRY - no Python duplication)
datum = b00t_py.load_ai_model_datum("qwen-2.5-72b", "~/.dotfiles/_b00t_")
# Validate environment
validation = b00t_py.check_provider_env("openrouter", "~/.dotfiles/_b00t_")
if not validation["available"]:
print(f"Missing: {validation['missing_env_vars']}")
# List available providers and models
providers = b00t_py.list_ai_providers("~/.dotfiles/_b00t_")
models = b00t_py.list_ai_models("~/.dotfiles/_b00t_")
~/.dotfiles/_b00t_/provider.ai.toml~/.dotfiles/_b00t_/model-name.ai_model.toml# Via Python
python3 -c "import b00t_py; print(b00t_py.list_ai_providers('~/.dotfiles/_b00t_'))"
# Check specific provider
python3 -c "import b00t_py; print(b00t_py.check_provider_env('openrouter', '~/.dotfiles/_b00t_'))"
ALWAYS:
NEVER:
~/.dotfiles/_b00t_/*.ai.toml and ~/.dotfiles/_b00t_/*.ai_model.tomlb00t-py/src/lib.rs (Rust functions exposed to Python)b00t-j0b-py/src/b00t_j0b_py/pydantic_ai_integration.py.env (gitignored, loaded via direnv)b00t-j0b-py/.env.example[b00t]
name = "openrouter"
type = "ai"
hint = "OpenRouter multi-model gateway"
[models.qwen-2_5-72b-instruct]
capabilities = "text,chat,code"
cost_per_1k_input_tokens = 0.00035
[env]
required = ["OPENROUTER_API_KEY"]
defaults = { OPENROUTER_API_BASE = "https://openrouter.ai/api/v1" }
[b00t]
name = "my-model"
type = "ai_model"
[ai_model]
provider = "openrouter"
litellm_model = "openrouter/qwen/qwen-2.5-72b-instruct"
api_key_env = "OPENROUTER_API_KEY"
"Missing environment variable"
.env file has the keydirenv allow to load environmentenv.required"Provider not found"
~/.dotfiles/_b00t_/provider.ai.toml exists[b00t] section with type = "ai""Model not found"
~/.dotfiles/_b00t_/model.ai_model.toml exists[ai_model] section has provider field matching existing provider datumdocs/ENVIRONMENT_SETUP.md - Environment variable patterndocs/PYDANTIC_AI_ANALYSIS.md - Pydantic-AI integrationb00t-c0re-lib/src/datum_ai_model.rs - Rust datum implementationb00t-py/src/lib.rs - PyO3 bindingsThis skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.