{"_id":"@coworkerai/merlin","_rev":"3-351b61c63f41b81671cc4b64d91ca566","name":"@coworkerai/merlin","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@coworkerai/merlin","version":"1.0.0","keywords":["cli","ai","assistant","coworker","coding-agent"],"author":{"name":"Coworker.AI"},"license":"SEE LICENSE IN LICENSE.md","_id":"@coworkerai/merlin@1.0.0","maintainers":[{"name":"ajwurts_vl","email":"ajwurts@villagelabs.co"}],"bin":{"merlin":"cli.js","merlin-dev":"merlin-dev.js"},"dist":{"shasum":"488a685c87e64075898aa3d9933a3ebe8a1de656","tarball":"https://registry.npmjs.org/@coworkerai/merlin/-/merlin-1.0.0.tgz","fileCount":7,"integrity":"sha512-o1BRJ7uba9j7WSQZPNqPoGFZ+TbDgEmq4T94yRvnuD78VmNZDWhsw5OTaSMoIr6/OUnkPLpyvCN/bAbhDIfj8w==","signatures":[{"sig":"MEQCICPRa+FGXN5vsbB159Ri2rMAnvjQbG6EqjLP7l6S6ypEAiAnq6dqMNC2/22/I/74kN8BS0TE3rCRTirtu8VnpvR+VA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":631153},"main":"cli.js","engines":{"node":">=18.0.0"},"gitHead":"abcd166ccb8854180d6ebdeb1e8ba11fcf709035","private":false,"scripts":{"dev":"npx nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/cli.ts --verbose --root ${npm_config_root:-$(pwd)} --no-stdin","test":"jest","build":"rm -rf dist && tsc && node scripts/minify.js && webpack && node scripts/minify.js && chmod +x bundle/cli.js && chmod +x dist/install.js && mv bundle/cli.js cli.js && cp bundle/cli.js.LICENSE.txt cli.js.LICENSE.txt && mv dist/install.js install.js","clean":"rm -rf dist dist-obfuscated","start":"node dist/cli.js","dev-cli":"npx ts-node src/cli.ts --verbose --dev --root ${npm_config_root:-$(pwd)} --alfred-id ${npm_config_alfred-id:''}","dev-login":"npx ts-node src/cli.ts login --dev","dev-gemini":"npx ts-node src/cli.ts --model=gemini-2.0-flash-001 --verbose --root  ${npm_config_root:-$(pwd)} --alfred-id ${npm_config_alfred-id:''}","test:watch":"jest --watch","postinstall":"node install.js || true","postpublish":"git checkout -- README.md","global-install":"npm run build && npm link","prepublishOnly":"npm run build && cp README-USER.md README.md"},"_npmUser":{"name":"ajwurts_vl","email":"ajwurts@villagelabs.co"},"_npmVersion":"11.12.1","description":"Coworker.AI Merlin CLI","directories":{},"_nodeVersion":"26.0.0","preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^10.3.10","jest":"^29.5.0","path":"^0.12.7","axios":"^1.17.0","dotenv":"^16.3.1","terser":"^5.39.0","ts-jest":"^29.1.0","ts-node":"^10.9.2","webpack":"^5.98.0","winston":"^3.11.0","commander":"^11.0.0","minimatch":"^9.0.5","typescript":"^5.3.3","@types/jest":"^29.5.0","@types/node":"^20.11.25","webpack-cli":"^6.0.1","@types/winston":"^2.4.4","javascript-obfuscator":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/merlin_1.0.0_1781125254601_0.9596224261057531","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@coworkerai/merlin","version":"1.0.1","keywords":["cli","ai","assistant","coworker","coding-agent"],"author":{"name":"Coworker.AI"},"license":"SEE LICENSE IN LICENSE.md","_id":"@coworkerai/merlin@1.0.1","maintainers":[{"name":"ajwurts_vl","email":"ajwurts@villagelabs.co"}],"bin":{"merlin":"cli.js","merlin-dev":"merlin-dev.js"},"dist":{"shasum":"337a20b79ccb91a5704a16d8642e1688774f9188","tarball":"https://registry.npmjs.org/@coworkerai/merlin/-/merlin-1.0.1.tgz","fileCount":7,"integrity":"sha512-sCoxD6XkgjErPLHLN1INOaVVF52iSoutLbkZsPbQ8Zt0WHdsxDLi4og3gp6Ei0L1tzGeuI0btn4mBo4+5ATx/A==","signatures":[{"sig":"MEYCIQDn7BwDomqyogdTkIOcFOGwDZM/0aamosyS4Qos4assCQIhALYvghAzXuqS0j3xWszpeuXeTIYRtfWCU1YfbKCBVJLi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":692048},"main":"cli.js","engines":{"node":">=18.0.0"},"gitHead":"c6a98fc82718f7f8a6f6cadc09b960d8322a3a64","private":false,"scripts":{"dev":"npx nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/cli.ts --verbose --root ${npm_config_root:-$(pwd)} --no-stdin","test":"jest","build":"rm -rf dist && tsc && node scripts/minify.js && webpack && node scripts/minify.js && chmod +x bundle/cli.js && chmod +x dist/install.js && mv bundle/cli.js cli.js && cp bundle/cli.js.LICENSE.txt cli.js.LICENSE.txt && mv dist/install.js install.js","clean":"rm -rf dist dist-obfuscated","start":"node dist/cli.js","dev-cli":"npx ts-node src/cli.ts --verbose --dev --root ${npm_config_root:-$(pwd)} --alfred-id ${npm_config_alfred-id:''}","dev-login":"npx ts-node src/cli.ts login --dev","dev-gemini":"npx ts-node src/cli.ts --model=gemini-2.0-flash-001 --verbose --root  ${npm_config_root:-$(pwd)} --alfred-id ${npm_config_alfred-id:''}","test:watch":"jest --watch","postinstall":"node install.js || true","postpublish":"git checkout -- README.md","global-install":"npm run build && npm link","prepublishOnly":"npm run build && cp README-USER.md README.md"},"_npmUser":{"name":"ajwurts_vl","email":"ajwurts@villagelabs.co"},"_npmVersion":"11.12.1","description":"Coworker.AI Merlin CLI","directories":{},"_nodeVersion":"26.0.0","dependencies":{"keytar":"^7.9.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^10.3.10","jest":"^29.5.0","path":"^0.12.7","axios":"^1.17.0","dotenv":"^16.3.1","terser":"^5.39.0","ts-jest":"^29.1.0","ts-node":"^10.9.2","webpack":"^5.98.0","winston":"^3.11.0","commander":"^11.0.0","minimatch":"^9.0.5","typescript":"^5.3.3","@types/jest":"^29.5.0","@types/node":"^20.11.25","webpack-cli":"^6.0.1","@types/winston":"^2.4.4","javascript-obfuscator":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/merlin_1.0.1_1781623575576_0.38226975773670246","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@coworkerai/merlin","version":"1.0.2","description":"Coworker.AI Merlin CLI","main":"cli.js","bin":{"merlin":"cli.js","merlin-dev":"merlin-dev.js"},"preferGlobal":true,"scripts":{"test":"jest","test:watch":"jest --watch","build":"rm -rf dist && tsc && webpack && node scripts/minify.js && chmod +x bundle/cli.js && chmod +x dist/install.js && mv bundle/cli.js cli.js && cp bundle/cli.js.LICENSE.txt cli.js.LICENSE.txt && mv dist/install.js install.js","clean":"rm -rf dist dist-obfuscated","prepublishOnly":"npm run build && cp README-USER.md README.md","postpublish":"git checkout -- README.md","start":"node dist/cli.js","dev":"npx nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/cli.ts --verbose --root ${npm_config_root:-$(pwd)} --no-stdin","dev-cli":"npx ts-node src/cli.ts --verbose --dev --root ${npm_config_root:-$(pwd)} --alfred-id ${npm_config_alfred-id:''}","dev-login":"npx ts-node src/cli.ts login --dev","dev-gemini":"npx ts-node src/cli.ts --model=gemini-2.0-flash-001 --verbose --root  ${npm_config_root:-$(pwd)} --alfred-id ${npm_config_alfred-id:''}","postinstall":"node install.js || true","global-install":"npm run build && npm link"},"keywords":["cli","ai","assistant","coworker","coding-agent"],"author":{"name":"Coworker.AI"},"license":"SEE LICENSE IN LICENSE.md","private":false,"dependencies":{"keytar":"^7.9.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.11.25","@types/winston":"^2.4.4","axios":"^1.17.0","commander":"^11.0.0","dotenv":"^16.3.1","glob":"^10.3.10","javascript-obfuscator":"^4.1.0","jest":"^29.5.0","minimatch":"^9.0.5","path":"^0.12.7","terser":"^5.39.0","ts-jest":"^29.1.0","ts-node":"^10.9.2","typescript":"^5.3.3","webpack":"^5.98.0","webpack-cli":"^6.0.1","winston":"^3.11.0"},"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"cb11b98e8eb4cc6f7d96868603182d43051e4953","_id":"@coworkerai/merlin@1.0.2","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-/w4QYK6kO/8sFU5/owCcitAYiU6irYoo6VcsrHqWhM56T25BYUy4eYnywjf/J+iUymy4hc62c5wDKYfj587YLw==","shasum":"961d0381d639afaa4a13d07f60abba50951c7179","tarball":"https://registry.npmjs.org/@coworkerai/merlin/-/merlin-1.0.2.tgz","fileCount":7,"unpackedSize":696951,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEaPudzfHLRRHfCeoRV6r0VHLbRteL8/Jm2+xZYjYyD9AiB6+Ep6umLLVqgoA87oyO6ov3kZMaXrNFFagOG3VZUdkg=="}]},"_npmUser":{"name":"ajwurts_vl","email":"ajwurts@villagelabs.co"},"directories":{},"maintainers":[{"name":"ajwurts_vl","email":"ajwurts@villagelabs.co"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/merlin_1.0.2_1782229014704_0.8739883393474688"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-10T21:00:54.261Z","modified":"2026-06-23T15:36:54.959Z","1.0.0":"2026-06-10T21:00:54.796Z","1.0.1":"2026-06-16T15:26:15.738Z","1.0.2":"2026-06-23T15:36:54.841Z"},"author":{"name":"Coworker.AI"},"license":"SEE LICENSE IN LICENSE.md","keywords":["cli","ai","assistant","coworker","coding-agent"],"description":"Coworker.AI Merlin CLI","maintainers":[{"name":"ajwurts_vl","email":"ajwurts@villagelabs.co"}],"readme":"# Merlin CLI\n\nMerlin is a powerful AI-powered command-line agent for developers, created by Coworker.AI.\n\n## Installation\n\n```bash\n# Install globally from npm\nnpm install -g @coworkerai/merlin\n```\n\nAfter installation, verify that the command is available:\n\n```bash\nmerlin --help\n```\n\n## Quick Start\n\n```bash\n# Start Merlin in your current directory\nmerlin\n```\n\nMerlin will guide you through a one-time setup process to configure your API key and set your network.\n\nYou can also authorize Merlin via your browser using an OAuth-style flow:\n\n```bash\nmerlin login\n```\n\nThis opens your browser, asks you to approve the Merlin scopes\n(`merlin:chat:write`, `merlin:chat:read`, `merlin:tools:filesystem`, `merlin:tools:bash`), and writes\nthe resulting scoped API key to `~/.village-merlin`.\n\n### Connecting to Odin\n\nMerlin talks to Odin (Coworker.AI's chat/AI service) over a REST + SSE\nsession API. The endpoint defaults to the hosted Odin; override it for a\nlocal or staging server:\n\n```bash\nexport ODIN_URL=http://127.0.0.1:8899   # e.g. a local Odin\n# or run `merlin-dev`, which defaults ODIN_URL to 127.0.0.1:8888\n```\n\n### Console UI\n\nMerlin ships a streaming console UI modeled on the Claude Code terminal\nexperience: a banner with model/network status, response text streamed\nwith a typewriter effect and markdown formatting, glyph-marked tool calls\nand results, a pinned bottom bar with a mode line (Shift+Tab cycles accept\nedits / auto / plan) and a live guidance input, slash commands with an\ninline auto-complete dropdown (`/help`, `/model`, `/resume`, `/goal`,\n`/loop`, `/copy`, …), bash mode (`!cmd`), Esc to interrupt/steer a running\nturn, and Ctrl+C twice to exit.\n\n## Features\n\n- **AI-Powered Assistance**: Get help with coding tasks, debugging, and more\n- **Context-Aware**: Understands your codebase and working directory\n- **Local + server tools**: filesystem/bash run on your machine; search,\n  Jira, and GitHub run server-side with your org context\n- **Conversation History**: Save, review, and resume your sessions\n- **Streaming console**: typewriter text, markdown rendering, live mode bar\n\n## Commands\n\nOnce inside the Merlin interface, you can use these commands:\n\n```\n/help       - Display help message\n/quit       - Exit the application\n/cd <path>  - Change working directory\n/clear      - Clear the screen\n/history    - Show conversation history\n/save <file>- Save conversation history to file\n/root       - Show current working directory\n/restart    - Restart the conversation\n```\n\n### Bash Mode\n\nType `!` at the beginning of a line to enter bash mode and execute shell commands directly.\n\n### Canceling queries\n\nIf you see Merlin start down the wrong path, or you change your mind just press Escape to cancel the current generation, and let Merlin know how they should proceed instead.\n\n## Configuration\n\n### Command Line Options\n\n```bash\n# Use a specific model\nmerlin --model claude-sonnet-4-20250514\n\n# Specify a working directory, otherwise uses the launchred directory\nmerlin --root /path/to/project\n\n# Enable verbose logging\nmerlin --verbose\n\n# Use a specific API key and network\nmerlin --api-key YOUR_API_KEY --network YOUR_NETWORK_ID\n\n# Skip the configuration screen\nmerlin --skip-config --api-key YOUR_API_KEY --network YOUR_NETWORK_ID\n\n# Run in single-shot mode (process one query and exit)\nmerlin --single-shot \"What does this code do?\"\n```\n\n### Managing Configuration\n\n```bash\n# View current configuration\nmerlin config --show\n\n# Reset configuration\nmerlin config --reset\n\n# Run the configuration wizard\nmerlin config\n```\n\nLocal configuration can also be edited at\n\n```bash\n~/.village-merlin\n```\n\n## Safety System\n\nMerlin includes a built-in safety system that protects your system by requiring confirmation before executing potentially sensitive operations.\n\n### How It Works\n\nWhen Merlin attempts to perform a sensitive operation (like editing files or running certain commands), you'll see a safety prompt asking for permission. You have four options:\n\n- **[o]nce**: Allow this specific operation one time only\n- **[a]lways**: Always allow similar operations in the future\n- **[n]ever**: Never allow this type of operation (you'll be asked again if needed)\n- **[c]ancel**: Cancel the current operation\n\nYour preferences are saved between sessions, so Merlin will remember which operations you've approved.\n\n### Understanding Tool Keys\n\nThe safety system identifies similar operations using \"tool keys\" that follow these patterns:\n\n- For bash commands: `bash(command)` - Examples: `bash(git)`, `bash(npm install)`\n- For file operations: `toolname(path)` - Examples: `edit_file(src/*)`, `view(/etc/nginx/)`\n\nSystem directories and sensitive commands receive more specific keys to ensure proper protection.\n\n## Support\n\nFor support, please contact Coworker.AI or visit our website.\n\n## License\n\nView license in LICENSE.md\n","readmeFilename":"README.md"}