Jacky ships with a command-line interface that lets you control your pet from the terminal. All commands require a running Jacky instance — they send fire-and-forget actions to the desktop app over a local pipe. No tokens, permissions, or configuration are needed for basic commands.
Quick Reference
| Command | Description |
|---|---|
jacky say "<text>" | Make Jacky speak the given text aloud |
jacky emote <state> | Change Jacky's animation/emotion state |
jacky react_to "<text>" | Jacky reacts to text with an AI-generated comment |
jacky ask "<text>" | Send text through Jacky's full agent pipeline |
jacky notify "<text>" | Show a system tray notification (no voice) |
jacky timer <seconds> | Create a countdown timer |
jacky alarm <HH:MM> | Create an alarm clock |
jacky run_routine <id> | Run a routine by ID with optional variables |
jacky move_to <x,y> | Walk Jacky to screen coordinates |
jacky move <direction> <distance> | Walk Jacky a distance in pixels |
jacky status | Check if Jacky is running and get status |
jacky claude install | One-command setup for Claude Code integration |
jacky claude uninstall | Remove Claude Code integration |
jacky claude --doctor | Health check for Claude Code integration |
jacky opencode install | One-command setup for OpenCode integration |
jacky opencode uninstall | Remove OpenCode integration |
jacky opencode --doctor | Health check for OpenCode integration |
jacky help | Show all available commands |
Speaking & Emoting
jacky say
Make Jacky speak text aloud with voice and show a speech bubble.
jacky say "Build finished successfully!"
jacky say "Don't forget to commit your changes"jacky emote
Change Jacky's animation state. Common states include: happy, sleeping, dance, thinking, confused, idle, hurt, and more.
jacky emote happy
jacky emote dance
jacky emote sleepingjacky react_to
Have Jacky react to a piece of text with an AI-generated comment. Requires an LLM provider to be configured.
jacky react_to "The test suite passed with 42 tests"react_to and ask are fire-and-forget — no reply text is printed in the terminal. Jacky's response appears as a speech bubble on your desktop.
jacky ask
Send text through Jacky's full agent pipeline (routines, tools, LLM). This is the same pipeline used when you talk to Jacky directly.
jacky ask "What's the weather like?"
jacky ask "Set a reminder for tomorrow at 9 AM"Moving Jacky
jacky move_to
Walk Jacky to absolute screen coordinates (in pixels). Accepts X,Y or X Y. The target is clamped to the visible screen area.
jacky move_to 800,600
jacky move_to 800 600jacky move
Walk Jacky a relative distance in pixels from its current position. Valid directions: left, right, up, down, top (same as up), bottom (same as down).
jacky move left 100
jacky move top 200
jacky move right 500If the target lands outside the screen, Jacky simply walks to the nearest edge — jacky move right 99999 sends it to the right border.
Notifications & Timers
jacky notify
Show a system tray notification without voice. Useful for scripts and automation.
jacky notify "Deployment complete" --title "CI Pipeline"
jacky notify "Donuts have arrived"jacky timer
Create a countdown timer. Jacky will notify you when the time runs out.
jacky timer 300 --label "Tea is ready"
jacky timer 900 --label "Pasta"jacky alarm
Create an alarm clock in 24-hour HH:MM format. Supports optional repeat schedules.
jacky alarm 07:30 --label "Wake up" --repeat daily
jacky alarm 18:00 --label "Standup meeting" --repeat weekdays
jacky alarm 14:30 --label "One-time reminder"Repeat options: none (default), daily, weekdays.
Running Routines
jacky run_routine
Run a routine by its ID. You can pass variables using --var key=value (can be repeated).
jacky run_routine weather --var city="Mexico City"
jacky run_routine bitcoin_price
jacky run_routine my_custom_routine --var name="Alice" --var count=3Learn about Custom Routines
Status Check
jacky status
Check if Jacky is currently running and get a JSON status report including pet state, LLM status, TTS status, and version.
jacky statusExample output:
{
"ok": true,
"version": "0.3.0",
"pet_state": "idle",
"llm_enabled": true,
"tts_enabled": true
}Claude Code Integration
Jacky integrates with Claude Code through lifecycle hooks, an MCP tool server, and managed instructions — all set up with a single command.
jacky claude install
One-command setup that does everything:
- Enables the WebSocket and MCP servers in Jacky's config
- Grants the necessary permissions
- Writes lifecycle hooks to Claude Code's settings
- Injects a managed instructions block into CLAUDE.md
- Registers Jacky as an MCP server with Claude Code
# 1. Launch the Jacky desktop app
jacky
# 2. One-command setup
jacky claude install
# 3. Restart Jacky to activate the serversAfter running this, Claude Code will automatically trigger Jacky reactions (thinking, working, success, error) and can call Jacky tools via MCP.
jacky claude uninstall
Removes everything: hooks, CLAUDE.md block, and MCP registration.
jacky claude uninstalljacky claude --doctor
Health check that verifies hooks, CLAUDE.md, IPC, config, permissions, and CLI availability.
jacky claude --doctorjacky claude mcp install
Register Jacky as an MCP server with Claude Code only (no hooks or config changes).
jacky claude mcp installjacky claude mcp uninstall
Remove the Jacky MCP server registration from Claude Code.
jacky claude mcp uninstalljacky claude mcp --doctor
Check MCP-specific health: Claude CLI, registration, and IPC.
jacky claude mcp --doctorClaude Code Integration Guide
OpenCode Integration
Jacky integrates with OpenCode through a reaction plugin, an MCP tool server, and managed instructions — all set up with a single command.
jacky opencode install
One-command setup that does everything:
- Enables the WebSocket and MCP servers in Jacky's config
- Grants the necessary permissions
- Adds a
mcp.jackyremote entry (with auth headers) to OpenCode's config - Writes a managed instructions file and references it in OpenCode's
instructions - Installs the reaction plugin into OpenCode's
plugins/directory
# 1. Launch the Jacky desktop app
jacky
# 2. One-command setup
jacky opencode install
# 3. Restart Jacky to activate the serversAfter running this, OpenCode will automatically trigger Jacky reactions (thinking, working, waiting, success, error) and can call Jacky tools via MCP.
Add --project to configure the current project's .opencode/ directory instead of the global config, or --no-plugin to install MCP tools only.
jacky opencode install --project
jacky opencode install --no-pluginjacky opencode uninstall
Removes everything: the MCP entry, the instructions reference/file, and the plugin.
jacky opencode uninstalljacky opencode --doctor
Health check that verifies the MCP entry (including auth headers), instructions file, plugin, IPC, config, and CLI availability.
jacky opencode --doctorOpenCode Integration Guide
Installing Workshop Content
jacky add
Download and install workshop content (skins, routines, or language packs) from the community portal.
jacky add skin author/skin-name
jacky add routine author/weather-routine
jacky add lang author/spanish-packExamples
# Build pipeline notifications
jacky say "Build started"
# ... run your build ...
jacky say "Build finished successfully!" && jacky emote happy
# or on failure:
jacky notify "Build failed" --title "CI" && jacky emote error
# Quick timer for cooking
jacky timer 480 --label "Pizza is ready"
# Run a weather routine
jacky run_routine weather --var city="Mexico City"
# Move Jacky around the screen
jacky move_to 800,600
jacky move left 100
# Check if Jacky is running before scripting
jacky status && jacky say "Starting automated tasks"Tip: All commands (except claude, opencode, and status) are fire-and-forget. They return immediately after delivering the action to the running Jacky instance. No output is printed unless there's an error.