Verify Trayscale
DeedleFake/trayscale
Drive the Trayscale GTK 4 / Libadwaita desktop UI the way a user does.
Generate a validated Edge Agents workflow JSON (.workflow.json) from a natural-language description — the node-graph that runs on Edge Agents edge/IoT agents, built from triggers (timer, startup…
$ npx skills add ForestHubAI/edge-agents --skill workflow-generate -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ForestHubAI/edge-agents workflow-generate --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ForestHubAI/edge-agents.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/workflow-generate .claude/skills/workflow-generate && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "workflow-generate" agent skill from https://github.com/ForestHubAI/edge-agents/tree/main/skills/workflow-generate into .claude/skills/workflow-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-generate", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ForestHubAI/edge-agents/tree/main/skills/workflow-generateType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ForestHubAI/edge-agents --skill workflow-generate -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ForestHubAI/edge-agents workflow-generate --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ForestHubAI/edge-agents.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/workflow-generate .agents/skills/workflow-generate && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "workflow-generate" agent skill from https://github.com/ForestHubAI/edge-agents/tree/main/skills/workflow-generate into .agents/skills/workflow-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-generate", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ForestHubAI/edge-agents --skill workflow-generate -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ForestHubAI/edge-agents workflow-generate --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ForestHubAI/edge-agents.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/workflow-generate .cursor/skills/workflow-generate && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "workflow-generate" agent skill from https://github.com/ForestHubAI/edge-agents/tree/main/skills/workflow-generate into .cursor/skills/workflow-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-generate", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ForestHubAI/edge-agents.git --path skills/workflow-generate--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ForestHubAI/edge-agents --skill workflow-generate -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ForestHubAI/edge-agents workflow-generate --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ForestHubAI/edge-agents.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/workflow-generate .gemini/skills/workflow-generate && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "workflow-generate" agent skill from https://github.com/ForestHubAI/edge-agents/tree/main/skills/workflow-generate into .gemini/skills/workflow-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-generate", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ForestHubAI/edge-agents workflow-generateInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ForestHubAI/edge-agents --skill workflow-generate -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ForestHubAI/edge-agents.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/workflow-generate .github/skills/workflow-generate && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "workflow-generate" agent skill from https://github.com/ForestHubAI/edge-agents/tree/main/skills/workflow-generate into .github/skills/workflow-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-generate", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ForestHubAI/edge-agents --skill workflow-generate -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ForestHubAI/edge-agents workflow-generate --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ForestHubAI/edge-agents.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/workflow-generate .opencode/skills/workflow-generate && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "workflow-generate" agent skill from https://github.com/ForestHubAI/edge-agents/tree/main/skills/workflow-generate into .opencode/skills/workflow-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflow-generate", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
workflow-generateGenerate a validated Edge Agents workflow JSON (.workflow.json) from a natural-language description — the node-graph that runs on Edge Agents edge/IoT agents, built from triggers (timer, startup…
Workflow Generate is an agent skill from ForestHubAI/edge-agents. Generate a validated Edge Agents workflow JSON (.workflow.json) from a natural-language description — the node-graph that runs on Edge Agents edge/IoT agents, built from triggers (timer, startup, pin edge, threshold, MQTT, serial), GPIO/serial/MQTT I/O, LLM Agent nodes, and actuators. Builds the graph to match the workflow contract and drives it to zero errors through the fh-workflow CLI's structural + semantic validators. Use this whenever the user describes automation or agent behavior in prose and wants a…
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files (for example `examples/counter-agent.workflow.json`, `examples/gpio-pin.workflow.json` and `reference/functions.md`).
It works with React, Go and Linux. The repository describes itself as: The 30 MB open-source edge AI agent runtime. Run AI agents offline on Linux (Raspberry Pi, Jetson). GPIO, UART, MQTT as first-class nodes. Industrial protocols (OPC-UA, Modbus)… The licence is AGPL-3.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit dad48b7. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
nodenpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Workflow Generate loads about 3.2k tokens when it runs. Until then it costs about 234 tokens; SKILL.md has 1,694 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from ForestHubAI/edge-agents at commit dad48b7, republished under its AGPL-3.0 licence (© ForestHubAI). 1,694 words, ~3,203 tokens.
.claude/skills/workflow-generate/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.Turn a plain-language description into a *.workflow.json that conforms to the contract and
passes the CLI validators.
There is no constrained decoding here — a skill is a prompt, not a schema-locked decoder. Correctness comes from a generate → validate → fix loop, not from a perfect first draft. The contract gives you the shapes; the two CLI gates give you ground truth. Get close, then let the validators drive you to exit 0.
The user describes a workflow in prose and wants a usable *.workflow.json.
Do NOT use this skill for:
fh-workflow openfh-workflow check-schema / validate directlyAll validation runs through the fh-workflow CLI (the published
@foresthubai/workflow-cli package), invoked by its bare binary name — never
through any in-repo node …/fh-workflow.mjs path. The CLI carries its own bundled
copy of the contract, so it works from any directory and needs no edge-agents
checkout.
Before anything else, confirm the CLI is installed:
command -v fh-workflowIf that prints nothing, stop and tell the user to install it once with
npm i -g @foresthubai/workflow-cli, then continue. Do not fall back to a
repo-local node path — the whole point is that this skill runs anywhere the CLI is
on PATH.
A *.workflow.json is a cheap, throwaway text file — nothing is deployed, and
regenerating costs seconds. So the default posture is assume sensible defaults
and build, not interrogate. The fix for "don't decide things silently" is not an
interview up front; it's making the consequential assumptions visible in the
report (Step 5). Sort every unknown into one of three tiers:
int vs float), intervals/thresholds, debounce, QoS/retain, signal type when
a default is safe. Pick a sensible default and build — do NOT block on it.
These get listed in the Step 5 report so the user can change them. Most
parameters live here; asking about each would be the interrogation we avoid.Agent is even needed). Only these are worth AskUserQuestion, and only
when the description leaves them open.So: if the description determines the workflow, skip the interview entirely and
go to Step 2. When tier-3 unknowns remain, ask them — bundled into one
AskUserQuestion call (it takes up to 4 questions), each with the sensible
default as the first option, marked "(recommended)", so one click accepts it.
Never fire several questions one after another.
Typical pivotal points: the trigger (Ticker/OnStartup/OnPinEdge/Alarm/
OnThreshold/MQTT/serial), whether hardware (pins/serial/MQTT) is involved at all,
and whether an Agent/LLM node is needed.
Read reference/workflow.yaml next to this file — a snapshot of the
contract, the source of truth for every field shape. (The CLI carries its own
copy for validation; this bundled snapshot is your authoring reference. If the
two ever disagree, the CLI gates win.) Look up the specific *Node schemas you
need (each lists its required arguments) plus Edge, Expression,
OutputBinding, OutputDeclaration, Variable, and the Channel variants.
A few schemas are cross-referenced from reference/llmproxy.yaml (e.g.
ModelCapability) — follow llmproxy.yaml#/... refs into that sibling snapshot.
Read the reference fixtures in examples/ next to this file — they are
known-good, fully validated workflows that show the idioms by example:
counter-agent.workflow.json — Ticker → SetVariable → Agent: an agentTask
edge with a prompt, an OutputDeclaration in assign mode, an Expression
referencing a declared variable, a declaredVariables entry.gpio-pin.workflow.json — Ticker → ReadPin → WritePin: GPIOIN/GPIOOUT
channels referenced by id, an OutputBinding in emit mode, and a downstream
expression that references a node's emitted output (see Notes — by output
id, not the emit name), digital pins.Do not rely on any example files outside this skill folder — only these fixtures are guaranteed to exist and stay valid.
For the semantic rules the contract shape can't express — which fields are
truly required, why a schema-optional argument can still be mandatory — read
reference/parameters.md next to this file (§1 presence table, §3 optional
vs activationRules). Reach for it on demand, e.g. when validate reports a
missing-required-param. Two semantic facts worth knowing up front: validation
runs on the deserialized domain, not the raw JSON, so a file can pass
check-schema and still fail validate; and a workflow on an older
schemaVersion can be migrated with fh-workflow update <file>.
Only when the workflow defines or calls a reusable function — i.e. a
FunctionCall node and a non-empty top-level functions array — read
reference/functions.md next to this file (the functions analog of
parameters.md). It covers the semantics the contract shape can't show: a
function is a declaration (the signature — name, arguments, returns) plus
a body (its own canvas of nodes/edges); on the wire a Function is
{ functionInfo, outputAssignments, body }; a FunctionCall references its
target by functionId and carries the same flat uid-keyed arguments bag every
node uses (Expression for inputs, OutputBinding for returns); return values
are expressions on the declaration — there is no return node, and a return with
no assignment is a hard error. The default sensor→agent→actuator workflows use
none of this — skip it entirely unless a reusable function is genuinely in play.
Where to write it. Use the path the user gave. If they named only a folder,
write <name>.workflow.json inside it; if they gave a full path, use it verbatim.
If they gave nothing, default to the current working directory as
<name>.workflow.json. Always
end the filename in .workflow.json — that suffix is the convention the
tooling keys off.
Checklist for a clean first draft:
schemaVersion, nodes, edges,
functions, declaredVariables, channels); empty arrays are fine.id, type, position; the type discriminator matches a
contract node exactly; required arguments per that node's schema are set.ctrl-port edges (see Notes — connectivity is validated).channels and reference them by id from the nodes
that use them.references.The gates run in a fixed order, and the order is not optional: the structural schema check must be green before the semantic validator is run at all.
Gate 1 — structural (check-schema). Loop here until it passes.
fh-workflow check-schema <path>It catches shape errors (wrong type, missing required field, bad enum) with a
JSON-pointer path like /nodes/0/arguments. On any non-zero exit: read the
diagnostics, fix the file, and run check-schema again. Keep editing the
workflow until check-schema exits 0. Do not run validate while the schema
check is still failing — a malformed shape must never reach Gate 2.
Gate 2 — semantic (validate). Only once Gate 1 is green.
fh-workflow validate <path>It catches semantics: missing required parameters, unconnected nodes, type
mismatches, dangling references — reported as
✗ [category] message (node …, param …). On any non-zero exit: read the
diagnostics, fix the file, and go back to Gate 1 (a semantic fix can change
the shape, so re-check the schema first, then validate again). Repeat until
validate exits 0.
Cap at ~5 iterations. If errors remain after that, report the outstanding diagnostics honestly instead of claiming success. Never finish with either gate red.
Give the path to the validated file plus a short summary (trigger, nodes, data flow).
Then list the consequential assumptions you made — every tier-2 choice from Step 1 you defaulted rather than asked about (LLM model, numeric data types, intervals/thresholds, debounce, QoS, signal types, …), each with the value you picked. Keep mechanical defaults (positions, ids, variable names) out of this list. Close by asking whether any of these values should be changed — plainly, e.g. "Should any of these be adjusted?" — so nothing was decided silently and the user can correct it in one reply.
Finally, point at the natural next steps without doing either automatically:
fh-workflow open <path> — inspect and edit the workflow visually.fh-workflow deploy <path> — turn the file into a runnable docker-compose
bundle for an edge controller. The command interviews the operator for the
concrete values the workflow needs (pins, MQTT brokers, models, keys); the
workflow-deploy skill drives that wizard end to end.Offer both and stop — do not start the deploy yourself. Only proceed when the
user opts in, and then go through the workflow-deploy skill rather than calling
fh-workflow deploy ad hoc.
check-schema always comes first. Never run
validate while the schema check is still red; never finish with either gate
red. A workflow that wasn't taken through both gates to exit 0 is not done.reference/workflow.yaml (next to this file) — do not trust memory of the schema."ctrl" on both ends of control / agentTask edges.ctrl edges;
otherwise validate flags "will never run".Agent's model); parameters.md explains
which and why. If validate says "missing required parameter", add it even
though check-schema passed."output") as the reference varId, not the emit name
— the name is only a display alias. The wrong key surfaces as a
stale reference in validate. See gpio-pin.workflow.json.type/mode tag must match the contract
exactly, or Gate 1 rejects the whole branch.© ForestHubAI, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 6 other files in skills/workflow-generate of ForestHubAI/edge-agents.
Open the folder on GitHubat commit dad48b7
Workflow Generate next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Workflow Generate this skillForestHubAI/edge-agents | 105 | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| Verify TrayscaleDeedleFake/trayscale | 1.1k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Browserwingbrowserwing/browserwing | 1.4k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Temporal Developerlatitude-dev/latitude-llm | 4.7k | — | ~1.5k | Automated safety check: Pass | MIT | |
| Regenerate PgoDeedleFake/trayscale | 1.1k | — | ~984 | Automated safety check: Pass | MIT | |
| Tk Impact Analysistonkeeper/tonkeeper-web | 444 | — | ~3.7k | Automated safety check: Pass | Apache-2.0 |
DeedleFake/trayscale
Drive the Trayscale GTK 4 / Libadwaita desktop UI the way a user does.
browserwing/browserwing
Browser automation platform with 78 built-in scripts and full CLI.
latitude-dev/latitude-llm
This skill should be used when the user asks to "create a Temporal workflow", "write a Temporal activity", "debug stuck workflow", "fix non-determinism error", "Temporal Python", "Temporal…
DeedleFake/trayscale
Regenerate cmd/trayscale/default.pgo by launching an isolated Trayscale, driving representative UI paths under PPROF, then replacing the profile.
tonkeeper/tonkeeper-web
Analyze QA regression impact for Tonkeeper Web by comparing the current branch with the relevant release tag, reviewing sources/Web/regress.txt, and recommending test blocks, missing coverage, extra…
stencil-hq/slab
Writing, editing, and rendering Slab documents (.slab) — the declarative design language for app screens, posters, terminal UIs, and interactive components.
Generate a validated Edge Agents workflow JSON (.workflow.json) from a natural-language description — the node-graph that runs on Edge Agents edge/IoT agents, built from triggers (timer, startup…. Workflow Generate is an agent skill from ForestHubAI/edge-agents.json) from a natural-language description — the node-graph that runs on Edge Agents edge/IoT agents, built from triggers (timer, startup, pin edge, threshold, MQTT, serial), GPIO/serial/MQTT I/O, LLM Agent nodes, and actuators.
Workflow Generate fits situations like: GPIO/serial/MQTT I/O; LLM Agent nodes; describes automation; agent behavior in prose and wants a ready-to-run workflow file — e.g.
Run `npx skills add ForestHubAI/edge-agents --skill workflow-generate -a claude-code`. Or copy the skill folder (skills/workflow-generate in ForestHubAI/edge-agents) into .claude/skills/workflow-generate in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ForestHubAI/edge-agents --skill workflow-generate -a codex`. Or copy the skill folder (skills/workflow-generate in ForestHubAI/edge-agents) into .agents/skills/workflow-generate in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ForestHubAI/edge-agents --skill workflow-generate -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/workflow-generate, .gemini/skills/workflow-generate, .github/skills/workflow-generate and .opencode/skills/workflow-generate in your project.
Going by SKILL.md and its folder, Workflow Generate needs the command-line tools its instructions call (node and npm). Our summary lists: Node.js; Docker.
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Workflow Generate is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Workflow Generate: Verify Trayscale (DeedleFake/trayscale, 1.1k stars), Browserwing (browserwing/browserwing, 1.4k stars), Temporal Developer (latitude-dev/latitude-llm, 4.7k stars) and Regenerate Pgo (DeedleFake/trayscale, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ForestHubAI (a GitHub organization) maintains it in ForestHubAI/edge-agents, which has 105 GitHub stars. The repository was last updated on August 24, 2026.
Source: ForestHubAI/edge-agents on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.