Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Beddel

v0.1.0

Execute declarative YAML AI workflows with branching, retry, multi-provider LLM support, guardrails, and OpenTelemetry tracing via the Beddel Python SDK. Use...

0· 87·0 current·0 all-time
byBota na Rede@botanarede

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for botanarede/beddel.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Beddel" (botanarede/beddel) from ClawHub.
Skill page: https://clawhub.ai/botanarede/beddel
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Required env vars: GEMINI_API_KEY
Required binaries: python3, pip, beddel
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install beddel

ClawHub CLI

Package manager switcher

npx clawhub@latest install beddel
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
The skill is an instruction-only adapter for the Beddel CLI and correctly requires python/pip and the beddel binary. However the metadata forces a single primary credential (GEMINI_API_KEY) even though the SKILL.md repeatedly describes 'multi-provider LLM support' and says 'any LiteLLM-supported provider' can be used. Requiring GEMINI_API_KEY as the only required env is narrower than the prose suggests and could be either a convenience choice or an unnecessary hard dependency.
!
Instruction Scope
The runtime instructions encourage running arbitrary shell commands via the `tool`/`shell_exec` primitive and include a bundled workflow that automatically installs or reinstalls an OpenClaw plugin (`openclaw plugins install @botanarede/beddel`). The docs also describe a `$env` namespace that reads os.environ (no per-variable restriction), meaning workflows can access arbitrary environment variables. Both the automated plugin-install step and the ability for workflows to reference arbitrary env vars broaden the skill's operational surface beyond simply 'execute workflows' and create real potential for accidental modification of the agent environment or secret exposure.
Install Mechanism
The skill is instruction-only (no install spec) which is lower risk for local code writes. However the provided example workflow instructs the agent to install an external OpenClaw plugin (`@botanarede/beddel`) using the agent's CLI, which causes the agent to modify its own plugin set. That side-effect is not handled by an install spec and could install third-party code without additional vetting.
!
Credentials
The skill declares and requires GEMINI_API_KEY (primary credential). That is reasonable for using the Gemini provider, but the skill claims multi-provider support and its variable-resolution docs explicitly allow reading arbitrary env vars via `$env.<NAME>`. The declared required env list does not reflect the wider capability to read any environment variable at runtime, which makes the single declared credential appear insufficient and potentially misleading. Workflows could read or surface unrelated secrets if crafted or misused.
Persistence & Privilege
The skill does not request always:true and does not explicitly change other skills' configs, but example workflows directly call `openclaw plugins install ...` which modifies the agent's plugin set. This is a significant side-effect (modifies agent environment/plugins) even though it's not represented as elevated 'always' privilege in the manifest.
What to consider before installing
This skill appears to be a reasonable adapter for the Beddel CLI, but exercise caution before installing or granting credentials. Actionable steps to reduce risk: - Do not provide a high-privilege or broadly-scoped GEMINI_API_KEY to an untrusted skill. Prefer a scoped/test key or run within an isolated environment. - Inspect any workflow YAML you run (especially bundled examples). Look for `$env.` uses and remove or audit references to environment variables you don't want exposed. - Be cautious about running the bundled `setup-beddel` workflow: it will call `openclaw plugins install @botanarede/beddel` and thus change the agent's plugins. Verify the plugin source (review @botanarede/beddel repo) before allowing installation. - If you need multi-provider support, confirm how to supply other provider keys (the skill declares only GEMINI_API_KEY). Consider whether you can run beddel CLI directly in a sandbox with only the intended provider credentials present. - Prefer running this skill in an isolated container or ephemeral environment where installing plugins and running shell commands cannot affect sensitive host resources. If you want a more confident assessment, provide the upstream plugin/package source (homepage/repository) for @botanarede/beddel and confirmation whether the skill author intends GEMINI_API_KEY to be mandatory vs. recommended; that would clarify proportionality and trust.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

🔄 Clawdis
Binspython3, pip, beddel
EnvGEMINI_API_KEY
Primary envGEMINI_API_KEY
latestvk97a4cg7mxkwv7g3far7230n7983hf9k
87downloads
0stars
1versions
Updated 1mo ago
v0.1.0
MIT-0

Beddel

Declarative YAML workflow engine for AI pipelines — run multi-step LLM chains with branching, guardrails, retry, and observability out of the box.

Prerequisites

  • Python 3.11+ (python3.11 --version)
  • pip for Python 3.11 (python3.11 -m pip --version)
  • An LLM API key — any LiteLLM-supported provider works. Gemini recommended:
export GEMINI_API_KEY="your-key"

Installation

python3.11 -m pip install "beddel[all]"
beddel version

Note: System Python may be 3.10. Always use python3.11 explicitly.

Quick Start

  1. Write a workflow file hello.yaml:
id: hello
name: Hello World
input_schema:
  topic: { type: str, required: true }
steps:
  - id: greet
    primitive: llm
    config:
      model: gemini/gemini-2.0-flash
      prompt: "Write a one-sentence greeting about $input.topic"
      max_tokens: 50
  1. Run it:
beddel run hello.yaml -i topic="AI agents" --json-output

Tool Integration (OpenClaw Plugin)

The beddel tool is available via the OpenClaw plugin @botanarede/beddel:

openclaw plugins install @botanarede/beddel

Once installed, the agent can invoke beddel with actions: run, validate, list-primitives.

The bundled example examples/setup-beddel.yaml automates this installation — see Bundled Example below.

CLI Reference

CommandDescription
beddel run <file> [-i key=val] [--json-output]Execute a workflow
beddel validate <file>Validate YAML syntax and schema
beddel list-primitivesShow available primitives
beddel serve -w <file> [--port 8000]Serve workflow as HTTP endpoint
beddel versionPrint installed version

Core Concepts

