Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
d409a44
fix(model): avoid bedrock credential probe in provider picker
helix4u May 2, 2026
4f37669
fix(tools): reconfigure enabled unconfigured toolsets
helix4u May 1, 2026
e26f9b2
fix(acp): route Zed thoughts to reasoning callbacks
HenkDz May 1, 2026
ef9a08a
fix(acp): polish Zed context and tool rendering
HenkDz May 2, 2026
72c8037
fix(acp): polish common tool rendering
HenkDz May 2, 2026
b294d1d
fix(acp): keep read-file starts compact
HenkDz May 2, 2026
eb612f5
fix(acp): keep web extract rendering compact
HenkDz May 2, 2026
19854c7
Schedule ACP history replay and fence file output
HenkDz May 2, 2026
9987f3d
fix(acp): compact Zed tool replay rendering
HenkDz May 2, 2026
a22465e
fix(weixin): send_weixin_direct cross-loop session check
MottledShadow May 2, 2026
9b5b88b
chore: add MottledShadow to AUTHOR_MAP
teknium1 May 3, 2026
457c7b7
feat(openrouter): add response caching support (#19132)
kshitijk4poor May 3, 2026
c4c0e5a
fix: After _clamp_command_names truncates skill names to fit the 32-cha…
CharlieKerfoot May 2, 2026
5d5b891
test: add tests for cmd_key preservation through name clamping
kshitijk4poor May 3, 2026
19ba9e4
fix(gateway/discord): require allowlist auth on slash commands
0xyg3n May 3, 2026
c14bf44
chore: add 0xyg3n noreply email to AUTHOR_MAP
kshitijk4poor May 3, 2026
6c1322b
fix(slack): close previous handler in connect() to prevent zombie Soc…
nftpoetrist May 2, 2026
0a97ce6
chore: add nftpoetrist to AUTHOR_MAP
kshitijk4poor May 3, 2026
f1e0292
fix(gateway): resume sessions after crash/restart instead of blanket …
millerc79 May 3, 2026
bf32394
chore: add millerc79 to AUTHOR_MAP
kshitijk4poor May 3, 2026
9341034
fix(gateway): send /new response before cancel_session_processing to …
May 2, 2026
7a22c63
chore: add shellybotmoyer to AUTHOR_MAP
kshitijk4poor May 3, 2026
1148c46
fix(gateway): correct ws scheme conversion for https urls
CharlieKerfoot May 2, 2026
6f2dab2
fix: update tests for resume_pending semantics + add AUTHOR_MAP entries
kshitijk4poor May 3, 2026
55647a5
fix(whatsapp): pin protobufjs >=7.5.5 via npm overrides to clear 3 cr…
teknium1 May 3, 2026
d87fd9f
fix(goals): make /goal work in TUI and fix gateway verdict delivery (…
teknium1 May 3, 2026
b59bb4e
fix(gateway): preserve home-channel thread targets across restart not…
leprincep35700 May 1, 2026
3c59566
chore(release): map leprincep35700 email for PR #18440 salvage
teknium1 May 3, 2026
69dd0f7
fix(approval): extend sensitive write target to cover shell RC and cr…
JasonOA888 May 3, 2026
6b4fb9f
fix(cron): treat non-dict origin as missing instead of crashing tick
Tranquil-Flow May 2, 2026
e527240
fix(tools): write_file handler now rejects missing 'content'/'path' a…
Bartok9 May 3, 2026
279b656
fix(tui): clear Apple Terminal resize artifacts
OutThisLife May 3, 2026
e97a999
Merge pull request #19307 from NousResearch/bb/fix-terminal-resize-ju…
OutThisLife May 3, 2026
511add7
feat(skill): add video-orchestrator optional creative skill
SHL0MS May 3, 2026
0dd8e3f
rename: video-orchestrator → kanban-video-orchestrator
SHL0MS May 3, 2026
c9a3f36
feat: add video_analyze tool for native video understanding (#19301)
alt-glitch May 3, 2026
5aa502f
Merge remote-tracking branch 'upstream/main' into sync/upstream-20260503
bot-ted May 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion hermes_cli/tools_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
("file", "📁 File Operations", "read, write, patch, search"),
("code_execution", "⚡ Code Execution", "execute_code"),
("vision", "👁️ Vision / Image Analysis", "vision_analyze"),
("video", "🎬 Video Analysis", "video_analyze (requires video-capable model)"),
("image_gen", "🎨 Image Generation", "image_generate"),
("moa", "🧠 Mixture of Agents", "mixture_of_agents"),
("tts", "🔊 Text-to-Speech", "text_to_speech"),
Expand All @@ -78,7 +79,7 @@
# Toolsets that are OFF by default for new installs.
# They're still in _HERMES_CORE_TOOLS (available at runtime if enabled),
# but the setup checklist won't pre-select them for first-time users.
_DEFAULT_OFF_TOOLSETS = {"moa", "homeassistant", "rl", "spotify", "discord", "discord_admin"}
_DEFAULT_OFF_TOOLSETS = {"moa", "homeassistant", "rl", "spotify", "discord", "discord_admin", "video"}

# Platform-scoped toolsets: only appear in the `hermes tools` checklist for
# these platforms, and only resolve/save for these platforms. A toolset
Expand Down
206 changes: 206 additions & 0 deletions optional-skills/creative/kanban-video-orchestrator/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
---
name: kanban-video-orchestrator
description: Plan, set up, and monitor a multi-agent video production pipeline backed by Hermes Kanban. Use when the user wants to make ANY video — narrative film, product/marketing, music video, explainer, ASCII/terminal art, abstract/generative loop, comic, 3D, real-time/installation — and the work warrants decomposition into specialized profiles (writer, designer, animator, renderer, voice, editor, etc.) coordinated through a kanban board. Performs adaptive discovery to scope the brief, designs an appropriate team for the requested style, generates the setup script that creates Hermes profiles + initial kanban task, then helps monitor execution and intervene when tasks stall or fail. Routes scenes to whichever Hermes rendering / audio / design skill fits each beat (`ascii-video`, `manim-video`, `p5js`, `comfyui`, `touchdesigner-mcp`, `blender-mcp`, `pixel-art`, `baoyu-comic`, `claude-design`, `excalidraw`, `songsee`, `heartmula`, …) plus external APIs for TTS, image-gen, and image-to-video as needed.
version: 1.0.0
author: [SHL0MS, alt-glitch]
license: MIT
metadata:
hermes:
tags: [video, kanban, multi-agent, orchestration, production-pipeline]
related_skills: [kanban-orchestrator, kanban-worker, ascii-video, manim-video, p5js, comfyui, touchdesigner-mcp, blender-mcp, pixel-art, ascii-art, songwriting-and-ai-music, heartmula, songsee, spotify, youtube-content, claude-design, excalidraw, architecture-diagram, concept-diagrams, baoyu-comic, baoyu-infographic, humanizer, gif-search, meme-generation]
credits: |
The single-project workspace layout, profile-config patching pattern,
SOUL.md-per-profile model, TEAM.md task-graph convention, and
`--workspace dir:<path>` discipline are adapted from alt-glitch's
original multi-agent video pipeline at
https://github.com/NousResearch/kanban-video-pipeline.
---

# Kanban Video Orchestrator

Wrap any video request — from a 15-second product teaser to a 5-minute narrative
short to a music video to an ASCII loop — in a Hermes Kanban pipeline that
decomposes the work to specialized agent profiles.

This skill does **not** render anything itself. It is a meta-pipeline that:

1. **Scopes** the request through targeted discovery
2. **Designs** an appropriate team (which roles, which tools per role) based on the style
3. **Generates** a setup script that creates Hermes profiles, project workspace, and the initial kanban task
4. **Hands off** to the director profile, which decomposes via the kanban
5. **Monitors** execution, helps intervene when tasks stall or fail

The actual rendering happens inside the kanban once it's running, via whichever
existing skills + tools fit the scenes — `ascii-video`, `manim-video`, `p5js`,
`comfyui`, `touchdesigner-mcp`, `blender-mcp`, `songwriting-and-ai-music`,
`heartmula`, external APIs, or plain Python with PIL + ffmpeg.

## When NOT to use this skill

- The video is one continuous procedural project that needs no specialists. Just write the code directly.
- The user wants a quick one-shot conversion (e.g. "convert this mp4 to a GIF") — use ffmpeg directly.
- The output is a static image, GIF, or audio-only artifact — use the matching specific skill (`ascii-art`, `gifs`, `meme-generation`, `songwriting-and-ai-music`).
- The work fits a single existing skill cleanly (e.g. a pure ASCII video — just use `ascii-video`).

## Workflow

```
DISCOVER → BRIEF → TEAM DESIGN → SETUP → EXECUTE → MONITOR
```

### Step 1 — Discover (ask the right questions)

The discovery process is **adaptive**: ask only what is actually needed. Always
start with three questions to identify the broad shape:

- **What is the video?** (one-sentence brief)
- **How long?** (5-30s teaser / 30-90s short / 90s-3min explainer / 3-10min film / longer)
- **What aspect ratio + target platform?** (1:1 / 9:16 / 16:9; X, IG, YouTube, internal, etc.)

From the answer, classify the style category. The style determines which
follow-up questions to ask. **Do not ask all questions at once.** Ask 2-4 at a
time, listen, then proceed. Make reasonable assumptions whenever the user
implies an answer.

For complete intake patterns and per-style question banks, see
**[references/intake.md](references/intake.md)**.

### Step 2 — Brief

Once enough is known, produce a structured `brief.md` using the template in
`assets/brief.md.tmpl`. Stages:

1. **Concept** — the one-sentence pitch + emotional north star
2. **Scope** — duration, aspect, platform, deadline
3. **Style** — visual references, brand constraints, tone
4. **Scenes** — beat-by-beat breakdown (durations, content, target tool)
5. **Audio** — narration / music / SFX / silent (per scene if needed)
6. **Deliverables** — file format, resolution, optional alternates (vertical cut, GIF, etc.)

Show the brief to the user for confirmation before designing the team. **The
brief is the contract** — every downstream task references it.

### Step 3 — Team design

Pick role archetypes from the library that fit this video. **Compose, don't
clone.** Most videos need 4-7 profiles. The director is always present; the
rest are picked by what the brief actually requires.

For the role library and per-style team compositions, see
**[references/role-archetypes.md](references/role-archetypes.md)**.

For mapping role → which Hermes skills + toolsets it loads, see
**[references/tool-matrix.md](references/tool-matrix.md)**.

### Step 4 — Setup

Generate a setup script (`setup.sh`) and run it. The script:

1. Creates the project workspace (`~/projects/video-pipeline/<slug>/`)
2. Copies any provided assets into `taste/`, `audio/`, `assets/`
3. Creates each Hermes profile via `hermes profile create --clone`
4. Writes per-profile `SOUL.md` (personality + role definition)
5. Configures profile YAML (toolsets, always_load skills, cwd)
6. Writes `brief.md`, `TEAM.md`, and `taste/` content
7. Fires the initial `hermes kanban create` task assigned to the director

Use `scripts/bootstrap_pipeline.py` to generate setup.sh from a brief +
team-design JSON. See **[references/kanban-setup.md](references/kanban-setup.md)**
for the setup script structure, profile config patterns, and the critical
"shared workspace" rule.

### Step 5 — Execute

Run `setup.sh`. Then provide the user with monitoring commands:

```bash
hermes kanban watch --tenant <project-tenant> # live events
hermes kanban list --tenant <project-tenant> # board snapshot
hermes dashboard # visual board UI
```

The director profile takes over from here, decomposing the work and routing
tasks to specialist profiles via the kanban toolset.

### Step 6 — Monitor and intervene

Stay engaged — the kanban runs autonomously but a stuck task or bad output
needs human (or AI) judgment.

Monitoring patterns: poll `kanban list` periodically, inspect any RUNNING task
that exceeds its expected duration with `kanban show <id>`, and check
heartbeats. When a worker's output fails review, the standard interventions are:

1. Comment on the worker's task with specific feedback (`kanban_comment`)
2. Create a re-run task with the original as parent
3. Adjust the brief's scope and let the director re-decompose

For diagnostic patterns, intervention recipes, and the "task is stuck"
playbook, see **[references/monitoring.md](references/monitoring.md)**.

## Reference: worked examples

Six concrete pipelines covering very different video styles — narrative film,
product/marketing, music video, math/algorithm explainer, ASCII video, real-time
installation — showing how the same workflow yields very different teams and
task graphs. See **[references/examples.md](references/examples.md)**.

## Critical rules

1. **Discovery before action.** Never start generating a brief or team without
asking at least the three baseline questions. A bad brief cascades through
the entire pipeline.

2. **Match the team to the video.** Don't reuse the same 4-profile setup for
every job. A music video that doesn't have a beat-analysis profile will
misfire. A narrative film that doesn't have a writer profile will produce
incoherent scenes. See `references/role-archetypes.md`.

3. **One workspace per project.** All profiles for a given video share the same
`dir:` workspace. Tasks pass artifacts via shared filesystem and structured
handoffs. **Every** `kanban_create` call passes
`workspace_kind="dir"` + `workspace_path="<absolute project path>"`.

4. **Tenant every project.** Use a project-specific tenant
(`--tenant <project-slug>`). Keeps the dashboard scoped and prevents
cross-pollination with other ongoing kanbans.

5. **Respect existing skills.** When a scene fits an existing skill, the
relevant renderer should load that skill via `--skill <name>` on its task
or `always_load` in its profile. Do not re-derive what a skill already
provides.

6. **The director never executes.** Even with the full `kanban + terminal +
file` toolset, the director's `SOUL.md` rules forbid it from executing
work itself. It decomposes and routes only — every concrete task becomes
a `hermes kanban create` call to a specialist profile. The
`kanban-orchestrator` skill spells this out further.

7. **Don't over-decompose.** A 30-second product video does NOT need 20 tasks.
Aim for the smallest task graph that still parallelizes well and exposes the
right human-review gates.

8. **Verify API keys BEFORE firing.** External APIs (TTS, image-gen,
image-to-video) need keys in `~/.hermes/.env` or the user's secret store.
A worker that hits a missing-key error wastes a task slot. The setup
script's `check_key` helper aborts cleanly if a required key is missing.

## File map

```
SKILL.md ← this file (workflow + rules)
references/
intake.md ← discovery question banks per style
role-archetypes.md ← role library (writer, designer, animator, …)
tool-matrix.md ← skill + toolset mapping per role
kanban-setup.md ← setup script structure & profile config
monitoring.md ← watch + intervene patterns
examples.md ← six worked pipelines
assets/
brief.md.tmpl ← brief skeleton
setup.sh.tmpl ← setup script skeleton
soul.md.tmpl ← profile personality skeleton
scripts/
bootstrap_pipeline.py ← generate setup.sh from brief + team JSON
monitor.py ← polling + intervention helpers
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Video Brief — {{TITLE}}

> Slug: `{{SLUG}}` · Tenant: `{{TENANT}}` · Project workspace: `{{WORKSPACE}}`

## 1. Concept

**One-line pitch.** {{ONE_LINE_PITCH}}

**Emotional north star.** {{EMOTIONAL_NORTH_STAR}}
*(What should the viewer feel walking away?)*

## 2. Scope

| | |
|---|---|
| Duration | {{DURATION_S}} seconds |
| Aspect ratio | {{ASPECT}} |
| Resolution | {{RESOLUTION}} |
| Frame rate | {{FPS}} fps |
| Target platforms | {{PLATFORMS}} |
| Deadline | {{DEADLINE}} |
| Quality bar | {{QUALITY_BAR}} *(rough draft / polished / archival)* |

## 3. Style

**Visual references.** {{VISUAL_REFS}}

**Tone.** {{TONE}}

**Brand constraints.** {{BRAND_CONSTRAINTS}}
*(colors, typography, motion language; or "n/a")*

**Aesthetic rules.**
{{AESTHETIC_RULES}}

## 4. Scenes

Beat-by-beat breakdown. Each scene gets a row.

| # | Time | Content | Target tool / skill | Audio | Notes |
|---|------|---------|---------------------|-------|-------|
| 1 | 0:00–0:0X | {{SCENE_1_CONTENT}} | {{SCENE_1_TOOL}} | {{SCENE_1_AUDIO}} | {{SCENE_1_NOTES}} |
| 2 | 0:0X–0:0Y | ... | ... | ... | ... |

## 5. Audio

**Approach.** {{AUDIO_APPROACH}}
*(narration / music-only / synced to track / silent / mixed)*

**Voiceover.** {{VO_DETAILS}}
*(provider, voice, language, script source — "n/a" if no VO)*

**Music.** {{MUSIC_DETAILS}}
*(provided track path / commission via Suno / commission via heartmula /
license-free / "n/a")*

**SFX.** {{SFX_DETAILS}}
*(generated, library, or "n/a")*

## 6. Deliverables

| Format | Resolution | Notes |
|--------|-----------|-------|
| {{PRIMARY_FORMAT}} | {{PRIMARY_RES}} | The main output |
| {{ALT_FORMAT_1}} | {{ALT_RES_1}} | {{ALT_NOTES_1}} |

**Final filename.** `output/final.mp4`
*(plus optional `output/final-9x16.mp4`, `output/captions.srt`, etc.)*

## 7. Constraints

- API keys required: {{API_KEYS_REQUIRED}}
- External dependencies: {{EXT_DEPS}}
- Source assets to incorporate: {{SOURCE_ASSETS}}

---

**This brief is the contract. The director and every downstream profile read
it. If the brief changes, the kanban must be re-fired — don't edit live.**
Loading
Loading