@zibby/skills 0.2.22 → 0.2.24

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.
Files changed (90) hide show
  1. package/dist/browser.js +3 -10
  2. package/dist/code-scan.d.ts +1 -1
  3. package/dist/index.js +81 -88
  4. package/dist/jira.d.ts +75 -9
  5. package/dist/jira.js +4 -4
  6. package/dist/package.json +1 -1
  7. package/dist/report.d.ts +51 -276
  8. package/dist/trackers/index.js +12 -12
  9. package/dist/trackers/jira-adapter.js +11 -11
  10. package/package.json +1 -1
  11. package/docs/analysis.md +0 -109
  12. package/docs/apps/agent-ops.md +0 -130
  13. package/docs/apps/auth.md +0 -158
  14. package/docs/apps/deploy.md +0 -207
  15. package/docs/apps/goal-mode.md +0 -175
  16. package/docs/apps/index.md +0 -149
  17. package/docs/apps/managing.md +0 -121
  18. package/docs/cli-reference.md +0 -494
  19. package/docs/cloning-repositories.md +0 -285
  20. package/docs/cloud/bundles.md +0 -92
  21. package/docs/cloud/dedicated-egress.md +0 -140
  22. package/docs/cloud/editing-prompts.md +0 -79
  23. package/docs/cloud/env-vars.md +0 -144
  24. package/docs/cloud/limits.md +0 -81
  25. package/docs/cloud/logs.md +0 -104
  26. package/docs/cloud/triggering.md +0 -128
  27. package/docs/concepts/agents.md +0 -112
  28. package/docs/concepts/designing-agents.md +0 -247
  29. package/docs/concepts/graph.md +0 -83
  30. package/docs/concepts/sessions.md +0 -70
  31. package/docs/concepts/skills.md +0 -86
  32. package/docs/concepts/state.md +0 -106
  33. package/docs/concepts/sub-graphs.md +0 -227
  34. package/docs/custom-workflows.md +0 -358
  35. package/docs/get-started/deploy.md +0 -75
  36. package/docs/get-started/install.md +0 -60
  37. package/docs/get-started/run-locally.md +0 -94
  38. package/docs/get-started/trigger-and-logs.md +0 -90
  39. package/docs/get-started/use-from-agents.md +0 -153
  40. package/docs/get-started/your-first-workflow.md +0 -69
  41. package/docs/getting-started.md +0 -108
  42. package/docs/installation.md +0 -127
  43. package/docs/integrations/github.md +0 -73
  44. package/docs/integrations/gitlab.md +0 -43
  45. package/docs/integrations/jira.md +0 -71
  46. package/docs/integrations/lark.md +0 -41
  47. package/docs/integrations/linear.md +0 -43
  48. package/docs/integrations/notion.md +0 -33
  49. package/docs/integrations/plane.md +0 -46
  50. package/docs/integrations/sentry.md +0 -42
  51. package/docs/integrations/slack.md +0 -33
  52. package/docs/intro.md +0 -86
  53. package/docs/legacy/test-automation.md +0 -111
  54. package/docs/packages/agent-workflow.md +0 -88
  55. package/docs/packages/cli.md +0 -73
  56. package/docs/packages/core.md +0 -72
  57. package/docs/packages/mcp-browser.md +0 -110
  58. package/docs/packages/mcp-cli.md +0 -176
  59. package/docs/packages/memory.md +0 -223
  60. package/docs/packages/skills.md +0 -218
  61. package/docs/packages/ui-memory.md +0 -245
  62. package/docs/recipes/bug-autofix.md +0 -85
  63. package/docs/recipes/github-ai-scout.md +0 -61
  64. package/docs/recipes/index.md +0 -68
  65. package/docs/recipes/pipeline-supervisor.md +0 -57
  66. package/docs/recipes/sentry-triage.md +0 -93
  67. package/docs/recipes/test.md +0 -190
  68. package/docs/reviewing-results.md +0 -114
  69. package/docs/running-tests.md +0 -134
  70. package/docs/self-host/backup-restore.md +0 -53
  71. package/docs/self-host/custom-sidecars.md +0 -136
  72. package/docs/self-host/index.md +0 -75
  73. package/docs/self-host/storage.md +0 -50
  74. package/docs/self-host/troubleshooting.md +0 -48
  75. package/docs/self-host/upgrade.md +0 -81
  76. package/docs/skills/browser.md +0 -97
  77. package/docs/skills/chat-memory.md +0 -122
  78. package/docs/skills/core-tools.md +0 -80
  79. package/docs/skills/function-skill.md +0 -93
  80. package/docs/skills/github.md +0 -91
  81. package/docs/skills/index.md +0 -46
  82. package/docs/skills/jira.md +0 -99
  83. package/docs/skills/lark.md +0 -85
  84. package/docs/skills/memory.md +0 -92
  85. package/docs/skills/sentry.md +0 -80
  86. package/docs/skills/slack.md +0 -89
  87. package/docs/tests/memory.md +0 -131
  88. package/docs/triggering-workflows.md +0 -552
  89. package/docs/workflow-artifact-layout-evaluation.md +0 -119
  90. package/docs/workflow.md +0 -558