A workflow is a YAML file with an id, name, optional input_schema, and a list of steps. Each step declares a primitive (the unit of work) and a config (primitive-specific parameters).

Steps execute sequentially. Each step's output is available to subsequent steps via $stepResult.<step_id>.<path>.

See references/ for full schema documentation.

Primitives

PrimitivePurpose
llmSingle-turn LLM call with streaming support
chatMulti-turn conversation with message history
output-generatorTemplate-based output rendering (JSON, Markdown, text)
guardrailData validation with strategies: raise, return_errors, correct, delegate
call-agentNested workflow invocation with depth tracking
toolExternal function call — shell_exec is built-in
agent-execUnified adapter for external agent delegation

Execution Strategies

Each step can declare an execution_strategy to control error handling:

StrategyBehavior
failStop workflow on error (default)
skipLog error, continue to next step
retryRetry with exponential backoff and jitter
fallbackExecute an alternative step on failure
delegateDelegate error recovery to agent judgment

Variable Resolution

NamespaceExampleSource
$input$input.topicRuntime inputs (-i key=val)
$stepResult$stepResult.greet.contentPrevious step outputs
$env$env.GEMINI_API_KEYEnvironment variables

Key paths for step results:

  • tool steps: $stepResult.<id>.result.stdout, .result.exit_code
  • llm steps: $stepResult.<id>.content
  • guardrail steps: $stepResult.<id>.data.<field>, .valid

Bundled Example: setup-beddel

This workflow checks whether the @botanarede/beddel OpenClaw plugin is installed and installs it if needed. It demonstrates 3 of the 7 primitives: tool, guardrail, and conditional execution via if.

id: setup-beddel
name: Beddel Plugin Setup
description: Install or update the @botanarede/beddel OpenClaw plugin and verify it loads.

steps:
  - id: check_plugin
    primitive: tool
    config:
      tool: shell_exec
      arguments:
        cmd: "python3.11 -c \"import subprocess,json,re;r=subprocess.run(['openclaw','plugins','list'],capture_output=True,text=True);has=bool(re.search(r'beddel',r.stdout));loaded=bool(re.search(r'beddel.*loaded',r.stdout));print(json.dumps({'action':'OK'if loaded else'REINSTALL'if has else'INSTALL'}))\""

  - id: validate_check
    primitive: guardrail
    config:
      data: "$stepResult.check_plugin.result.stdout"
      schema:
        fields:
          action: { type: str, required: true }
      strategy: correct

  - id: install_plugin
    primitive: tool
    config:
      tool: shell_exec
      arguments:
        cmd: "openclaw plugins install @botanarede/beddel"
      timeout: 120
    if: "$stepResult.validate_check.data.action != 'OK'"

  - id: verify
    primitive: tool
    config:
      tool: shell_exec
      arguments:
        cmd: "openclaw plugins info beddel"

What each step demonstrates

StepPrimitiveFeature
check_plugintoolDeterministic check via shell_exec — outputs JSON without LLM
validate_checkguardrailcorrect strategy — parses JSON string, strips markdown fences, validates schema
install_plugintoolConditional execution (if) — skips when plugin already loaded. timeout: 120 for network ops
verifytoolPost-install verification

Run it:

beddel run examples/setup-beddel.yaml --json-output

Security & Privacy

  • Secrets: Use $env.* variables — never hardcode API keys in workflow YAML
  • shell_exec: Runs with shell=False (no shell injection). Commands are split via shlex.split(). Shell operators (|, &&, >) are sanitized in beddel 0.1.1+
  • Subprocess sandbox: Default timeout 60s, max stdout 1MB per stream, configurable per step

External Endpoints

EndpointWhenPurpose
LLM provider API (e.g. generativelanguage.googleapis.com)llm, chat, guardrail (delegate) stepsModel inference
PyPI (pypi.org)Installation onlyPackage download
npm registry (registry.npmjs.org)Plugin install stepPlugin download

Trust Statement

Beddel executes user-defined YAML workflows. It does not phone home, collect telemetry by default, or transmit data beyond the configured LLM provider endpoints. OpenTelemetry export is opt-in.

Observability

Beddel emits OpenTelemetry spans for every workflow and step execution:

  • beddel.workflow.execute — root span per workflow run
  • beddel.step.<primitive> — child span per step
  • gen_ai.usage.* attributes on LLM steps (prompt/completion tokens)

Enable with any OTel-compatible collector via standard OTEL_* environment variables.

Troubleshooting

ErrorCauseFix
BEDDEL-PRIM-300Tool not foundEnsure tool name is shell_exec (built-in). Custom tools need -t name=module:func
BEDDEL-RESOLVE-001Unresolvable variableCheck step id spelling and result path. Tool results use .result.stdout, LLM uses .content
BEDDEL-GUARD-201Guardrail validation failedCheck schema field types. Use strategy: correct for JSON string inputs
python3.11: not foundWrong Python versionInstall Python 3.11+. System Python may be 3.10
Step shows SKIPPEDif condition was false or execution_strategy: skipExpected behavior — downstream steps should handle SKIPPED values

Advanced: Python SDK

from beddel import WorkflowExecutor, VariableResolver

resolver = VariableResolver()
resolver.register_namespace("secrets", lambda path, ctx: get_secret(path))

executor = WorkflowExecutor(resolver=resolver)
result = await executor.execute(workflow, {"topic": "AI"})

For FastAPI integration: beddel serve -w workflow.yaml --port 8000

References

Additional documentation in references/ (loaded on demand):

  • workflow-format.md — Complete YAML schema
  • primitives.md — All 7 primitives with full config options
  • execution-strategies.md — 5 strategies with examples
  • variable-resolution.md — Namespaces, custom resolvers, error handling

Comments

Loading comments...