Skip to content
Back to skills

Hermes

BSecurity

Configure, troubleshoot, and use Hermes image generation — all 5 built-in providers (FAL, OpenAI, OpenAI-Codex, xAI, Krea), model catalogs, env vars, and .env location gotchas.

  • 36 stars
  • 0 votes
  • 0 copies
  • 8 views
  • Added September 10, 2026
ai-agentspythongobashapibackend

Works with

  • terminal
  • cli
  • api

Security analysis

B88/100
  • criticalSends environment variables or credentials to an external URL

Pro scans all 4 files and shows the line behind each finding

Scanned September 10, 2026

npx -y skills add theheavenlyd3mon/hermes-profiles --skill hermes --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Hermes?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Hermes
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/theheavenlyd3mon-hermes/badge)](https://www.skillsdirectory.com/skills/theheavenlyd3mon-hermes)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: hermes-image-generation
description: Configure, troubleshoot, and use Hermes image generation — all 5 built-in providers (FAL, OpenAI, OpenAI-Codex, xAI, Krea), model catalogs, env vars, and .env location gotchas.
triggers:
  - "image generation"
  - "generate image"
  - "fal"
  - "krea"
  - "gpt-image"
  - "grok imagine"
  - "image_gen"
  - "fal key"
  - "krea key"
  - "image gen provider"
version: 1.1.0
author: senna
metadata:
  hermes:
    tags: [hermes, image-gen, fal, krea, openai, xai, setup]
---

# Hermes Image Generation

5 built-in providers, registered as plugins under `$HERMES_HOME/plugins/image_gen/`.

## Providers

### FAL.ai (name: `fal`)
- **18 models** in the catalog — broadest range
- Auth: `FAL_KEY` env var OR Nous managed gateway (subscription)
- Default: `fal-ai/flux-2/klein/9b` (sub-1s, $0.006/MP)

| Model | Speed | Price | Best For |
|-------|-------|-------|----------|
| FLUX 2 Klein 9B | <1s | $0.006/MP | Fast, crisp text |
| FLUX 2 Pro | ~6s | $0.03/MP | Studio photorealism (auto-upscaled 2x) |
| Z-Image Turbo | ~2s | $0.005/MP | Bilingual EN/CN |
| Nano Banana Pro | ~8s | $0.15/img | Gemini 3 Pro, reasoning, text render |
| GPT Image 1.5 | ~15s | $0.034/img | Prompt adherence |
| GPT Image 2 | ~20s | $0.04–0.06 | SOTA text + CJK |
| Ideogram V3 | ~5s | $0.03–0.09 | Best typography |
| Recraft V4 Pro | ~8s | $0.25/img | Design, brand systems |
| Qwen Image | ~12s | $0.02/MP | LLM-based, complex text |

Upscaler: Clarity Upscaler (`fal-ai/clarity-upscaler`), 2x, auto-chained on FLUX 2 Pro only.

### OpenAI (name: `openai`)
- Model: `gpt-image-2` at 3 quality tiers (low/medium/high)
- Auth: `OPENAI_API_KEY`
- Sizes: 1024x1024, 1536x1024, 1024x1536

### OpenAI via Codex OAuth (name: `openai-codex`)
- Same `gpt-image-2` tiers — FREE, no API key needed
- Auth: ChatGPT/Codex OAuth via `hermes auth codex`
- Routes through ChatGPT backend

### xAI Grok (name: `xai`)
- Models: `grok-imagine-image` (~5-10s), `grok-imagine-image-quality` (~10-20s)
- Auth: `XAI_API_KEY` or xAI OAuth
- More aspect ratios (4:3, 3:2, 2:3, 3:4) + 1K/2K resolution

### Krea (name: `krea`)
- Models: `krea-2-medium` ($0.03), `krea-2-large` ($0.06)
- Auth: `KREA_API_KEY`
- Unique features: style references, moodboards, creativity knob (raw/low/medium/high)
- Async API (submit → poll), handled internally by the provider

## Environment Variables

Keys go in `$HERMES_HOME/.env` (e.g., `~/.hermes/profiles/senna/.env`).

```
FAL_KEY=fal-ai-key-here
KREA_API_KEY=krea-key-here
OPENAI_API_KEY=sk-...
XAI_API_KEY=xai-...
```

## .env Location Pitfall

⚠️ **Common mistake**: Users edit `~/.hermes/.env` (root) instead of `$HERMES_HOME/.env` (profile-specific). When `HERMES_HOME=/Users/<user>/.hermes/profiles/<profile>`, the profile `.env` is what gets loaded. The root `.env` is ignored by the profile gateway.

To check which `.env` hermes reads:
```
echo $HERMES_HOME   # then .env goes at $HERMES_HOME/.env
hermes status       # shows ".env file: ✓ exists"
```

## Setup Checklist (ALL 3 required)

Keys in .env alone are NOT enough. The tool and plugin providers must also be enabled in config.yaml.

### 1. API keys in `$HERMES_HOME/.env`
See Environment Variables section above.

### 2. `image_gen` in platform_toolsets
The tool must be listed in `platform_toolsets.cli` (and/or `platform_toolsets.telegram`, `platform_toolsets.discord`, etc.) in config.yaml. Without this, the tool is never loaded even if keys are present.

```bash
# Check current CLI toolsets:
grep -A20 'platform_toolsets:' ~/.hermes/profiles/<profile>/config.yaml

# Add image_gen to CLI toolsets:
hermes config set platform_toolsets.cli '["browser","clarify","code_execution","computer_use","cronjob","delegation","fabric","file","image_gen","memory","messaging","session_search","skills","terminal","todo","vision","web","web-search-plus"]'
```

### 3. Plugin providers in `plugins.enabled`
Each provider (fal, krea, openai, etc.) must be explicitly listed in `plugins.enabled` in config.yaml:

```bash
hermes config set plugins.enabled '["image_gen/fal","image_gen/krea","...existing plugins..."]'
```

### 4. (Optional) `image_gen.enabled` in config
```bash
hermes config set image_gen.enabled true
```

### Verification
```bash
hermes config show 2>&1 | grep -i "FAL\|image"   # FAL key should show masked
hermes status 2>&1 | grep -i "image"              # should say "✓"
```

## Configuration in config.yaml

Optional overrides under `image_gen:` key:
```yaml
image_gen:
  enabled: true
  use_gateway: true
  model: flux-2-klein-9b        # default model
  openai:
    model: gpt-image-2-medium   # OpenAI tier
  xai:
    model: grok-imagine-image
    resolution: 1k
  krea:
    model: krea-2-medium
    creativity: medium
```

## Multi-Profile Setup

When enabling image gen on a non-default profile (e.g., designer), ALL THREE
steps must target the correct profile. `hermes config set` writes to the
**current** profile (usually senna), NOT the profile you intend.

**Reliable method — edit the target config directly:**

```bash
TARGET=~/.hermes/profiles/<name>/config.yaml

# 1. Add image_gen to platform_toolsets.cli (if not present)
# Edit $TARGET directly

# 2. Add plugin providers to plugins.enabled
# Must include image_gen/fal and/or image_gen/krea

# 3. Add image_gen config section
# image_gen:
#   use_gateway: true
#   enabled: true
```

**Pitfall:** `hermes config set plugins.enabled '["image_gen/fal"]'` writes to
the CURRENT profile's config, not the target. Always verify with:
```bash
hermes config path   # confirms which config file is being edited
```

**Pitfall:** `HERMES_PROFILE=<name> hermes ...` is IGNORED — the env var does
not switch profiles; `config`, `plugins`, and `tools` commands keep reading
the current profile. Use the global flag instead:
`hermes --profile <name> config path` (confirm first), `plugins list`, `tools list`.

For profiles without their own FAL key, `use_gateway: true` routes through the
Nous managed gateway. The FAL key in the gateway's .env covers all profiles on
the same machine.

## Third-Party Image Plugins
User plugins (e.g. hermes-image-studio) live in `~/.hermes/plugins/` or a
profile's own `plugins/` dir, register their own toolset, and typically gate
on `FAL_KEY` at call time. Verify install:
`hermes --profile <name> plugins list --user --plain` (shows name/version/enabled).
Audit before enabling: grep the source for outbound URLs (should be the
provider's endpoints only) and for hardcoded author-machine paths (output
dirs like `/Volumes/...`) — override via the plugin's env var in the
profile's `.env`. To confirm tools register without a paid generation,
dry-run `register(ctx)` with a stub ctx (`register_tool` appends to a list)
via the hermes-agent venv python, importlib-loading the plugin `__init__.py`.

**Pitfall — plugin enabled but tools never appear (silent import failure):**
Hermes imports directory plugins as `hermes_plugins.<slug>` WITHOUT adding the
plugin dir to `sys.path`, so third-party plugins with absolute self-imports
die at load with `Failed to load plugin '<name>': No module named '<pkg>'` in
the agent log — config and manifests look fine. Relative-import fix at the top
level alone is insufficient (submodules break too); the working fix is
prepending the plugin dir to sys.path in `__init__.py`. Bit hermes-image-studio
2026-08-05: senna's clone fixed (commit c24b73b), creative profile's separate
clone still carries the bug. Full fix + loader-replay verifier: `hermes-maintenance`
skill §6e + `scripts/plugin-load-test.py`, `references/plugin-import-failure.md`.

## Gateway Restart

After adding/changing API keys, restart the gateway for the agent to pick them up:
```bash
# Find senna gateway PID
ps aux | grep "senna.*gateway" | grep -v grep
# Kill it — s6/auto-restart brings it back
kill <PID>
```

## Troubleshooting: Keys Set But Tool Not Available

If `image_generate` doesn't appear in your tool list:

1. **Check platform_toolsets** — most common cause. `image_gen` must be in the platform's toolset list (see Setup Checklist above).

2. **Check plugins.enabled** — plugin providers (fal, krea, openai, xai) must be explicitly listed. The in-tree FAL backend only needs FAL_KEY + fal_client SDK; plugin providers need their entry in `plugins.enabled`.

3. **Check .env loading** — verify with:
   ```bash
   hermes config show 2>&1 | grep FAL   # should show masked key
   ```
   If the key doesn't show, the .env path is wrong. The CLI loads `$HERMES_HOME/.env` via `get_hermes_home()` from `hermes_constants.py`.

4. **Session restart required** — toolset and plugin changes take effect on next CLI/gateway start. Current session won't pick them up.

5. **Check requirement function** — from the hermes-agent venv:
   ```python
   from tools.image_generation_tool import check_image_generation_requirements
   check_image_generation_requirements()  # True = tool should register
   ```
   If False: fal_client SDK missing AND no plugin providers available.

## Plugin Architecture

Hermes has a **plugin-based image generation system**. Providers live at:
```
~/.hermes/hermes-agent/plugins/image_gen/
```
Each subdirectory is a self-registering plugin that implements the `ImageGenProvider` ABC from `agent/image_gen_provider`.

The toolset name is `image_gen`. It checks available providers at runtime based on auth state AND config. Providers must be listed in `plugins.enabled` in config.yaml to be discovered — just having the key in .env is not sufficient.

## Verification (Quick Health Check)

```bash
# 1. Overall status — look for "Image generation ✓ active" under Nous Tool Gateway
hermes status 2>&1 | grep -A1 "Image generation"

# 2. Confirm image_gen is in the CLI toolset
grep "image_gen" "$(hermes config path)"

# 3. Confirm providers are in plugins.enabled
grep "image_gen/" "$(hermes config path)"

# 4. Confirm image_gen section exists and is enabled
grep -A2 "^image_gen:" "$(hermes config path)"

# 5. Check .env for the actual key entry
grep -n "FAL_KEY\|KREA_API\|XAI_API" "$(hermes config env-path)"
```

All five should pass. If (1) says active but (2)-(4) fail, the gateway is providing image gen via Nous subscription without local plugin config — works but limits model selection.

## Aspect Ratios

| Hermes | FAL (preset) | Krea | xAI | OpenAI |
|--------|-------------|------|-----|--------|
| landscape | landscape_16_9 | 16:9 | 16:9 | 1536x1024 |
| square | square_hd | 1:1 | 1:1 | 1024x1024 |
| portrait | portrait_16_9 | 9:16 | 9:16 | 1024x1536 |

Krea additionally supports: 4:3, 3:2, 2.35:1, 4:5, 2:3.
xAI additionally supports: 4:3, 3:4, 3:2, 2:3.

Files in this skill

  • SKILL.md10.4 KB
  • hermes-image-generation/SKILL.md10.4 KB
  • hermes-image-generation/references/setup-troubleshooting.md3 KB
  • references/setup-troubleshooting.md3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.