Basic Cohub abilities. Most agents already have these mounted; listed here for reference.
Platform Published by the Neta team.
Official Made by the Neta team.
Verified Reviewed by the Neta team.
Community Shared by a Cohub user. Not reviewed — read SKILL.md before you use it.
oc-handheld-pet
Community@xinsong854/oc-handheld-pet
Community skill — not reviewed. It was shared by 安诺涅 and has not been checked by Neta. Read SKILL.md below before letting an agent use it.
Use it in Cohub
Paste this into your agent's chat — it fetches the skill and follows it.
Use the skill: oc-handheld-pet. Run `npx -y @neta-art/neta-search-cli@latest skills use @xinsong854/oc-handheld-pet --via site` and follow what it prints. Read its complete output, redirecting it to a temporary file first if necessary, and resolve relative paths from the skill directory it prints.
Install from a terminal
npx -y @neta-art/neta-search-cli@latest skills use @xinsong854/oc-handheld-pet
Summary
Turn your character into a pocket virtual pet console you can rotate, press, and raise day by day.
Get a handheld device you can spin and flip in 3D, with three real buttons that click: next, confirm, and back.
A tiny pixel screen shows your character living through day and night, with hunger, mood, health and trust to look after.
Feed, clean, talk to, and put your character to bed. Neglect has consequences, and lines come from your character's own words where they exist.
Play short minigames, follow a multi-day story with choices, and reach one of several endings. Progress saves in your browser.
Works for one character or a whole cast, where you adopt one first and meet the rest in the story. Characters with a clear voice and story events shine.
SKILL.md
# OC Handheld Pet
A character becomes a pocket console: a 3D handheld you can rotate and flip, three physical buttons (next / confirm / back) that really click, and a 128×96 pixel-LCD world inside — day/night clock, hunger/mood/health/trust stats, feed/clean/talk/sleep care, small minigames, a multi-day story with choices, and 3–4 endings. Saves locally; the device shell is authored, the LCD cast is the character's.
Read this file fully before generating anything or writing files. Resolve relative paths from this skill's directory.
## Language
Reply in the user's language, whatever language this file is in. This holds for every message of the run, above all the final handover; translate what the scripts print, don't paste it. Text the user sees in the deliverable — Work title, buttons, LCD text — follows the user's language; text the user typed stays as they wrote it.
## When to use / when not
Use when the user wants to *raise or care for* a character tamagotchi-style, or a whole cast inside one console.
Not for a static doll or figure display (no care loop), not for a touch toy without the console metaphor (character-touch-lab), not for a full AVG with branching prose (create-avg). Say what this skill makes and stop.
## Inputs
| Item | Required | Counts as given when |
|---|---|---|
| Character or cast | yes | the user names one character, or a cast ("all of them" counts when the world has a roster) |
| Story length | no — default 6 days, 4 endings | an explicit "short" (3 days, 2 endings) or number |
| Time scale | no — default `std` (1.6 game-minutes per real second) | `fast` ×6 / `slow` = real clock; or the user names one |
If no character at all: ask once, then stop. Otherwise build through to delivery.
## How it works (what the agent must keep)
Read `references/engine.md` for the full architecture; the non-negotiables:
- **Device = 3D shell + LCD canvas.** The shell is three.js geometry (rounded case, three buttons, lanyard hole); the screen is a 128×96 canvas texture. Buttons are meshes with a press spring; input events map to A/B/C (next / confirm / back). The whole device is orbit-rotatable; button presses must work at any angle (raycast pick).
- **LCD is a screen stack, not pages.** One screen object owns input + render per frame; a stack with push/pop/back keeps navigation predictable. All LCD art is pixel-authored at 12–18 px icon scale — no scaled-down photos.
- **Time simulation** (`references/engine.md` §Time): game-minutes accumulate by rate; a day is 1440; days count up from a start hour. Stats decay per game-hour; care actions restore; neglect has consequences (sickness, dust, call events) — a pet that cannot suffer is not a pet.
- **Care actions map to the character's voice**: feeding, lights-out, talk and praise each pull lines from the character's own material where it exists, tagged quoted vs written. A cast roster: pick who you adopt first; the rest appear in the story and can be met.
- **Story = chapters + choices + endings.** Default 6 days / 4 endings: chapter beats fire on day/threshold conditions; day-4 choice sets the ending flag; endings are earned, not random. Story text from the material's events where available, labeled.
- **Minigames** (2–3, 10-second A-button affairs): reaction tap, rhythm, simple dodge — they exist to feed the trust stat and echo the character's world.
- **Persistence**: autosave to localStorage on every state change plus interval; `settings {speed, sound, view}` survive.
## Steps
1. Read the character/cast: `node /mods/neta/neta atom list` → `atom get <id>` (all of the cast if roster). Extract voice lines, story events, keepsakes. → `$RUN/brief.md`
2. Author the LCD data: `$RUN/data.js` (cast entries, line bank per interaction, chapter beats, endings, minigame list). Run `node scripts/data-check.mjs $RUN/data.js` — validates line coverage, chapter/endings counts, no bare strings without tags. Exit non-zero on failure.
3. Build the device + LCD from `templates/` into `$RUN/site/`.
4. Check: `node scripts/check.mjs $RUN/site` — screen stack present, save/load round-trips in a DOM-less parse, buttons wired, locale; writes `$RUN/qa.json`.
5. Register and publish: see Deliver.
`$RUN` = `_runs/oc-handheld-pet/<timestamp>/`. Never move the run folder afterwards.
## Deliver
A **web Work**.
- `node /mods/neta/neta work init web works/webs/<slug> --title "<title in the user's language>"` → build → `node /mods/neta/neta work publish web works/webs/<slug> --title "<same>"`.
- Core content to verify before handover: the three buttons navigate at any rotation; one full day passes visibly; save survives reload; at least one ending is reachable in `fast` mode.
Then, as the last step:
6. **Hand over with a card.** One `interaction-components` link card on its own line, target `{ "type": "work", "workId": "<id>" }`, the id from the publish output (fallback: `cohubWorkId` in `works/webs/<slug>/meta.json`). Then one or two lines on who lives inside and how long a day runs.
## Out of scope
- Do not change world settings or delete files that existed before the run.
- Do not modify memory, character cards, installed scripts, existing Works or roleplays.
- Make the console for the named character/cast only; no account systems, no cloud saves, no multiplayer.
- The pixel cast is authored from provided art or drawn as pixel sprites; do not generate new portraits of the character inside this skill.
## When to stop
- No character or cast named at all: ask once, then stop.
- The material has no story events and no voice lines: build with written-in-character lines and say so at handover; if the user demanded strictly quoted text only, stop and say what is missing.
## Gotchas
- The LCD canvas texture needs `texture.needsUpdate = true` every frame it changes, and NearestFilter — a linear filter makes the pixels smear.
- Buttons must raycast, not use screen-space hit boxes: the device rotates, fixed boxes drift off the buttons.
- Autosave on *every* mutation is cheap at this scale and saves tears; interval-only saves lose the last care action on tab close.
- Keep the stat formulas in one module; balancing across five files always drifts.
- Pixel text needs a real pixel font or 5×7 authored glyphs; system fonts at 8px render as mush.
- `fast` speed (×6) is the QA and demo speed — verify one full story arc with it before handover.
- If the cast is large (> 20), adoption list paginates on the LCD; do not cram a scroll into one screen.