A playful cross-platform desktop lion cub that codes beside you.
Project description
Leo the Dev — Lion Cub Pet
A playful, high-quality desktop lion cub that walks and runs across the screen, reacts to work states, can be dragged and anchored, and uses a logo-free silver laptop as part of its animation language.
The product is intended to run as a transparent GUI overlay on macOS, Windows, and Linux while being installed and controlled from the terminal.
Status: active pre-release implementation. The PySide6 overlay, local CLI control, roaming, dragging, anchoring, shared tray/right-click controls, comic dialogue bubbles, custom modes, configuration, user-level autostart, and validated animation art are implemented.
Product goals
- Look like a real lion cub rather than a humanoid mascot.
- Use expressive animal motion: quadrupedal walking, playful pouncing, ear movement, tail movement, head tilts, and paw interaction.
- Render cleanly on light, dark, detailed, standard-DPI, and high-DPI desktops.
- Run as a frameless transparent overlay without stealing focus.
- Roam safely inside the current screen's usable work area.
- Allow direct dragging and persistent placement.
- Stop roaming when anchored, including a dedicated bottom-right anchor.
- Expose every behavior through a documented CLI and system-tray menu.
- Install from a GitHub repository without requiring a native DMG, MSI, or DEB installer.
- Collect no telemetry by default.
Character specification
The pet is a playful lion cub with realistic feline proportions, four-paw locomotion, rounded cub features, expressive ears, a flexible tail, and no human clothing or human posture.
Its display name is Leo the Dev. The package and terminal command remain lion-cub-pet for compatibility.
Its equipment is a thin, logo-free silver laptop inspired by a MacBook. The laptop remains physically attached or carried while the cub moves and is placed on the ground for work animations.
Required animation behavior
| State | Required visual behavior |
|---|---|
| Idle | Breathing, blink, tiny tail flick, brief curious glance |
| Walk | Natural quadrupedal cub walk with alternating paws |
| Run | Playful pounce-like gait, never human running |
| Wave | Cub sits and raises one front paw without detached motion marks |
| Jump | Four-paw spring with the closed laptop secured against its side |
| Failure | Ears flatten and the cub gently face-plants onto the closed laptop |
| Waiting | Cub sits, tilts its head, and keeps the laptop half-open |
| Active work | Laptop fully open; tail taps the trackpad while paws interact naturally |
| Review | Squinted eyes, slow trackpad swipe, alternating ear twitch |
| Gaze | Eyes, head, ears, muzzle, and upper body follow 16 clockwise directions |
Stationary seated states render at 85% of the selected movement size so the cub remains visually consistent with the running gait.
Personality modes
| Mode | Visual behavior |
|---|---|
| Normal | Roaming, working, waiting, review, and failure state machine |
| Relax | 8-frame sunglasses-and-cola lounge loop at 260 ms/frame |
| Focus | 8-frame headband, folded sitting, and laptop loop at 210 ms/frame |
| Sleep | 8-frame curled breathing loop at 360 ms/frame |
| Motivate | 8-frame encouraging gesture at 240 ms/frame; returns to Normal after 5–8 seconds |
Leo uses shuffled dialogue bags, so a line does not repeat until the current state’s alternatives have been used. Advice appears at a low random frequency and temporarily uses a smooth 8-frame water-offering animation at 280 ms/frame.
Directional roaming uses clean 16-frame right/left pounce sequences at 85 ms/frame. Each sprite is isolated inside its own 192 × 208 frame, and the left sequence is a framewise mirror of the right sequence without cadence reordering. Other standard states use the approved v2 atlas. Whenever the laptop is open, its exterior lid faces the viewer while Leo sits behind and looks at the unseen screen.
Productivity and interaction systems
Pomodoroalternates configurable Focus and Relax phases; the default cycle is 25/5 minutes.Rubber Duckasks a debugging question immediately or at a low random frequency every 10–20 minutes.Victoryplays a jump-to-wave celebration with a shuffled success line.Quiet Hourssupports immediate meeting silence and an optional dailyHH:MMschedule, including overnight ranges.Treatsraise Leo's persisted 0–100 mood. Interacting on consecutive calendar days builds a persisted streak.Dialogue packsmerge validated local JSON lines into Leo's built-in shuffled categories.Cursor avoidancereplans away from the pointer when it enters Leo's safety radius.Run chanceselects a faster pounce cadence independently for each roaming trip.Movement debuggingoverlays live bounds, target vector, gait, speed factor, and pitch.
Laptop state is part of the animation contract:
- Closed while walking, running, jumping, or waving.
- Half-open while waiting for input.
- Fully open during active work and review.
- Closed and physically contacted during the failure reaction.
Interaction model
Roaming: the cub chooses a safe destination, walks or runs toward it, idles, then continues.Staying: the cub remains at its current position but continues its idle animation.Anchored: the cub remains attached to a selected screen corner.Dragging: dragging immediately pauses autonomous movement; the final position is persisted.Bottom-right: dragging into the bottom-right snap zone anchors the cub there.Hidden: the overlay is not rendered, but configuration remains available.Paused: animation and autonomous movement stop without exiting the process.
The default full-screen bounds let visible pet pixels reach all four physical screen corners. Use bounds work-area to keep it outside the taskbar or Dock area.
Installation
The terminal installer uses uv to create an isolated user-level tool environment. It installs uv first when needed, then installs Leo, enables user-level autostart, and starts the GUI.
macOS and Linux use one command:
curl -LsSf https://raw.githubusercontent.com/Kldpsh7/devleo/main/install.sh | sh
Windows PowerShell:
irm https://raw.githubusercontent.com/Kldpsh7/devleo/main/install.ps1 | iex
Before the PyPI release, point the same installer at the Git repository:
LEO_PACKAGE_SPEC="git+https://github.com/Kldpsh7/devleo.git" sh install.sh
After the PyPI release, direct Python installation also works:
python -m pip install lion-cub-pet
lion-cub-pet install --autostart --start
Set LEO_AUTOSTART=0 to install and start without launch-at-login. The installers create only user-level files; they do not require administrator privileges.
CLI contract
The executable name is lion-cub-pet. All mutating commands should support --json where automation needs structured output.
Lifecycle
lion-cub-pet install [--autostart] [--start]
lion-cub-pet uninstall [--keep-config] [--keep-assets]
lion-cub-pet start
lion-cub-pet stop
lion-cub-pet restart
lion-cub-pet status [--json]
lion-cub-pet version
Visibility and process state
lion-cub-pet show
lion-cub-pet hide
lion-cub-pet toggle
lion-cub-pet pause
lion-cub-pet resume
lion-cub-pet quit
Movement and placement
lion-cub-pet roam
lion-cub-pet stay
lion-cub-pet anchor current
lion-cub-pet anchor bottom-right
lion-cub-pet anchor bottom-left
lion-cub-pet anchor top-right
lion-cub-pet anchor top-left
lion-cub-pet unanchor
lion-cub-pet move <x> <y>
lion-cub-pet screen <index>
lion-cub-pet screen next
lion-cub-pet speed slow
lion-cub-pet speed normal
lion-cub-pet speed fast
lion-cub-pet speed <pixels-per-second>
Appearance
lion-cub-pet size tiny
lion-cub-pet size small
lion-cub-pet size normal
lion-cub-pet size large
lion-cub-pet size <scale> # clamped to 0.55-1.25
lion-cub-pet opacity <0.25-1.0>
lion-cub-pet transparency <0-75>
lion-cub-pet always-on-top on|off
lion-cub-pet click-through on|off
Behavior
lion-cub-pet personality playful
lion-cub-pet mode normal|relax|focus|sleep|motivate
lion-cub-pet dialogues on|off
lion-cub-pet advice on|off
lion-cub-pet advice-now
lion-cub-pet say <text>
lion-cub-pet pomodoro start [--focus <minutes>] [--break <minutes>]
lion-cub-pet pomodoro stop|status
lion-cub-pet rubber-duck on|off|ask|status
lion-cub-pet victory
lion-cub-pet quiet-hours on|off|status
lion-cub-pet quiet-hours schedule <HH:MM> <HH:MM>
lion-cub-pet quiet-hours unschedule
lion-cub-pet dialogue-pack load <path.json>
lion-cub-pet dialogue-pack clear|status
lion-cub-pet treat
lion-cub-pet mood
lion-cub-pet bounds work-area|full-screen
lion-cub-pet idle-delay <seconds>
lion-cub-pet run-chance <0-100>
lion-cub-pet snap-distance <pixels>
lion-cub-pet avoid-cursor on|off
lion-cub-pet debug-movement on|off
Animation controls and QA
lion-cub-pet play idle
lion-cub-pet play walk
lion-cub-pet play run
lion-cub-pet play wave
lion-cub-pet play jump
lion-cub-pet play failure
lion-cub-pet play waiting
lion-cub-pet play working
lion-cub-pet play review
lion-cub-pet look <0-359>
lion-cub-pet laptop auto|closed|half-open|open
lion-cub-pet demo
lion-cub-pet showcase [--seconds-per-state 1.2]
lion-cub-pet preview <animation>
Custom dialogue-pack format
Dialogue packs are UTF-8 JSON objects. Keys must match a built-in category and each value must contain 1–100 non-empty strings. Custom lines are merged with defaults and still use non-repeating shuffled bags.
{
"working": ["Recompiling my confidence."],
"rubber_duck": ["Which boundary condition have we skipped?"],
"victory": ["Green build. Golden mane."]
}
Supported categories are idle, working, waiting, review, failure, departing, clicked, relax, focus, sleep, motivate, advice, pomodoro_focus, pomodoro_break, rubber_duck, victory, and treat.
showcase runs every standard animation, custom mode, advice gesture, and cardinal gaze without changing the saved mode. play, look, laptop, demo, and preview are explicit overrides intended for testing and demonstrations. lion-cub-pet play auto returns control to the state machine.
Launch at login
lion-cub-pet autostart enable
lion-cub-pet autostart disable
lion-cub-pet autostart status
Configuration
lion-cub-pet config list
lion-cub-pet config get <key>
lion-cub-pet config set <key> <value>
lion-cub-pet config unset <key>
lion-cub-pet config reset
lion-cub-pet config path
lion-cub-pet config edit
Diagnostics and maintenance
lion-cub-pet doctor
lion-cub-pet logs
lion-cub-pet logs --follow
lion-cub-pet paths
lion-cub-pet check-update
lion-cub-pet update
lion-cub-pet completion bash
lion-cub-pet completion zsh
lion-cub-pet completion fish
lion-cub-pet completion powershell
System-tray and right-click controls
The same menu is available from the system tray and by right-clicking Leo:
- Show or hide pet.
- Roam, stay, or anchor bottom-right.
- Pause or resume.
- Select normal, relax, focus, sleep, or motivate mode.
- Select a constrained tiny, small, normal, or large size and transparency preset.
- Start/stop Pomodoro, ask the Rubber Duck, celebrate, or enable Quiet mode.
- Give Leo a treat.
- Request an advice animation or sample dialogue.
- Quit.
Technical direction
- Python 3.11 or newer.
- PySide6/Qt for the transparent cross-platform overlay.
uvfor dependency management, tool installation, and builds.- Pillow for deterministic sprite validation and asset processing.
- Typer or Click for the CLI.
- Platform-specific adapters only for autostart, application-menu integration, and compositor differences.
- A single animation state machine shared by all operating systems.
- Local IPC so CLI commands control the running GUI process without spawning duplicates.
See Architecture, Graphics quality, and the Blender production pipeline.
Repository layout
lion-cub-pet/
├── assets/
│ ├── README.md
│ ├── source/ # original high-resolution working art
│ ├── source-3d/ # reproducible Blender source scenes
│ └── approved/ # current reviewed master frames and metadata
├── docs/
│ ├── ARCHITECTURE.md
│ └── GRAPHICS_QUALITY.md
├── src/lion_cub_pet/
│ ├── cli/
│ ├── overlay/
│ ├── animation/
│ ├── movement/
│ ├── platform/
│ └── assets/ # packaged runtime artwork
├── tests/
├── tools/blender/ # headless scene, render, and QA pipeline
├── pyproject.toml
└── README.md
Development commands
For local development without uv:
python3 -m venv .venv
.venv/bin/python -m pip install -e ".[dev]"
.venv/bin/lion-cub-pet install --start
Blender art pipeline:
.venv/bin/python -m pip install -e ".[dev,art]"
tools/blender/render_idle.sh
tools/blender/render_realistic_identity.sh
tools/blender/render_realistic_topology.sh
tools/blender/render_realistic_rig.sh
Windows uses .venv\Scripts\lion-cub-pet.exe.
Project checks:
uv sync --all-groups
uv run lion-cub-pet --help
uv run pytest
uv run ruff check .
uv run ruff format --check .
uv run mypy src
uv build
uv run twine check dist/*
See Releasing for the GitHub Release, PyPI Trusted Publishing, checksum, and installer process.
Graphics quality policy
High visual quality is a release gate, not optional polish.
- Master frames must be lossless RGBA PNG at a minimum 1024 x 1024 canvas per frame.
- Runtime exports must include density-appropriate 1x, 2x, and 4x tiers.
- The cub's face, proportions, coat markings, eye construction, laptop geometry, and color palette must remain consistent across every frame.
- No cropped ears, paws, tail, laptop, or motion extremes.
- No color fringe, matte halo, accidental transparent body holes, detached effects, or frame seams.
- Animation registration must prevent size popping, baseline jumps, and prop teleportation.
- Every animation must be reviewed at actual display size on light, dark, and visually busy backgrounds.
- QA must cover 100%, 150%, and 200% display scaling.
- Source art and runtime exports must remain reproducible through checked-in metadata and scripts.
The complete acceptance criteria are in Graphics quality.
Cross-platform requirements
macOS
- Transparent native floating-level overlay across Spaces and full-screen apps.
- Lion-cub application and tray icons instead of the Python launcher icon.
- User-level LaunchAgent for optional autostart.
- Correct behavior across Spaces and multiple displays.
- Retina asset selection.
Windows
- Transparent tool window with no taskbar button while the pet is active.
- User-level Startup integration.
- Correct behavior across mixed-DPI displays and taskbar placements.
Linux
- X11 and Wayland detection.
- User-level
.desktopentry and XDG autostart entry. - Document compositor-specific limitations instead of silently failing.
- Test at least GNOME and KDE on both supported display paths where practical.
Privacy and security
- No telemetry by default.
- No screen capture, keyboard logging, clipboard access, or file indexing.
- No elevated privileges for normal installation.
- Network access limited to an explicit update check.
- Release artifacts accompanied by SHA-256 checksums.
- Configuration parsed as data and never executed as shell code.
- Logs must not contain usernames, tokens, environment variables, or unrelated file paths.
Testing strategy
- Unit tests for animation state selection, movement boundaries, anchoring, and configuration.
- Golden-image tests for asset dimensions, alpha, registration, and expected frame counts.
- IPC tests proving one GUI process and reliable CLI control.
- Cross-platform smoke tests for start, stop, drag, roam, anchor, autostart, and uninstall.
- Long-running soak test for CPU use, memory stability, display changes, and sleep/wake recovery.
- Visual QA sheets and motion previews for every animation release.
Release plan
- Implement the CLI, configuration model, and single-instance IPC.
- Implement a placeholder overlay and cross-platform movement engine.
- Produce and approve the final high-resolution lion cub identity.
- Generate, validate, and integrate every animation.
- Add autostart and application-menu integration per platform.
- Add test automation and visual QA artifacts.
- Publish versioned GitHub releases and the terminal installation instructions.
Additional product features worth including
- Multi-monitor awareness and per-screen anchoring.
- Reduced-motion mode and animation-rate control.
- Battery-saver mode that lowers animation FPS while unplugged.
- Do-not-disturb schedule.
- Per-application exclusion list for games, presentations, or screen sharing.
- Importable pet packs with a versioned manifest.
- Accessibility option to disable pointer avoidance and motion.
- Crash-safe restoration of the last valid position and state.
- A scripted demo mode for release videos and screenshots.
- Optional local event API so editors or agents can request
working,waiting,review, orfailurewithout screen inspection.
Licensing
The project uses separate licenses for software and original visual assets:
- Source code, documentation, configuration, and non-visual project files are licensed under the MIT License.
- Original lion cub PNG, WebP, and GIF artwork under
assets/andsrc/lion_cub_pet/assets/is licensed under CC BY 4.0. - Third-party dependencies retain their own licenses.
Redistributions and artwork adaptations must preserve the applicable notices. Modified artwork must be identified as changed.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lion_cub_pet-0.1.1.tar.gz.
File metadata
- Download URL: lion_cub_pet-0.1.1.tar.gz
- Upload date:
- Size: 30.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
505a1a454c5ac1dfb1279cba7e1fb9e7c29cd7598c38a68ffe5a003e7726a119
|
|
| MD5 |
b2cca3d549a87641ef5ccfc8583bac1d
|
|
| BLAKE2b-256 |
9974479b91f1be3012537d07fa7bd73a977af1fd4e3136b21ebffa19e683810e
|
Provenance
The following attestation bundles were made for lion_cub_pet-0.1.1.tar.gz:
Publisher:
release.yml on Kldpsh7/devleo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lion_cub_pet-0.1.1.tar.gz -
Subject digest:
505a1a454c5ac1dfb1279cba7e1fb9e7c29cd7598c38a68ffe5a003e7726a119 - Sigstore transparency entry: 2212187738
- Sigstore integration time:
-
Permalink:
Kldpsh7/devleo@e63eec7960086d3fe57db3144a63a28db4a5560b -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Kldpsh7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e63eec7960086d3fe57db3144a63a28db4a5560b -
Trigger Event:
release
-
Statement type:
File details
Details for the file lion_cub_pet-0.1.1-py3-none-any.whl.
File metadata
- Download URL: lion_cub_pet-0.1.1-py3-none-any.whl
- Upload date:
- Size: 5.8 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eadd0da717b32368e5b6b64ba5106b42f32044782291c15abffd1e90dce66d34
|
|
| MD5 |
e68f538241825c2b62f59bb3b65bf48a
|
|
| BLAKE2b-256 |
72f08822c9efa9c2f0e73325ad019d98151ce1781671cd1d3dcbc4b9801a5d8b
|
Provenance
The following attestation bundles were made for lion_cub_pet-0.1.1-py3-none-any.whl:
Publisher:
release.yml on Kldpsh7/devleo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lion_cub_pet-0.1.1-py3-none-any.whl -
Subject digest:
eadd0da717b32368e5b6b64ba5106b42f32044782291c15abffd1e90dce66d34 - Sigstore transparency entry: 2212187755
- Sigstore integration time:
-
Permalink:
Kldpsh7/devleo@e63eec7960086d3fe57db3144a63a28db4a5560b -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Kldpsh7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e63eec7960086d3fe57db3144a63a28db4a5560b -
Trigger Event:
release
-
Statement type: