harborai 0.5.37 → 0.5.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,8 +2,8 @@
2
2
  export const SKILLS = [
3
3
  {
4
4
  name: "ai-grok",
5
- description: "Use Harbor to chat with xAI's Grok models. Chat completions with live web search grounding.",
6
- content: "---\nname: ai-grok\ndescription: Use Harbor to chat with xAI's Grok models. Chat completions with live web search grounding.\n---\n\nChat with xAI's Grok models through Harbor. Runs server-side on orbital — the `XAI_API_KEY` never leaves the server. The agent passes arguments via `harbor p.ai.grok <tool>`.\n\n## Tools\n\n| Tool | Description | Key Params |\n|------|-------------|------------|\n| `chat` | Chat completion with Grok | `--model`, `--messages`, `--search_parameters` |\n| `embeddings` | Generate text embeddings | `--model`, `--input` |\n| `models` | List available Grok models | — |\n\n## Examples\n\n```bash\nharbor p.ai.grok chat --model \"grok-3-mini\" --messages '[{\"role\":\"user\",\"content\":\"What happened in tech news today?\"}]' --search_parameters '{\"max_search_results\":5}'\nharbor p.ai.grok chat --model \"grok-3\" --messages '[{\"role\":\"user\",\"content\":\"Explain distributed consensus\"}]'\nharbor p.ai.grok embeddings --input \"Hello world\"\nharbor p.ai.grok models\n```\n\n## Parameters\n\n### chat\n- `--model` (string, required) — model ID (e.g. `grok-3`, `grok-3-mini`, `grok-4-fast`)\n- `--messages` (JSON array, required) — array of `{role, content}` message objects\n- `--tools` (JSON array) — tool definitions, use `[{\"type\":\"web_search\"}]` for live web search\n- `--search_parameters` (JSON object) — web search config: `{max_search_results, from_date, to_date, allowed_sources}`\n- `--max_tokens` (number) — maximum tokens in response\n- `--temperature` (number, 0-2) — sampling temperature\n- `--top_p` (number) — nucleus sampling\n- `--stream` (boolean) enable streaming\n\n### embeddings\n- `--model` (string, required, default: `embedding-beta`) — embedding model ID\n- `--input` (string, required) — text to embed\n\n### models\nNo parameters — lists all available Grok models.\n\n## Secrets\n\nOperator configures `XAI_API_KEY` — an API key from [x.ai](https://x.ai).\n\n## Notes\n\n- Use `--search_parameters` with `--tools '[{\"type\":\"web_search\"}]'` for grounded web search responses.\n- `models` tool returns the full list of available model IDs.\n- Grok models tend to be less filtered than other providers — useful for unbiased analysis.\n\n## Discovery\n\nRun `harbor plugins tools ai.grok` to see all available tools and parameters.\nRun `harbor plugins tools ai.grok --json` for machine-readable specs.\n",
5
+ description: "Use Harbor to chat with xAI's Grok models. Chat completions and live web search via the Responses API.",
6
+ content: "---\nname: ai-grok\ndescription: Use Harbor to chat with xAI's Grok models. Chat completions and live web search via the Responses API.\n---\n\nChat with xAI's Grok models through Harbor. Runs server-side on orbital — the `XAI_API_KEY` never leaves the server. The agent passes arguments via `harbor p.ai.grok <tool>`.\n\n## Tools\n\n| Tool | Description | Key Params |\n|------|-------------|------------|\n| `chat` | Chat completion with Grok | `--model`, `--messages` |\n| `search` | Web-grounded response with live search (Responses API) | `--model`, `--input` |\n| `embeddings` | Generate text embeddings | `--model`, `--input` |\n| `models` | List available Grok models | — |\n\n## Examples\n\n```bash\n# Plain chat\nharbor p.ai.grok chat --model \"grok-3-mini\" --messages '[{\"role\":\"user\",\"content\":\"Explain distributed consensus\"}]'\n\n# Live web search (use search, not chat)\nharbor p.ai.grok search --model \"grok-3-mini\" --input '[{\"role\":\"user\",\"content\":\"What happened in tech news today?\"}]'\n\n# Web search restricted to specific domains\nharbor p.ai.grok search --model \"grok-3-mini\" --input '[{\"role\":\"user\",\"content\":\"Latest releases\"}]' --tools '[{\"type\":\"web_search\",\"filters\":{\"allowed_domains\":[\"github.com\"]}}]'\n\nharbor p.ai.grok embeddings --input \"Hello world\"\nharbor p.ai.grok models\n```\n\n## Parameters\n\n### chat\n- `--model` (string, required) — model ID (e.g. `grok-3`, `grok-3-mini`)\n- `--messages` (JSON array, required) — array of `{role, content}` message objects\n- `--max_tokens` (number) — maximum tokens in response\n- `--temperature` (number, 0-2) — sampling temperature\n- `--top_p` (number) nucleus sampling\n- `--stream` (boolean) — enable streaming\n\n### search\nUses the xAI Responses API (`/v1/responses`). This is the correct endpoint for live web search — the Chat Completions endpoint no longer supports it.\n- `--model` (string, required) — model ID (e.g. `grok-3-mini`)\n- `--input` (JSON array, required) — array of `{role, content}` message objects\n- `--tools` (JSON array) — defaults to `[{\"type\":\"web_search\"}]`. Pass `[{\"type\":\"web_search\",\"filters\":{\"allowed_domains\":[...]}}]` to restrict to specific domains, or `excluded_domains` to block them.\n\n### embeddings\n- `--model` (string, required, default: `embedding-beta`) — embedding model ID\n- `--input` (string, required) — text to embed\n\n### models\nNo parameters — lists all available Grok models.\n\n## Secrets\n\nOperator configures `XAI_API_KEY` — an API key from [x.ai](https://x.ai).\n\n## Notes\n\n- **Use `search` for live web search, not `chat`.** The Chat Completions endpoint deprecated web search support. The `search` tool uses the Responses API which is the current standard.\n- `models` tool returns the full list of available model IDs.\n- Grok models tend to be less filtered than other providers — useful for unbiased analysis.\n\n## Discovery\n\nRun `harbor plugins tools ai.grok` to see all available tools and parameters.\nRun `harbor plugins tools ai.grok --json` for machine-readable specs.\n",
7
7
  },
8
8
  {
9
9
  name: "ai-openrouter",
@@ -103,7 +103,7 @@ export const SKILLS = [
103
103
  {
104
104
  name: "plugins-overview",
105
105
  description: "Use Harbor plugins to access tools and services. Covers search (exa, brave, serper, tavily), infra (modal, flyio, railway, vercel, do), services (gh, composio, linear), AI (openrouter, grok), and media (replicate, fal). Use when the agent needs to search, deploy, manage infrastructure, interact with GitHub/Linear, or generate media.",
106
- content: "---\nname: plugins-overview\ndescription: Use Harbor plugins to access tools and services. Covers search (exa, brave, serper, tavily), infra (modal, flyio, railway, vercel, do), services (gh, composio, linear), AI (openrouter, grok), and media (replicate, fal). Use when the agent needs to search, deploy, manage infrastructure, interact with GitHub/Linear, or generate media.\n---\n\n# Harbor Plugins\n\nHarbor is a control plane that lets operators grant AI agents access to tools and services through a lease-based permission system. Agents run `harbor` CLI commands; operators approve access through a web dashboard.\n\n## Quick reference\n\n| Slug | Name | Class | What it does |\n|------|------|-------|-------------|\n| `infra.modal` | Modal | CLI | Cloud compute for ML/data workloads |\n| `infra.flyio` | Fly.io | CLI | Deploy and manage apps globally |\n| `infra.railway` | Railway | CLI | Deploy infrastructure instantly |\n| `infra.vercel` | Vercel | CLI | Deploy frontend projects |\n| `infra.do` | DigitalOcean | CLI | Cloud infrastructure management |\n| `services.gh` | GitHub CLI | CLI | GitHub from the command line |\n| `services.composio` | Composio | CLI | Universal tool integration for agents |\n| `services.linear` | Linear | CLI | Issue tracking from the command line |\n| `search.exa` | Exa | API | AI-native semantic/keyword/deep search |\n| `search.brave` | Brave Search | API | Privacy-focused web search |\n| `search.serper` | Serper | API | Google Search results (web, images, news) |\n| `search.tavily` | Tavily | API | AI-optimized search with LLM answers |\n| `media.replicate` | Replicate | API | Generative media via prediction API |\n| `media.fal` | fal.ai | API | Image, video, and audio generation |\n| `ai.openrouter` | OpenRouter | API | Unified AI gateway, 300+ models |\n| `ai.grok` | Grok | API | xAI chat completions with live web search |\n\nShort aliases work too: `harbor p.modal` = `harbor p.infra.modal`.\n\n## Before using any plugin\n\n```bash\n# Check what's available and what has active leases\nharbor status\n\n# See who you're connected to\nharbor whoami\n```\n\nIf `harbor status` shows a plugin without a lease and you need it for your current task, request access. **Only request plugins you actually need right now — never bulk-request all available plugins.**\n\n```bash\nharbor request <slug> --reason \"I need <slug> to do X\"\n```\n\n## CLI binary install commands\n\nCLI plugins need the binary installed locally. API plugins don't — orbital executes them remotely.\n\n| Plugin | Binary | Install |\n|--------|--------|---------|\n| `infra.modal` | `modal` | `pip install modal` |\n| `infra.flyio` | `flyctl` | `brew install flyctl` or `curl -L https://fly.io/install.sh \\| sh` |\n| `infra.railway` | `railway` | `brew install railway` or `npm i -g @railway/cli` |\n| `infra.vercel` | `vercel` | `npm i -g vercel` |\n| `infra.do` | `doctl` | `brew install doctl` |\n| `services.gh` | `gh` | `brew install gh` or `conda install gh` |\n| `services.composio` | `composio` | `pip install composio-core` |\n| `services.linear` | `linear` | `brew install schpet/tap/linear` |\n\n---\n\n## Infra plugins\n\n### infra.modal — Modal\n\nCloud compute for ML, data pipelines, and GPU workloads.\n\n```bash\nharbor p.modal volume list\nharbor p.modal app list\nharbor p.modal run my_script.py\n```\n\nSecrets: `MODAL_TOKEN_ID`, `MODAL_TOKEN_SECRET`\n\n### infra.flyio — Fly.io\n\nDeploy and manage apps globally on Fly's edge network.\n\n```bash\nharbor p.flyio apps list\nharbor p.flyio status --app myapp\nharbor p.flyio deploy --app myapp\n```\n\nSecrets: `FLY_API_TOKEN`\n\n### infra.railway — Railway\n\nInstant infrastructure deployment.\n\n```bash\nharbor p.railway status\nharbor p.railway up\nharbor p.railway logs\n```\n\nSecrets: `RAILWAY_TOKEN`\n\n### infra.vercel — Vercel\n\nDeploy and manage frontend projects.\n\n```bash\nharbor p.vercel ls\nharbor p.vercel deploy --prod\nharbor p.vercel env ls\n```\n\nSecrets: `VERCEL_TOKEN`\n\n### infra.do — DigitalOcean\n\nCloud infrastructure management.\n\n```bash\nharbor p.do compute droplet list\nharbor p.do apps list\nharbor p.do databases list\n```\n\nSecrets: `DIGITALOCEAN_ACCESS_TOKEN`\n\n---\n\n## Services plugins\n\n### services.gh — GitHub CLI\n\nFull GitHub access from the command line.\n\n```bash\nharbor p.gh issue list --repo owner/repo\nharbor p.gh pr create --title \"Fix bug\" --body \"Details\"\nharbor p.gh run list --repo owner/repo\n```\n\nSecrets: `GITHUB_TOKEN`\n\n### services.composio — Composio\n\nUniversal tool integration for agents.\n\n```bash\nharbor p.composio apps\nharbor p.composio actions --app github\nharbor p.composio execute <action-name> --params '{\"key\":\"value\"}'\n```\n\nSecrets: `COMPOSIO_API_KEY`\n\n### services.linear — Linear\n\nIssue tracking from the command line.\n\n```bash\nharbor p.linear issue list\nharbor p.linear issue create --title \"Bug\" --team \"ENG\"\nharbor p.linear project list\n```\n\nSecrets: `LINEAR_API_KEY`\n\n---\n\n## Search plugins (API — no local install needed)\n\n### search.exa — Exa\n\nAI-native web search with semantic, keyword, and deep search modes.\n\n```bash\nharbor p.exa search --query \"latest AI news\"\nharbor p.exa findSimilar --url \"https://example.com\"\nharbor p.exa contents --ids '[\"https://example.com\"]'\nharbor p.exa answer --query \"What is RLHF?\"\n```\n\nSecrets: `EXA_API_KEY`\n\n### search.brave — Brave Search\n\nPrivacy-focused web search.\n\n```bash\nharbor p.brave search --q \"cloudflare workers tutorial\"\nharbor p.brave search --q \"AI news\" --freshness pd --count 5\n```\n\nSecrets: `BRAVE_API_KEY`\n\n### search.serper — Serper\n\nGoogle Search results — web, images, news.\n\n```bash\nharbor p.serper search --q \"kubernetes best practices\"\nharbor p.serper news --q \"AI regulation\" --num 5\nharbor p.serper images --q \"architecture diagram\"\n```\n\nSecrets: `SERPER_API_KEY`\n\n### search.tavily — Tavily\n\nAI-optimized search with ranked results and optional LLM answers.\n\n```bash\nharbor p.tavily search --query \"RAG best practices\" --search_depth advanced\nharbor p.tavily extract --urls '[\"https://example.com\"]'\n```\n\nSecrets: `TAVILY_API_KEY`\n\n---\n\n## Media plugins (API — no local install needed)\n\n### media.replicate — Replicate\n\nGenerative media via the Replicate prediction API.\n\n```bash\n# Create a prediction (async)\nharbor p.replicate create-prediction --version \"<sha>\" --input '{\"prompt\":\"a sunset\"}'\n\n# Poll for result\nharbor p.replicate get-prediction --prediction_id \"<id>\"\n\n# Use an official model (auto-resolves version)\nharbor p.replicate create-prediction-official --owner stability-ai --name sdxl --input '{\"prompt\":\"a sunset\"}'\n```\n\nSecrets: `REPLICATE_API_TOKEN`\n\n### media.fal — fal.ai\n\nImage, video, and audio generation.\n\n```bash\nharbor p.fal generate --model_id \"fal-ai/flux/schnell\" --prompt \"a cat in space\"\nharbor p.fal queue-submit --model_id \"fal-ai/flux-pro\" --prompt \"detailed landscape\" --image_size landscape_16_9\n```\n\nSecrets: `FAL_KEY`\n\n---\n\n## AI plugins (API — no local install needed)\n\n### ai.openrouter — OpenRouter\n\nUnified AI gateway with 300+ models from 60+ providers.\n\n```bash\nharbor p.openrouter chat --model \"anthropic/claude-sonnet-4\" --messages '[{\"role\":\"user\",\"content\":\"Hello\"}]'\nharbor p.openrouter models\n```\n\nSecrets: `OPENROUTER_API_KEY`\n\n### ai.grok — Grok (xAI)\n\nChat completions with optional live web search.\n\n```bash\nharbor p.grok chat --model \"grok-4-fast\" --messages '[{\"role\":\"user\",\"content\":\"What happened today?\"}]'\n\n# With live web search\nharbor p.grok chat --model \"grok-4-fast\" --messages '[{\"role\":\"user\",\"content\":\"Latest news\"}]' --tools '[{\"type\":\"web_search\"}]'\n```\n\nSecrets: `XAI_API_KEY`\n\n---\n\n## Error handling\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| `lease_required` | No active lease for this plugin | `harbor request <slug>` — ask operator to grant lease |\n| `lease_expired` | Lease timed out | `harbor request <slug>` to renew |\n| `plugin_setup_required` | Operator hasn't enabled the plugin | `harbor request <slug>` — operator must configure it in dashboard |\n| `Token missing` | Secrets not configured | `harbor msg \"Plugin <slug> needs API keys in secrets\"` |\n| `unauthorized` | Daemon token expired | `harbor setup status` to refresh |\n| Binary not found | CLI tool not installed | See install commands above |\n| Run killed mid-execution | Operator revoked the lease | Stop and report — this was intentional |\n\n## Operator communication\n\n```bash\n# Send context to the operator\nharbor msg \"Starting deployment — this will take ~2 minutes\"\n\n# Check for operator messages\nharbor messages\n\n# Request access to a plugin\nharbor request search.exa\n```\n\n## Multi-plugin workflows\n\nRequest only what you need, when you need it:\n\n```bash\nharbor status\nharbor request search.exa --reason \"Need to research topic for the user\"\n\n# Execute first step\nRESULTS=$(harbor p.exa search --query \"topic\")\n\n# Request next plugin only when you actually need it\nharbor request services.gh --reason \"Need to file research findings\"\nharbor p.gh issue create --title \"Research: topic\" --body \"$RESULTS\"\n```\n\n**Do not** loop through `harbor status` and request every available plugin.\n",
106
+ content: "---\nname: plugins-overview\ndescription: Use Harbor plugins to access tools and services. Covers search (exa, brave, serper, tavily), infra (modal, flyio, railway, vercel, do), services (gh, composio, linear), AI (openrouter, grok), and media (replicate, fal). Use when the agent needs to search, deploy, manage infrastructure, interact with GitHub/Linear, or generate media.\n---\n\n# Harbor Plugins\n\nHarbor is a control plane that lets operators grant AI agents access to tools and services through a lease-based permission system. Agents run `harbor` CLI commands; operators approve access through a web dashboard.\n\n## Quick reference\n\n| Slug | Name | Class | What it does |\n|------|------|-------|-------------|\n| `infra.modal` | Modal | CLI | Cloud compute for ML/data workloads |\n| `infra.flyio` | Fly.io | CLI | Deploy and manage apps globally |\n| `infra.railway` | Railway | CLI | Deploy infrastructure instantly |\n| `infra.vercel` | Vercel | CLI | Deploy frontend projects |\n| `infra.do` | DigitalOcean | CLI | Cloud infrastructure management |\n| `services.gh` | GitHub CLI | CLI | GitHub from the command line |\n| `services.composio` | Composio | CLI | Universal tool integration for agents |\n| `services.linear` | Linear | CLI | Issue tracking from the command line |\n| `search.exa` | Exa | API | AI-native semantic/keyword/deep search |\n| `search.brave` | Brave Search | API | Privacy-focused web search |\n| `search.serper` | Serper | API | Google Search results (web, images, news) |\n| `search.tavily` | Tavily | API | AI-optimized search with LLM answers |\n| `media.replicate` | Replicate | API | Generative media via prediction API |\n| `media.fal` | fal.ai | API | Image, video, and audio generation |\n| `ai.openrouter` | OpenRouter | API | Unified AI gateway, 300+ models |\n| `ai.grok` | Grok | API | xAI chat completions with live web search |\n\nShort aliases work too: `harbor p.modal` = `harbor p.infra.modal`.\n\n## Before using any plugin\n\n```bash\n# Check what's available and what has active leases\nharbor status\n\n# See who you're connected to\nharbor whoami\n```\n\nIf `harbor status` shows a plugin without a lease and you need it for your current task, request access. **Only request plugins you actually need right now — never bulk-request all available plugins.**\n\n```bash\nharbor request <slug> --reason \"I need <slug> to do X\"\n```\n\n## CLI binary install commands\n\nCLI plugins need the binary installed locally. API plugins don't — orbital executes them remotely.\n\n| Plugin | Binary | Install |\n|--------|--------|---------|\n| `infra.modal` | `modal` | `pip install modal` |\n| `infra.flyio` | `flyctl` | `brew install flyctl` or `curl -L https://fly.io/install.sh \\| sh` |\n| `infra.railway` | `railway` | `brew install railway` or `npm i -g @railway/cli` |\n| `infra.vercel` | `vercel` | `npm i -g vercel` |\n| `infra.do` | `doctl` | `brew install doctl` |\n| `services.gh` | `gh` | `brew install gh` or `conda install gh` |\n| `services.composio` | `composio` | `pip install composio-core` |\n| `services.linear` | `linear` | `brew install schpet/tap/linear` |\n\n---\n\n## Infra plugins\n\n### infra.modal — Modal\n\nCloud compute for ML, data pipelines, and GPU workloads.\n\n```bash\nharbor p.modal volume list\nharbor p.modal app list\nharbor p.modal run my_script.py\n```\n\nSecrets: `MODAL_TOKEN_ID`, `MODAL_TOKEN_SECRET`\n\n### infra.flyio — Fly.io\n\nDeploy and manage apps globally on Fly's edge network.\n\n```bash\nharbor p.flyio apps list\nharbor p.flyio status --app myapp\nharbor p.flyio deploy --app myapp\n```\n\nSecrets: `FLY_API_TOKEN`\n\n### infra.railway — Railway\n\nInstant infrastructure deployment.\n\n```bash\nharbor p.railway status\nharbor p.railway up\nharbor p.railway logs\n```\n\nSecrets: `RAILWAY_TOKEN`\n\n### infra.vercel — Vercel\n\nDeploy and manage frontend projects.\n\n```bash\nharbor p.vercel ls\nharbor p.vercel deploy --prod\nharbor p.vercel env ls\n```\n\nSecrets: `VERCEL_TOKEN`\n\n### infra.do — DigitalOcean\n\nCloud infrastructure management.\n\n```bash\nharbor p.do compute droplet list\nharbor p.do apps list\nharbor p.do databases list\n```\n\nSecrets: `DIGITALOCEAN_ACCESS_TOKEN`\n\n---\n\n## Services plugins\n\n### services.gh — GitHub CLI\n\nFull GitHub access from the command line.\n\n```bash\nharbor p.gh issue list --repo owner/repo\nharbor p.gh pr create --title \"Fix bug\" --body \"Details\"\nharbor p.gh run list --repo owner/repo\n```\n\nSecrets: `GITHUB_TOKEN`\n\n### services.composio — Composio\n\nUniversal tool integration for agents.\n\n```bash\nharbor p.composio apps\nharbor p.composio actions --app github\nharbor p.composio execute <action-name> --params '{\"key\":\"value\"}'\n```\n\nSecrets: `COMPOSIO_API_KEY`\n\n### services.linear — Linear\n\nIssue tracking from the command line.\n\n```bash\nharbor p.linear issue list\nharbor p.linear issue create --title \"Bug\" --team \"ENG\"\nharbor p.linear project list\n```\n\nSecrets: `LINEAR_API_KEY`\n\n---\n\n## Search plugins (API — no local install needed)\n\n### search.exa — Exa\n\nAI-native web search with semantic, keyword, and deep search modes.\n\n```bash\nharbor p.exa search --query \"latest AI news\"\nharbor p.exa findSimilar --url \"https://example.com\"\nharbor p.exa contents --ids '[\"https://example.com\"]'\nharbor p.exa answer --query \"What is RLHF?\"\n```\n\nSecrets: `EXA_API_KEY`\n\n### search.brave — Brave Search\n\nPrivacy-focused web search.\n\n```bash\nharbor p.brave search --q \"cloudflare workers tutorial\"\nharbor p.brave search --q \"AI news\" --freshness pd --count 5\n```\n\nSecrets: `BRAVE_API_KEY`\n\n### search.serper — Serper\n\nGoogle Search results — web, images, news.\n\n```bash\nharbor p.serper search --q \"kubernetes best practices\"\nharbor p.serper news --q \"AI regulation\" --num 5\nharbor p.serper images --q \"architecture diagram\"\n```\n\nSecrets: `SERPER_API_KEY`\n\n### search.tavily — Tavily\n\nAI-optimized search with ranked results and optional LLM answers.\n\n```bash\nharbor p.tavily search --query \"RAG best practices\" --search_depth advanced\nharbor p.tavily extract --urls '[\"https://example.com\"]'\n```\n\nSecrets: `TAVILY_API_KEY`\n\n---\n\n## Media plugins (API — no local install needed)\n\n### media.replicate — Replicate\n\nGenerative media via the Replicate prediction API.\n\n```bash\n# Create a prediction (async)\nharbor p.replicate create-prediction --version \"<sha>\" --input '{\"prompt\":\"a sunset\"}'\n\n# Poll for result\nharbor p.replicate get-prediction --prediction_id \"<id>\"\n\n# Use an official model (auto-resolves version)\nharbor p.replicate create-prediction-official --owner stability-ai --name sdxl --input '{\"prompt\":\"a sunset\"}'\n```\n\nSecrets: `REPLICATE_API_TOKEN`\n\n### media.fal — fal.ai\n\nImage, video, and audio generation.\n\n```bash\nharbor p.fal generate --model_id \"fal-ai/flux/schnell\" --prompt \"a cat in space\"\nharbor p.fal queue-submit --model_id \"fal-ai/flux-pro\" --prompt \"detailed landscape\" --image_size landscape_16_9\n```\n\nSecrets: `FAL_KEY`\n\n---\n\n## AI plugins (API — no local install needed)\n\n### ai.openrouter — OpenRouter\n\nUnified AI gateway with 300+ models from 60+ providers.\n\n```bash\nharbor p.openrouter chat --model \"anthropic/claude-sonnet-4\" --messages '[{\"role\":\"user\",\"content\":\"Hello\"}]'\nharbor p.openrouter models\n```\n\nSecrets: `OPENROUTER_API_KEY`\n\n### ai.grok — Grok (xAI)\n\nChat completions and live web search via the Responses API.\n\n```bash\n# Plain chat\nharbor p.grok chat --model \"grok-3-mini\" --messages '[{\"role\":\"user\",\"content\":\"Explain quantum computing\"}]'\n\n# Live web search (use search tool, not chat)\nharbor p.grok search --model \"grok-3-mini\" --input '[{\"role\":\"user\",\"content\":\"Latest news\"}]'\n```\n\nSecrets: `XAI_API_KEY`\n\n---\n\n## Error handling\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| `lease_required` | No active lease for this plugin | `harbor request <slug>` — ask operator to grant lease |\n| `lease_expired` | Lease timed out | `harbor request <slug>` to renew |\n| `plugin_setup_required` | Operator hasn't enabled the plugin | `harbor request <slug>` — operator must configure it in dashboard |\n| `Token missing` | Secrets not configured | `harbor msg \"Plugin <slug> needs API keys in secrets\"` |\n| `unauthorized` | Daemon token expired | `harbor setup status` to refresh |\n| Binary not found | CLI tool not installed | See install commands above |\n| Run killed mid-execution | Operator revoked the lease | Stop and report — this was intentional |\n\n## Operator communication\n\n```bash\n# Send context to the operator\nharbor msg \"Starting deployment — this will take ~2 minutes\"\n\n# Check for operator messages\nharbor messages\n\n# Request access to a plugin\nharbor request search.exa\n```\n\n## Multi-plugin workflows\n\nRequest only what you need, when you need it:\n\n```bash\nharbor status\nharbor request search.exa --reason \"Need to research topic for the user\"\n\n# Execute first step\nRESULTS=$(harbor p.exa search --query \"topic\")\n\n# Request next plugin only when you actually need it\nharbor request services.gh --reason \"Need to file research findings\"\nharbor p.gh issue create --title \"Research: topic\" --body \"$RESULTS\"\n```\n\n**Do not** loop through `harbor status` and request every available plugin.\n",
107
107
  },
108
108
  ];
109
109
  export const SKILL_MAP = new Map(SKILLS.map(s => [s.name, s]));
@@ -1 +1 @@
1
- {"version":3,"file":"skills-embedded.js","sourceRoot":"","sources":["../src/skills-embedded.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAI3E,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,6FAA6F;QAC1G,OAAO,EAAE,80EAA80E;KACx1E;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,gHAAgH;QAC7H,OAAO,EAAE,6/EAA6/E;KACvgF;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,yLAAyL;QACtM,OAAO,EAAE,guIAAguI;KAC1uI;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,4MAA4M;QACzN,OAAO,EAAE,g2IAAg2I;KAC12I;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,gOAAgO;QAC7O,OAAO,EAAE,gsIAAgsI;KAC1sI;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,sGAAsG;QACnH,OAAO,EAAE,y9DAAy9D;KACn+D;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,mGAAmG;QAChH,OAAO,EAAE,m3DAAm3D;KAC73D;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,iGAAiG;QAC9G,OAAO,EAAE,4+DAA4+D;KACt/D;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wFAAwF;QACrG,OAAO,EAAE,8qDAA8qD;KACxrD;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,4GAA4G;QACzH,OAAO,EAAE,k6DAAk6D;KAC56D;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,oGAAoG;QACjH,OAAO,EAAE,k2FAAk2F;KAC52F;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,sHAAsH;QACnI,OAAO,EAAE,ogEAAogE;KAC9gE;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,0GAA0G;QACvH,OAAO,EAAE,8gFAA8gF;KACxhF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,+FAA+F;QAC5G,OAAO,EAAE,wjDAAwjD;KAClkD;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,sHAAsH;QACnI,OAAO,EAAE,q7EAAq7E;KAC/7E;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,6GAA6G;QAC1H,OAAO,EAAE,w9DAAw9D;KACl+D;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,uHAAuH;QACpI,OAAO,EAAE,4kEAA4kE;KACtlE;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,6FAA6F;QAC1G,OAAO,EAAE,63DAA63D;KACv4D;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,mFAAmF;QAChG,OAAO,EAAE,gjEAAgjE;KAC1jE;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,iGAAiG;QAC9G,OAAO,EAAE,ylMAAylM;KACnmM;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,gVAAgV;QAC7V,OAAO,EAAE,6qSAA6qS;KACvrS;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"skills-embedded.js","sourceRoot":"","sources":["../src/skills-embedded.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAI3E,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,wGAAwG;QACrH,OAAO,EAAE,whGAAwhG;KACliG;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,gHAAgH;QAC7H,OAAO,EAAE,6/EAA6/E;KACvgF;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,yLAAyL;QACtM,OAAO,EAAE,guIAAguI;KAC1uI;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,4MAA4M;QACzN,OAAO,EAAE,g2IAAg2I;KAC12I;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,gOAAgO;QAC7O,OAAO,EAAE,gsIAAgsI;KAC1sI;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,sGAAsG;QACnH,OAAO,EAAE,y9DAAy9D;KACn+D;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,mGAAmG;QAChH,OAAO,EAAE,m3DAAm3D;KAC73D;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,iGAAiG;QAC9G,OAAO,EAAE,4+DAA4+D;KACt/D;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wFAAwF;QACrG,OAAO,EAAE,8qDAA8qD;KACxrD;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,4GAA4G;QACzH,OAAO,EAAE,k6DAAk6D;KAC56D;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,oGAAoG;QACjH,OAAO,EAAE,k2FAAk2F;KAC52F;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,sHAAsH;QACnI,OAAO,EAAE,ogEAAogE;KAC9gE;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,0GAA0G;QACvH,OAAO,EAAE,8gFAA8gF;KACxhF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,+FAA+F;QAC5G,OAAO,EAAE,wjDAAwjD;KAClkD;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,sHAAsH;QACnI,OAAO,EAAE,q7EAAq7E;KAC/7E;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,6GAA6G;QAC1H,OAAO,EAAE,w9DAAw9D;KACl+D;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,uHAAuH;QACpI,OAAO,EAAE,4kEAA4kE;KACtlE;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,6FAA6F;QAC1G,OAAO,EAAE,63DAA63D;KACv4D;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,mFAAmF;QAChG,OAAO,EAAE,gjEAAgjE;KAC1jE;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,iGAAiG;QAC9G,OAAO,EAAE,ylMAAylM;KACnmM;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,gVAAgV;QAC7V,OAAO,EAAE,4rSAA4rS;KACtsS;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harborai",
3
- "version": "0.5.37",
3
+ "version": "0.5.39",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "harbor": "dist/index.js"