skills/beam/beam-tools/beam-graph-edit/SKILL.md
Edit Beam agent graph nodes — update prompts, input/output param descriptions, and push changes via PUT. Load when user says 'edit beam graph', 'update beam node', 'change beam prompt', 'push graph changes', 'modify agent graph', 'update param description', or needs to modify a live Beam agent's graph configuration. Uses the proven GET-clean-modify-PUT cycle that bypasses the unreliable PATCH endpoint.
npx skillsauth add beam-ai-team/beam-next-skills beam-graph-editInstall 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.
Edit Beam agent graph nodes and push changes reliably via the PUT full-graph approach.
Modify prompts, input/output parameter descriptions, and node configurations on live Beam agents. Uses the safe GET-clean-modify-PUT cycle.
.env has BEAM_API_KEY and BEAM_WORKSPACE_ID)/usr/local/bin/python3.13 00-system/skills/beam/beam-master/scripts/check_beam_config.py --json
If not configured, follow beam-master setup.
If user provides name but not ID:
/usr/local/bin/python3.13 00-system/skills/beam/beam-master/scripts/list_agents.py --json
Match by name, confirm with user, note the agent ID.
/usr/local/bin/python3.13 00-system/skills/beam/beam-master/scripts/get_agent_graph.py --agent-id AGENT_ID --json
Parse the response. Show user a summary:
Graph for: [Agent Name]
Nodes: [count]
# | Objective | toolFunctionName
----|------------------------------|---------------------------
1 | Identify department | GPTAction_Custom_Dept_Xxx
2 | Process email input | GPTAction_Custom_Proc_Yyy
3 | Send escalation email | MicrosoftOutlookCC_Zzz
Use beam_graph_utils.summarize_graph() for this.
Ask user:
Before making changes, read:
00-system/skills/beam/beam-master/references/graph-push-gotchas.md
Write a Python snippet using beam_graph_utils:
import sys, json
sys.path.insert(0, '00-system/skills/beam/beam-master/scripts')
from beam_client import get_client
from beam_graph_utils import (
prepare_graph_for_put,
find_node_by_tool_function,
update_node_prompt,
update_param_description,
)
AGENT_ID = "..."
client = get_client()
# GET and clean
response = client.get(f'/agent-graphs/{AGENT_ID}')
payload = prepare_graph_for_put(response)
nodes = payload['nodes']
# Find target node (ALWAYS by toolFunctionName, never by ID)
node = find_node_by_tool_function(nodes, 'TOOL_FUNCTION_NAME')
# Apply change (one of):
update_node_prompt(node, NEW_PROMPT_TEXT)
update_param_description(node, 'output', 'param_name', NEW_DESC)
update_param_description(node, 'input', 'param_name', NEW_DESC)
# Save payload
with open('/tmp/beam_graph_payload.json', 'w') as f:
json.dump(payload, f, indent=2)
Show the diff to user before pushing (old vs new values).
Dry-run first:
/usr/local/bin/python3.13 03-skills/beam-graph-edit/scripts/push_graph.py \
--agent-id AGENT_ID --payload-file /tmp/beam_graph_payload.json --dry-run
Then push:
/usr/local/bin/python3.13 03-skills/beam-graph-edit/scripts/push_graph.py \
--agent-id AGENT_ID --payload-file /tmp/beam_graph_payload.json
Add --save-and-publish to publish immediately.
The push script auto-verifies node count. For detailed verification, GET the graph again and check specific fields by matching on toolFunctionName.
If saved as draft: "Changes saved as draft. Open Beam UI to re-link any LINKED inputs if needed."
update_node_prompt(node, """Your new prompt here...""")
update_param_description(node, 'output', 'identification_result', """{
"field": "new schema description"
}""")
update_param_description(node, 'input', 'email_address', """New description...""")
edits = {
'GPTAction_Custom_Tool1': {'prompt': 'new prompt...'},
'GPTAction_Custom_Tool2': {'params': [
{'type': 'output', 'name': 'result', 'description': 'new desc'}
]},
}
for fn_name, changes in edits.items():
node = find_node_by_tool_function(nodes, fn_name)
if changes.get('prompt'):
update_node_prompt(node, changes['prompt'])
for pc in changes.get('params', []):
update_param_description(node, pc['type'], pc['name'], pc['description'])
push_graph.py — CLI for pushing cleaned graph payloads
python push_graph.py --agent-id ID --payload-file FILE [--dry-run] [--clean] [--save-and-publish] [--json]
| Error | Cause | Solution |
|-------|-------|---------|
| PATCH "Cannot read properties of undefined" | Unreliable PATCH endpoint | Use this skill's PUT workflow |
| PUT 400 validation errors | Unstripped server fields | Use prepare_graph_for_put() |
| Prompt not updating | GET/PUT path asymmetry | Use update_node_prompt() |
| Node ID not found after push | IDs regenerate on PUT | Match by toolFunctionName |
| Output param validation error | Missing isArray | clean_output_param() auto-adds it |
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".