skills/beam/beam-tools/create-beam-agent/SKILL.md
Create a Beam AI agent from a YAML description by generating a JSON spec and deploying it via the complete graph API. Load when user says "create beam agent", "deploy beam agent", "build a beam agent", "create agent from yaml", or provides a YAML agent spec and wants it deployed to Beam.
npx skillsauth add beam-ai-team/beam-next-skills create-beam-agentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Deploy a Beam agent from a YAML description using scripts/create_agent_from_prompt.py.
The skill translates the YAML into a typed JSON spec and calls the Beam complete graph API.
BEAM_API_KEY and BEAM_WORKSPACE_ID set in .envrequests Python package installed (pip3 install requests)scripts/create_agent_from_prompt.py (in project root)Entry node is always bare — no toolConfiguration, no params, no prompt. Objective = "Entry Node". If the YAML marks a processing node as is_entry: true, create a separate bare entry node and connect it to that processing node.
toolFunctionName is auto-generated by the script as GPTAction_Custom_{CamelCaseName} from the tool_name. Never set it manually in the spec.
Linked params use linked_node + linked_param in the spec (not linked_node_id as YAML may use). linked_node = the key of the source node in the spec.
Spec node keys = snake-case IDs matching the YAML id fields. The script generates all UUIDs — never put UUIDs in the spec.
on_error: "CONTINUE" only for non-critical nodes (e.g. Slack notifications). All others use "STOP".
{
"agentName": "string",
"agentDescription": "string",
"personality": "string",
"restrictions": "string",
"prompts": ["example prompt 1", "example prompt 2"],
"nodes": [
{
"key": "entry",
"objective": "Entry Node",
"is_entry": true,
"x": 250, "y": 0,
"edges": [{ "target": "first-processing-node", "name": "", "condition": "" }]
},
{
"key": "node-key",
"name": "Tool Display Name",
"objective": "What this node does",
"is_entry": false,
"x": 250, "y": 200,
"model": "BEDROCK_CLAUDE_SONNET_4",
"tool_name": "Tool Display Name",
"tool_description": "One-line description",
"prompt": "Full LLM instruction prompt",
"on_error": "STOP",
"enable_retry": false,
"retry_count": 1,
"retry_wait_ms": 1000,
"fallback_models": null,
"evaluation_criteria": [],
"input_params": [
{
"name": "param_name",
"description": "what this param is",
"type": "string|object|number|boolean",
"is_array": false,
"fill_type": "static|linked|user_fill|ai_fill",
"static_value": null,
"linked_node": null,
"linked_param": null,
"output_example": null,
"required": true,
"position": 0
}
],
"output_params": [
{
"name": "param_name",
"description": "what this output contains",
"type": "string|object|number|boolean",
"is_array": false,
"output_example": null,
"position": 0
}
],
"edges": [
{ "target": "next-node-key", "name": "Edge label", "condition": "" }
]
}
]
}
y=0, processing nodes at y=200, x increases by 300 per step| Value | When to use |
|---|---|
| static | Fixed hardcoded value — set static_value |
| linked | Flows from a parent node's output — set linked_node + linked_param |
| user_fill | User provides at runtime (first processing node inputs) |
| ai_fill | AI extracts from conversation context automatically |
BEDROCK_CLAUDE_SONNET_4 — default, fast, most tasksBEDROCK_CLAUDE_OPUS_4_5 — complex generation/reasoning"condition": """condition": "sum is odd" / "condition": "status is approved" etc.Read the YAML agent spec and extract:
name, description, personality, restrictions, promptsid (→ key), objective, x/y, on_error, retry settings, tool.*, edgesname, description, type, fill_type, static_value, linked_node_id (→ linked_node), linked_param, required, position, is_arrayname, description, type, is_array, positionApply the rules:
is_entry: false on all processing nodes (even if YAML said is_entry: true)linked_node_id → spec linked_node (uses the key / YAML id value)Write the spec JSON to /tmp/beam_agent_spec.json.
python3 scripts/create_agent_from_prompt.py --spec-file /tmp/beam_agent_spec.json --dry-run 2>&1 | head -30
Verify the node summary output looks correct (node names, input/output counts, linked params).
python3 scripts/create_agent_from_prompt.py --spec-file /tmp/beam_agent_spec.json
Report the Agent ID and Draft Graph ID to the user.
Given YAML with nodes: extract → transform → generate-report → notify
Spec nodes:
entry (bare, y=0) → extract-yardi-data (y=200, x=250) → transform-validate (y=200, x=550) → generate-report (y=200, x=850) → notify-team (y=200, x=1150)
| Error | Cause | Fix |
|---|---|---|
| Linked param 'node.param' not found | linked_node or linked_param typo | Check the source node's key and output param name match exactly |
| API Error 400 | Malformed payload | Run --dry-run, inspect JSON for missing fields |
| API Error 401 | Bad API key | Check BEAM_API_KEY in .env |
| Agent created but nodes empty | Wrong toolFunctionName prefix | Script auto-handles — ensure tool_name is set on every non-entry node |
create_agent_from_prompt.py
Usage:
python3 scripts/create_agent_from_prompt.py --spec-file FILE
python3 scripts/create_agent_from_prompt.py --spec-file FILE --dry-run
echo '<json>' | python3 scripts/create_agent_from_prompt.py
What it does:
- Pre-generates UUIDs for all nodes, tool configs, output params
- Resolves linked params by UUID lookup
- Builds originalTool block (required by API)
- POSTs to /agent-graphs/complete (draft status)
- Returns Agent ID, Draft Graph ID, Active Graph ID
development
--- name: taste-skill type: skill version: '1.0' author: Leonxlnx (packaged by Zhichao Li) category: general tags: - frontend - design - anti-slop - landing-page updated: '2026-06-11' visibility: public description: Anti-slop frontend skill for landing pages, portfolios, and redesigns. The agent reads the brief, infers the right design direction, and ships interfaces that do not look templated. Real design systems when applicable, audit-first on redesigns, strict pre-flight check. license: MIT.
development
Use when communicating quantitative information in any form — Slack updates, emails, reports, decks, dashboards, landing pages, product UI, public talks. Covers two integrated layers: (1) making numbers semantically meaningful (translation, anchoring, simplification, story-pairing) and (2) showing numbers cleanly (chart vs table vs prose, chart-by-message, pre-attentive emphasis, color discipline, decluttering). Distilled and integrated from *Show Me the Numbers* (Stephen Few) and *Make Numbers Count* (Chip Heath & Karla Starr). Not for raw data analysis or statistics — this is about communication of numbers, not their derivation.
development
Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.
tools
Stateful multi-session tutor adapted for Beam — teach a stakeholder to understand, trust, and operate a specific agent, or teach a Solution Engineer a client's business process for delivery. Grounds every lesson in Knowledge Hub sources (real agent graphs, real tasks, transcripts, Linear) before any web resource. Also works for any general topic. Trigger on "teach me", "beam teach", "教我", "onboard <person> on <agent>", "help <stakeholder> understand the agent", "learn this client's process".