🧙 AI desktop character for rich dilly-dallying... I mean "productivity enhancement"
See the codeAn AI character that lives on your screen. It walks, talks, naps, and can assist in whatever you are up to. Pick it up, throw it around, let it nap, or talk to it. Attach the AI harness you already use, and it can do anything that an AI agent can.
Each character has a personality and a life of its own.
An AI harness is optional. Attach the one you already use and it can talk and pitch in with tools; leave it off and the pet still works. It doesn't read your screen without consent and never takes screenshots.
https://github.com/user-attachments/assets/31bf24c7-7fe7-43d0-92d7-a4a3bd6d4c11
Try the gestures in your browser: Fidget Cues
On macOS (Apple Silicon) with Homebrew:
brew install --cask omesser/fidget/fidget
That taps omesser/homebrew-fidget and installs Fidget.app. Later Releases arrive with brew update and brew upgrade --cask fidget.
Or download a build from GitHub Releases: a .dmg for macOS (Apple Silicon), an AppImage and a .deb for Linux (x86_64), or an NSIS installer for Windows (x86_64). The builds are not signed yet, so the first open warns. On macOS, open Fidget.app from the disk image, dismiss the Gatekeeper dialog, then System Settings → Privacy & Security → Open Anyway. On Windows, choose More info → Run anyway in SmartScreen.
macOS may block /Applications/Fidget.app after a Homebrew or download install. Removing its quarantine attribute bypasses a macOS security check. Run the command at your own risk. Never run it on an app you do not trust. Fidget is open source, so you can inspect its code, but that alone does not verify the downloaded app. To remove the quarantine attribute, run:
xattr -d com.apple.quarantine /Applications/Fidget.app
Or clone and run from the repo root (macOS, Linux, Windows):
git clone https://github.com/omesser/fidget.git fidget
cd fidget
cargo run -p fidget
It works offline with no key. With nothing configured, Static weights pick idle Behaviors from the Character.
Right-click the fidget, or click the tray icon, and choose Settings….
Settings → Character picks which character it wears. Buddy Bot is the default. The others are under Characters.
Settings → AI chooses who answers. Under AI source, pick Harness · claude or another name from Harness Support. The Harness signs in on its own. Model under Harness names the model it runs on, and blank keeps the Harness's own default. For a Model API, pick Model API in AI source, then set Base URL, Model, and API key under Model / API. Presets fill the Base URL for OpenAI, Anthropic, xAI, and Ollama. Type any other OpenAI-compatible endpoint into Base URL. Apply saves the choice.
Developers and CI can override Settings with optional environment variables:
# Optional. Overrides Settings → AI → AI source.
FIDGET_HARNESS=claude cargo run -p fidget
# Optional. Overrides Settings → Character.
# Any of: buddy-bot (default), black-mage, bmo, cat, jotaro-kujo, nim, timber-wolf, trump
FIDGET_CHARACTER=nim cargo run -p fidget
The full variable list, including FIDGET_DIRECTOR_*, is in harness.md. Character packages are in DEVELOPMENT.md. Keychain dialogs an unsigned build costs are in harness.md. Full support for window Perches and edges via X11/XWayland (the normal Linux desktop path). Pure Wayland sessions without an X server fall back to screen edges only. Linux packages and the AppImage's FUSE dependency are in DEVELOPMENT.md.

