{"_id":"@touchine/ojo","_rev":"7-4c8e89db6603dbb10fa44fb303b04b96","name":"@touchine/ojo","dist-tags":{"latest":"1.0.9"},"versions":{"1.0.4":{"name":"@touchine/ojo","version":"1.0.4","keywords":["ojo","ai","cli","agent","workspace","mcp"],"author":{"name":"touchine.ai"},"license":"ISC","_id":"@touchine/ojo@1.0.4","maintainers":[{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"}],"homepage":"https://github.com/irise-studio/irise-extension#readme","bugs":{"url":"https://github.com/irise-studio/irise-extension/issues"},"bin":{"ojo":"dist/index.js"},"dist":{"shasum":"49bfaefb51d630ad5bd8d61b726109028d9b11b7","tarball":"https://registry.npmjs.org/@touchine/ojo/-/ojo-1.0.4.tgz","fileCount":5,"integrity":"sha512-bssh3oFthTqpf5zs882FGCNzH+ZtisVjIehzy0ZrpF3eR2MPGXtUablOQ+hRuky3RxHAJmS9QZiYeUMe3FwwBg==","signatures":[{"sig":"MEQCIAmjvZK/goMXFwIWo2J2h3OwBBQVeL13KcRj42ZPL4mpAiBknz10fPEIhKuJZsyl+SdG3YpO0id0ZW2cIJ0WIs9Xmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":195251},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"04bc92ebdad150136dd16a66e489d25249bfa141","scripts":{"dev":"tsup --config tsup.config.ts --watch","lint":"eslint .","test":"vitest run","build":"tsup --config tsup.config.ts","debug":"pnpm run build && node --inspect-brk dist/index.js","start":"pnpm run build && node dist/index.js","format":"prettier --write .","release":"node scripts/release.js","lint:fix":"eslint . --fix","changelog":"conventional-changelog -p conventionalcommits -r 1 --stdout","type-check":"tsc --noEmit","format:check":"prettier --check .","release:check":"node ../../tooling/release/check-cli-release.mjs","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"},"repository":{"url":"git+https://github.com/irise-studio/irise-extension.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.12.1","description":"OJO CLI — login, project management, AI chat, run status queries, workspace sync, and session history","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ink":"^5.1.0","ora":"^9.3.0","zod":"^4.3.6","open":"^11.0.0","axios":"^1.13.6","chalk":"^5.6.2","react":"^18.3.1","semver":"^7.7.4","sql.js":"^1.13.0","inquirer":"^13.3.0","commander":"^14.0.3","cli-table3":"^0.6.5","terminal-link":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsup":"^8.5.1","eslint":"^9.17.0","vitest":"^3.2.4","prettier":"^3.4.2","@eslint/js":"^9.17.0","typescript":"^5.9.3","@types/node":"^25.3.3","@types/react":"^18.3.18","@types/semver":"^7.7.1","@touchine/common":"workspace:*","typescript-eslint":"^8.18.0","ink-testing-library":"^3.0.0","conventional-changelog":"^7.2.0","eslint-config-prettier":"^10.0.1","conventional-changelog-conventionalcommits":"^9.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ojo_1.0.4_1779091885063_0.5244427197347499","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@touchine/ojo","version":"1.0.5","keywords":["ojo","ai","cli","agent","workspace","mcp"],"author":{"name":"touchine.ai"},"license":"ISC","_id":"@touchine/ojo@1.0.5","maintainers":[{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"}],"homepage":"https://github.com/irise-studio/irise-extension#readme","bugs":{"url":"https://github.com/irise-studio/irise-extension/issues"},"bin":{"ojo":"dist/index.js"},"dist":{"shasum":"776ecac00d91c46fd8c2872b1a116070ab413318","tarball":"https://registry.npmjs.org/@touchine/ojo/-/ojo-1.0.5.tgz","fileCount":5,"integrity":"sha512-UW6/4SsG7w3aBHnfjH8tn33WFb5lrs9RU1I7vntJXUqixteH02UGtICZWLrzopvCra7RIh/nMv0W+648jOVWRQ==","signatures":[{"sig":"MEUCIFyP5wgFGlyhvNreIZf9oi05N26lHVSFqN0WECohX2d3AiEAtvTUAdzWGrZaZ0QdN34F247ZzNymTVgqNJK4dCVyik8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96618},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsup --config tsup.config.ts --watch","lint":"eslint .","test":"vitest run","build":"tsup --config tsup.config.ts","debug":"pnpm run build && node --inspect-brk dist/index.js","start":"pnpm run build && node dist/index.js","format":"prettier --write .","release":"node scripts/release.js","lint:fix":"eslint . --fix","changelog":"conventional-changelog -p conventionalcommits -r 1 --stdout","type-check":"tsc --noEmit","format:check":"prettier --check .","release:check":"node ../../tooling/release/check-cli-release.mjs","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"},"repository":{"url":"git+https://github.com/irise-studio/irise-extension.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.12.1","description":"OJO CLI — login, project management, AI chat, run status queries, workspace sync, and session history","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ink":"^5.1.0","ora":"^9.3.0","zod":"^4.3.6","open":"^11.0.0","axios":"^1.13.6","chalk":"^5.6.2","react":"^18.3.1","semver":"^7.7.4","sql.js":"^1.13.0","inquirer":"^13.3.0","commander":"^14.0.3","cli-table3":"^0.6.5","terminal-link":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsup":"^8.5.1","eslint":"^9.17.0","vitest":"^3.2.4","prettier":"^3.4.2","@eslint/js":"^9.17.0","typescript":"^5.9.3","@types/node":"^25.3.3","@types/react":"^18.3.18","@types/semver":"^7.7.1","@touchine/common":"workspace:*","typescript-eslint":"^8.18.0","ink-testing-library":"^3.0.0","conventional-changelog":"^7.2.0","eslint-config-prettier":"^10.0.1","conventional-changelog-conventionalcommits":"^9.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ojo_1.0.5_1786003607968_0.12838708877152372","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@touchine/ojo","version":"1.0.6","keywords":["ojo","ai","cli","agent","workspace","mcp"],"author":{"name":"touchine.ai"},"license":"ISC","_id":"@touchine/ojo@1.0.6","maintainers":[{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"}],"homepage":"https://github.com/irise-studio/irise-extension#readme","bugs":{"url":"https://github.com/irise-studio/irise-extension/issues"},"bin":{"ojo":"dist/index.js"},"dist":{"shasum":"a08bc637bcffa96956668e707722db92f0ae5d0b","tarball":"https://registry.npmjs.org/@touchine/ojo/-/ojo-1.0.6.tgz","fileCount":5,"integrity":"sha512-iLqWm7SdfCOqscu5r5r5QthJeE6Hy1IM8gA6gJ3xaoAVIVRfhq8CX1QC/RLfh1toe8gMC3DTWoQeL9xTjL0BAA==","signatures":[{"sig":"MEYCIQCy2jP4vg/pVMbHdJNCzwyWsg7AIwerUIJJv6pxxzYAzQIhAKwzk9pTeectUKpFTmfUzbdqaH/B//kl2VK0sjQ5t/4R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96592},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsup --config tsup.config.ts --watch","lint":"eslint .","test":"vitest run","build":"tsup --config tsup.config.ts","debug":"pnpm run build && node --inspect-brk dist/index.js","start":"pnpm run build && node dist/index.js","format":"prettier --write .","release":"node scripts/release.js","lint:fix":"eslint . --fix","changelog":"conventional-changelog -p conventionalcommits -r 1 --stdout","type-check":"tsc --noEmit","format:check":"prettier --check .","release:check":"node ../../tooling/release/check-cli-release.mjs","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"},"repository":{"url":"git+https://github.com/irise-studio/irise-extension.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.12.1","description":"OJO CLI — login, project management, AI chat, run status queries, workspace sync, and session history","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ink":"^5.1.0","ora":"^9.3.0","zod":"^4.3.6","open":"^11.0.0","axios":"^1.13.6","chalk":"^5.6.2","react":"^18.3.1","semver":"^7.7.4","sql.js":"^1.13.0","inquirer":"^13.3.0","commander":"^14.0.3","cli-table3":"^0.6.5","terminal-link":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsup":"^8.5.1","eslint":"^9.17.0","vitest":"^3.2.4","prettier":"^3.4.2","@eslint/js":"^9.17.0","typescript":"^5.9.3","@types/node":"^25.3.3","@types/react":"^18.3.18","@types/semver":"^7.7.1","@touchine/common":"workspace:*","typescript-eslint":"^8.18.0","ink-testing-library":"^3.0.0","conventional-changelog":"^7.2.0","eslint-config-prettier":"^10.0.1","conventional-changelog-conventionalcommits":"^9.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ojo_1.0.6_1786004375005_0.5187782991785181","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@touchine/ojo","version":"1.0.7","keywords":["ojo","ai","cli","agent","workspace","mcp"],"author":{"name":"touchine.ai"},"license":"ISC","_id":"@touchine/ojo@1.0.7","maintainers":[{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"}],"homepage":"https://github.com/irise-studio/irise-extension#readme","bugs":{"url":"https://github.com/irise-studio/irise-extension/issues"},"bin":{"ojo":"dist/index.js"},"dist":{"shasum":"29d3fd09a89982092d00d4a60608aae2a476bddc","tarball":"https://registry.npmjs.org/@touchine/ojo/-/ojo-1.0.7.tgz","fileCount":5,"integrity":"sha512-3uTCnv4qjSj1aFDkpPam5aFtvUXoARnyHh6+N6IYUTyu5yqoydbeYUA4PLrN0hPOqemYZiuBBD/Jvbv+egvJcw==","signatures":[{"sig":"MEQCIDTI3ao8yIGygIQtYDqsx1C3uTweSbEEduKyFWm8wyr1AiAHzPoFda9H32IeoDgFvdmn+JbJejmkTKVn/PGmbcJAMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96720},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsup --config tsup.config.ts --watch","lint":"eslint .","test":"vitest run","build":"tsup --config tsup.config.ts","debug":"pnpm run build && node --inspect-brk dist/index.js","start":"pnpm run build && node dist/index.js","format":"prettier --write .","release":"node scripts/release.js","lint:fix":"eslint . --fix","changelog":"conventional-changelog -p conventionalcommits -r 1 --stdout","type-check":"tsc --noEmit","format:check":"prettier --check .","release:check":"node ../../tooling/release/check-cli-release.mjs","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"},"repository":{"url":"git+https://github.com/irise-studio/irise-extension.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.12.1","description":"OJO CLI — login, project management, AI chat, run status queries, workspace sync, and session history","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ink":"^5.1.0","ora":"^9.3.0","zod":"^4.3.6","open":"^11.0.0","axios":"^1.13.6","chalk":"^5.6.2","react":"^18.3.1","semver":"^7.7.4","sql.js":"^1.13.0","inquirer":"^13.3.0","commander":"^14.0.3","cli-table3":"^0.6.5","terminal-link":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsup":"^8.5.1","eslint":"^9.17.0","vitest":"^3.2.4","prettier":"^3.4.2","@eslint/js":"^9.17.0","typescript":"^5.9.3","@types/node":"^25.3.3","@types/react":"^18.3.18","@types/semver":"^7.7.1","@touchine/common":"workspace:*","typescript-eslint":"^8.18.0","ink-testing-library":"^3.0.0","conventional-changelog":"^7.2.0","eslint-config-prettier":"^10.0.1","conventional-changelog-conventionalcommits":"^9.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ojo_1.0.7_1786004973027_0.9871010751753617","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@touchine/ojo","version":"1.0.8","keywords":["ojo","ai","cli","agent","workspace","mcp"],"author":{"name":"touchine.ai"},"license":"ISC","_id":"@touchine/ojo@1.0.8","maintainers":[{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"}],"homepage":"https://github.com/irise-studio/irise-extension#readme","bugs":{"url":"https://github.com/irise-studio/irise-extension/issues"},"bin":{"ojo":"dist/index.js"},"dist":{"shasum":"015ec1ce75045ad7a5fbb6bb4d94c11c5d306a1f","tarball":"https://registry.npmjs.org/@touchine/ojo/-/ojo-1.0.8.tgz","fileCount":5,"integrity":"sha512-401mazUWJfUw/9XG3k4rV/CRH9aGnjX2rgxfKKrksV/rsKQcWB0XWOjd78Z5y7cPpcNh6N7PY8omhZaf+ctxoQ==","signatures":[{"sig":"MEUCIC06miKXyALLenfLeqBhUIDezUB45N21iA4QviYPa+WWAiEAgOnZx0tjo+ZxHcGCBs0CE9rqjU1HdS68AVkR3dlm1U0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96710},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsup --config tsup.config.ts --watch","lint":"eslint .","test":"vitest run","build":"tsup --config tsup.config.ts","debug":"pnpm run build && node --inspect-brk dist/index.js","start":"pnpm run build && node dist/index.js","format":"prettier --write .","release":"node scripts/release.js","lint:fix":"eslint . --fix","changelog":"conventional-changelog -p conventionalcommits -r 1 --stdout","type-check":"tsc --noEmit","format:check":"prettier --check .","release:check":"node ../../tooling/release/check-cli-release.mjs","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"},"repository":{"url":"git+https://github.com/irise-studio/irise-extension.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.12.1","description":"OJO CLI — login, project management, AI chat, run status queries, workspace sync, and session history","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ink":"^5.1.0","ora":"^9.3.0","zod":"^4.3.6","open":"^11.0.0","axios":"^1.13.6","chalk":"^5.6.2","react":"^18.3.1","semver":"^7.7.4","sql.js":"^1.13.0","inquirer":"^13.3.0","commander":"^14.0.3","cli-table3":"^0.6.5","terminal-link":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsup":"^8.5.1","eslint":"^9.17.0","vitest":"^3.2.4","prettier":"^3.4.2","@eslint/js":"^9.17.0","typescript":"^5.9.3","@types/node":"^25.3.3","@types/react":"^18.3.18","@types/semver":"^7.7.1","@touchine/common":"workspace:*","typescript-eslint":"^8.18.0","ink-testing-library":"^3.0.0","conventional-changelog":"^7.2.0","eslint-config-prettier":"^10.0.1","conventional-changelog-conventionalcommits":"^9.2.0"},"_npmOperationalInternal":{"tmp":"tmp/ojo_1.0.8_1786012936533_0.5370830657366215","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@touchine/ojo","version":"1.0.9","description":"OJO CLI — login, project management, AI chat, run status queries, workspace sync, and session history","packageManager":"pnpm@9.15.0","main":"dist/index.js","type":"module","bin":{"ojo":"dist/index.js"},"repository":{"type":"git","url":"git+https://github.com/irise-studio/irise-extension.git","directory":"apps/cli"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsup --config tsup.config.ts","release":"node scripts/release.js","release:check":"node ../../tooling/release/check-cli-release.mjs","changelog":"conventional-changelog -p conventionalcommits -r 1 --stdout","prepublishOnly":"pnpm run build","dev":"tsup --config tsup.config.ts --watch","start":"pnpm run build && node dist/index.js","debug":"pnpm run build && node --inspect-brk dist/index.js","test":"vitest run","type-check":"tsc --noEmit","lint":"eslint .","lint:fix":"eslint . --fix","format":"prettier --write .","format:check":"prettier --check ."},"keywords":["ojo","ai","cli","agent","workspace","mcp"],"author":{"name":"touchine.ai"},"license":"ISC","dependencies":{"cli-table3":"^0.6.5","terminal-link":"^5.0.0","axios":"^1.13.6","chalk":"^5.6.2","commander":"^14.0.3","ink":"^5.1.0","inquirer":"^13.3.0","open":"^11.0.0","ora":"^9.3.0","react":"^18.3.1","semver":"^7.7.4","sql.js":"^1.13.0","zod":"^4.3.6","jszip":"3.10.1"},"devDependencies":{"@eslint/js":"^9.17.0","@touchine/common":"workspace:*","@types/node":"^25.3.3","@types/react":"^18.3.18","@types/semver":"^7.7.1","conventional-changelog":"^7.2.0","conventional-changelog-conventionalcommits":"^9.2.0","eslint":"^9.17.0","eslint-config-prettier":"^10.0.1","ink-testing-library":"^3.0.0","prettier":"^3.4.2","tsup":"^8.5.1","typescript":"^5.9.3","typescript-eslint":"^8.18.0","vitest":"^3.2.4"},"types":"./dist/index.d.ts","_id":"@touchine/ojo@1.0.9","bugs":{"url":"https://github.com/irise-studio/irise-extension/issues"},"homepage":"https://github.com/irise-studio/irise-extension#readme","_integrity":"sha512-RU5Hc6IG4EskZe5V122GMJYKmj/knxBFeVsiw/n1b1a5ncd4Y86i21fRbPkH/KJhA2pH+FWlZhHMZ8cwJA+qBw==","_resolved":"/private/tmp/ojo-team-triage/touchine-ojo-1.0.9.tgz","_from":"file:/private/tmp/ojo-team-triage/touchine-ojo-1.0.9.tgz","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-RU5Hc6IG4EskZe5V122GMJYKmj/knxBFeVsiw/n1b1a5ncd4Y86i21fRbPkH/KJhA2pH+FWlZhHMZ8cwJA+qBw==","shasum":"1366cbd49a531b80c9ad7a464cd2b06bf24cadcb","tarball":"https://registry.npmjs.org/@touchine/ojo/-/ojo-1.0.9.tgz","fileCount":5,"unpackedSize":111067,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIA6iW/Xsq4TTzJX2hPWYcWrIfOzKc6lmYq3Wgf6Kl/m/AiEAsaUY5wL+lPnp8aMFTfOcyVWt6SVLN1Ii3/b7VmCqQrw="}]},"_npmUser":{"name":"dailin666","email":"lidailin@touchine.ai"},"directories":{},"maintainers":[{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"},{"name":"dailin666","email":"lidailin@touchine.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ojo_1.0.9_1789009262510_0.1053336003701717"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-18T08:11:24.941Z","modified":"2026-09-10T03:01:02.801Z","1.0.4":"2026-05-18T08:11:25.225Z","1.0.5":"2026-08-06T08:06:48.114Z","1.0.6":"2026-08-06T08:19:35.147Z","1.0.7":"2026-08-06T08:29:33.182Z","1.0.8":"2026-08-06T10:42:16.683Z","1.0.9":"2026-09-10T03:01:02.633Z"},"bugs":{"url":"https://github.com/irise-studio/irise-extension/issues"},"author":{"name":"touchine.ai"},"license":"ISC","homepage":"https://github.com/irise-studio/irise-extension#readme","keywords":["ojo","ai","cli","agent","workspace","mcp"],"repository":{"type":"git","url":"git+https://github.com/irise-studio/irise-extension.git","directory":"apps/cli"},"description":"OJO CLI — login, project management, AI chat, run status queries, workspace sync, and session history","maintainers":[{"name":"rogerhorsley","email":"rogerhorsleymorris@gmail.com"},{"name":"dailin666","email":"lidailin@touchine.ai"}],"readme":"# OJO CLI\n\n`@touchine/ojo` is the official command-line tool for OJO. The package name is `@touchine/ojo`, the command is `ojo`, and it lets you log in, manage projects, chat with the AI agent, check run status, fetch the latest project screen, and sync your workspace from the terminal.\n\nInstall globally via npm:\n\n```bash\nnpm install -g @touchine/ojo\nojo --help\n```\n\nUpgrade to the latest version:\n\n```bash\nnpm install -g @touchine/ojo@latest\n```\n\nRecommended flow: `auth login` → `chat` → `query` → `screen` → `workspace sync`\n\n## Authentication\n\n```bash\nojo auth login                           # Device code flow (opens browser automatically)\nojo auth login --mode device             # Explicitly use device code flow\nojo auth login --mode web                # Local browser bridge (legacy fallback)\nojo auth login --mode access-key --access-key <token>  # AccessKey login\nojo auth login --no-open                 # Print the login URL without opening the browser\nojo auth login --mode device --json      # JSON output for automation / agents\n\nojo auth logout                          # Log out and clear local credentials\n```\n\n`auth login --json` returns stable JSON with `ok`, `mode`, and mode-specific fields such as `loginUrl`, `verificationUri`, `userCode`, and `expiresIn`.\n\nThe web login page also supports email verification codes. The CLI proxies that browser-only flow through its loopback server to the same Identity service as the online web app, then stores the resulting credential token locally.\n\nNeed an AccessKey for `--mode access-key`? Open the AccessKey manager directly: `https://ojo.art/dashboard?openAccessKeyManager=1`\n\n## Projects\n\n```bash\nojo project list                         # List your projects (default 20 per page)\nojo project list --page-size 50          # Set page size\nojo project list --page-token <token>    # Go to next page\nojo project list --favorite              # Show only favorited projects\nojo project list --json                  # JSON output\n```\n\n## Screen\n\nFetch the current prototype preview image for a project.\n\n```bash\nojo screen --project-id <projectId>\nojo screen --project-id <projectId> --json\n```\n\n`screen` returns `projectId`, `projectUrl`, `status`, and when available `resourceId`, `resourceMeta`, and `url`.\n\n## Chat\n\nSends a message to the OJO agent and waits for it to finish before returning the result.\n\n```bash\n# Create a new project automatically and send a message\nojo chat --message \"Build me a landing page\"\n\n# Continue an existing project's session\nojo chat --project-id <projectId> --message \"Add a dark mode toggle\"\n\n# Send via stdin\necho \"Build me a landing page\" | ojo chat\n\n# JSON output\nojo chat --project-id <projectId> --message \"...\" --json\n```\n\nResponse fields: `projectId`, `projectUrl`, `status` (`completed` | `waiting_input`)\n\n## Query Run Status\n\nCheck the latest run status for a project.\n\n```bash\nojo query --project-id <projectId>\nojo query --project-id <projectId> --json\n```\n\n| Field        | Description                                   |\n| ------------ | --------------------------------------------- |\n| `projectId`  | Project ID                                    |\n| `projectUrl` | Project URL (`https://ojo.art/p/<projectId>`) |\n| `status`     | `running` \\| `success` \\| `fail`              |\n| `statusText` | Progress description (when `running`)         |\n| `failure`    | Structured error details (when `fail`)        |\n\n## Workspace Sync\n\nPull the remote project workspace to your local machine.\n\n```bash\n# Sync the project bound to the current directory\nojo workspace sync\n\n# Sync by project ID or URL\nojo workspace sync <projectId>\nojo workspace sync https://ojo.art/p/<projectId>\n\n# Write to a specific parent directory\nojo workspace sync <projectId> --path ./my-projects\n\n# JSON output\nojo workspace sync <projectId> --json\n```\n\nArtifacts are extracted to `<project-name>/ojo-prototype` inside the target directory.\n\nJSON response fields: `projectId`, `path`, `workspaceHash`\n\n## Agent / Automation Notes\n\n- `chat` has two modes: omit `--project-id` to auto-create a project; pass `--project-id` to continue an existing session.\n- `query` only needs `--project-id`; it fetches the latest run automatically and returns `projectUrl`.\n- Use `workspace sync` after `chat` / `query` to pull updated project files locally.\n","readmeFilename":"README.md"}