{"id":"028c887a-bc63-4f1b-9fd2-d9b94f62937c","slug":"gomin","kind":"skill","name":"gomin","summary":"AI 에이전트가 HTML 페이지로 답하고, 당신의 답을 다시 받아가는 스킬 · An agent skill that lets your AI answer in interactive HTML and get your answers back (Claude Code, Codex, OpenCode, pi)","owner":"shlee8405","repoUrl":"https://github.com/shlee8405/gomin","license":"MIT","licenseTier":"permissive","trust":"community","stars":0,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-10-13T06:41:05.000Z","addedAt":"2026-10-21T11:47:06.822Z","logoUrl":"https://avatars.githubusercontent.com/u/68775153?u=ae4b076b4062aa1b629d010fdd3e0abdeedc9081&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["browser-web","developer-tools"],"tags":["ai-agent","claude-code","codex","html","korean","llm-tools","opencode","pi-package"],"runtime":"node","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-26T11:49:22.230Z","sample":false,"url":"https://conduits.dev/tools/gomin","language":"JavaScript","transports":["stdio"],"install":{"npm":"gomin"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<h1 align=\"center\">gomin · 고민</h1>\n\n<p align=\"center\"><strong>An agent skill that lets your AI answer with an HTML page instead of a wall of terminal text, and brings your answers back.</strong></p>\n\n<p align=\"center\">English · <a href=\"README.ko.md\">한국어</a></p>\n\n<p align=\"center\"><img src=\"docs/images/explain-en-dark.png\" alt=\"An explanation page opened with gomin, in dark mode\" width=\"900\"></p>\n\nLong plans, several options, explanations that need a table or a diagram: in chat you scroll, then type back \"use A for #2, not sure about #3…\". With gomin your agent writes one HTML page and runs `gomin open`. You read it in the browser, pick answers, comment on any sentence or element, and press **Send**. `gomin wait` hands the agent everything as compact text. It then revises the page, answers with a new one, or gets to work.\n\n*Gomin* (고민) is Korean for \"thinking something over\".\n\n- **For any response, not just plans.** Explanations, comparisons, reports, code reviews, and questionnaires all live in one conversation thread.\n- **Forms are the protocol.** Every `<input>`, `<select>`, and `<textarea>` with a `name` is sent back with its question text. The agent writes no JavaScript.\n- **Comment on anything.** Select text, or click an element in comment mode; the reply says exactly what you pointed at.\n- **Live in the page.** Ask follow-ups, comment, or pick options in the page, and the agent answers right there (Markdown messages or updated pages) and keeps listening until you press **End**. No going back to the terminal to say \"I replied\".\n- **Speaks your language.** Pages and the UI follow the language you write in: English stays English, Korean stays Korean. Korean gets first-class care: Pretendard, `keep-all` line breaking, and a composer that never sends mid-IME-composition.\n- **Built-in style kit.** Semantic HTML already looks finished: cards, callouts, choice cards, steps, tables, dark mode, and automatic Mermaid. The agent spends tokens on content, not CSS.\n- **Local and dependency-free.** Only Node.js is needed: no API keys, accounts, or MCP setup. The server listens on `127.0.0.1` only.\n\n## Install\n\nYou need Node.js 20+. Pick the method for your agent.\n\n### One command (recommended)\n\nThe [skills CLI](https://github.com/vercel-labs/skills) puts the skill where each agent looks for it.\n\n```sh\nnpx skills add shlee8405/gomin        # this project (asks which agents)\nnpx skills add shlee8405/gomin -g     # all your projects\nnpx skills add shlee8405/gomin -g -a claude-code codex opencode pi -y   # pick agents, no prompts\n```\n\n| Agent | Project install | Global install (`-g`) | Invoke explicitly |\n| --- | --- | --- | --- |\n| Claude Code | `.claude/skills/gomin` | `~/.claude/skills/gomin` | `/gomin <request>` |\n| Codex | `.agents/skills/gomin` | `~/.agents/skills/gomin` | `$gomin <request>` |\n| OpenCode | `.agents/skills/gomin` | `~/.config/opencode/skills/gomin` | `/gomin <request>` |\n| pi | `.agents/skills/gomin` | `~/.agents/skills/gomin` | `/skill:gomin <request>` |\n\nYou don't have to name it. Ask for an answer \"as a page\" or \"in HTML\", or ask something with many options and tables, and the agent picks gomin up on its own.\n\n### Agent-specific alternatives\n\n- **Claude Code plugin:** `/plugin marketplace add shlee8405/gomin`, then `/plugin install gomin@gomin`. Plugin skills are invoked as `/gomin:gomin`.\n- **pi package:** `pi install npm:gomin`, or `pi install git:github.com/shlee8405/gomin` (add `-l` for this project only).\n- **Just the CLI:** any agent with a shell can run it from npm without installing the skill: `npx -y gomin --help`. The skill adds the page-writing guidance, so prefer installing it.\n- **Manual:** clone the repo and copy `skills/gomin` into `~/.agents/skills/`. For Claude Code, use `~/.claude/skills/`.\n\n### Using Codex?\n\nCodex's default sandbox (`workspace-write`) blocks even localhost connections, so gomin's local server cannot start. Either:\n\n1. approve when the agent asks to run gomin commands outside the sandbox, or\n2. enable sandbox networking in `~/.codex/config.toml`, and gomin then runs inside the sandbox as is:\n\n```toml\n[sandbox_workspace_write]\nnetwork_access = true\n```\n\n### Tested with\n\nA real agent wrote a page, opened it, waited for the reply, and finished the task in Claude Code 2.1, Codex 0.155, OpenCode 1.18, and pi 1.0. This also works when the reply takes more than two minutes.\n\n## Use\n\nJust ask:\n\n```\n/gomin plan the move to magic-link login\nuse gomin to explain how our checkout works\nshow me this PR review as a page — I'll decide what to fix\n```\n\nWith the skill installed, the agent also reaches for gomin by itself when you ask for an HTML answer or when a response is full of options, tables, and decisions.\n\nWhat the agent receives after you press Send:\n\n```text\nThe user replied in gomin.\n\n## Reply · 15:14 · on \"Why the checkout page is slow\" (rev 1)\nfile: /Users/me/shop/.gomin/checkout.html\n\nMessage:\n   Go with the API fix, but keep the old path behind a flag.\n\nAnswers:\n- Which fix should I implement? (fix): Compute once in API [api-once]\n\nComments:\n1. On \"cuts p95 from 2.8s to about 0.6s\" — in \"Checkout is slow because tax is computed three times\"\n   Is that measured or estimated?\n\nClicked: Go ahead [decision=go]\n```\n\n## How it works\n\n```mermaid\nsequenceDiagram\n    participant A as Agent\n    participant G as gomin (127.0.0.1)\n    participant U as Browser\n    A->>A: write .gomin/plan.html\n    A->>G: gomin open plan.html\n    G->>U: open a tab (or switch the open tab to the new page)\n    A->>G: gomin wait (blocks until a reply)\n    U->>G: answers · comments · message → Send\n    G-->>A: the reply as compact text\n    A->>A: edit the page → gomin open (tab reloads in place, answers kept)\n```\n\n- **Threads:** each working directory gets a conversation thread. Pages, your replies, and the agent's short notes (`gomin say`) stack up in the side panel.\n- **Revisions and new pages:** re-opening the same file makes a revision (v2, v3…); opening another file adds a page. Earlier pages stay one click away.\n- **Presence and receipts:** the panel shows whether the agent is listening and when it read your reply. Replies sent while it isn't listening are kept for the next `wait`.\n- **Sandbox:** pages run in an opaque-origin iframe and cannot reach the gomin API or other local services.\n\n## CLI\n\nThe skill runs the bundled script as `node <skill-dir>/scripts/gomin.mjs`.\n\n| Command | What it does |\n| --- | --- |\n| `open <file.html>` | Show a page; the same file again is a revision. `--title`, `--no-open`, `--thread` |\n| `wait` | Block until the user sends, then print the reply. `--timeout <sec>`, `--json` |\n| `say` | Answer in the conversation panel, as Markdown read from stdin (`gomin say <<'EOF' … EOF`) or `--file answer.md` |\n| `status` | Thread, pages, and recent replies. `--json` |\n| `list` | List threads |\n| `export <file.html>` | Write a standalone copy with styles inlined, for sharing |\n| `stop` | Stop the background server (it also exits after 30 idle minutes) |\n\nEnvironment: `GOMIN_HOME` (state dir, default `~/.gomin`), `GOMIN_PORT` (default 4949), `GOMIN_NO_OPEN=1`, `GOMIN_THREAD`, `GOMIN_IDLE_MINUTES` (default 30; 0 = never).\n\n## Writing pages\n\nThe agent-facing guides ship with the skill and work for humans too:\n\n- [`SKILL.md`](skills/gomin/SKILL.md): when and how to use gomin (the loop, waiting in each harness)\n- [`references/design.md`](skills/gomin/references/design.md): kit components, form rules, diagrams, Korean typography\n- [`references/patterns.md`](skills/gomin/references/patterns.md): explanation, plan approval, comparison, questionnaire, report, code review, triage\n- [`examples/`](examples): `plan-ko.html` (Korean plan), `explain-en.html` (English explanation)\n\n```sh\nnpm run demo   # opens examples/plan-ko.html in your browser\n```\n\n## Development\n\n```sh\nnpm test        # unit tests plus CLI/server end-to-end tests\nnpm run check   # syntax check\nGOMIN_DEV=1 node skills/gomin/scripts/gomin.mjs serve   # dev mode: re-read UI files on every request\n```\n\nNo runtime dependencies, only the Node.js standard library.\n\n## Credits\n\nThe review loop for agent-written HTML is inspired by [lavish-axi](https://github.com/kunchenguid/lavish-axi). gomin focuses on everyday answers rather than artifact review, with form-based replies and natural English and Korean support.\n\n## License\n\nMIT\n"}