diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 640e0e422..3aa5b3b28 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -16,7 +16,7 @@ jobs: timeout-minutes: 20 environment: production outputs: - release_created: ${{ steps.release.outputs.releases_created }} + release_created: ${{ steps.release.outputs.release_created }} tag_name: ${{ steps.release.outputs.tag_name }} version: ${{ steps.release.outputs.version }} steps: diff --git a/Makefile b/Makefile index 43e903b88..f1a5b7b78 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,7 @@ test: # Run agent evals eval: - @npx @lobu/cli eval + @npx @lobu/cli@latest eval # Deploy to Kubernetes # Usage: make deploy [--target=environment] deploy: diff --git a/README.md b/README.md index 20dd04847..65e96b5ee 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,8 @@ https://github.com/user-attachments/assets/d72a9286-0325-4b8b-afc0-c1efe9c96f4e The quickest way to start is the CLI scaffold: ```bash -npx @lobu/cli init my-bot -cd my-bot && npx @lobu/cli run -d +npx @lobu/cli@latest init my-bot +cd my-bot && npx @lobu/cli@latest run -d ``` ### Deployment modes diff --git a/codex-skills/lobu-builder/SKILL.md b/codex-skills/lobu-builder/SKILL.md index cf017e355..cd021fc3d 100644 --- a/codex-skills/lobu-builder/SKILL.md +++ b/codex-skills/lobu-builder/SKILL.md @@ -35,11 +35,11 @@ Prefer editing these files directly instead of burying behavior in ad hoc code. ## Workflow -1. Keep the project runnable. Start or reuse the stack with `npx @lobu/cli run -d`. +1. Keep the project runnable. Start or reuse the stack with `npx @lobu/cli@latest run -d`. 2. Make the smallest prompt, config, skill, or eval change that solves the task. -3. Run `npx @lobu/cli validate` after changing `lobu.toml` or skill definitions. -4. Test behavior with `npx @lobu/cli chat "..."` or the project's testing instructions. -5. Run `npx @lobu/cli eval` when the behavior should be captured as a regression test. +3. Run `npx @lobu/cli@latest validate` after changing `lobu.toml` or skill definitions. +4. Test behavior with `npx @lobu/cli@latest chat "..."` or the project's testing instructions. +5. Run `npx @lobu/cli@latest eval` when the behavior should be captured as a regression test. If the repository already provides project-specific test scripts, use those. @@ -54,7 +54,7 @@ If the repository already provides project-specific test scripts, use those. ## Useful Suggestions - Add or reorder providers in `lobu.toml` -- Enable built-in skills with `npx @lobu/cli skills list`, `search`, or `add` +- Enable built-in skills with `npx @lobu/cli@latest skills list`, `search`, or `add` - Add a custom MCP server under `[agents..skills.mcp.*]` - Add a shared skill under `skills/` for repeated workflows - Add evals for risky behaviors and policy constraints diff --git a/docker/Dockerfile.gateway b/docker/Dockerfile.gateway index a9f1a19c4..fd95a56ab 100644 --- a/docker/Dockerfile.gateway +++ b/docker/Dockerfile.gateway @@ -22,6 +22,7 @@ ENV NIX_PATH="nixpkgs=/home/nixuser/.nix-defexpr/channels/nixpkgs" WORKDIR /app # Set up workspace for gateway + core + worker (worker needed for embedded deployment mode) +COPY bun.lock ./ COPY tsconfig.json ./ COPY package.json ./ COPY patches/ ./patches/ diff --git a/packages/cli/README.md b/packages/cli/README.md index cc923823a..cadfc321e 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -5,7 +5,7 @@ CLI tool for initializing and managing Lobu projects. ## Quick Start ```bash -npx @lobu/cli init my-bot +npx @lobu/cli@latest init my-bot cd my-bot docker compose up -d ``` diff --git a/packages/cli/src/api/context.ts b/packages/cli/src/api/context.ts index 0d62e0c28..82186b78c 100644 --- a/packages/cli/src/api/context.ts +++ b/packages/cli/src/api/context.ts @@ -82,7 +82,7 @@ export async function resolveContext( } throw new Error( - `Unknown context "${contextName}". Run \`npx @lobu/cli context list\` to see configured contexts.` + `Unknown context "${contextName}". Run \`npx @lobu/cli@latest context list\` to see configured contexts.` ); } @@ -114,7 +114,7 @@ export async function setCurrentContext( const config = await loadContextConfig(); if (!config.contexts[trimmedName]) { throw new Error( - `Unknown context "${trimmedName}". Run \`npx @lobu/cli context add ${trimmedName} --api-url \` first.` + `Unknown context "${trimmedName}". Run \`npx @lobu/cli@latest context add ${trimmedName} --api-url \` first.` ); } diff --git a/packages/cli/src/commands/chat.ts b/packages/cli/src/commands/chat.ts index 78cdab318..52f5b76b7 100644 --- a/packages/cli/src/commands/chat.ts +++ b/packages/cli/src/commands/chat.ts @@ -44,7 +44,7 @@ export async function chatCommand( if (!authToken) { console.error( chalk.red( - "\n Session expired or not logged in. Run `npx @lobu/cli login` or set ADMIN_PASSWORD.\n" + "\n Session expired or not logged in. Run `npx @lobu/cli@latest login` or set ADMIN_PASSWORD.\n" ) ); process.exit(1); @@ -201,7 +201,7 @@ async function sendViaApi( if (createRes.status === 401) { console.error( chalk.red( - "\n Authentication required. Run `npx @lobu/cli login` or set ADMIN_PASSWORD.\n" + "\n Authentication required. Run `npx @lobu/cli@latest login` or set ADMIN_PASSWORD.\n" ) ); process.exit(1); diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts index c30e56228..da96aba0c 100644 --- a/packages/cli/src/commands/init.ts +++ b/packages/cli/src/commands/init.ts @@ -555,7 +555,7 @@ turns: console.log(chalk.dim(` ${displayUrl}\n`)); } console.log(chalk.cyan(" 3. Start the services:")); - console.log(chalk.dim(" npx @lobu/cli run -d\n")); + console.log(chalk.dim(" npx @lobu/cli@latest run -d\n")); if (includeOwlettoLocal) { console.log(chalk.cyan(" 4. Set up Owletto (first run):")); console.log( diff --git a/packages/cli/src/commands/login.ts b/packages/cli/src/commands/login.ts index 4ff204d46..df9caa493 100644 --- a/packages/cli/src/commands/login.ts +++ b/packages/cli/src/commands/login.ts @@ -129,7 +129,7 @@ export async function loginCommand(options: { ); console.log( chalk.dim( - " Run `npx @lobu/cli logout` first, or use `--force` to re-authenticate.\n" + " Run `npx @lobu/cli@latest logout` first, or use `--force` to re-authenticate.\n" ) ); return; @@ -430,7 +430,9 @@ export async function loginCommand(options: { } } - spinner.fail("Login request expired. Run `npx @lobu/cli login` again."); + spinner.fail( + "Login request expired. Run `npx @lobu/cli@latest login` again." + ); console.log(); } diff --git a/packages/cli/src/commands/providers/add.ts b/packages/cli/src/commands/providers/add.ts index e2a0f1301..6a9dd0845 100644 --- a/packages/cli/src/commands/providers/add.ts +++ b/packages/cli/src/commands/providers/add.ts @@ -17,7 +17,7 @@ export async function providersAddCommand( console.log(chalk.red(`\n Provider "${providerId}" not found.`)); console.log( chalk.dim( - " Run `npx @lobu/cli providers list` to see available providers.\n" + " Run `npx @lobu/cli@latest providers list` to see available providers.\n" ) ); return; @@ -72,7 +72,7 @@ export async function providersAddCommand( if (!apiKey) { console.log(chalk.dim("\n Set the API key:")); console.log( - chalk.cyan(` npx @lobu/cli secrets set ${envVar} `) + chalk.cyan(` npx @lobu/cli@latest secrets set ${envVar} `) ); } console.log(); diff --git a/packages/cli/src/commands/providers/list.ts b/packages/cli/src/commands/providers/list.ts index 66e2c9faa..c2437070a 100644 --- a/packages/cli/src/commands/providers/list.ts +++ b/packages/cli/src/commands/providers/list.ts @@ -27,7 +27,7 @@ export async function providersListCommand(): Promise { console.log( chalk.dim( - "\n Use `npx @lobu/cli providers add ` to add a provider to lobu.toml.\n" + "\n Use `npx @lobu/cli@latest providers add ` to add a provider to lobu.toml.\n" ) ); } diff --git a/packages/cli/src/commands/skills/add.ts b/packages/cli/src/commands/skills/add.ts index 0e4767f7a..5ffe7dce2 100644 --- a/packages/cli/src/commands/skills/add.ts +++ b/packages/cli/src/commands/skills/add.ts @@ -15,7 +15,9 @@ export async function skillsAddCommand( if (!skill) { console.log(chalk.red(`\n Skill "${skillId}" not found.`)); console.log( - chalk.dim(" Run `npx @lobu/cli skills list` to see available skills.\n") + chalk.dim( + " Run `npx @lobu/cli@latest skills list` to see available skills.\n" + ) ); return; } @@ -62,7 +64,7 @@ export async function skillsAddCommand( console.log(chalk.dim("\n Required secrets:")); for (const v of envVars) { console.log( - chalk.cyan(` npx @lobu/cli secrets set ${v} `) + chalk.cyan(` npx @lobu/cli@latest secrets set ${v} `) ); } } diff --git a/packages/cli/src/commands/skills/info.ts b/packages/cli/src/commands/skills/info.ts index bfb97d19c..945569249 100644 --- a/packages/cli/src/commands/skills/info.ts +++ b/packages/cli/src/commands/skills/info.ts @@ -7,7 +7,9 @@ export async function skillsInfoCommand(skillId: string): Promise { if (!skill) { console.log(chalk.red(`\n Skill "${skillId}" not found.`)); console.log( - chalk.dim(" Run `npx @lobu/cli skills list` to see available skills.\n") + chalk.dim( + " Run `npx @lobu/cli@latest skills list` to see available skills.\n" + ) ); return; } diff --git a/packages/cli/src/commands/skills/list.ts b/packages/cli/src/commands/skills/list.ts index d05cb7ad3..e4e91c5b3 100644 --- a/packages/cli/src/commands/skills/list.ts +++ b/packages/cli/src/commands/skills/list.ts @@ -36,7 +36,7 @@ export async function skillsListCommand(): Promise { console.log( chalk.dim( - "\n Use `npx @lobu/cli skills info ` for details on a specific skill.\n" + "\n Use `npx @lobu/cli@latest skills info ` for details on a specific skill.\n" ) ); } diff --git a/packages/cli/src/commands/status.ts b/packages/cli/src/commands/status.ts index fcae9ef12..f121ead46 100644 --- a/packages/cli/src/commands/status.ts +++ b/packages/cli/src/commands/status.ts @@ -45,7 +45,7 @@ export async function statusCommand(cwd: string): Promise { } catch { console.log(chalk.yellow("\n Gateway not reachable.")); console.log( - chalk.dim(" Start with `npx @lobu/cli run` to run your agents.\n") + chalk.dim(" Start with `npx @lobu/cli@latest run` to run your agents.\n") ); return; } diff --git a/packages/cli/src/commands/validate.ts b/packages/cli/src/commands/validate.ts index 2b9d11056..eb2988d95 100644 --- a/packages/cli/src/commands/validate.ts +++ b/packages/cli/src/commands/validate.ts @@ -27,7 +27,7 @@ export async function validateCommand(cwd: string): Promise { for (const skillId of agentEntry.skills.enabled) { if (!skillIds.has(skillId)) { errors.push( - `[agents.${agentId}] Unknown skill "${skillId}". Run \`npx @lobu/cli skills list\` to see available skills.` + `[agents.${agentId}] Unknown skill "${skillId}". Run \`npx @lobu/cli@latest skills list\` to see available skills.` ); } } diff --git a/packages/cli/src/commands/whoami.ts b/packages/cli/src/commands/whoami.ts index 9bb8ffaf4..ae90442c1 100644 --- a/packages/cli/src/commands/whoami.ts +++ b/packages/cli/src/commands/whoami.ts @@ -25,7 +25,9 @@ export async function whoamiCommand(options?: { console.log(chalk.dim("\n Not logged in.")); console.log(chalk.dim(` Context: ${target.name}`)); console.log(chalk.dim(` API URL: ${target.apiUrl}`)); - console.log(chalk.dim(" Run `npx @lobu/cli login` to authenticate.\n")); + console.log( + chalk.dim(" Run `npx @lobu/cli@latest login` to authenticate.\n") + ); return; } diff --git a/packages/cli/src/templates/README.md.tmpl b/packages/cli/src/templates/README.md.tmpl index 7a4696930..b367cc6de 100644 --- a/packages/cli/src/templates/README.md.tmpl +++ b/packages/cli/src/templates/README.md.tmpl @@ -8,7 +8,7 @@ Make sure you have Docker CLI installed. ```bash # Start the services -npx @lobu/cli run -d +npx @lobu/cli@latest run -d # View logs docker compose logs -f diff --git a/packages/landing/src/components/CTA.tsx b/packages/landing/src/components/CTA.tsx index 14c80748f..0d62275f2 100644 --- a/packages/landing/src/components/CTA.tsx +++ b/packages/landing/src/components/CTA.tsx @@ -26,18 +26,20 @@ export function CTA() { }} onClick={(e) => { const button = e.currentTarget as HTMLButtonElement; - navigator.clipboard.writeText("npx @lobu/cli init").then(() => { - const original = button.innerHTML; - button.innerHTML = - 'Copied!'; - setTimeout(() => { - button.innerHTML = original; - }, 2000); - }); + navigator.clipboard + .writeText("npx @lobu/cli@latest init") + .then(() => { + const original = button.innerHTML; + button.innerHTML = + 'Copied!'; + setTimeout(() => { + button.innerHTML = original; + }, 2000); + }); }} > $ npx - @lobu/cli init + @lobu/cli@latest init diff --git a/packages/landing/src/components/InstallSection.tsx b/packages/landing/src/components/InstallSection.tsx index e63419036..2e175446f 100644 --- a/packages/landing/src/components/InstallSection.tsx +++ b/packages/landing/src/components/InstallSection.tsx @@ -4,8 +4,14 @@ const localDev = { badges: ["CLI scaffold", "Full stack", "Fastest setup"], docsHref: "/deployment/docker/", steps: [ - { label: "Scaffold a new agent", code: "npx @lobu/cli init my-agent" }, - { label: "Run the stack", code: "cd my-agent && npx @lobu/cli run -d" }, + { + label: "Scaffold a new agent", + code: "npx @lobu/cli@latest init my-agent", + }, + { + label: "Run the stack", + code: "cd my-agent && npx @lobu/cli@latest run -d", + }, { label: "Open the docs", code: "open http://localhost:8080/api/docs" }, ], }; diff --git a/packages/landing/src/components/SkillsSection.tsx b/packages/landing/src/components/SkillsSection.tsx index 429a00da1..de6f95a0b 100644 --- a/packages/landing/src/components/SkillsSection.tsx +++ b/packages/landing/src/components/SkillsSection.tsx @@ -346,7 +346,7 @@ const editorFiles: EditorFile[] = [ const AGENT_PROMPT = "Set up a new Lobu agent in this directory. Create lobu.toml, IDENTITY.md, SOUL.md, USER.md, and a skill in skills/ops-triage/SKILL.md with nix packages, a network allowlist, tool permissions, and an MCP server. Follow the Lobu skill conventions at https://lobu.ai/getting-started/skills/."; -const INIT_COMMAND = "npx lobu init"; +const INIT_COMMAND = "npx @lobu/cli@latest init"; function useCopy(value: string) { const [copied, setCopied] = useState(false); @@ -577,7 +577,8 @@ function EditorPreview() { style={codeBlockStyle} > - $ npx lobu run + $ npx @lobu/cli@latest + run {"\n"} {">"} reading lobu.toml diff --git a/packages/landing/src/components/TerminalLog.tsx b/packages/landing/src/components/TerminalLog.tsx index f55b28523..acd042410 100644 --- a/packages/landing/src/components/TerminalLog.tsx +++ b/packages/landing/src/components/TerminalLog.tsx @@ -1,6 +1,6 @@ export function TerminalLog({ fill }: { fill?: boolean }) { const lines: { text: string; color: string }[] = [ - { text: "$ npx @lobu/cli run -d", color: "#4ade80" }, + { text: "$ npx @lobu/cli@latest run -d", color: "#4ade80" }, { text: "[gateway] listening on :8080", color: "#8f96a3" }, { text: "[gateway] connected to Redis", color: "#8f96a3" }, { @@ -67,7 +67,7 @@ export function TerminalLog({ fill }: { fill?: boolean }) { class="px-2.5 py-1 rounded-md" style={{ backgroundColor: "#23262d", color: "#c9cdd4" }} > - npx @lobu/cli run + npx @lobu/cli@latest run diff --git a/packages/landing/src/content/blog/add-ai-agents-to-nextjs.mdx b/packages/landing/src/content/blog/add-ai-agents-to-nextjs.mdx index e6fd9f978..d3e82872b 100644 --- a/packages/landing/src/content/blog/add-ai-agents-to-nextjs.mdx +++ b/packages/landing/src/content/blog/add-ai-agents-to-nextjs.mdx @@ -95,7 +95,7 @@ curl -X POST http://localhost:3000/api/lobu/api/v1/agents/assistant/messages \ Or use the Lobu CLI: ```bash -npx @lobu/cli chat "Hello" --gateway http://localhost:3000/api/lobu +npx @lobu/cli@latest chat "Hello" --gateway http://localhost:3000/api/lobu ``` ## What's happening under the hood @@ -157,7 +157,7 @@ turns: Run it: ```bash -npx @lobu/cli eval --gateway http://localhost:3000/api/lobu +npx @lobu/cli@latest eval --gateway http://localhost:3000/api/lobu ``` ## What you get for free diff --git a/packages/landing/src/content/docs/deployment/docker.md b/packages/landing/src/content/docs/deployment/docker.md index a70865b97..01a2fd50b 100644 --- a/packages/landing/src/content/docs/deployment/docker.md +++ b/packages/landing/src/content/docs/deployment/docker.md @@ -49,6 +49,6 @@ Use Docker mode when: ## Operational Notes -- Start stack: `npx @lobu/cli run -d` or `docker compose up -d` +- Start stack: `npx @lobu/cli@latest run -d` or `docker compose up -d` - Restart after `.env` changes - Session persistence is provided by mounted workspace directories diff --git a/packages/landing/src/content/docs/getting-started/index.mdx b/packages/landing/src/content/docs/getting-started/index.mdx index a72feac32..594fbc955 100644 --- a/packages/landing/src/content/docs/getting-started/index.mdx +++ b/packages/landing/src/content/docs/getting-started/index.mdx @@ -11,11 +11,11 @@ Deploy sandboxed, persistent AI agents to your infrastructure — one isolated a ```bash # 1. Scaffold and run -npx @lobu/cli init my-agent -cd my-agent && npx @lobu/cli run -d +npx @lobu/cli@latest init my-agent +cd my-agent && npx @lobu/cli@latest run -d # 2. Chat with your agent -npx @lobu/cli chat "Hello, what can you do?" +npx @lobu/cli@latest chat "Hello, what can you do?" # 3. Customize behavior (edit prompt files) # agents/my-agent/IDENTITY.md — who the agent is @@ -23,7 +23,7 @@ npx @lobu/cli chat "Hello, what can you do?" # agents/my-agent/USER.md — user context # 4. Run evals to measure quality -npx @lobu/cli eval +npx @lobu/cli@latest eval ``` The `init` wizard walks you through deployment mode, AI provider, skills, messaging platform, and memory configuration. All choices are saved to `lobu.toml` and `.env`. @@ -40,7 +40,7 @@ Please: 2. Help me shape the agent behavior by editing those files directly. 3. Use Lobu skills when they make sense: https://lobu.ai/getting-started/skills/ 4. Suggest any provider, skill, or connection changes needed in lobu.toml. -5. Keep the project runnable with `npx @lobu/cli run -d`. +5. Keep the project runnable with `npx @lobu/cli@latest run -d`. Explain what you change and why. ``` @@ -67,8 +67,8 @@ The coding agent will read your project structure and help you: After each change, test with: ```bash -npx @lobu/cli chat "Hello, can you cancel my subscription?" -npx @lobu/cli eval +npx @lobu/cli@latest chat "Hello, can you cancel my subscription?" +npx @lobu/cli@latest eval ``` See [Agent Workspace](/guides/agent-prompts/), [SKILL.md Reference](/reference/skill-md/), and [Evaluations](/guides/evals/) for details on each file. @@ -83,21 +83,21 @@ After `init`, your project is configured through `lobu.toml`. Use the CLI to add ```bash # Browse and add providers -npx @lobu/cli providers list -npx @lobu/cli providers add gemini # prompts for API key, updates lobu.toml + .env +npx @lobu/cli@latest providers list +npx @lobu/cli@latest providers add gemini # prompts for API key, updates lobu.toml + .env # Browse and add skills -npx @lobu/cli skills list -npx @lobu/cli skills add github -npx @lobu/cli skills add linear +npx @lobu/cli@latest skills list +npx @lobu/cli@latest skills add github +npx @lobu/cli@latest skills add linear # Manage secrets -npx @lobu/cli secrets set GEMINI_API_KEY AIza... -npx @lobu/cli secrets list +npx @lobu/cli@latest secrets set GEMINI_API_KEY AIza... +npx @lobu/cli@latest secrets list # Validate and run -npx @lobu/cli validate -npx @lobu/cli run -d +npx @lobu/cli@latest validate +npx @lobu/cli@latest run -d ``` See the [CLI Reference](/reference/cli/) for all available commands. diff --git a/packages/landing/src/content/docs/guides/evals.md b/packages/landing/src/content/docs/guides/evals.md index 57d007601..a29a75f8c 100644 --- a/packages/landing/src/content/docs/guides/evals.md +++ b/packages/landing/src/content/docs/guides/evals.md @@ -9,19 +9,19 @@ Evals are automated test cases that verify your agent behaves correctly. They li ```bash # Run all evals for the default agent -npx @lobu/cli eval +npx @lobu/cli@latest eval # Run a specific eval -npx @lobu/cli eval ping +npx @lobu/cli@latest eval ping # Run with a different model -npx @lobu/cli eval --model anthropic/claude-sonnet-4 +npx @lobu/cli@latest eval --model anthropic/claude-sonnet-4 # CI mode (JSON output, exit 1 on failure) -npx @lobu/cli eval --ci --output results.json +npx @lobu/cli@latest eval --ci --output results.json ``` -The gateway must be running (`npx @lobu/cli run`) before running evals. +The gateway must be running (`npx @lobu/cli@latest run`) before running evals. ## Eval file format diff --git a/packages/landing/src/content/docs/guides/testing.md b/packages/landing/src/content/docs/guides/testing.md index e03e38d0b..ce67ede24 100644 --- a/packages/landing/src/content/docs/guides/testing.md +++ b/packages/landing/src/content/docs/guides/testing.md @@ -11,20 +11,20 @@ The fastest way to test. Sends a prompt and streams the response in your termina ```bash # Basic test -npx @lobu/cli chat "Hello, what can you do?" +npx @lobu/cli@latest chat "Hello, what can you do?" # Multi-turn conversation -npx @lobu/cli chat "What's on my calendar?" --thread my-test -npx @lobu/cli chat "Cancel the 3pm meeting" --thread my-test +npx @lobu/cli@latest chat "What's on my calendar?" --thread my-test +npx @lobu/cli@latest chat "Cancel the 3pm meeting" --thread my-test # Target a specific agent (if you have multiple in lobu.toml) -npx @lobu/cli chat "Hello" --agent support +npx @lobu/cli@latest chat "Hello" --agent support # Dry run (no history persisted) -npx @lobu/cli chat "Test prompt" --dry-run +npx @lobu/cli@latest chat "Test prompt" --dry-run # Force a fresh session -npx @lobu/cli chat "Start over" --new +npx @lobu/cli@latest chat "Start over" --new ``` This uses **API mode** — the agent runs and responds directly to your terminal. No platform connection needed. @@ -39,13 +39,13 @@ The `--user` flag routes your message through a platform connection: ```bash # Send as a Telegram user -npx @lobu/cli chat "Hello" --user telegram:12345 +npx @lobu/cli@latest chat "Hello" --user telegram:12345 # Send to a Slack channel -npx @lobu/cli chat "Hello" --user slack:C0123ABCD +npx @lobu/cli@latest chat "Hello" --user slack:C0123ABCD # Send to Discord -npx @lobu/cli chat "Hello" --user discord:987654321 +npx @lobu/cli@latest chat "Hello" --user discord:987654321 ``` The response appears on the platform **and** streams to your terminal. @@ -150,11 +150,11 @@ Use named contexts to test against staging or production: ```bash # Add a staging context -npx @lobu/cli context add staging --api-url https://staging.example.com/api/v1 -npx @lobu/cli login -c staging +npx @lobu/cli@latest context add staging --api-url https://staging.example.com/api/v1 +npx @lobu/cli@latest login -c staging # Chat with the staging agent -npx @lobu/cli chat "Hello" -c staging +npx @lobu/cli@latest chat "Hello" -c staging ``` ## Resetting conversation state @@ -174,11 +174,11 @@ docker compose -f docker/docker-compose.yml exec redis redis-cli DEL 'chat:histo For automated quality checks, use the `eval` command: ```bash -npx @lobu/cli eval # run all evals -npx @lobu/cli eval basic-qa # run a specific eval -npx @lobu/cli eval --model claude/sonnet # eval with a specific model -npx @lobu/cli eval --list # list available evals -npx @lobu/cli eval --ci --output results.json # CI mode +npx @lobu/cli@latest eval # run all evals +npx @lobu/cli@latest eval basic-qa # run a specific eval +npx @lobu/cli@latest eval --model claude/sonnet # eval with a specific model +npx @lobu/cli@latest eval --list # list available evals +npx @lobu/cli@latest eval --ci --output results.json # CI mode ``` Eval files live in the agent directory and define test cases with expected outcomes. Use `--ci` for non-zero exit codes on failure in CI/CD pipelines. diff --git a/packages/landing/src/content/docs/reference/cli.md b/packages/landing/src/content/docs/reference/cli.md index 0abcf6ad0..8adc7ff65 100644 --- a/packages/landing/src/content/docs/reference/cli.md +++ b/packages/landing/src/content/docs/reference/cli.md @@ -11,7 +11,7 @@ The Lobu CLI (`@lobu/cli`) scaffolds projects, runs agents locally, and manages ```bash # Run directly (no install) -npx @lobu/cli +npx @lobu/cli@latest # Or install globally npm install -g @lobu/cli @@ -25,7 +25,7 @@ lobu Scaffold a new agent project with `lobu.toml`, Docker Compose, and environment config. ```bash -npx @lobu/cli init my-agent +npx @lobu/cli@latest init my-agent ``` Generates: @@ -47,10 +47,10 @@ Interactive prompts guide you through deployment mode, provider, skills, platfor Send a prompt to an agent and stream the response to the terminal. ```bash -npx @lobu/cli chat "What is the weather?" -npx @lobu/cli chat "Hello" --agent my-agent --thread conv-123 -npx @lobu/cli chat "Check my PRs" --user telegram:12345 -npx @lobu/cli chat "Status update" -c staging +npx @lobu/cli@latest chat "What is the weather?" +npx @lobu/cli@latest chat "Hello" --agent my-agent --thread conv-123 +npx @lobu/cli@latest chat "Check my PRs" --user telegram:12345 +npx @lobu/cli@latest chat "Status update" -c staging ``` **API mode** (default): creates a session, sends the message, and streams the response to the terminal. @@ -74,10 +74,10 @@ npx @lobu/cli chat "Status update" -c staging Run agent evaluations. Eval files live in the agent directory and define test cases with expected outcomes. ```bash -npx @lobu/cli eval # run all evals -npx @lobu/cli eval basic-qa # run a specific eval -npx @lobu/cli eval --model claude/sonnet # eval with a specific model -npx @lobu/cli eval --ci --output results.json # CI mode with JSON output +npx @lobu/cli@latest eval # run all evals +npx @lobu/cli@latest eval basic-qa # run a specific eval +npx @lobu/cli@latest eval --model claude/sonnet # eval with a specific model +npx @lobu/cli@latest eval --ci --output results.json # CI mode with JSON output ``` | Flag | Description | @@ -99,9 +99,9 @@ Run the agent stack. Validates `lobu.toml`, prepares environment variables, then Without `-d`, the CLI starts containers then tails gateway logs. With `-d`, it starts detached and exits. ```bash -npx @lobu/cli run # start and tail logs -npx @lobu/cli run -d # detached mode -npx @lobu/cli run -d --build # rebuild containers +npx @lobu/cli@latest run # start and tail logs +npx @lobu/cli@latest run -d # detached mode +npx @lobu/cli@latest run -d --build # rebuild containers ``` --- @@ -111,7 +111,7 @@ npx @lobu/cli run -d --build # rebuild containers Validate `lobu.toml` schema, skill IDs, and provider configuration. ```bash -npx @lobu/cli validate +npx @lobu/cli@latest validate ``` Returns exit code `1` if validation fails. @@ -123,10 +123,10 @@ Returns exit code `1` if validation fails. Manage named API contexts for switching between local and remote gateways. ```bash -npx @lobu/cli context list -npx @lobu/cli context current -npx @lobu/cli context add staging --api-url https://staging.example.com -npx @lobu/cli context use staging +npx @lobu/cli@latest context list +npx @lobu/cli@latest context current +npx @lobu/cli@latest context add staging --api-url https://staging.example.com +npx @lobu/cli@latest context use staging ``` | Subcommand | Description | @@ -145,11 +145,11 @@ Environment overrides: set `LOBU_CONTEXT` to select a context by name, or `LOBU_ Authenticate with Lobu Cloud. Opens a browser for OAuth by default. ```bash -npx @lobu/cli login -npx @lobu/cli login --token # CI/CD -npx @lobu/cli login --admin-password # local dev fallback -npx @lobu/cli login -c staging # login to a named context -npx @lobu/cli login --force # re-authenticate (revokes existing session) +npx @lobu/cli@latest login +npx @lobu/cli@latest login --token # CI/CD +npx @lobu/cli@latest login --admin-password # local dev fallback +npx @lobu/cli@latest login -c staging # login to a named context +npx @lobu/cli@latest login --force # re-authenticate (revokes existing session) ``` | Flag | Description | @@ -166,8 +166,8 @@ npx @lobu/cli login --force # re-authenticate (revokes existing Revoke the session server-side and clear stored credentials. If the gateway is unreachable, local credentials are still cleared. ```bash -npx @lobu/cli logout -npx @lobu/cli logout -c staging +npx @lobu/cli@latest logout +npx @lobu/cli@latest logout -c staging ``` | Flag | Description | @@ -181,8 +181,8 @@ npx @lobu/cli logout -c staging Show the current authenticated user, linked agent, and API URL. ```bash -npx @lobu/cli whoami -npx @lobu/cli whoami -c staging +npx @lobu/cli@latest whoami +npx @lobu/cli@latest whoami -c staging ``` | Flag | Description | @@ -196,7 +196,7 @@ npx @lobu/cli whoami -c staging Show agent health: lists agents with their providers and models, platform connections with status, and active sandboxes. Requires the gateway to be running. ```bash -npx @lobu/cli status +npx @lobu/cli@latest status ``` --- @@ -206,9 +206,9 @@ npx @lobu/cli status Manage agent secrets (stored in `.env` for local dev). ```bash -npx @lobu/cli secrets set OPENAI_API_KEY sk-... -npx @lobu/cli secrets list -npx @lobu/cli secrets delete OPENAI_API_KEY +npx @lobu/cli@latest secrets set OPENAI_API_KEY sk-... +npx @lobu/cli@latest secrets list +npx @lobu/cli@latest secrets delete OPENAI_API_KEY ``` | Subcommand | Description | @@ -224,10 +224,10 @@ npx @lobu/cli secrets delete OPENAI_API_KEY Browse and manage skills from the registry. ```bash -npx @lobu/cli skills list # browse all skills -npx @lobu/cli skills search "calendar" # search by name or description -npx @lobu/cli skills info google-workspace # show details and required secrets -npx @lobu/cli skills add google-workspace # add to lobu.toml +npx @lobu/cli@latest skills list # browse all skills +npx @lobu/cli@latest skills search "calendar" # search by name or description +npx @lobu/cli@latest skills info google-workspace # show details and required secrets +npx @lobu/cli@latest skills add google-workspace # add to lobu.toml ``` | Subcommand | Description | @@ -244,8 +244,8 @@ npx @lobu/cli skills add google-workspace # add to lobu.toml Browse and manage LLM providers. ```bash -npx @lobu/cli providers list # browse available providers -npx @lobu/cli providers add gemini # add to lobu.toml +npx @lobu/cli@latest providers list # browse available providers +npx @lobu/cli@latest providers add gemini # add to lobu.toml ``` | Subcommand | Description | @@ -257,20 +257,20 @@ npx @lobu/cli providers add gemini # add to lobu.toml ```bash # 1. Scaffold -npx @lobu/cli init my-agent +npx @lobu/cli@latest init my-agent # 2. Configure cd my-agent -npx @lobu/cli skills add google-workspace -npx @lobu/cli providers add gemini -npx @lobu/cli secrets set GEMINI_API_KEY ... +npx @lobu/cli@latest skills add google-workspace +npx @lobu/cli@latest providers add gemini +npx @lobu/cli@latest secrets set GEMINI_API_KEY ... # 3. Validate -npx @lobu/cli validate +npx @lobu/cli@latest validate # 4. Run locally -npx @lobu/cli run -d +npx @lobu/cli@latest run -d # 5. Chat with your agent -npx @lobu/cli chat "Hello, what can you do?" +npx @lobu/cli@latest chat "Hello, what can you do?" ``` diff --git a/packages/landing/src/content/docs/reference/lobu-toml.md b/packages/landing/src/content/docs/reference/lobu-toml.md index 05a6985b1..6f33ae410 100644 --- a/packages/landing/src/content/docs/reference/lobu-toml.md +++ b/packages/landing/src/content/docs/reference/lobu-toml.md @@ -258,7 +258,7 @@ key = "sk-literal-value" # used as-is ## Validation ```bash -npx @lobu/cli validate +npx @lobu/cli@latest validate ``` Checks TOML syntax, schema conformance, skill IDs, and provider configuration. Returns exit code 1 on failure. diff --git a/packages/landing/src/content/docs/reference/owletto-cli.md b/packages/landing/src/content/docs/reference/owletto-cli.md index 80dcfba6c..6a1b769a1 100644 --- a/packages/landing/src/content/docs/reference/owletto-cli.md +++ b/packages/landing/src/content/docs/reference/owletto-cli.md @@ -20,7 +20,7 @@ Project links: ```bash # Run without installing -npx owletto +npx owletto@latest # Or install globally npm install -g owletto @@ -180,8 +180,8 @@ The point is not to store everything equally. The point is to structure what sho Starts a local Owletto runtime. ```bash -npx owletto start -npx owletto start --port 8787 +npx owletto@latest start +npx owletto@latest start --port 8787 ``` Default behavior: @@ -198,8 +198,8 @@ If `DATABASE_URL` is set, the CLI starts the server against external Postgres in Configures supported local agent clients to use an Owletto MCP endpoint. ```bash -npx owletto init -npx owletto init --url http://localhost:8787/mcp +npx owletto@latest init +npx owletto@latest init --url http://localhost:8787/mcp ``` The init flow: @@ -219,7 +219,7 @@ Use this after `owletto start` for local development, or point it at a hosted Ow Authenticates the CLI against an Owletto MCP server using OAuth. ```bash -npx owletto login https://owletto.com/mcp +npx owletto@latest login https://owletto.com/mcp ``` By default, the CLI opens a browser and completes an authorization-code flow with a local callback server. @@ -233,7 +233,7 @@ Useful flags: Example for a headless box: ```bash -npx owletto login https://owletto.com/mcp --device +npx owletto@latest login https://owletto.com/mcp --device ``` ### `owletto token` @@ -241,8 +241,8 @@ npx owletto login https://owletto.com/mcp --device Prints a usable access token from the saved session. ```bash -npx owletto token -npx owletto token --raw +npx owletto@latest token +npx owletto@latest token --raw ``` This is mainly useful for integrations or plugin setups that need a token command. @@ -252,7 +252,7 @@ This is mainly useful for integrations or plugin setups that need a token comman Checks that the saved session is valid and that the CLI can reach the MCP endpoint. ```bash -npx owletto health +npx owletto@latest health ``` ## Organization Selection @@ -260,8 +260,8 @@ npx owletto health Owletto sessions are organization-aware. After login, set the default org if needed: ```bash -npx owletto org current -npx owletto org set my-org +npx owletto@latest org current +npx owletto@latest org set my-org ``` You can also override organization and server selection per command: @@ -279,16 +279,16 @@ Lists tools when called without arguments, or executes a tool when given a tool ```bash # List available tools -npx owletto run +npx owletto@latest run # Search memory -npx owletto run search_knowledge '{"query":"Acme"}' +npx owletto@latest run search_knowledge '{"query":"Acme"}' # Read saved content -npx owletto run read_knowledge '{"query":"customer preferences"}' +npx owletto@latest run read_knowledge '{"query":"customer preferences"}' # Save new knowledge -npx owletto run save_knowledge '{"content":"Prefers weekly summaries","semantic_type":"preference","metadata":{}}' +npx owletto@latest run save_knowledge '{"content":"Prefers weekly summaries","semantic_type":"preference","metadata":{}}' ``` This is the most direct way to inspect or test Owletto memory behavior outside an agent runtime. @@ -300,7 +300,7 @@ This is the most direct way to inspect or test Owletto memory behavior outside a Checks local prerequisites such as Node, Docker, and current server reachability. ```bash -npx owletto doctor +npx owletto@latest doctor ``` ### `owletto browser-auth` diff --git a/release-please-config.json b/release-please-config.json index 0226929ff..5e6e32e65 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -9,7 +9,6 @@ "prerelease": false, "separate-pull-requests": false, "changelog-path": "CHANGELOG.md", - "pull-request-title-pattern": "chore${scope}: release${component} ${version}", "packages": { ".": { "package-name": "@lobu/gateway", diff --git a/scripts/setup-dev.sh b/scripts/setup-dev.sh index d23bab74a..7b5c6703b 100755 --- a/scripts/setup-dev.sh +++ b/scripts/setup-dev.sh @@ -12,7 +12,7 @@ make build-packages echo "Setup complete!" echo "" echo "If you haven't configured .env yet, run:" -echo " npx @lobu/cli" +echo " npx @lobu/cli@latest" echo "" echo "To start development:" echo " redis-server &"