| # Contributing | ||
| ## Local development | ||
| ```bash | ||
| npm install | ||
| npm run lint | ||
| npm test | ||
| ``` | ||
| ## Principles | ||
| - Keep the CLI agent-first and JSON-first | ||
| - Keep private-surface assumptions explicit | ||
| - Prefer safe read paths before adding mutations | ||
| - Never commit live auth or raw browser captures |
| # Security | ||
| - Do not paste live Jobber cookies, session identifiers, account URLs with sensitive params, or exported browser artifacts into issues, PRs, or logs. | ||
| - Prefer `JOBBER_COOKIE_HEADER`, `jobber auth set-cookie-header --stdin`, or `jobber auth import-agent-browser`. | ||
| - Never pass secrets via CLI flags. | ||
| - Do not commit raw HAR files, browser traces, cookie dumps, or similar auth-bearing captures. | ||
| - Treat all private-surface Jobber responses as potentially sensitive until explicitly sanitized. |
| interface: | ||
| display_name: "Jobber" | ||
| short_description: "Inspect Jobber account context and GraphQL operations through the local jobber CLI." | ||
| icon_small: "./assets/icon-small.svg" | ||
| icon_large: "./assets/icon-large.svg" | ||
| brand_color: "#8A6724" | ||
| default_prompt: "Use $jobber to inspect Jobber through the local jobber CLI. Start with jobber doctor --json and jobber whoami --json, prefer read-only commands, and keep cookies out of logs." | ||
| policy: | ||
| allow_implicit_invocation: true |
| <svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256" role="img" aria-labelledby="title desc"> | ||
| <title id="title">Jobber adapter icon</title> | ||
| <desc id="desc">Neutral adapter-owned graphite and amber icon for a private-surface CLI adapter.</desc> | ||
| <rect x="24" y="24" width="208" height="208" rx="42" fill="#2F333A"/> | ||
| <rect x="44" y="54" width="168" height="118" rx="18" fill="none" stroke="#6F7885" stroke-width="10"/> | ||
| <path d="M76 91l30 30-30 30" fill="none" stroke="#F2B84B" stroke-width="16" stroke-linecap="round" stroke-linejoin="round"/> | ||
| <path d="M122 151h54" fill="none" stroke="#F7F1E3" stroke-width="16" stroke-linecap="round"/> | ||
| <circle cx="164" cy="78" r="12" fill="#F7F1E3"/> | ||
| <circle cx="190" cy="112" r="12" fill="#F2B84B"/> | ||
| <circle cx="155" cy="198" r="12" fill="#F2B84B"/> | ||
| <path d="M165 90l20 17" fill="none" stroke="#A0A7B2" stroke-width="8" stroke-linecap="round"/> | ||
| <path d="M181 121l-23 65" fill="none" stroke="#A0A7B2" stroke-width="8" stroke-linecap="round"/> | ||
| </svg> |
| <svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" role="img" aria-labelledby="title desc"> | ||
| <title id="title">Jobber adapter icon</title> | ||
| <desc id="desc">Neutral adapter-owned line icon showing a terminal prompt and routed nodes.</desc> | ||
| <rect x="6" y="6" width="52" height="52" rx="14" fill="#2F333A"/> | ||
| <path d="M20 24l8 8-8 8" fill="none" stroke="#F2B84B" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/> | ||
| <path d="M33 41h13" fill="none" stroke="#F7F1E3" stroke-width="5" stroke-linecap="round"/> | ||
| <circle cx="43" cy="20" r="4" fill="#F7F1E3"/> | ||
| <circle cx="49" cy="31" r="4" fill="#F2B84B"/> | ||
| <path d="M42 24l5 5" fill="none" stroke="#A0A7B2" stroke-width="3" stroke-linecap="round"/> | ||
| </svg> |
+6
-4
| { | ||
| "name": "jobber-cli", | ||
| "version": "0.1.2", | ||
| "version": "0.1.3", | ||
| "description": "Agent-first private-surface CLI for Jobber", | ||
@@ -23,6 +23,6 @@ "license": "MIT", | ||
| "docs", | ||
| "SKILL.md", | ||
| "skills", | ||
| "agents", | ||
| "README.md", | ||
| "CONTRIBUTING.md", | ||
| "SECURITY.md", | ||
| "LICENSE" | ||
@@ -43,6 +43,8 @@ ], | ||
| "lint:public-surface": "node scripts/public-surface-check.mjs", | ||
| "secret-sweep": "bash scripts/secret-sweep.sh", | ||
| "check:release": "npm run typecheck && npm test && npm run lint:public-surface && npm run secret-sweep", | ||
| "dev": "tsx src/cli.ts", | ||
| "generate:inventory": "node scripts/generate-inventory.mjs", | ||
| "test": "tsx --test", | ||
| "prepublishOnly": "npm run lint && npm run lint:public-surface && npm test", | ||
| "prepublishOnly": "npm run check:release", | ||
| "prepare": "npm run build" | ||
@@ -49,0 +51,0 @@ }, |
+9
-1
@@ -76,4 +76,12 @@ # jobber-cli | ||
| This repo includes both a root `SKILL.md` and a nested `skills/jobber/SKILL.md` so external installers and repo-based skill flows have an obvious entry point. | ||
| Install the canonical nested skill: | ||
| ```bash | ||
| npx -y skills add -g danielgwilson/jobber-cli --skill jobber | ||
| ``` | ||
| The skill lives at `skills/jobber/SKILL.md`. The npm package includes that | ||
| nested skill and its Codex metadata; it does not publish a duplicate root | ||
| `SKILL.md`. | ||
| ## Main Commands | ||
@@ -80,0 +88,0 @@ |
+75
-18
@@ -1,26 +0,83 @@ | ||
| # Jobber | ||
| --- | ||
| name: jobber | ||
| description: "Use this skill whenever you need to inspect or operate Jobber through the local jobber CLI. Covers auth checks, current user and account identity, discovered operation browsing, and raw GraphQL against Jobber's private web API." | ||
| --- | ||
| Use this skill whenever you need to inspect or operate Jobber through the local `jobber` CLI. | ||
| # Jobber CLI Skill | ||
| Typical uses: | ||
| Use this skill when you need to inspect or operate Jobber through the local | ||
| `jobber` CLI. | ||
| - inspect discovered Jobber operations | ||
| - run raw GraphQL queries against Jobber | ||
| - validate Jobber auth | ||
| - identify the current Jobber user and account | ||
| - bootstrap auth from a live `agent-browser` session | ||
| - prototype new Jobber workflows before adding typed commands | ||
| ## Command | ||
| Suggested workflow: | ||
| Important naming detail: | ||
| 1. `jobber doctor --json` | ||
| 2. `jobber whoami --json` | ||
| 3. `jobber operations list --search <term> --json` | ||
| 4. `jobber operations inspect <name> --json` | ||
| 5. `jobber graphql run --operation-name CurrentAccount --query 'query CurrentAccount { account { id name inTrial industry } }' --json` | ||
| - npm package name: `jobber-cli` | ||
| - CLI binary name: `jobber` | ||
| Notes: | ||
| Prefer an installed binary: | ||
| - This adapter is private-surface and fragile by definition. | ||
| ```bash | ||
| jobber --help | ||
| ``` | ||
| For one-off package use after publication: | ||
| ```bash | ||
| npx -y jobber-cli --help | ||
| ``` | ||
| For a source checkout: | ||
| ```bash | ||
| npm install | ||
| npm run build | ||
| node dist/cli.js --help | ||
| ``` | ||
| Do not guess alternate package names unless they are explicitly published later. | ||
| ## Safety Rules | ||
| - This is an unofficial private-surface adapter and is fragile by definition. | ||
| - Prefer read operations before mutations. | ||
| - If auth is missing, use `jobber auth import-agent-browser` while a logged-in Jobber browser session is open. | ||
| - Prefer `--json` for machine-readable output. | ||
| - Do not print, paste, store in repo, or commit Jobber cookie headers. | ||
| - Keep raw browser captures, traces, cookies, storage state, and full upstream | ||
| JSON exports out of the repo. | ||
| - `operations list` is a discovered inventory, not a guarantee that every | ||
| operation has a recovered query document. | ||
| - Use `graphql run` to prototype unsupported workflows before adding typed | ||
| commands. | ||
| ## First Checks | ||
| ```bash | ||
| jobber auth status --json | ||
| jobber doctor --json | ||
| jobber whoami --json | ||
| ``` | ||
| If auth is missing, import from a live logged-in `agent-browser` session or | ||
| attached browser on the same machine: | ||
| ```bash | ||
| jobber auth import-agent-browser | ||
| ``` | ||
| Manual cookie-header auth is supported, but avoid putting cookie values in | ||
| shell history, logs, or chat: | ||
| ```bash | ||
| printf '%s' "$JOBBER_COOKIE_HEADER" | jobber auth set-cookie-header --stdin | ||
| ``` | ||
| ## Common Reads | ||
| ```bash | ||
| jobber operations list --json | ||
| jobber operations list --search client --json | ||
| jobber operations inspect ClientDefaults --json | ||
| jobber graphql run --operation-name CurrentAccount --query 'query CurrentAccount { account { id name inTrial industry } }' --json | ||
| jobber graphql run --query-file ./query.graphql --variables-file ./vars.json --json | ||
| ``` |
| version: 1 | ||
| display_name: Jobber CLI | ||
| short_description: Private-surface Jobber operations through a local agent-first CLI | ||
| default_prompt: Use the jobber CLI to inspect discovered Jobber operations, validate auth, identify the current user and account, and run raw GraphQL against Jobber's private web API. Prefer read operations before mutations. |
-53
| --- | ||
| name: jobber | ||
| description: | | ||
| Use this skill whenever you need to inspect or operate Jobber through the local `jobber` CLI. | ||
| Typical uses include validating auth, identifying the current Jobber user/account, browsing discovered operations, | ||
| and running raw GraphQL against Jobber's private web API. | ||
| --- | ||
| # Jobber | ||
| Use this skill whenever you need to inspect or operate Jobber through the local `jobber` CLI. | ||
| Important naming detail: | ||
| - npm package name: `jobber-cli` | ||
| - CLI binary name: `jobber` | ||
| Resolution order: | ||
| 1. If `jobber` is already on `$PATH`, use it directly. | ||
| 2. Otherwise run the published package explicitly with `npx -y jobber-cli <args>`. | ||
| Do not guess alternate package names unless they are explicitly published later. | ||
| ## Default workflow | ||
| - If auth is missing, run `jobber auth import-agent-browser` | ||
| - Sanity check auth: `jobber doctor --json` | ||
| - Check current identity: `jobber whoami --json` | ||
| - Browse operation inventory: `jobber operations list --search client --json` | ||
| - Inspect one operation: `jobber operations inspect ClientDefaults --json` | ||
| - Run raw GraphQL when needed: `jobber graphql run --operation-name CurrentAccount --query 'query CurrentAccount { account { id name inTrial industry } }' --json` | ||
| ## Auth | ||
| Preferred from a live logged-in browser session: | ||
| - `jobber auth import-agent-browser` | ||
| Other supported paths: | ||
| - `printf '%s' "$JOBBER_COOKIE_HEADER" | jobber auth set-cookie-header --stdin` | ||
| - `JOBBER_COOKIE_HEADER=... jobber doctor --json` | ||
| Avoid pasting full cookie headers into logs or chat. | ||
| `jobber auth import-agent-browser` assumes a live authenticated `agent-browser` session or attached browser on the same machine. | ||
| ## Constraints | ||
| - This is a private-surface adapter and is therefore fragile by definition. | ||
| - Prefer read operations before mutations. | ||
| - `operations list` is a discovered inventory, not a guarantee that every operation has a recovered query document. | ||
| - Use `graphql run` to prototype unsupported workflows before adding typed commands. |
183600
1.23%17
21.43%105
8.25%