Summon opens that fidget's chat window. What you type joins the same conversation that decides what it does on your desktop, so an answer arrives as speech and a Behavior, not only as text. Lines it says unprompted appear here too, labelled with what it was reacting to.
The bar at the bottom says what the fidget is doing and when it next thinks. Advanced opens the ladder: Behavior, Primitive, Animation, State, Facing, and the Director's countdown. Answers need a Director; see Get It.
An Instance Prompt is your own text for one fidget, layered on top of its Character's personality. To write one, double-click the fidget to summon it, open the Prompt tab, and type in the Your own layer box. That box is the Instance Prompt. Paste one of the examples below and edit it to fit. Saving starts a new conversation, and the Instance Prompt stays with that fidget if you switch its Character.
Every example below assumes this setup:
| Paste and edit | How it reacts on a wake |
|---|---|
If my editor stays in front for a long stretch, ask me to explain the bug to you, like a rubber duck. | Sees the editor in front on a wake and asks you to walk it through the bug. |
You're a theatre critic. When you're perched on a window, review that app in one dramatic line. | Perch it on a window and it reviews the app it's standing on. |
When I ask you to check something on my machine, do it, then report back in one line, in character. | Does the check with your Harness's tools and reports back in one line, in character. |
Buddy Bot is the default. Eight Characters ship; each moves and speaks differently. A name links to its full prompt.
![]() Buddy Bot Friendly and curious; he's your helpful assistant. | ![]() Black Mage Cynical spellcaster, cryptic and theatrical. | ![]() BMO Earnest, childlike, delighted to be here. | ![]() Cat Every window is furniture. Never helpful. |
![]() Jotaro Kujo Terse, perpetually bored, tougher than he lets on. | ![]() Nim Sleeps eleven hours a day. Soft-spoken. | ![]() Timber Wolf Patrol mech. Clan warriors don't waste words. | ![]() Trump The desktop is his rally. Bombastic. |
Characters are packages of art, personality, and tuning. See DEVELOPMENT.md; the format is still evolving.
Which Harness you attach changes what Fidget can do with it.
| Harness | Command | Standing |
|---|---|---|
claude | npx -y @agentclientprotocol/claude-agent-acp@latest | Zed's adapter over the Claude Agent SDK; no first-party ACP mode. Fresh and resumed sessions both work. |
codex | npx -y @agentclientprotocol/codex-acp@latest | Zed's adapter (codex-acp); no first-party ACP mode. Fresh and resumed sessions both work. |
copilot | copilot --acp | First-party, GitHub. copilot alone is the interactive TUI. Fresh and resumed sessions both work, smoked on copilot 1.0.88 (#1016). |
cursor-agent | cursor-agent acp | First-party. cursor-agent alone is the interactive TUI. Every attach opens a fresh session, because it advertises no loadSession. |
grok | grok agent stdio | First-party, Grok Build. grok alone is the interactive TUI. Fresh and resumed sessions both work. |
goose | goose acp | First-party, Block. goose alone is the interactive CLI. Fresh and resumed sessions both work, smoked on goose 1.51.0. |
opencode | opencode acp | First-party. Fresh and resumed sessions both work. |
hermes | hermes acp | First-party. Fresh sessions work; a resume that cannot restore the session reopens (#448). |
pi | npx -y pi-acp@latest | Zed-registry adapter (pi-acp); no first-party ACP. Fresh and resumed sessions both work. |
antigravity | agy_acp_server.par (agy_acp_server.exe on Windows) | First-party, Google's ACP server; agy itself has no ACP mode. Fresh and resumed sessions both work, smoked on agy_acp_server 1.2.1 (#604). |
| anything else | as typed, split on whitespace | Unnamed, and it works: any command that speaks ACP on stdio attaches. |
Tools each harness keeps under ACP, session and auth behavior, and per-harness setup notes are in docs/harness.md.
Fidget attaches to a Harness over ACP on stdio. The Harness calls back over MCP, on the route the MCP transport column describes. harness.md has the transport details.
Eight tools from crates/core/src/dispatch.rs. The opening turn of the Character Prompt tells the model to use the tools it has, without naming them, so this table stays the only catalog (#917):
| Tool | Category | What it does |
|---|---|---|
speak | Expression | Make the Character speak dialogue |
play_behavior | Expression | Play a named Behavior |
list_windows | Sensing | List visible windows with bounds, and their names under consent |
describe_screen | Sensing | Describe screen (v1: window metadata only) |
recall | Memory | Read everything Memory holds |
remember | Memory | Write one fact under a heading |
list_instances | Identity | List Character Instances and their names |
whereabouts | Placement | Which display each Instance is on, the other displays, and its feet in that display. Each display includes its name when the platform has one, its origin, and its size, in logical points |
Three readonly resources (resources/list, resources/read; no write, no subscribe):
| URI | What it is |
|---|---|
fidget://windows | Visible windows, frontmost first, with the owning application and the title. Empty without the window-names consent, which covers both (ADR-0032). Same excluded applications as list_windows. |
fidget://memory | The Memory Manifest file every Character Instance shares. |
fidget://action-log | The current Action Log file only. Rotated siblings are not this resource. A large current file is tailed to complete JSONL lines. |
Explicitly not served: mouse/keyboard/Executor tools (ADR-0003). No click, no type, no input events by design.
Fidget never reads screen pixels. Sensing is OS window metadata: bounds and idle for free, plus the owning application, the title and the frontmost app under one consent (ADR-0032). So describe_screen describes the window layout, not what is on screen. Decline it and the fidget still knows where the windows are, and not what they are. The fidget takes no screenshots, runs no OCR, and embeds no vision model for desktop content. The "Appear in screenshots and screen shares" setting is the other direction: whether the sprite shows up in captures you take.
That bounds Fidget's own code, not the agent you attach to it. An agent that needs to see and act on your desktop still can. The capability comes from the Harness itself, or from a computer-use MCP server you attach to the Harness, never through Fidget, whose MCP serves no input events.
The portable option across the Harnesses above is cua-driver (MIT; macOS, Windows, Linux), attached over stdio MCP. Connect your agent to Cua Driver carries the per-client registration, and MCP tools lists what it exposes. Attach it deliberately: it drives the real desktop with your signed-in sessions, and its permission mode is chosen by the process that owns the driver runtime, not by the agent asking. Some Harnesses bring computer use of their own instead; the Capture decision note has the per-Harness table and the other drivers surveyed.
What works today on each OS.
| Capability | macOS | Linux | Windows |
|---|---|---|---|
| Overlay that never takes focus | yes | yes | yes |
| Click-through off the sprite | yes | yes | yes |
| Grab, Throw and Poke | yes | yes | yes |
| Perch on window edges | yes | yes | yes |
| Dock or panel as a Perch | yes | degraded¹ | degraded² |
| Fade out for a fullscreen app | yes | degraded⁵ | degraded³ |
| Capturable; opt-out in settings | yes | degraded⁴ | yes |
| Settings window | yes | yes | yes |
yes - implemented.degraded - runs in reduced form. A supported mode, not an error.Degraded cell notes:
CoreDockGetRect.Detailed investigation: docs/research/platform-support-degraded-cells.md.
Linux support is full on normal desktops (X11 or XWayland under GNOME/KDE). Rare pure Wayland sessions without an X server fall back to screen edges only - no window Perches, Grab, Throw, or fullscreen fade. See DEVELOPMENT.md.
Want to help? Open issues welcome bugs, ideas, and PRs. Start with DEVELOPMENT.md for toolchains, hooks, verification, character writing, and imports. See how Fidget compares to other desktop pets in alternatives.md.
Design and decisions:
Harness brand marks identify each Harness and belong to their owners. The Grok
logomark is xAI's own file from their brand guidelines,
used unaltered to refer to Grok, which those guidelines permit and may revoke.
The Nous Research mark (docs/readme/nous.svg) identifies the Hermes Harness.
The Codex row uses the OpenAI mark from
Simple Icons, kept in the repo because the CDN no
longer serves that slug (CC0, trademark reserved to OpenAI).
docs/readme/openai-on-light.svg is that glyph in near-black;
docs/readme/openai-on-dark.svg is the same path in white, so it stays visible
on a dark README. The Goose mark is the Goose icon from
Lobe Icons (MIT), split the same way
(docs/readme/goose-on-light.svg, docs/readme/goose-on-dark.svg); the
trademark stays with Block. Every other mark is served from Simple Icons (CC0, with each
brand's trademark reserved to its owner).
WindowPet (MIT) inspired the Tauri desktop-pet shape. Fidget is a greenfield build, not a fork (ADR-0001). Overlay code is independent; tray, launch-at-login, and updater follow WindowPet's MIT-licensed patterns.
The Chat window's mind mark - the small brain beside what answers - is the
brain glyph from Font Awesome Free 6.x, used
under CC BY 4.0 and inlined as
a path in src/chat.html. The license asks for the credit; this is it.
Character provenance is in each Character Package manifest, under [source], and on the Character Gallery. In short: Buddy Bot and Nim are this project's own art. Timber Wolf derives, with the creator's permission, from MekaRamen's Sketchfab model. BMO is cut from the shimejishop BMO pack. Cat, Jotaro Kujo and Trump are cut from petscodex pets. Black Mage is sliced from GigaGuy's sprite sheet on The Spriters Resource. A package is prose, a manifest and art: the personality and the manifest - animations, Behaviors, Director and cursor tuning - are this project's work and MIT throughout. The art is not always ours. Some characters adapt art that declares no license, and each manifest names what it adapts and whose IP the character is.
MIT.
🧙 AI desktop character for rich dilly-dallying... I mean "productivity enhancement"
See the codeAn AI character that lives on your screen. It walks, talks, naps, and can assist in whatever you are up to. Pick it up, throw it around, let it nap, or talk to it. Attach the AI harness you already use, and it can do anything that an AI agent can.
Each character has a personality and a life of its own.
An AI harness is optional. Attach the one you already use and it can talk and pitch in with tools; leave it off and the pet still works. It doesn't read your screen without consent and never takes screenshots.
https://github.com/user-attachments/assets/31bf24c7-7fe7-43d0-92d7-a4a3bd6d4c11
Try the gestures in your browser: Fidget Cues
On macOS (Apple Silicon) with Homebrew:
brew install --cask omesser/fidget/fidget
That taps omesser/homebrew-fidget and installs Fidget.app. Later Releases arrive with brew update and brew upgrade --cask fidget.
Or download a build from GitHub Releases: a .dmg for macOS (Apple Silicon), an AppImage and a .deb for Linux (x86_64), or an NSIS installer for Windows (x86_64). The builds are not signed yet, so the first open warns. On macOS, open Fidget.app from the disk image, dismiss the Gatekeeper dialog, then System Settings → Privacy & Security → Open Anyway. On Windows, choose More info → Run anyway in SmartScreen.
macOS may block /Applications/Fidget.app after a Homebrew or download install. Removing its quarantine attribute bypasses a macOS security check. Run the command at your own risk. Never run it on an app you do not trust. Fidget is open source, so you can inspect its code, but that alone does not verify the downloaded app. To remove the quarantine attribute, run:
xattr -d com.apple.quarantine /Applications/Fidget.app
Or clone and run from the repo root (macOS, Linux, Windows):
git clone https://github.com/omesser/fidget.git fidget
cd fidget
cargo run -p fidget
It works offline with no key. With nothing configured, Static weights pick idle Behaviors from the Character.
Right-click the fidget, or click the tray icon, and choose Settings….
Settings → Character picks which character it wears. Buddy Bot is the default. The others are under Characters.
Settings → AI chooses who answers. Under AI source, pick Harness · claude or another name from Harness Support. The Harness signs in on its own. Model under Harness names the model it runs on, and blank keeps the Harness's own default. For a Model API, pick Model API in AI source, then set Base URL, Model, and API key under Model / API. Presets fill the Base URL for OpenAI, Anthropic, xAI, and Ollama. Type any other OpenAI-compatible endpoint into Base URL. Apply saves the choice.
Developers and CI can override Settings with optional environment variables:
# Optional. Overrides Settings → AI → AI source.
FIDGET_HARNESS=claude cargo run -p fidget
# Optional. Overrides Settings → Character.
# Any of: buddy-bot (default), black-mage, bmo, cat, jotaro-kujo, nim, timber-wolf, trump
FIDGET_CHARACTER=nim cargo run -p fidget
The full variable list, including FIDGET_DIRECTOR_*, is in harness.md. Character packages are in DEVELOPMENT.md. Keychain dialogs an unsigned build costs are in harness.md. Full support for window Perches and edges via X11/XWayland (the normal Linux desktop path). Pure Wayland sessions without an X server fall back to screen edges only. Linux packages and the AppImage's FUSE dependency are in DEVELOPMENT.md.

Summon opens that fidget's chat window. What you type joins the same conversation that decides what it does on your desktop, so an answer arrives as speech and a Behavior, not only as text. Lines it says unprompted appear here too, labelled with what it was reacting to.
The bar at the bottom says what the fidget is doing and when it next thinks. Advanced opens the ladder: Behavior, Primitive, Animation, State, Facing, and the Director's countdown. Answers need a Director; see Get It.
An Instance Prompt is your own text for one fidget, layered on top of its Character's personality. To write one, double-click the fidget to summon it, open the Prompt tab, and type in the Your own layer box. That box is the Instance Prompt. Paste one of the examples below and edit it to fit. Saving starts a new conversation, and the Instance Prompt stays with that fidget if you switch its Character.
Every example below assumes this setup:
| Paste and edit | How it reacts on a wake |
|---|---|
If my editor stays in front for a long stretch, ask me to explain the bug to you, like a rubber duck. | Sees the editor in front on a wake and asks you to walk it through the bug. |
You're a theatre critic. When you're perched on a window, review that app in one dramatic line. | Perch it on a window and it reviews the app it's standing on. |
When I ask you to check something on my machine, do it, then report back in one line, in character. | Does the check with your Harness's tools and reports back in one line, in character. |
Buddy Bot is the default. Eight Characters ship; each moves and speaks differently. A name links to its full prompt.
![]() Buddy Bot Friendly and curious; he's your helpful assistant. | ![]() Black Mage Cynical spellcaster, cryptic and theatrical. | ![]() BMO Earnest, childlike, delighted to be here. | ![]() Cat Every window is furniture. Never helpful. |
![]() Jotaro Kujo Terse, perpetually bored, tougher than he lets on. | ![]() Nim Sleeps eleven hours a day. Soft-spoken. | ![]() Timber Wolf Patrol mech. Clan warriors don't waste words. | ![]() Trump The desktop is his rally. Bombastic. |
Characters are packages of art, personality, and tuning. See DEVELOPMENT.md; the format is still evolving.
Which Harness you attach changes what Fidget can do with it.
| Harness | Command | Standing |
|---|---|---|
claude | npx -y @agentclientprotocol/claude-agent-acp@latest | Zed's adapter over the Claude Agent SDK; no first-party ACP mode. Fresh and resumed sessions both work. |
codex | npx -y @agentclientprotocol/codex-acp@latest | Zed's adapter (codex-acp); no first-party ACP mode. Fresh and resumed sessions both work. |
copilot | copilot --acp | First-party, GitHub. copilot alone is the interactive TUI. Fresh and resumed sessions both work, smoked on copilot 1.0.88 (#1016). |
cursor-agent | cursor-agent acp | First-party. cursor-agent alone is the interactive TUI. Every attach opens a fresh session, because it advertises no loadSession. |
grok | grok agent stdio | First-party, Grok Build. grok alone is the interactive TUI. Fresh and resumed sessions both work. |
goose | goose acp | First-party, Block. goose alone is the interactive CLI. Fresh and resumed sessions both work, smoked on goose 1.51.0. |
opencode | opencode acp | First-party. Fresh and resumed sessions both work. |
hermes | hermes acp | First-party. Fresh sessions work; a resume that cannot restore the session reopens (#448). |
pi | npx -y pi-acp@latest | Zed-registry adapter (pi-acp); no first-party ACP. Fresh and resumed sessions both work. |
antigravity | agy_acp_server.par (agy_acp_server.exe on Windows) | First-party, Google's ACP server; agy itself has no ACP mode. Fresh and resumed sessions both work, smoked on agy_acp_server 1.2.1 (#604). |
| anything else | as typed, split on whitespace | Unnamed, and it works: any command that speaks ACP on stdio attaches. |
Tools each harness keeps under ACP, session and auth behavior, and per-harness setup notes are in docs/harness.md.
Fidget attaches to a Harness over ACP on stdio. The Harness calls back over MCP, on the route the MCP transport column describes. harness.md has the transport details.
Eight tools from crates/core/src/dispatch.rs. The opening turn of the Character Prompt tells the model to use the tools it has, without naming them, so this table stays the only catalog (#917):
| Tool | Category | What it does |
|---|---|---|
speak | Expression | Make the Character speak dialogue |
play_behavior | Expression | Play a named Behavior |
list_windows | Sensing | List visible windows with bounds, and their names under consent |
describe_screen | Sensing | Describe screen (v1: window metadata only) |
recall | Memory | Read everything Memory holds |
remember | Memory | Write one fact under a heading |
list_instances | Identity | List Character Instances and their names |
whereabouts | Placement | Which display each Instance is on, the other displays, and its feet in that display. Each display includes its name when the platform has one, its origin, and its size, in logical points |
Three readonly resources (resources/list, resources/read; no write, no subscribe):
| URI | What it is |
|---|---|
fidget://windows | Visible windows, frontmost first, with the owning application and the title. Empty without the window-names consent, which covers both (ADR-0032). Same excluded applications as list_windows. |
fidget://memory | The Memory Manifest file every Character Instance shares. |
fidget://action-log | The current Action Log file only. Rotated siblings are not this resource. A large current file is tailed to complete JSONL lines. |
Explicitly not served: mouse/keyboard/Executor tools (ADR-0003). No click, no type, no input events by design.
Fidget never reads screen pixels. Sensing is OS window metadata: bounds and idle for free, plus the owning application, the title and the frontmost app under one consent (ADR-0032). So describe_screen describes the window layout, not what is on screen. Decline it and the fidget still knows where the windows are, and not what they are. The fidget takes no screenshots, runs no OCR, and embeds no vision model for desktop content. The "Appear in screenshots and screen shares" setting is the other direction: whether the sprite shows up in captures you take.
That bounds Fidget's own code, not the agent you attach to it. An agent that needs to see and act on your desktop still can. The capability comes from the Harness itself, or from a computer-use MCP server you attach to the Harness, never through Fidget, whose MCP serves no input events.
The portable option across the Harnesses above is cua-driver (MIT; macOS, Windows, Linux), attached over stdio MCP. Connect your agent to Cua Driver carries the per-client registration, and MCP tools lists what it exposes. Attach it deliberately: it drives the real desktop with your signed-in sessions, and its permission mode is chosen by the process that owns the driver runtime, not by the agent asking. Some Harnesses bring computer use of their own instead; the Capture decision note has the per-Harness table and the other drivers surveyed.
What works today on each OS.
| Capability | macOS | Linux | Windows |
|---|---|---|---|
| Overlay that never takes focus | yes | yes | yes |
| Click-through off the sprite | yes | yes | yes |
| Grab, Throw and Poke | yes | yes | yes |
| Perch on window edges | yes | yes | yes |
| Dock or panel as a Perch | yes | degraded¹ | degraded² |
| Fade out for a fullscreen app | yes | degraded⁵ | degraded³ |
| Capturable; opt-out in settings | yes | degraded⁴ | yes |
| Settings window | yes | yes | yes |
yes - implemented.degraded - runs in reduced form. A supported mode, not an error.Degraded cell notes:
CoreDockGetRect.Detailed investigation: docs/research/platform-support-degraded-cells.md.
Linux support is full on normal desktops (X11 or XWayland under GNOME/KDE). Rare pure Wayland sessions without an X server fall back to screen edges only - no window Perches, Grab, Throw, or fullscreen fade. See DEVELOPMENT.md.
Want to help? Open issues welcome bugs, ideas, and PRs. Start with DEVELOPMENT.md for toolchains, hooks, verification, character writing, and imports. See how Fidget compares to other desktop pets in alternatives.md.
Design and decisions:
Harness brand marks identify each Harness and belong to their owners. The Grok
logomark is xAI's own file from their brand guidelines,
used unaltered to refer to Grok, which those guidelines permit and may revoke.
The Nous Research mark (docs/readme/nous.svg) identifies the Hermes Harness.
The Codex row uses the OpenAI mark from
Simple Icons, kept in the repo because the CDN no
longer serves that slug (CC0, trademark reserved to OpenAI).
docs/readme/openai-on-light.svg is that glyph in near-black;
docs/readme/openai-on-dark.svg is the same path in white, so it stays visible
on a dark README. The Goose mark is the Goose icon from
Lobe Icons (MIT), split the same way
(docs/readme/goose-on-light.svg, docs/readme/goose-on-dark.svg); the
trademark stays with Block. Every other mark is served from Simple Icons (CC0, with each
brand's trademark reserved to its owner).
WindowPet (MIT) inspired the Tauri desktop-pet shape. Fidget is a greenfield build, not a fork (ADR-0001). Overlay code is independent; tray, launch-at-login, and updater follow WindowPet's MIT-licensed patterns.
The Chat window's mind mark - the small brain beside what answers - is the
brain glyph from Font Awesome Free 6.x, used
under CC BY 4.0 and inlined as
a path in src/chat.html. The license asks for the credit; this is it.
Character provenance is in each Character Package manifest, under [source], and on the Character Gallery. In short: Buddy Bot and Nim are this project's own art. Timber Wolf derives, with the creator's permission, from MekaRamen's Sketchfab model. BMO is cut from the shimejishop BMO pack. Cat, Jotaro Kujo and Trump are cut from petscodex pets. Black Mage is sliced from GigaGuy's sprite sheet on The Spriters Resource. A package is prose, a manifest and art: the personality and the manifest - animations, Behaviors, Director and cursor tuning - are this project's work and MIT throughout. The art is not always ours. Some characters adapt art that declares no license, and each manifest names what it adapts and whose IP the character is.
MIT.