What Juno Does
- Receives tickets via the Linear plugin queue when they enter “Backlog” or “Unstarted”
- Routes tickets by labels to the appropriate workflow
- Breaks down tickets into sized, sequenced sub-tasks
- Researches requirements and gathers context from the codebase
- Generates implementation prompts so Titus knows exactly what to build
- Flags tickets that are missing descriptions or acceptance criteria
- Assigns prepped tickets to Titus
How Work Gets Triggered
Juno’s work is driven by the openclaw-linear plugin, not polling. When a ticket moves to “Backlog” or “Unstarted” in Linear, the plugin adds it to Juno’s queue and triggers thepm-queue-handler skill:
- View the ticket — read the full ticket details, labels, and comments
- Validate completeness — if missing description or acceptance criteria, ask for clarification on the ticket
- Route by labels — use the
linear-ticket-routingskill to determine the correct workflow based on ticket labels - Prep the ticket — run
linear-ticket-prepto size it, research context, enrich with definition of done and test cases, and generate a coding agent prompt - Assign and hand off — assign the prepped ticket to Titus and pop it from the queue
Skills
| Skill | Purpose |
|---|---|
pm-queue-handler | End-to-end ticket processing — routes, preps, and assigns inbound tickets |
linear-ticket-prep | Multi-phase ticket preparation — sizing, research, context gathering, and prompt generation |
linear-ticket-routing | Routes tickets by labels to the appropriate workflow and assignee |
Workspace Files
Juno’s behavior is defined by workspace files injected into~/.openclaw/workspace/ during bootstrap:
| File | What It Does |
|---|---|
SOUL.md | Core personality — approach, values, superpowers, boundaries. Defines who Juno is as a PM. |
IDENTITY.md | Name, role label, emoji, avatar metadata. |
HEARTBEAT.md | Periodic checklist — bootstrap detection on first boot. |
TOOLS.md | Tool-specific notes and common commands for Juno’s workflow. |
USER.md, AGENTS.md, BOOTSTRAP.md) that all agents share.
Configuration
Juno uses thepm identity:
| Field | Default | Notes |
|---|---|---|
identity | army-identities#pm | Built-in PM identity |
volumeSize | 30 GB | Persistent storage — Juno doesn’t need as much since she’s not cloning large repos |
model | Claude Opus 4.6 | Set in identity.yaml |
codingAgent | claude-code | Set in identity.yaml |
Customization
You can customize Juno by forking the army-identities repo and modifying thepm/ directory, or by creating a new identity from scratch. Point your manifest at the new identity source: