oc-day-in-the-life

Community@gqg946cybh/oc-day-in-the-life
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-day-in-the-life. Run `npx -y @neta-art/neta-search-cli@latest skills use @gqg946cybh/oc-day-in-the-life --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 @gqg946cybh/oc-day-in-the-life
Summary

Turn one of your characters into a playable day: a to-do list, a ticking clock, and dinner that must be ready by dark.

  • Pick a character from your world and get a one-page game of their day, from before dawn until dark, built from their card.
  • You get a list of thirteen chores, a stamina bar and a mood bar, and you decide what to do in what order.
  • Two pots cook on their own while you are busy elsewhere, and three surprise visitors interrupt with choices you must answer.
  • The day can't fit everything: about three chores will go undone, and dinner on the table by nightfall decides how it ends.
  • Every day ends one of five ways, with a list of memories and what was left undone, and it's quick to replay.
SKILL.md
# A day in the life

One page, one day, one character. The player is handed a list of thirteen chores, a body with
100 stamina and a spirit that starts at 60, and a clock that runs from before dawn to dark.
Two stove burners cook on their own while the player is elsewhere; three timed interruptions
walk in and demand an answer; dinner has to be on the table by nightfall or the day fails.
The result is a web Work that can be played in a minute or ten, and replayed.

Read this file fully before writing any file or generating anything.

## 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, page title, buttons, labels, the day's own
prose — 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 play a day as a character, asks for a daily-routine or job-life
game, or wants a character card turned into something they can play.

Not for: a branching story with choices and chapters (create-avg), a chat with a character
(create-roleplay), a poster or a single illustration of a character. Say what this makes and
stop.

## Inputs

| Item | Required | Counts as given when |
|---|---|---|
| character | yes | the user names one character that exists in this world, or says "my OC" / "the protagonist" while the world has one obvious lead. "Everyone", "a random OC" and "anyone" do not count. |
| place | no — default the character's home or main location from their card, then the world itself | the user names a place, or the character's card names one |
| language | no — default the user's language | detected from their message |
| scale | no — default 13 chores, 05:45–19:00 | the user asks for a shorter or longer day |

If the character is missing, or the named character is not in this world, ask once, in one
message, and stop. If everything required is given, do not ask, do not show a plan and wait —
build through to delivery.

## Steps

1. **Read the world, not the vibe.** List the cast and find the character:
   `node /mods/neta/neta atom list --type character` → `node /mods/neta/neta atom get world/characters/<name>.md`.
   Then read `world/WORLD.md` for tone, and `atom list --type location` for the place. Extract,
   into `$RUN/brief.md`: what the character does all day, who they live with (3–5 people, with
   roles), 3–6 places they move between, one thing they are responsible for, one thing they
   are avoiding, and the era's objects (what lights the room, what cooks the food, what the
   floor is made of). If the card is thin, build from the three most repeated traits rather
   than inventing lore.

2. **Write `$RUN/day.json`** following `references/content-rules.md` — read it now, it holds the
   budget math, the thirteen slots, the stove timings, the trigger design and the five endings.
   Every string must come from step 1's material: this character's chores, this place's rooms,
   this cast's names. Never leave a placeholder in the file.

3. **Validate before building**:
   `node scripts/validate-day.mjs "$RUN/day.json"`
   It writes `$RUN/day.validation.json`. Fix every `ERROR`; a warning about budget or missing
   rest is worth one more pass. Do not build while it fails.

4. **Build the page**:
   ```
   node scripts/build.mjs --config "$RUN/day.json" --out "works/webs/$SLUG" \
     --lang <en|zh|ja> --title "<title in the user's language>" \
     [--map <path to the place's cover>] [--portrait <path to the character's cover>]
   ```
   `$SLUG` = `oc-day-<short latin handle of the character>`; if `works/webs/$SLUG` already
   exists for another character, append `-2`, `-3`. Use the place's existing cover as the map
   if it has one — never generate a map image for this skill. For a language the template does
   not ship (it ships en, zh, ja), write `$RUN/locale.json` with the same keys translated and
   add `--locale-json "$RUN/locale.json"`.

5. **Check the page before publishing**:
   `node scripts/verify.mjs "works/webs/$SLUG"`
   It writes `verify-report.json` in that folder. Every check must pass: the day exists, the
   chores have outcomes, five endings have text, the page's chrome is in the page's language.
   Fix and rerun; do not deliver while it fails.

6. **Publish a web Work**:
   ```
   node /mods/neta/neta work init web "works/webs/$SLUG" --title "<title>"
   node /mods/neta/neta work publish web "works/webs/$SLUG" --title "<title>"
   ```
   The publish output carries the Work id. Do not hand over a Work that is still publishing.

7. **Hand over with a card — the run is not delivered until this step is done.** One
   interaction-components link card on its own line, target `{ "type": "work", "workId": "<id>" }`,
   the id from step 6's publish output (fallback: `cohubWorkId` in
   `works/webs/$SLUG/meta.json`). Never a made-up id, never a folder link, never only an inline
   image. Then two lines in the user's language: whose day it is, and the one rule that will
   cost them (three chores will not be reached).

`$RUN` = `_runs/oc-day-in-the-life/<timestamp>/` under the world root, for the brief, the
config and the reports. Do not move it afterwards; the reports are how the run is checked.

## Deliver

A **web Work**: a single static page (`index.html` + `app.js` + `style.css` + `day-data.js`)
that opens on the title screen, plays the day, and ends on one of five endings with a memory
list and what was left undone. No build step, no network, no generation at play time.

## 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.
- Do not generate images for this skill; use the world's existing covers or the drawn plan.
- Do not add chapters, save files, a shop or a second day. One day per Work; a second day is a
  second run.
- Make only the Work asked for; do not act on your own next-step suggestions.

## When to stop

- No character named and none obvious: ask once, then stop.
- The character or place is not in this world: say what is missing and stop. Do not invent a
  card to fill the slot.
- `validate-day.mjs` reports errors after two fix passes: say which rule is failing (budget,
  windows, dinner) and what the day is missing — do not ship a broken day.

## Gotchas

- `neta atom list` already prints JSON; passing `--json` is rejected with `FLAG_UNSUPPORTED`.
  Use `--type` and `--query`, and `atom get <world/...md>` for one card.
- `atom get` takes the path id (`world/characters/<name>.md`), not the display name.
- The page must work with **no** generated art. A portrait path that does not exist is dropped,
  the map falls back to a drawn plan; do not block on missing covers.
- The budget is the design. A day where every chore fits has no ending worth reading; the
  validator's budget line exists because that failure is invisible until you play it.
- Dinner is not another chore. If it can be skipped without consequence, the cold ending never
  fires and the day has no spine.
- Do not reuse the original build's people or props (the sick child, the west window, the
  rabbit in the garden). They belong to one world; keep the mechanism, rebuild the material.
- Two burners, 45-minute grace. A third passive chore settles the oldest — that is intended,
  and it is where a run usually goes wrong for the player, not for you.