{"_id":"@asymmetric-ai/cli","_rev":"3-6558b78fc33944705cc12bd76071e6ce","name":"@asymmetric-ai/cli","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@asymmetric-ai/cli","version":"0.1.0","license":"SEE LICENSE IN LICENSE","_id":"@asymmetric-ai/cli@0.1.0","maintainers":[{"name":"walterw21","email":"ankit.saxena21@gmail.com"}],"bin":{"asym":"dist/index.js","asymmetric":"dist/index.js"},"dist":{"shasum":"0dea1fe84aee734c8239de1516d20e8d6d8d8444","tarball":"https://registry.npmjs.org/@asymmetric-ai/cli/-/cli-0.1.0.tgz","fileCount":6,"integrity":"sha512-wcOUe+qJUJKcxCEfIR7RFMqb57RHYoDCp+YAVp8BmKK3NcNChQgmwBPHR9R0ROEEVrtamBBJOLCxvcXfZGZ/RA==","signatures":[{"sig":"MEYCIQD+v9g+Fiqx01KZDisVgpic6BKr3QlVvl8514fVkorWvQIhANeIJGxD6KwMxwnggF0vsPpLws0Ht/RSPznyYpFU3ihm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92262},"type":"module","gitHead":"61cb91d0628a2ea872638b5f5c54a25eb6f08624","scripts":{"lint":"eslint src","test":"bun test src","build":"tsup","clean":"rm -rf dist","test:e2e":"bun run build && bun test e2e","check-types":"tsc --noEmit"},"_npmUser":{"name":"walterw21","email":"ankit.saxena21@gmail.com"},"_npmVersion":"10.9.8","description":"Spin up high-fidelity local SaaS clones for AI agents and evals.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"zod":"^4.4.3","yaml":"^2.9.0","get-port":"^7.1.0","commander":"^12.1.0","@anthropic-ai/sdk":"^0.69.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","eslint":"^9.18.0","@types/bun":"^1.1.14","typescript":"^5.7.3","@types/node":"^24.0.0","@repo/eslint-config":"*","@repo/clone-contract":"*","@repo/typescript-config":"*"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.0_1782352744183_0.2744438012020689","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@asymmetric-ai/cli","version":"0.1.1","keywords":["ai","agents","evals","saas","clone","sandbox","slack","docker","cli"],"license":"SEE LICENSE IN LICENSE","_id":"@asymmetric-ai/cli@0.1.1","maintainers":[{"name":"walterw21","email":"ankit.saxena21@gmail.com"}],"homepage":"https://github.com/asymmetric-ai/cli#readme","bugs":{"url":"https://github.com/asymmetric-ai/cli/issues"},"bin":{"asym":"dist/index.js","asymmetric":"dist/index.js"},"dist":{"shasum":"6cca88f438423b20beab6a595ffc03582e449d91","tarball":"https://registry.npmjs.org/@asymmetric-ai/cli/-/cli-0.1.1.tgz","fileCount":22,"integrity":"sha512-aNvQvZuwnew8vlMB/clR56ii9822FzRB+nepPLmPivWr7IJO7yYHVq8NoKCOVGGxOGo0Ufm+pBIzzw3/sTH/pg==","signatures":[{"sig":"MEYCIQC9VJBk9RFMmR99nFL1KlPqEtjWJO+gxcPto97tEPFirgIhAI6BKykdrjo/m/0cyF1fQI8OnAGbMBsyjJx7n5bm0hGB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":119992},"type":"module","engines":{"node":">=18"},"gitHead":"d01962da37f02324d2b4b5d4e8d72139f2ce52f9","scripts":{"lint":"eslint src","test":"bun test src","build":"tsup","clean":"rm -rf dist","test:e2e":"bun run build && bun test e2e","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:52cd8d47-0cb6-420c-b7d9-86ec5fe94e99"}},"repository":{"url":"git+https://github.com/asymmetric-ai/cli.git","type":"git"},"_npmVersion":"11.17.0","description":"Spin up high-fidelity local SaaS clones for AI agents and evals.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.4.3","yaml":"^2.9.0","get-port":"^7.1.0","commander":"^12.1.0","@anthropic-ai/sdk":"^0.69.0"},"publishConfig":{"access":"public","provenance":false},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","eslint":"^9.18.0","@types/bun":"^1.1.14","typescript":"^5.7.3","@types/node":"^24.0.0","@repo/eslint-config":"*","@repo/clone-contract":"*","@repo/typescript-config":"*"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.1_1782385104712_0.39451510229456743","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@asymmetric-ai/cli","version":"0.2.0","license":"SEE LICENSE IN LICENSE","description":"Spin up high-fidelity local SaaS clones for AI agents and evals.","keywords":["ai","agents","evals","saas","clone","sandbox","slack","docker","cli"],"homepage":"https://github.com/asymmetric-ai/cli#readme","repository":{"type":"git","url":"git+https://github.com/asymmetric-ai/cli.git"},"bugs":{"url":"https://github.com/asymmetric-ai/cli/issues"},"engines":{"node":">=18"},"type":"module","bin":{"asym":"dist/index.js","asymmetric":"dist/index.js"},"publishConfig":{"access":"public","provenance":false},"scripts":{"build":"tsup","check-types":"tsc --noEmit","lint":"eslint src","test":"bun test src","test:e2e":"bun run build && bun test e2e","clean":"rm -rf dist"},"dependencies":{"@anthropic-ai/sdk":"^0.69.0","commander":"^12.1.0","get-port":"^7.1.0","yaml":"^2.9.0","zod":"^4.4.3"},"devDependencies":{"@repo/clone-contract":"*","@repo/eslint-config":"*","@repo/typescript-config":"*","@types/bun":"^1.1.14","@types/node":"^24.0.0","eslint":"^9.18.0","tsup":"^8.3.5","typescript":"^5.7.3"},"gitHead":"8278fc2e02e000a01ae630e22575ad1a7e426e81","_id":"@asymmetric-ai/cli@0.2.0","_nodeVersion":"20.20.2","_npmVersion":"11.17.0","dist":{"integrity":"sha512-lc+MhWv1YbFQIbCWgJsDwOsR5K5C64JFC19zZnsjoTxwaoXsvOI0B8vEzTwkzQUj5cCHBA3cVSscQul6KLKOQA==","shasum":"797e86353dc0b6f79a35a5395fe1c60ee571ce7d","tarball":"https://registry.npmjs.org/@asymmetric-ai/cli/-/cli-0.2.0.tgz","fileCount":22,"unpackedSize":125006,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAR1hKfh6B0hrK5P62ZadyWVXk4v5XhvphRgsI9GW9PlAiEAubh2KlK+hUW1urwb/SSjTaBSMzUjXK2f7RUoDDHcMpc="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:52cd8d47-0cb6-420c-b7d9-86ec5fe94e99"}},"directories":{},"maintainers":[{"name":"walterw21","email":"ankit.saxena21@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_0.2.0_1782627020729_0.8380329787967102"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-25T01:59:04.058Z","modified":"2026-06-28T06:10:20.974Z","0.1.0":"2026-06-25T01:59:04.299Z","0.1.1":"2026-06-25T10:58:24.857Z","0.2.0":"2026-06-28T06:10:20.865Z"},"bugs":{"url":"https://github.com/asymmetric-ai/cli/issues"},"license":"SEE LICENSE IN LICENSE","homepage":"https://github.com/asymmetric-ai/cli#readme","keywords":["ai","agents","evals","saas","clone","sandbox","slack","docker","cli"],"repository":{"type":"git","url":"git+https://github.com/asymmetric-ai/cli.git"},"description":"Spin up high-fidelity local SaaS clones for AI agents and evals.","maintainers":[{"name":"walterw21","email":"ankit.saxena21@gmail.com"}],"readme":"# @asymmetric-ai/cli\n\n> Spin up high-fidelity local SaaS clones for AI agents and evals.\n\n`asym` runs production-grade clones of real SaaS apps (Slack today, more coming) on\nyour machine in one command — seeded with realistic data and exposing the real\nHTTP API plus a queryable database. Point an agent at it, run your evals, reset to a\nclean state, tear it down. No accounts, no rate limits, no flaky third-party\nsandboxes.\n\n## Requirements\n\n- **Docker** running locally (clones run as containers)\n- **Node.js ≥ 18**\n\n## Install\n\n```bash\n# zero-install trial\nnpx @asymmetric-ai/cli quickstart\n\n# or install globally\nnpm i -g @asymmetric-ai/cli\nasym quickstart\n```\n\nThe CLI installs two equivalent commands: **`asym`** (recommended) and `asymmetric`\n(alias). Use whichever you like.\n\n## Quickstart\n\n```bash\nasym quickstart\n```\n\nThis spins a seeded Slack clone and prints everything you need to use it: a\nready-to-run `curl` against its live API, the SQL to read its state, and the\ncommands to reset or tear it down.\n\n```bash\n# read the clone's state\nasym query <id> \"SELECT username FROM users\" --json\n\n# reset to the seeded baseline anytime\nasym reset <id>\n\n# tear it down\nasym destroy <id>\n```\n\n## Common workflows\n\n```bash\n# see what you can spin\nasym ls --templates\n\n# create one or more clones from templates, seeded on create\nasym spin slack --seed acme-corp\n\n# list running clones\nasym ls\n\n# print a clone's bot + user API tokens (for programmatic access)\nasym tokens <id>\n\n# run SQL (read-only by default; --write to mutate)\nasym query <id> \"SELECT * FROM channels\"\nasym db <id>            # print a psql shell command instead\n\n# lifecycle\nasym stop <id>          # stop, keep data\nasym start <id>         # start it back up\nasym reset <id>         # drop + re-migrate + re-seed\nasym destroy <id>       # remove entirely\n```\n\n### Environments\n\nAn **environment** is the top-level primitive: a composition of one or more clones\nmanaged as a unit.\n\n```bash\nasym env spin <environment.yaml>\nasym env status\n```\n\n## Command reference\n\n| Command | Description |\n| --- | --- |\n| `quickstart` | One command: spin a seeded Slack clone and show how to use it |\n| `spin <template...>` | Create and start one or more clones from templates |\n| `env` | Create and manage environments (compositions of clones) |\n| `status` \\| `ls` | List running clones (or templates with `--templates`) |\n| `seed <id>` | Seed data into a running clone (fixtures and/or AI-generated) |\n| `query <id> [sql]` | Run SQL against a clone's database (read-only by default) |\n| `db <id>` | Print the command to open a psql shell into a clone |\n| `tokens <id>` | Show a clone's bot + user API tokens |\n| `reset <id>` | Reset a clone to a clean seeded state |\n| `start <id>` / `stop <id>` | Start / stop a clone without destroying data |\n| `destroy <id>` | Tear a clone down and remove its registry entry |\n| `logs <id>` | Stream container logs for a clone |\n| `verify <template>` | Inspect a template's live API surface + fidelity score |\n| `doctor` | Reconcile the local registry against Docker (`--fix` to repair) |\n| `upgrade [id]` | Check for a newer clone image and repin clones to it |\n| `login` | Connect to a control plane (cloud mode; local needs no login) |\n| `completion` | Print a shell completion script |\n\nRun `asym <command> --help` for the full options of any command.\n\n## Configuration\n\n- State lives in `~/.asymmetric/` (override the base dir with `ASYM_HOME`).\n- Local mode needs no login or account.\n\n## Shell completion\n\n```bash\nasym completion >> ~/.bashrc   # or ~/.zshrc\n```\n\nCompletes the top-level subcommands for both `asym` and `asymmetric`.\n\n## Support\n\nDocs, releases, and issue tracker: https://github.com/asymmetric-ai/cli —\n[open an issue](https://github.com/asymmetric-ai/cli/issues).\n\n## License\n\nProprietary. Copyright © Asymmetric. All rights reserved. See [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}