{
  "markdown": "# @unravel-tech/thing\n\nCLI for [thing](https://usething.ai): push, version, and share artifacts (HTML pages, Markdown docs, standalone images and PDFs) from coding agents.\n\n```sh\nnpx -y @unravel-tech/thing push report.html\n```\n\nThat first push opens browser approval, waits for sign-in, then resumes and\nprints the durable URL. Markdown, images, and PDFs work the same way. Install\nglobally if you use it often: `npm i -g @unravel-tech/thing`.\n\n## Commands\n\n| Command | What it does |\n| --- | --- |\n| `thing --version` / `thing version` | Show the installed CLI version |\n| `thing update [--force] [--manager npm\\|bun]` | Install the latest release globally; `--force` runs even when the server reports this version as current |\n| `thing login [--account name] [--server url] [--no-browser]` | Add or refresh a named account with device-code login; defaults the name to the authenticated email |\n| `thing accounts` | List saved accounts and show which one this directory resolves to |\n| `thing switch <account> [--local]` | Change the global default account, or bind an account to the current Git repository/working directory |\n| `thing switch --clear-local` | Remove the account binding inherited by the current directory |\n| `thing logout [--account name] [--all]` / `thing whoami` | Remove saved credentials / show the resolved identity and where pushes land |\n| `thing default [team] [--clear]` | Show or set your server-side default push target (used when no `--team` is given, from any machine) |\n| `thing use <team> [project]` | Set a local active team/project override for this machine |\n| `thing push <file.html\\|.md\\|.pdf\\|.png\\|.jpg\\|.gif\\|.webp> [--name x] [--team t] [--project p] [--visibility v]` | Authenticate if needed, then push a new immutable version and print the served URL |\n| `thing list` | List artifacts you can see |\n| `thing versions <name>` | Version history for an artifact |\n| `thing rollback <name> <n>` | Point latest back to version n |\n| `thing open <name>` | Open the artifact in a browser |\n| `thing mcp` | Run a Model Context Protocol server over stdio (tools: `server_info`, `push_artifact`, `list_artifacts`, `whoami`) |\n\nEvery command accepts `--json` for machine-readable output. Authenticated\ncommands also accept `--account name` to use a saved account once without\nchanging either the global default or a directory binding.\nAn unauthenticated `push --json` emits newline-delimited authentication status;\nthe final JSON object is always the push result. Use `--no-login` to fail fast\ninstead of starting interactive authentication, such as in CI.\n\nVisibility values: `private`, `team`, `anyone-with-link` (prints a tokened share URL), `public`.\n\n## Updates\n\nThing supports advisory and required updates published by the Thing server. An\nadvisory update prints a rate-limited notice to stderr but lets the command\ncontinue. A required update stops normal commands with exit code 3 while\nkeeping `--help`, `--version`, and `update` available. `--json` returns a\nstructured `CLIENT_UPDATE_REQUIRED` error.\n\nThe CLI checks at most once per hour and shows the same advisory at most once\nper day. Set `THING_NO_UPDATE_NOTICES=1` to hide advisory notices; required\nupdates cannot be suppressed. `thing update --force` reinstalls the latest\nrelease even when the current version is still supported.\n\nMCP sessions expose the installed version through the initialization handshake\nand the `server_info` tool. Advisory updates appear in MCP instructions, a log\nnotification, and the first business-tool result. Required updates leave\n`server_info` available but stop artifact tools until Thing is updated and the\nMCP client is restarted.\n\nThe corresponding Thing server endpoint and enforcement middleware are\nspecified in [`THING_SERVER_UPDATE_POLICY.md`](./THING_SERVER_UPDATE_POLICY.md).\n\n## Context resolution\n\n### Accounts\n\nThing can keep multiple logins on one machine. Give accounts short names when\nyou add them, list them, and switch the global default:\n\n```sh\nthing login --account work\nthing login --account personal\nthing accounts\nthing switch work\n```\n\nTo associate the current repository with an account, run:\n\n```sh\nthing switch work --local\n```\n\nInside a Git repository, this binds its root and every directory beneath it.\nOutside Git, it binds the current working directory and its descendants. The\nbinding is stored in your user config—not `.thing.json`—so personal account\nnames and credentials never become repository changes. A local binding wins\nover the global default; `--account personal` wins over both for one command.\nUse `thing switch --clear-local` to remove the binding.\n\nExisting single-login config files migrate automatically to an account named\n`default`. New logins without `--account` use the authenticated email address\nas the account name.\n\nAccount selection is resolved in this order: `--account` → the nearest\nrepository/directory binding → the global `thing switch` selection → the only\nsaved account. `THING_TOKEN` and `THING_SERVER` still override stored\ncredentials for CI and MCP configurations.\n\n### Team and project\n\nWhich team a push lands in is decided in order: `--team` flag → `.thing.json` in the\nworking directory → a local `thing use` override → your **server-side default**\n(`thing default`) → your personal space. Login no longer pins a team, so with none of\nthe overrides set the server picks your default (e.g. the Unravel org for Unravel members).\n\n## MCP\n\nClaude Code, Cursor, Codex, and anything else that speaks Model Context\nProtocol can publish through thing. No terminal login needed: create a token at\n[usething.ai](https://usething.ai) under Settings, then Tokens, and paste this\ninto your client's MCP config.\n\n```json\n{\n  \"mcpServers\": {\n    \"thing\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@unravel-tech/thing@latest\", \"mcp\"],\n      \"env\": { \"THING_TOKEN\": \"paste-your-token-here\" }\n    }\n  }\n}\n```\n\nOn a machine that has Bun but no Node, swap `npx` for `bunx`:\n\n```json\n{\n  \"mcpServers\": {\n    \"thing\": {\n      \"command\": \"bunx\",\n      \"args\": [\"-y\", \"@unravel-tech/thing@latest\", \"mcp\"],\n      \"env\": { \"THING_TOKEN\": \"paste-your-token-here\" }\n    }\n  }\n}\n```\n\nThe server exposes four tools: `server_info` for the installed version and\nupdate status, `push_artifact` to publish a file or inline content and get back\na link, `list_artifacts` to see what you have, and `whoami` to check which\naccount and team you are pushing to.\n\nIf you already ran `thing login`, the stored credential is used and\n`THING_TOKEN` can be left out.\n\n## Runtimes\n\nNode >= 18 or Bun, no runtime dependencies. The `thing` executable launches under\nwhichever of the two is on your PATH (Node first), so a global install works on a\nmachine that has never installed Node:\n\n```sh\nbun i -g @unravel-tech/thing\nthing login\n```\n",
  "bytes": 6812,
  "sha": "17f9b80ae67c6401198dfb3befb9faf60f7a6c722051f484fdfac26b01a056f4",
  "repo_slug": "unravel-team/thing-cli",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_unravel_team_thing_58381624/readme"
}