GenesisTools gt:automate
install
source · Clone the upstream repo
git clone https://github.com/genesiscz/GenesisTools
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/genesiscz/GenesisTools "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/genesis-tools/skills/automate" ~/.claude/skills/genesiscz-genesistools-gt-automate && rm -rf "$T"
manifest:
plugins/genesis-tools/skills/automate/SKILL.mdsource content
Automate Tool Usage Guide
Create and run reusable automation presets that chain GenesisTools commands.
Quick Reference
| Task | Command |
|---|---|
| Run a preset | |
| Run with overrides | |
| Dry run (preview) | |
| List presets | |
| Show preset details | |
| Create interactively | |
Creating Presets via Conversation
When a user wants to create an automation, help them build the JSON preset:
- Identify the workflow steps -- What tools commands do they need?
- Identify variables -- What values change between runs?
- Identify conditions -- Are there any if/else branches?
- Build the JSON -- Write the preset file
- Save it -- Write to
~/.genesis-tools/automate/presets/<name>.json
Preset JSON Format (Full Schema)
{ "$schema": "genesis-tools-preset-v1", "name": "Preset Name", "description": "What this preset does", "trigger": { "type": "manual" }, "vars": { "varName": { "type": "string", "description": "Human description", "default": "value", "required": true } }, "steps": [ { "id": "unique-step-id", "name": "Human-readable name", "action": "github search", "params": { "query": "search term", "--repo": "owner/repo", "--format": "json" }, "output": "resultVar", "onError": "stop", "interactive": false } ] }
Variable Types
-- text values"string"
-- numeric values"number"
-- true/false"boolean"
Error Strategies (onError
)
onError
(default) -- halt execution on failure"stop"
-- log error and proceed to next step"continue"
-- silently skip and proceed"skip"
Expression Syntax
Expressions use
{{ }} delimiters and are resolved at runtime:
| Expression | Purpose | Example |
|---|---|---|
| Reference a preset variable | |
| Previous step's full output | |
| Nested output field | |
| Environment variable | |
| Boolean expression | |
When the entire value is a single expression, the raw type is preserved (boolean, number, object). When expressions are embedded in a larger string, they are interpolated as strings.
Built-in Actions
| Action | Purpose | Key Params |
|---|---|---|
| Conditional branch | (required), , (step IDs to jump to) |
| Print a message | |
| Ask user for input | , |
| Run a raw shell command | (required), (optional) |
| Set variables in context | Any key=value pairs in params |
Action Format for Tools Commands
The
action field maps directly to tools <action>:
=> runs"action": "github search"tools github search
=> runs"action": "collect-files-for-ai"tools collect-files-for-ai
=> runs"action": "azure-devops workitem"tools azure-devops workitem
Param Conventions
- Keys starting with
or--
become CLI flags- - Boolean
includes the flag,true
omits itfalse - Array values are joined with commas
- Other keys are treated as positional arguments (the key name is a label, only the value is passed)
Examples
Simple: Run a shell command and log result
{ "$schema": "genesis-tools-preset-v1", "name": "Hello Automate", "trigger": { "type": "manual" }, "vars": { "name": { "type": "string", "description": "Your name", "default": "World" } }, "steps": [ { "id": "greet", "name": "Say hello", "action": "log", "params": { "message": "Hello, {{ vars.name }}!" } }, { "id": "date", "name": "Get date", "action": "shell", "params": { "command": "date '+%Y-%m-%d'" }, "output": "currentDate" }, { "id": "done", "name": "Summary", "action": "log", "params": { "message": "Done at {{ steps.date.output }}" } } ] }
With Branching: Search and conditionally download
{ "$schema": "genesis-tools-preset-v1", "name": "Monthly Invoice Search", "trigger": { "type": "manual" }, "vars": { "startDate": { "type": "string", "description": "Start date", "default": "2026-01-01" } }, "steps": [ { "id": "search", "name": "Search Mail", "action": "macos-mail search", "params": { "query": "invoice", "--from": "{{ vars.startDate }}", "--format": "json" }, "output": "results" }, { "id": "check", "name": "Has results?", "action": "if", "condition": "{{ steps.search.output.count > 0 }}", "then": "download", "else": "empty" }, { "id": "download", "name": "Download", "action": "macos-mail download", "params": { "--ids": "{{ steps.search.output.ids }}" } }, { "id": "empty", "name": "No results", "action": "log", "params": { "message": "Nothing found." } } ] }
Running Presets
# By name (looks in ~/.genesis-tools/automate/presets/) tools automate run monthly-invoice-search # By file path tools automate run ./my-preset.json # With variable overrides tools automate run monthly-invoice-search --var startDate=2026-02-01 --var outputDir=/tmp/invoices # Dry run (shows what would execute without running) tools automate run monthly-invoice-search --dry-run
Storage
- Presets:
~/.genesis-tools/automate/presets/*.json - Config/metadata:
~/.genesis-tools/automate/config.json - Run metadata tracks last run date and total run count per preset