Move while the model thinks.
Repset turns natural Codex turn boundaries into optional, private, accessible movement breaks—without reading prompts, code, paths, repository names, commands, diffs, or transcripts.
Built for OpenAI Build Week · Apps for Your Life.
Agentic coding can leave developers seated for a long time. Ordinary timers interrupt focus at arbitrary moments. Repset uses the Codex boundary that already exists: a completed turn.
Codex Stop → sanitized local event → optional Repset nudge → your activity choice
→ local completion → append-only points → weekly progress → MCP status in Codex
The no-login judge demo is live at www.repset.site/demo and works without an API key. A 2:45 narrated submission candidate is prepared; the YouTube link will be added only after the entrant listens to the final file, uploads it, and verifies anonymous playback.
- Install Repset for Codex
- Pinned v0.3.3 release
- Build Week pitch deck
- Devpost project page — hackathon submission pending
- SessionStart and non-blocking Stop hooks with a fail-open sanitized spool.
- Interactive MCP App with skippable first-run setup, persistent local settings, real progress, explicit Start/Skip/Snooze, opt-in sound, and a complete structured-text fallback.
- Curated camera squat, standing, seated, and honor-mode choices with equal progress.
- On-device MediaPipe pose inference; camera is explicit and frames never leave browser memory.
- Four-day weekly consistency, neutral daily cap, Skip/Snooze, and Sandbox-only Boost receipt.
- GPT-5.6 structured catalog selection with deterministic local fallback.
- Original Pip mascot, reduced-motion support, clear recovery states, and no hard lockouts.
- Optional original Pip custom pet for supported Codex desktop and CLI hosts.
Repset adapts to explicit, local, user-selected context—not inferred location. Public Mode is quiet, discreet, camera-free, and floor-free. Office Mode supports seated, standing, desk, and short-walk options. Home Mode can offer optional private camera verification. Travel Mode stays discreet, and Meeting Mode suppresses prompts.
Every approved 30–300 second activity earns equal consistency credit regardless of camera use, repetitions, position, or setting. Users can choose positions, available space, quietness, visibility, sweat preference, equipment, time, verification method, and body-region exclusions. Repset provides configurable movement alternatives and user-controlled exclusions; it is not medical advice.
| Area | Responsibility |
|---|---|
apps/site |
Marketing site, anonymous demo, server-only optional selector |
packages/core |
Catalog, schemas, eligibility, selection, quest, pose state machine |
packages/local |
Loopback runtime, SQLite persistence, optional camera-verifier UI |
packages/mcp |
Stdio MCP server, runtime ownership, and bundled Apps UI |
plugins/repset |
Manifest, hooks, skill, MCP config, assets, bundled output |
The repository marketplace is .agents/plugins/marketplace.json; its stable name is repset-marketplace.
codex plugin marketplace add AmirmLotfy/repset --ref v0.3.3
codex plugin add repset@repset-marketplaceThen open /hooks, inspect and trust SessionStart and Stop, start a new Codex task, and ask: “How is my Repset week going?”
For a local source checkout, use codex plugin marketplace add "$PWD" instead.
After installing the plugin, visit www.repset.site/install/pip to review and install Pip through Codex’s official custom-pet flow. The transparent sprite is an original Repset asset in the supported 1536×1872 version-1 format. It reports Codex’s Running, Needs input, Ready, and Blocked states; it does not read prompts, code, files, or Repset data, and it is not required for movement breaks.
Desktop users can wake or hide Pip with /pet. Compatible terminal rendering
requires iTerm2 3.6+ or Kitty/Sixel graphics support; the IDE extension does not
currently provide a floating pet overlay. Reduced-motion mode uses a still frame.
Hooks allow only a pseudonymous session key, event type, and timestamp after HMAC transformation. They never read or forward content context. Every hook has a one-second ceiling and exits successfully if the local runtime is unavailable.
When the host supports MCP App rendering, repset_render_status presents a
self-contained visual experience using the same local service and ledger as the
text tools. First run is skippable. Settings control natural-boundary nudges,
duration, movement preference, sound, motion, and Pip locally. It loads no remote
asset, and never opens a challenge until the user presses Start. In other
hosts, structured text retains the full workflow. Standing, seated, and honor
challenges run and complete inside the MCP App; only the explicit camera path
opens the authenticated localhost verifier.
| Tool | Purpose |
|---|---|
repset_render_onboarding |
Skippable one-minute first-run setup stored locally |
repset_render_settings |
Visual local settings for nudges, duration, modality, sound, motion, and Pip |
repset_render_status |
Interactive MCP App with real progress and explicit Start, Skip, Snooze, Settings, and Sandbox actions |
repset_get_settings |
Reads the local user-selected settings |
repset_update_settings |
Saves a complete explicit local settings object |
repset_get_status |
Today/week progress, most recent activity, due and next eligible state |
repset_set_context |
Persist or temporarily override Public, Office, Home, Travel, Seated, Meeting, or Custom context |
repset_get_break_options |
Curated accessible choices and recommendation |
repset_start_break |
Starts an explicit in-Codex challenge or the optional local camera verifier |
repset_complete_break |
Idempotent completion and receipt |
repset_snooze |
Snoozes for 15, 30, or 60 minutes |
repset_skip |
Defers an optional nudge for 15 minutes |
repset_claim_sandbox_boost |
Creates a one-per-week demo receipt in the local ledger; nothing is sent to OpenAI |
repset_reset_demo |
Resets only isolated demo state |
GPT-5.6 may rank one selected ID and up to two alternative IDs from the human-reviewed catalog using strict structured output. Repset validates and normalizes that response back to its stable selected/fallback contract. The model receives only coarse context, work duration, recent catalog variety, weekly progress, preference, difficulty, and exclusions—not code or conversation context. Missing keys, refusal, timeout, malformed JSON, unsafe IDs, medical/shame language, and network failures all return the same deterministic local selection shape.
Camera permission is requested only after Use camera. MediaPipe model/WASM files are bundled, inference runs in a worker, and raw frames are neither persisted nor uploaded. Camera-denied, standing, seated, honor, model-error, offline, reduced-motion, and keyboard paths remain valid and earn equal progress.
Repset is an optional movement prompt, not medical advice, diagnosis, treatment, or form assessment. Skip and Snooze remain visible. See the privacy model and site privacy page.
- Use the anonymous
/demoroute for the browser judge path. - For the full plugin path, use Node 24 LTS and the local marketplace steps above.
- Start Codex with
REPSET_DEMO_MODE=1. - Review
/hooks, start a new task, then ask “How is my Repset week going?” to render the visual card or its structured-text fallback.
| Variable | Purpose |
|---|---|
OPENAI_API_KEY |
Optional server/local-runtime GPT-5.6 access; never use a NEXT_PUBLIC_* variable |
REPSET_GPT_DEMO_ENABLED=1 |
Explicitly permits paid GPT ranking on the public demo; keep off without a dedicated key |
REPSET_DEMO_MODE=1 |
Immediate isolated demo nudge with seeded state |
REPSET_DESKTOP_NOTIFICATIONS=1 |
Optional fixed-copy OS nudge override; the same opt-in is available in local Settings |
REPSET_PORT |
Optional loopback runtime port |
Requirements: pnpm 11, Node 24 LTS for the supported local plugin runtime, and a current Codex client. The host test environment may run Node 22 with a node:sqlite experimental warning; it is not the supported clean-install target.
pnpm install --frozen-lockfile
pnpm assets:pose
scripts/build-pip-codex-pet.sh
pnpm dev
pnpm verifyFor a private live API smoke test, put the key only in
apps/site/.env.local, set REPSET_GPT_DEMO_ENABLED=1, and run
pnpm test:gpt:live. The command prints only the selector source and approved
activity IDs; it never prints the key. Use a dedicated, restricted OpenAI
project key for any public deployment.
pnpm verify runs formatting, type checking, unit/integration/privacy/security tests, browser tests, production build, plugin validation, and the tracked-tree secret scan. Browser binaries can be installed with pnpm exec playwright install chromium webkit.
Demo mode keeps a separate database and seeded local state; the public judge demo keeps its own versioned browser state. Its voucher is always labelled Sandbox demo—no monetary value, not sent to OpenAI, and not OpenAI or Codex credits.
MCP App rendering depends on host support; this is why the plugin intentionally keeps every action available through normal MCP tool results. The rich standing, seated, and honor experience stays inside compatible Codex hosts, while camera permission and pose inference use the authenticated loopback verifier. Optional desktop notifications are a fixed-copy convenience, not a custom always-on-top window, and are off by default.
The public repository, pinned v0.3.3 marketplace release, exact bundled MCP server, anonymous production judge demo, real hook-trust captures, structured MCP fallback, and interactive App host harness are verified. The remaining hackathon submission gate is the public/unlisted YouTube video and the user-owned final Devpost review. See validation report.
Codex was the primary build collaborator and is the product surface for hooks and MCP. GPT-5.6 has the deliberately bounded selector role described above. Human product/engineering decisions set safety boundaries, the catalog, equal progression, privacy exclusions, visual identity, and release gates.
See CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md, CHANGELOG.md, THIRD_PARTY_NOTICES.md, and LICENSE.