@@ -1,97 +0,0 @@
1
- ---
2
- sidebar_position: 1
3
- title: Browser
4
- ---
5
-
6
- # Browser skill
7
-
8
- Playwright-driven browser automation. Click, type, navigate, snapshot, record video. Used by `zibby test` and by any agent node that needs to drive a web UI.
9
-
10
- - **ID:** `browser`
11
- - **MCP server:** `playwright` (tools exposed as `mcp__playwright__*`)
12
-
13
- ## Tools provided
14
-
15
- The Playwright MCP server exposes the full Playwright tool surface. Common tools:
16
-
17
- | Tool | What it does |
18
- |---|---|
19
- | `browser_navigate` | Open a URL in the active tab |
20
- | `browser_click` | Click an element by stable id or selector |
21
- | `browser_type` | Type text into an input |
22
- | `browser_press_key` | Press a key (Enter, Tab, etc.) |
23
- | `browser_snapshot` | Accessibility snapshot of the current page (returns stable ids) |
24
- | `browser_take_screenshot` | PNG screenshot saved to the session output dir |
25
- | `browser_wait_for` | Wait for text, time, or selector |
26
- | `browser_evaluate` | Run JS in the page context |
27
- | `browser_fill_form` | Fill multiple fields in one call |
28
- | `browser_select_option` | Pick a `<select>` option |
29
- | `browser_hover` | Hover over an element |
30
- | `browser_drag` | Drag from one element to another |
31
- | `browser_tabs` | List, switch, or close tabs |
32
- | `browser_close` | Close the browser |
33
-
34
- Refer to `@zibby/mcp-browser` for the full list. All tools are gated by the `mcp__playwright__*` allowlist.
35
-
36
- ## Setup
37
-
38
- No setup needed beyond a working `@zibby/cli` install — the cloud runner image and the global CLI install both pull `@zibby/mcp-browser` automatically.
39
-
40
- For local dev outside the CLI, install it explicitly:
41
-
42
- ```bash
43
- npm install @zibby/mcp-browser
44
- ```
45
-
46
- Override the bin path with `MCP_BROWSER_PATH` if you need to point at a local checkout.
47
-
48
- ## Use in an agent
49
-
50
- ```js
51
- import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
52
- import { SKILLS } from '@zibby/skills';
53
-
54
- export class LoginCheck extends WorkflowAgent {
55
- buildGraph() {
56
- const graph = new WorkflowGraph();
57
- graph.addNode('login', {
58
- agent: 'claude',
59
- skills: [SKILLS.BROWSER],
60
- prompt: (state) => `Go to ${state.appUrl}, sign in as test@example.com / hunter2,
61
- then snapshot the dashboard and report whether the welcome banner is visible.`,
62
- });
63
- return graph;
64
- }
65
- }
66
- ```
67
-
68
- ### Config knobs
69
-
70
- Passed via the node's skill config or env:
71
-
72
- | Knob | Where | Effect |
73
- |---|---|---|
74
- | `headless: true` | per-skill config or `ZIBBY_HEADLESS=1` | Launch headless instead of headed |
75
- | `sessionPath` | passed by the runner | Output dir for videos + screenshots |
76
- | Viewport / video | fixed | 1280x720 |
77
-
78
- ## Output example
79
-
80
- `browser_snapshot` returns an accessibility tree with stable ids the agent can pass back to `browser_click`:
81
-
82
- ```json
83
- {
84
- "url": "https://app.example.com/dashboard",
85
- "title": "Dashboard",
86
- "snapshot": [
87
- { "id": "e7a1", "role": "button", "name": "New project" },
88
- { "id": "e7b2", "role": "link", "name": "Settings" }
89
- ]
90
- }
91
- ```
92
-
93
- ## Implementation notes
94
-
95
- Resolves to `@zibby/mcp-browser/dist/bin/mcp-browser-zibby.js` via `require.resolve`. There is no fallback to `@playwright/mcp` — the upstream Microsoft binary lacks stable IDs and event recording, and silently looks for Chrome instead of Chromium, which broke cloud runs. If the bin can't be resolved, `skill.resolve()` throws with installation instructions.
96
-
97
- The MCP server is spawned with `--isolated --save-video=1280x720 --viewport-size=1280x720 --output-dir=<sessionPath>`. Videos and screenshots land under the run's session directory and are uploaded with the rest of the artifacts.
@@ -1,122 +0,0 @@
1
- ---
2
- sidebar_position: 8
3
- title: Chat memory
4
- ---
5
-
6
- # Chat memory skill
7
-
8
- Persistent agent memory across sessions — facts, decisions, preferences, task history. **mem0-backed by default** (embedding-based semantic recall, persists across cloud tasks); falls back to the self-contained Dolt backend automatically when the embedding proxy isn't available, or set `dolt` explicitly.
9
-
10
- - **ID:** `chat-memory`
11
- - **Runs in-process** — no MCP spawn
12
-
13
- For test-run history (selectors, page models, prior runs) see [Memory](./memory.md).
14
-
15
- ## Tools provided
16
-
17
- | Tool | What it does |
18
- |---|---|
19
- | `memory_store` | Save a fact/decision/preference. Categories: `fact`, `decision`, `context`, `insight`, `preference`, `credential`, `url`, `error`, `workaround`. Tiers: `short` (24h), `mid` (default), `long` (permanent). Optional `memoryKey` for upserts. Optional `infer` (mem0 only — see [the `infer` toggle](#the-infer-toggle)) |
20
- | `memory_recall` | Search by `query`, `category`, `ticketKey`, or `tier`. Ranked by relevance × recency |
21
- | `memory_brief` | Compact briefing — recent sessions + top long/mid-tier memories. Call at conversation start |
22
- | `memory_end_session` | Save a session summary + key facts (semicolon-separated) for future recall |
23
- | `task_log` | Record a completed task (`test_run`/`generate`/`analysis`/`research`/`other`) with status |
24
- | `task_history` | Query past tasks by `ticketKey`, `type`, `status` |
25
-
26
- ## Setup
27
-
28
- **mem0 (default).** `zibby init` configures mem0 out of the box and writes the right deps (`mem0ai@npm:@zibby/mem0ai@^3.0.5` + `better-sqlite3`) into your project. In Zibby cloud runs the embedding/LLM calls are proxied and billed through the agent run — no OpenAI key of your own needed. For local runs, point it at any OpenAI-compatible endpoint:
29
-
30
- ```bash
31
- ZIBBY_MEM0_OPENAI_BASE_URL=https://api.openai.com/v1
32
- ZIBBY_MEM0_API_KEY=sk-...
33
- ZIBBY_MEM0_LLM_MODEL=gpt-4.1-mini
34
- ZIBBY_MEM0_EMBEDDER_MODEL=text-embedding-3-small
35
- ZIBBY_MEM0_EMBEDDING_DIMS=1536
36
- ```
37
-
38
- mem0 mode uses embedding search for `memory_store` / `memory_recall`; `memory_end_session`, `task_log`, and `task_history` still write to Dolt for cross-session continuity. mem0's SQLite vector store lives under `.zibby/memory/mem0/` and is carried across ephemeral cloud tasks by the tenant-scoped memory tarball sync.
39
-
40
- **Graceful degradation.** If the embedding proxy is unreachable (or a local run has no `ZIBBY_MEM0_API_KEY`), memory ops automatically fall back to the Dolt backend per-op rather than failing the run — you get structured memory instead of an error.
41
-
42
- **Dolt (self-contained, no embedding dependency).** Set `ZIBBY_MEMORY_BACKEND=dolt` (or `memory.backend: 'dolt'`, or `zibby init --memory-backend dolt`) to opt out of mem0 entirely. Install Dolt; the skill auto-creates `.zibby/memory/` on first use:
43
-
44
- ```bash
45
- brew install dolt
46
- ```
47
-
48
- ### The `infer` toggle
49
-
50
- mem0 can either store memories raw (embed-only, free) or run an LLM fact-extraction pass that distills and dedupes facts before storing (~7.7k tokens per call, costs money). This is the `infer` flag, and it **defaults to `false`** (embed-only).
51
-
52
- Resolution precedence (first match wins):
53
-
54
- 1. **Per-call tool arg** — pass `infer: true` to `memory_store`
55
- 2. **Env toggle** — `ZIBBY_MEM0_INFER=true`
56
- 3. **Project config** — `memory.infer: true` in `.zibby.config.mjs`
57
- 4. Default — `false` (embed-only, no LLM call)
58
-
59
- ```js
60
- // .zibby.config.mjs
61
- export default {
62
- memory: {
63
- backend: 'mem0',
64
- infer: false, // default — store raw + embed, never call the LLM
65
- },
66
- };
67
- ```
68
-
69
- Turn `infer` on when you want mem0 to consolidate noisy inputs into clean facts; leave it off (the default) for free, deterministic embed-and-store.
70
-
71
- ### Cloud persistence
72
-
73
- On Zibby Cloud, mem0 state **persists across Fargate tasks**. mem0's SQLite vector + history stores are rooted under the workspace's tenant-scoped `.zibby/memory/` tree, which is tarball-synced between executions — so a memory written in one run is recallable in the next, even though each run is a fresh, ephemeral container. mem0 user IDs are workspace-scoped (`workspace:<name>`, overridable via `ZIBBY_MEMORY_USER_ID`), keeping each project's memory isolated.
74
-
75
- ## Use in an agent
76
-
77
- ```js
78
- import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
79
- import { SKILLS } from '@zibby/skills';
80
-
81
- export class ChatAgent extends WorkflowAgent {
82
- buildGraph() {
83
- const graph = new WorkflowGraph();
84
- graph.addNode('respond', {
85
- agent: 'claude',
86
- skills: [SKILLS.CHAT_MEMORY, SKILLS.JIRA],
87
- prompt: (state) => `At the start of this turn, call memory_brief to load
88
- context. If you learn anything durable about the user's setup (e.g. their
89
- default Jira project), call memory_store with category="preference", tier="long".
90
- When the task is done, call memory_end_session with a 1-sentence summary.`,
91
- });
92
- return graph;
93
- }
94
- }
95
- ```
96
-
97
- The `memory_store` tool dedupes by normalized content — re-storing the same fact promotes its tier/relevance instead of inserting a duplicate. Long-tier rows decay 2%/session, mid-tier 10%, short-tier 30%, and short-tier rows older than 24h are deleted on next `memory_brief`.
98
-
99
- ## Output example
100
-
101
- `memory_brief`:
102
-
103
- ```json
104
- {
105
- "recentSessions": [
106
- { "session_id": "session_a1b2", "summary": "Reviewed SCRUM-123, added tests", "tickets": "SCRUM-123" }
107
- ],
108
- "topMemories": [
109
- { "category": "preference", "tier": "long", "content": "Default Jira board: SCRUM" },
110
- { "category": "fact", "tier": "mid", "content": "Auth login page is at /auth/login" }
111
- ],
112
- "taskStats": [
113
- { "type": "test_run", "status": "passed", "cnt": 14 }
114
- ]
115
- }
116
- ```
117
-
118
- ## Implementation notes
119
-
120
- `resolve()` returns `null` — this skill never spawns an MCP server. Tool calls are dispatched in-process via `handleToolCall(name, args, context)`, where `context.options.workspace` controls the Dolt directory.
121
-
122
- The skill also implements `buildPromptContext(context, args)`, which the strategy calls at node start. It runs `memory_brief` internally and returns a markdown-formatted "Memory Context" block that gets prepended to the system prompt — so the model sees recent sessions and durable facts on every turn without needing an explicit tool call. The same call returns `debugPreview` for transcript logging.
@@ -1,80 +0,0 @@
1
- ---
2
- sidebar_position: 9
3
- title: Core tools
4
- ---
5
-
6
- # Core tools skill
7
-
8
- Baseline local capabilities — file read/write, directory listing, shell execution, URL opening, async wait. The equivalent of what Cursor or Claude Code gets natively.
9
-
10
- - **ID:** `core-tools`
11
- - **Runs in-process** — no MCP spawn
12
-
13
- Most Claude/Cursor/Codex nodes get these tools by default from their agent strategy — you usually don't need to opt in explicitly. Add it to the `skills` array only if you're running a node where the strategy hasn't already wired them up (e.g. some custom strategies).
14
-
15
- ## Tools provided
16
-
17
- | Tool | What it does |
18
- |---|---|
19
- | `read_file` | Read a UTF-8 file. Max 256 KB; larger files return an error |
20
- | `write_file` | Write content to a file, creating parent directories as needed |
21
- | `list_directory` | List entries in a directory; directories suffixed with `/` |
22
- | `run_command` | `execSync` a shell command. 30s timeout, 64 KB stdout cap, captures stderr |
23
- | `open_url` | Open a URL in the default browser (uses `open`/`start`/`xdg-open`). Rejects non-http(s) URLs |
24
- | `wait` | Sleep for N seconds (1–300). Respects `context.options.signal` for cancellation |
25
-
26
- ## Setup
27
-
28
- None. The skill has no env keys, no auth, no external dependencies.
29
-
30
- ## Use in an agent
31
-
32
- ```js
33
- import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
34
- import { SKILLS } from '@zibby/skills';
35
-
36
- export class RepoInspector extends WorkflowAgent {
37
- buildGraph() {
38
- const graph = new WorkflowGraph();
39
- graph.addNode('inspect', {
40
- agent: 'claude',
41
- skills: [SKILLS.CORE_TOOLS],
42
- prompt: (state) => `cd into ${state.repoPath}. List the top-level directory,
43
- then read package.json and report the dependency graph at one level deep.`,
44
- });
45
- return graph;
46
- }
47
- }
48
- ```
49
-
50
- All paths are resolved against `context.options.workspace` (the node's working directory) — relative paths are safe to pass.
51
-
52
- ## Output example
53
-
54
- `list_directory` returns a newline-separated string:
55
-
56
- ```
57
- package.json
58
- node_modules/
59
- src/
60
- README.md
61
- ```
62
-
63
- `run_command`:
64
-
65
- ```
66
- on main
67
- nothing to commit, working tree clean
68
- ```
69
-
70
- `open_url`:
71
-
72
- ```json
73
- { "ok": true, "opened": "https://zibby.dev" }
74
- ```
75
-
76
- ## Implementation notes
77
-
78
- `resolve()` returns `null` — there is no MCP server. The strategy dispatches tool calls in-process via `handleToolCall(name, args, context)`. `wait` is the only async handler and polls the abort signal every 500 ms so the run can cancel mid-sleep.
79
-
80
- `run_command` shells out with `execSync` and captures stdout. Long-running commands hit the 30s timeout — for builds or test runs use the dedicated `runner` or `test-runner` skills instead.
@@ -1,93 +0,0 @@
1
- ---
2
- sidebar_position: 10
3
- title: Function skill
4
- ---
5
-
6
- # Function skill
7
-
8
- Author a custom skill as a single async function. No MCP server to write, no spawn config, no glue — just a `handler({ args })` that returns a JSON-serializable result. Zibby auto-bridges it through MCP at runtime so any Claude/Cursor/Codex node can call it.
9
-
10
- For wrapping a full external MCP server, use the same `skill()` factory with a `resolve()` instead of a `handler` — see the MCP skill example at the bottom.
11
-
12
- ## API
13
-
14
- ```js
15
- import { skill } from '@zibby/skills';
16
-
17
- export const myTool = skill('my_tool', {
18
- description: 'One-line description shown to the model',
19
- input: {
20
- foo: 'string',
21
- bar: { type: 'number', description: 'Optional knob', required: false },
22
- },
23
- handler: async ({ foo, bar = 0 }) => {
24
- return { result: foo.repeat(bar) };
25
- },
26
- });
27
- ```
28
-
29
- | Field | Type | Notes |
30
- |---|---|---|
31
- | `description` | `string` | Shown to the LLM as the tool description |
32
- | `input` | `Record<string, string \| { type, description?, required? }>` | Shorthand schema. String values mean `{ type: <string>, required: true }` |
33
- | `handler` | `async (args) => any` | Return value is `JSON.stringify`'d back to the model |
34
-
35
- Calling `skill()` both creates and **registers** the skill in the global registry, so just importing the module is enough to make it available.
36
-
37
- ## Use in an agent
38
-
39
- Once registered, reference by id:
40
-
41
- ```js
42
- import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
43
- import './skills/my-tool.js'; // import for the side effect
44
-
45
- graph.addNode('process', {
46
- agent: 'claude',
47
- skills: ['my_tool'],
48
- prompt: (state) => `Call my_tool with foo="hello", bar=3 and report what you got back.`,
49
- });
50
- ```
51
-
52
- The tool surfaces to the model as `my_tool` (and to MCP-aware strategies as `mcp__my_tool__my_tool`).
53
-
54
- ## Output example
55
-
56
- For the example above:
57
-
58
- ```json
59
- { "result": "hellohellohello" }
60
- ```
61
-
62
- If `handler` throws, the error message is returned to the model as the tool result so it can recover or retry.
63
-
64
- ## Wrapping an external MCP server
65
-
66
- Same factory, different shape — provide `resolve()` instead of `handler`:
67
-
68
- ```js
69
- import { skill } from '@zibby/skills';
70
-
71
- export const linear = skill('linear', {
72
- description: 'Linear issue tracker',
73
- serverName: 'linear',
74
- allowedTools: ['mcp__linear__*'],
75
- envKeys: ['LINEAR_API_KEY'],
76
- resolve() {
77
- if (!process.env.LINEAR_API_KEY) return null;
78
- return {
79
- command: 'npx',
80
- args: ['-y', '@anthropic/linear-mcp-server'],
81
- env: { LINEAR_API_KEY: process.env.LINEAR_API_KEY },
82
- };
83
- },
84
- });
85
- ```
86
-
87
- Return `null` from `resolve()` to silently disable the skill when its prerequisites aren't met (no env var, no bin, etc.) — the node still runs, the model just doesn't see those tools.
88
-
89
- ## Implementation notes
90
-
91
- Function skills route through a tiny stdio MCP bridge (`@zibby/core/function-bridge.js`) that the strategy spawns. The bridge imports your skill module, runs the handler in-process, and proxies the result back via MCP — so the agent SDK sees a real MCP server even though you didn't write one.
92
-
93
- When you ship a skill in a published package, derive bin/module paths from `import.meta.url`, **not** `require.resolve('@your/pkg/...')`. esbuild emits a `dist/package.json` that makes package self-references resolve to `dist/...` instead of the package root, which silently breaks the lookup. Every Zibby-shipped skill (sentry, lark, jira) uses the `import.meta.url` pattern for this reason.
@@ -1,91 +0,0 @@
1
- ---
2
- sidebar_position: 4
3
- title: GitHub
4
- ---
5
-
6
- # GitHub skill
7
-
8
- Read repos, list and inspect PRs, search code and issues, read files, clone repositories, create issues.
9
-
10
- - **ID:** `github`
11
- - **MCP server:** `github` (tools exposed as `mcp__github__*`)
12
- - **Underlying server:** `npx @modelcontextprotocol/server-github@latest`
13
-
14
- ## Tools provided
15
-
16
- | Tool | What it does |
17
- |---|---|
18
- | `github_list_repos` | List accessible repos (private + public). Defaults to all installation repos when no `owner` given |
19
- | `github_search_repos` | Substring search across accessible repo names and descriptions |
20
- | `github_get_user` | Authenticated user (or GitHub App installation owner) |
21
- | `github_list_orgs` | Organizations with accessible repos |
22
- | `github_clone` | `git clone` a repo locally, defaulting to `~/zibby-repos/<repo>`; accepts `destination` |
23
- | `github_get_file` | Read a file's content (or list a directory) at a `ref` |
24
- | `github_list_commits` | Recent commits on a branch, optionally filtered by `path` |
25
- | `github_get_commit` | Full commit details + per-file patches |
26
- | `github_search_issues` | GitHub search-syntax across issues and PRs |
27
- | `github_search_code` | Code search, optionally scoped to `repo` or `language` |
28
- | `github_get_pr` | PR metadata (title, branch, stats) |
29
- | `github_get_pr_diff` | Unified diff (capped at 15 KB) |
30
- | `github_list_pr_files` | Files changed in a PR with per-file patches |
31
- | `github_list_pr_comments` | Review + issue comments combined, sorted ascending |
32
- | `github_create_issue` | Create a new issue |
33
-
34
- ## Setup
35
-
36
- Two options:
37
-
38
- **GitHub App (recommended).** In **Settings → Integrations**, click **Connect GitHub**, install the Zibby GitHub App on the orgs/repos you want, and authorize. Tokens auto-refresh; you don't manage them. See the [GitHub Integration page](../integrations/github.md) for the full app permissions list.
39
-
40
- **Personal access token.** Set `GITHUB_TOKEN` in your agent's env (locally) or via **Cloud → Env vars** (cloud runs). Scope `repo` for private read+write, `public_repo` for public-only.
41
-
42
- The skill reads `envKeys: ['GITHUB_TOKEN']` and the official `@modelcontextprotocol/server-github` consumes it directly.
43
-
44
- ## Use in an agent
45
-
46
- ```js
47
- import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
48
- import { SKILLS } from '@zibby/skills';
49
-
50
- export class PrSummarizer extends WorkflowAgent {
51
- buildGraph() {
52
- const graph = new WorkflowGraph();
53
- graph.addNode('summarize_pr', {
54
- agent: 'claude',
55
- skills: [SKILLS.GITHUB],
56
- prompt: (state) => `Get PR #${state.prNumber} on ${state.owner}/${state.repo}.
57
- Read the diff with github_get_pr_diff and list reviewer comments with
58
- github_list_pr_comments. Produce a 4-bullet summary of what changed and any
59
- open review threads.`,
60
- });
61
- return graph;
62
- }
63
- }
64
- ```
65
-
66
- ## Output example
67
-
68
- `github_get_pr`:
69
-
70
- ```json
71
- {
72
- "number": 142,
73
- "title": "fix(auth): refresh token on 401",
74
- "state": "open",
75
- "merged": false,
76
- "user": "alice",
77
- "branch": "fix-auth-refresh",
78
- "base": "main",
79
- "changedFiles": 3,
80
- "additions": 47,
81
- "deletions": 12,
82
- "url": "https://github.com/acme/app/pull/142",
83
- "labels": ["bug", "auth"]
84
- }
85
- ```
86
-
87
- ## Implementation notes
88
-
89
- `skill.resolve()` returns `{ command: 'npx', args: ['-y', '@modelcontextprotocol/server-github@latest'], env }` — the official upstream MCP server. The skill's `handleToolCall` implementation (with GitHub App-aware behavior for `/user` and `/user/orgs`) is used by the `assistant` agent strategy and by any caller that bypasses MCP.
90
-
91
- For GitHub App installation tokens, `/user` and `/user/orgs` are server-to-server-forbidden; the in-process handlers transparently fall back to `/installation/repositories` and derive the owner/orgs from there.
@@ -1,46 +0,0 @@
1
- ---
2
- sidebar_position: 0
3
- title: Skills reference
4
- ---
5
-
6
- # Skills reference
7
-
8
- Per-skill reference for everything shipped in `@zibby/skills`. For the mental model and how to attach skills to nodes, see [Concepts → Skills](../concepts/skills.md). For the package-level API (`skill()` factory, `registerSkill`, middleware), see [`@zibby/skills`](../packages/skills.md).
9
-
10
- ## Built-in skills
11
-
12
- | Skill | ID | Tools | Setup |
13
- |---|---|---|---|
14
- | [Browser](./browser.md) | `browser` | Playwright (navigate, click, type, snapshot, video) | None — bundled with `@zibby/cli` |
15
- | [Sentry](./sentry.md) | `sentry` | `sentry_list_projects`, `sentry_list_issues`, `sentry_get_issue` | OAuth (PKCE) |
16
- | [Lark](./lark.md) | `lark` | `lark_send_message`, `lark_reply`, `lark_list_chats`, `lark_get_chat_history` | App ID + App Secret |
17
- | [GitHub](./github.md) | `github` | Repos, PRs, issues, commits, file reads, clone | GitHub App or `GITHUB_TOKEN` |
18
- | GitLab | `gitlab` | Repos, MRs, issues, pipelines (self-hosted or SaaS) | `GITLAB_TOKEN` (+ base URL) |
19
- | [Slack](./slack.md) | `slack` | Channels, post/reply, reactions, history, users | Bot token + team ID |
20
- | [Jira](./jira.md) | `jira` | Issues, sprints, comments, transitions | Atlassian OAuth |
21
- | Linear | `linear` | `linear_list_issues`, `linear_get_issue`, `linear_add_comment`, `linear_update_state`, `linear_list_teams/states/labels` | `LINEAR_API_KEY` |
22
- | Plane | `plane` | Projects, work items, cycles, modules, epics, comments (official MCP) | `PLANE_API_KEY` (+ `PLANE_WORKSPACE_SLUG`, `PLANE_BASE_URL`) |
23
- | Notion | n/a | Not an attachable MCP skill — a [connectable integration](../integrations/notion.md). Agents publish a `report` object to Notion blocks (`reportToNotionBlocks`), e.g. the `notify-notion` template | OAuth (dashboard) / `NOTION_API_KEY` (SDK) |
24
- | [Memory](./memory.md) | `memory` | Test history, selectors, page model (Dolt) | `zibby init --mem` |
25
- | [Chat memory](./chat-memory.md) | `chat-memory` | `memory_store`, `memory_recall`, `memory_brief`, `task_log`, `task_history` | None (Dolt or mem0) |
26
- | [Core tools](./core-tools.md) | `core-tools` | `read_file`, `write_file`, `list_directory`, `run_command`, `open_url`, `wait` | None |
27
- | [Function skill](./function-skill.md) | n/a | Author-defined | Define with `skill()` |
28
-
29
- ## Attaching a skill
30
-
31
- ```js
32
- import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
33
- import { SKILLS } from '@zibby/skills';
34
-
35
- graph.addNode('triage', {
36
- agent: 'claude',
37
- skills: [SKILLS.SENTRY, SKILLS.SLACK],
38
- prompt: (state) => `Find unresolved Sentry issues and post a summary to #alerts.`,
39
- });
40
- ```
41
-
42
- ## MCP architecture in one paragraph
43
-
44
- When a node executes, the strategy reads its `skills` array. For each skill it calls `skill.resolve(...)`, which returns either a stdio spawn spec (`{ command, args, env }`) or `null` for in-process skills. The Agent SDK launches each spec as an MCP server and exposes its tools to the LLM under the prefix `mcp__<serverName>__<tool>`. The skill's `promptFragment` is appended to the system prompt so the model knows the tools exist. In-process skills (`core-tools`, `chat-memory`, function skills with a `handler`) skip the spawn and the strategy dispatches tool calls directly via `handleToolCall`.
45
-
46
- See [`@zibby/skills`](../packages/skills.md) for the full skill object shape and how to author your own.
@@ -1,99 +0,0 @@
1
- ---
2
- sidebar_position: 6
3
- title: Jira
4
- ---
5
-
6
- # Jira skill
7
-
8
- Read/write Jira Cloud — search issues, manage sprints, transition tickets, manage comments. Backed by a custom Zibby MCP server (`@zibby/mcp-jira`).
9
-
10
- - **ID:** `jira`
11
- - **MCP server:** `jira` (tools exposed as `mcp__jira__*`)
12
-
13
- ## Tools provided
14
-
15
- | Tool | What it does |
16
- |---|---|
17
- | `jira_list_projects` | List all accessible Jira projects |
18
- | `jira_list_statuses` | Status catalog. Pass `projectKey` for the project workflow's statuses; omit for the global catalog |
19
- | `jira_list_issue_types` | Issue types allowed for issue creation in a `projectKey` |
20
- | `jira_search` | JQL search. Auto-bounds queries with `created >= -365d` if no `ORDER BY` is given |
21
- | `jira_get_issue` | Full details for an `issueKey` |
22
- | `jira_create_issue` | Create an issue. Supports `moveToSprint` + `sprintId`/`sprintName`/`target` for atomic "create and place in sprint" |
23
- | `jira_list_sprints` | Sprints for a project, optionally filtered by `state` (`active`/`closed`/`future`) |
24
- | `jira_get_sprint_issues` | Issues in a sprint, optionally filtered by status — returns status breakdown |
25
- | `jira_move_issue_to_sprint` | Move an issue to a sprint by id, name, or target (`current`/`active`/`latest`) with membership verification |
26
- | `jira_get_comments` | Comments on an issue (newest first), ADF flattened to markdown |
27
- | `jira_add_comment` | Add a plain-text comment |
28
- | `jira_edit_issue` | PUT arbitrary fields (summary, labels, priority, story points, custom fields) |
29
- | `jira_transition_issue` | Move to another status by `transitionId` or `toStatus`; lists available transitions when neither is provided |
30
-
31
- ## Setup
32
-
33
- Jira uses Atlassian OAuth 2.0 (3LO).
34
-
35
- 1. In the Zibby dashboard, **Settings → Integrations → Connect Jira**.
36
- 2. Authorize Zibby for your Atlassian site.
37
- 3. In **Settings → Jira Configuration**, pick the project/space to use as the default.
38
-
39
- See the [Jira Integration page](../integrations/jira.md) for the user-facing setup. Tokens auto-refresh; reconnect from the same panel if refresh fails.
40
-
41
- Under the hood the bin reads `ATLASSIAN_ACCESS_TOKEN` + `ATLASSIAN_CLOUD_ID` (and optional `ATLASSIAN_INSTANCE_URL`), which the backend supplies through `resolveIntegrationToken('jira')`.
42
-
43
- ## Use in an agent
44
-
45
- ```js
46
- import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
47
- import { SKILLS } from '@zibby/skills';
48
-
49
- export class StandupBot extends WorkflowAgent {
50
- buildGraph() {
51
- const graph = new WorkflowGraph();
52
- graph.addNode('standup', {
53
- agent: 'claude',
54
- skills: [SKILLS.JIRA],
55
- prompt: (state) => `List active sprints for project ${state.projectKey}.
56
- For the current sprint, call jira_get_sprint_issues to get a status breakdown,
57
- then produce a standup-style summary grouped by assignee.`,
58
- });
59
- return graph;
60
- }
61
- }
62
- ```
63
-
64
- ### Transitioning issues
65
-
66
- The prompt fragment instructs the model to call `jira_transition_issue({ issueKey, toStatus })` directly when the user gives an explicit target; only when ambiguous should it call without `transitionId`/`toStatus` to list options. Status matching is normalized (whitespace, punctuation, case), then alias-matched, then dice-coefficient fuzzy-matched at a 0.45 threshold with a 0.12 gap.
67
-
68
- ### Sprint membership
69
-
70
- To move an issue to a sprint, use `jira_move_issue_to_sprint` — it picks the right sprint (id/name/target), writes `customfield_10020`, then verifies membership via JQL and a second issue read before reporting success.
71
-
72
- ## Output example
73
-
74
- `jira_get_sprint_issues`:
75
-
76
- ```json
77
- {
78
- "count": 12,
79
- "total": 12,
80
- "statusCounts": { "To Do": 4, "In Progress": 5, "Done": 3 },
81
- "issues": [
82
- {
83
- "key": "SCRUM-123",
84
- "project": "SCRUM",
85
- "summary": "Refresh token on 401",
86
- "status": "In Progress",
87
- "assignee": "Alice",
88
- "priority": "High",
89
- "type": "Story"
90
- }
91
- ]
92
- }
93
- ```
94
-
95
- ## Implementation notes
96
-
97
- `resolve()` spawns `@zibby/mcp-jira` (`node @zibby/mcp-jira/index.js`) with the OAuth bearer token and cloud id in env. If the bin can't be resolved, `resolve()` returns `null` and the strategy falls back to in-process tool dispatch via `handleToolCall` (used by the `assistant` agent strategy).
98
-
99
- `jiraFetch` clears the integration-token cache and retries once on auth-looking errors — the token endpoint can return a malformed payload mid-rotation. ADF (Atlassian Document Format) bodies are flattened to markdown in `jira_get_comments` so the model sees readable text instead of nested JSON.