@zibby/skills 0.1.31 → 0.1.33

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.
@@ -0,0 +1,33 @@
1
+ ---
2
+ sidebar_position: 7
3
+ title: Slack Integration
4
+ ---
5
+
6
+ # Slack Integration
7
+
8
+ Connect a Slack workspace so your agents can post messages, reply in threads, react, read history, and resolve users. Slack uses **OAuth (V2)** — one click, no token pasting.
9
+
10
+ ## How It Works
11
+
12
+ You authorize the Zibby Slack app against your workspace. Slack returns a bot token (`xoxb-...`) that Zibby stores encrypted, along with the team ID/name. The `slack` skill then exposes Slack's API to any node that declares it.
13
+
14
+ ## Connect Slack
15
+
16
+ 1. In the Zibby dashboard, go to **Settings → Integrations** and click **Connect** next to Slack
17
+ 2. You're redirected to Slack to authorize the Zibby app and pick a workspace
18
+ 3. Approve the requested scopes
19
+ 4. You're redirected back to Zibby — the card shows the connected team name
20
+
21
+ ## What Agents Can Do
22
+
23
+ Nodes that attach the [`slack` skill](../skills/slack.md) get tools to list channels, post and reply, react, read channel/thread history, and look up users (by email, search, usergroups). This powers routing in recipes like [Sentry triage](../recipes/sentry-triage.md), where the agent resolves an author email to a Slack user and DMs them.
24
+
25
+ ## Reference (SDK / CLI)
26
+
27
+ When running workflows directly, the connector reads the bot token and team ID from the environment.
28
+
29
+ ## Troubleshooting
30
+
31
+ **Message not delivered** — the bot must be invited to private channels before it can post there.
32
+
33
+ **User lookup returns nothing** — `slack_get_users` excludes bots and deactivated accounts; confirm the user is active in the workspace.
package/docs/intro.md CHANGED
@@ -7,7 +7,9 @@ pagination_next: get-started/install
7
7
 
8
8
  # Zibby
9
9
 
10
- **The cloud pipeline for Claude Code, Cursor, Codex, and Gemini.** Compose them into structured workflows with Zod-validated handoff between nodes. Vendor-neutral. JavaScript-first.
10
+ **The cloud platform for AI agents — built on Claude Code, Cursor, Codex, and Gemini.** Compose real coding-agent CLIs into structured agents with Zod-validated handoff between nodes, then deploy them to the cloud. Vendor-neutral. JavaScript-first.
11
+
12
+ > **"Agent" is the product noun** for a deployed automation. Under the hood, an agent is a *workflow* — a graph of agent-CLI calls — and the CLI / SDK / API still speak "workflow". The CLI command is `zibby agent` (`zibby workflow` still works as an alias).
11
13
 
12
14
  ```
13
15
  ┌──────────┐ ┌──────────┐ ┌──────────┐
@@ -27,22 +29,24 @@ graph
27
29
 
28
30
  ## Try it now
29
31
 
32
+ The CLI command is `zibby agent` (`zibby workflow` still works as an alias):
33
+
30
34
  ```bash
31
35
  npm install -g @zibby/cli
32
- zibby init # bare init (config + creds; no template)
33
- zibby workflow new my-pipeline # scaffold a custom workflow
34
- zibby workflow run my-pipeline # run locally (one-shot)
36
+ zibby init # bare init (config + creds; no template)
37
+ zibby agent new my-agent # scaffold a custom agent
38
+ zibby agent run my-agent # run locally (one-shot)
35
39
 
36
40
  zibby login
37
- zibby workflow deploy my-pipeline # ship to cloud
38
- zibby workflow trigger <uuid> # fire it
39
- zibby workflow logs <uuid> -t # tail logs
41
+ zibby agent deploy my-agent # ship to cloud
42
+ zibby agent trigger <uuid> # fire it
43
+ zibby agent logs <uuid> -t # tail logs
40
44
  ```
41
45
 
42
- Want a starter recipe instead of a blank slate? Use `-t`:
46
+ Want a ready-made agent instead of a blank slate? Browse the [Agent Marketplace](./recipes/) and use `-t`:
43
47
 
44
48
  ```bash
45
- zibby init -t browser-test-automation # scaffold the test recipe at init time
49
+ zibby init -t browser-test-automation # scaffold a marketplace template at init time
46
50
  zibby template list # see what's available
47
51
  zibby template add <name> # add a template later (overwrites = doubles as update)
48
52
  ```
@@ -61,14 +65,14 @@ zibby template add <name> # add a template later (overwrites =
61
65
 
62
66
  ## Two product surfaces
63
67
 
64
- | | **Workflows** | **Apps** |
68
+ | | **Agents** | **Apps** |
65
69
  |---|---|---|
66
70
  | Lifetime | Per trigger (seconds-minutes) | Long-lived |
67
71
  | Surface | Graph of agent CLI calls | A whole open-source application |
68
72
  | Billing | Per execution | Per minute, while running |
69
73
  | Best for | "When ticket lands, classify it" | "Host Grafana for the team" |
70
74
 
71
- Pick by how long the thing needs to run — see [Apps overview](./apps/) for the decision tree.
75
+ An **Agent** is a deployed automation (a workflow graph under the hood). An **App** is a hosted open-source application. Pick by how long the thing needs to run — see [Apps overview](./apps/) for the decision tree.
72
76
 
73
77
  ## How it compares
74
78
 
@@ -13,7 +13,7 @@ npm install @zibby/ui-memory
13
13
 
14
14
  Current version: **1.1.0**
15
15
 
16
- > Renamed from `@zibby/memory` to make the per-domain UI focus explicit. The chat-style memory backend (mem0) is dormant and not documented as a usable feature here.
16
+ > Renamed from `@zibby/memory` to make the per-domain UI focus explicit. This package is the **UI test-memory** store (Dolt-backed, per-domain). For chat-style agent memory facts, decisions, task history — see the [Chat memory skill](../skills/chat-memory.md), which defaults to a **mem0** semantic backend (with automatic fallback to Dolt) and can be pinned to Dolt explicitly.
17
17
 
18
18
  ## Why memory
19
19
 
@@ -0,0 +1,85 @@
1
+ ---
2
+ sidebar_position: 4
3
+ title: Bug-autofix agent
4
+ ---
5
+
6
+ # `bug-autofix` — ticket → fix PR → tracker writeback
7
+
8
+ The flagship orchestrator agent. It polls a tracker for new bugs, classifies each one, opens a fix PR for the autofixable ones, and writes the result back to the tracker — chaining three reusable building-block agents via **sub-graph dispatch**.
9
+
10
+ ```
11
+ poll (this graph)
12
+ ↓ found a ticket?
13
+ triage → sub-graph: ticket-triage → { severity, shouldAutofix, summary }
14
+ ↓ severity ≥ AUTOFIX_MIN_SEVERITY AND shouldAutofix AND repo configured?
15
+ ├─ yes → code_fix → sub-graph: code-fix → { pr_url, branch }
16
+ │ ↓
17
+ └─ no ───────────────────────────────────────────┐
18
+
19
+ writeback → sub-graph: tracker-writeback (runs on BOTH branches)
20
+
21
+ END
22
+ ```
23
+
24
+ High-severity, concrete, autofixable bugs get a fix PR opened and the Jira ticket moved to *In Review*. Everything else (noise, vague, too-big, below threshold, or no repo configured) is triaged and a human is notified — no PR.
25
+
26
+ ## The three building-block agents
27
+
28
+ `bug-autofix` is an orchestrator: each step is a separate, independently deployable agent it dispatches as a sub-graph. Deploy all four in the same project.
29
+
30
+ | Step | Building block | Input | Output |
31
+ |---|---|---|---|
32
+ | `triage` | `ticket-triage` | `{ ticket }` | severity (`CRITICAL…NOISE`), `shouldAutofix`, summary |
33
+ | `code_fix` | `code-fix` | `{ ticket, repo }` | `{ pr_url, branch }` — clones, fixes with an inline test-gate, opens a PR |
34
+ | `writeback` | `tracker-writeback` | `{ ticket, pr_url?, branch?, result }` | transitions the issue, comments the PR link, posts to Slack/Lark |
35
+
36
+ Each block is usable on its own — `ticket-triage` is a fine standalone classifier; `code-fix` is a standalone clone→fix→PR agent.
37
+
38
+ ## Sub-graph dispatch
39
+
40
+ A child step is declared with `{ workflow }` on the node:
41
+
42
+ ```js
43
+ graph.addNode('triage', {
44
+ workflow: 'ticket-triage', // child deploy slug
45
+ input: (state) => ({ ticket: state.poll.ticket }),
46
+ output: 'classify', // dot-path on the child's final state
47
+ });
48
+ ```
49
+
50
+ The engine spawns the child as a **separate execution** (its own run row + Fargate task, or in-process when runtime tags match), links it to the parent for the Activity-tab tree and cancellation cascade, polls until terminal, and extracts `output` back into the parent state under the node name.
51
+
52
+ ## Trigger
53
+
54
+ Cron poll (default) or per-ticket webhook. Each run processes ONE ticket; the next tick/webhook handles the next.
55
+
56
+ ```json
57
+ { "jql": "issuetype = Bug AND statusCategory != Done ORDER BY updated DESC" } // cron
58
+ { "ticketKey": "PROJ-123" } // webhook
59
+ ```
60
+
61
+ ## Config (ENV tab)
62
+
63
+ | Var | Meaning |
64
+ |---|---|
65
+ | `REPO_URL` | Repo the fix targets. Unset → no autofix, notify-only. |
66
+ | `REPO_NAME` | Short repo name (default: derived from `REPO_URL`). |
67
+ | `REPO_BRANCH` | Base branch (default `main`). |
68
+ | `AUTOFIX_MIN_SEVERITY` | Routing floor for code-fix (default `MEDIUM`). |
69
+
70
+ Plus the children's own config: Jira connected (triage/poll/writeback), GitHub connected (code-fix), and `SLACK_CHANNEL` / `LARK_RECEIVE_ID` (writeback).
71
+
72
+ ## Scope (v1)
73
+
74
+ - **In:** poll → triage → (autofix?) → code-fix → writeback, end-to-end to "PR opened + Jira written back".
75
+ - **Out:** deploy / verify / rollback; an auto re-dispatch loop; in-engine approval. The open PR is the human gate.
76
+ - **Tracker seam:** Jira is implemented; GitHub / Linear are extension points in the child templates.
77
+
78
+ ## Deploy
79
+
80
+ ```bash
81
+ zibby agent templates # browse the marketplace (zibby workflow templates still works)
82
+ zibby agent new bug-autofix -t bug-autofix # scaffold the orchestrator
83
+ # ...also scaffold + deploy ticket-triage, code-fix, tracker-writeback in the same project
84
+ zibby agent deploy bug-autofix
85
+ ```
@@ -0,0 +1,61 @@
1
+ ---
2
+ sidebar_position: 5
3
+ title: GitHub AI scout
4
+ ---
5
+
6
+ # `github-ai-scout` — daily AI-project radar
7
+
8
+ A daily scout agent that finds **new/trending AI projects on GitHub**, scores them against **your** rubric with an LLM, and posts a shortlist to Slack for a human to review. It proposes — it never stars, forks, or adds anything.
9
+
10
+ ```
11
+ scan (this graph) → GitHub search REST API: your query + created:> + stars:>=
12
+
13
+ score (LLM) → rank + filter candidates against your rubric → shortlist
14
+
15
+ digest (this graph) → render a report-object → sub-graph: notify-slack
16
+
17
+ END
18
+ ```
19
+
20
+ Everything that defines *what* it scouts is a deploy-time input — the search query, the recency/star thresholds, and the scoring rubric. Point it at a different topic and a different rubric and it scouts that domain instead.
21
+
22
+ ## Inputs
23
+
24
+ | Input | Default | What it does |
25
+ |---|---|---|
26
+ | `query` | `topic:ai topic:llm topic:agents topic:rag` | GitHub search query, WITHOUT date/stars filters (scan appends those). |
27
+ | `daysBack` | `30` | Only repos created within this many days. |
28
+ | `minStars` | `30` | Minimum stars. |
29
+ | `maxCandidates` | `30` | How many repos to fetch (max 100). |
30
+ | `shortlistSize` | `8` | How many to surface in Slack. |
31
+ | `rubric` | generic quality rubric | Plain-English scoring instruction — describe *your* taste. |
32
+ | `excludeRepos` | `[]` | `owner/repo` names to skip — dedup against repos you already track. |
33
+ | `slackChannel` | **required** | Channel id (`C012345`) or `#name` where the shortlist lands. |
34
+
35
+ ## GitHub auth (optional)
36
+
37
+ The scan works **unauthenticated** for public search. To raise the rate limit, set a `GITHUB_TOKEN` env var on the project — the scan sends it as a Bearer token. No scopes needed; public read is enough.
38
+
39
+ ## Slack setup
40
+
41
+ The digest dispatches to the **notify-slack** building-block agent (in-process sub-graph), which renders the shortlist as a native Block-Kit card. Deploy `notify-slack` in the same project, connect Slack, and set `slackChannel`.
42
+
43
+ ## Trigger
44
+
45
+ Cron — typically **daily**. Each run is a fresh scan over the trailing `daysBack` window; use `excludeRepos` to keep the shortlist to NEW finds.
46
+
47
+ ```json
48
+ { "slackChannel": "#ai-radar" }
49
+ ```
50
+
51
+ ## What it does NOT do
52
+
53
+ It **proposes a shortlist for human review — never auto-adds.** No starring, no forking, no writing anywhere except the Slack post. A person decides what to do with each find.
54
+
55
+ ## Deploy
56
+
57
+ ```bash
58
+ zibby agent templates # browse the marketplace
59
+ zibby agent new github-ai-scout -t github-ai-scout # scaffold (also deploy notify-slack)
60
+ zibby agent deploy github-ai-scout
61
+ ```
@@ -1,63 +1,68 @@
1
1
  ---
2
2
  sidebar_position: 1
3
- title: Recipes overview
3
+ title: Agent Marketplace
4
4
  ---
5
5
 
6
- # Built-in workflow recipes
6
+ # Agent Marketplace
7
7
 
8
- Zibby ships with a few **vertical slice workflows** — production-ready pipelines you can run today, demonstrating what the platform does. Each recipe is a real Zibby workflow under the hood, eating its own dog food.
8
+ Zibby ships a set of **ready-made agents** — production-ready automations you can deploy today. Each one is a real Zibby agent (a workflow graph under the hood), eating its own dog food. Browse them, deploy with one command, and tune them to your project.
9
+
10
+ > **"Agent" is the product noun** for a deployed automation. The CLI / SDK / API still speak "workflow" — the CLI command is `zibby agent` (`zibby workflow` still works as an alias), the package is `@zibby/agent-workflow`.
9
11
 
10
12
  ```
11
- ┌─────────────────────┐
12
- ┌──────────────────►│ zibby workflow new │ ◄── Build your own
13
- │ │ zibby workflow ... │
14
- └─────────────────────┘
13
+ ┌──────────────────┐
14
+ ┌──────────────────►│ zibby agent new │ ◄── Build your own
15
+ │ │ zibby agent ... │
16
+ └──────────────────┘
15
17
  │ ▲
16
18
  │ │ uses the same primitives
17
19
  │ │
18
- ┌─────────────────────┐
19
- Recipes built ──►│ zibby test │ ◄── Browser testing
20
- on top of the zibby analyze │ ◄── Code analysis
21
- same platformzibby video │ ◄── Test playback
22
- zibby generate │ ◄── Spec generation
23
- └─────────────────────┘
20
+ ┌──────────────────────┐
21
+ Marketplace ────►│ bug-autofix │ ◄── Ticket → fix PR → writeback
22
+ agents built github-ai-scout │ ◄── Daily AI-project radar
23
+ on top of thepipeline-supervisor │ ◄── Zibby managing Zibby
24
+ same platform sentry-triage │ ◄── Incident routing
25
+ │ zibby test │ ◄── Browser testing
26
+ │ └──────────────────────┘
24
27
  ```
25
28
 
26
- You don't have to use the recipes. You can build whatever pipeline you want with `zibby workflow new`. The recipes just save you from writing the obvious starter graphs for common cases.
29
+ You don't have to use the marketplace. You can build whatever agent you want with `zibby agent new`. The marketplace just saves you from writing the obvious starter graphs for common cases.
27
30
 
28
- ## Available recipes
31
+ ## Available agents
29
32
 
30
- | Recipe | What it does | Best for |
33
+ | Agent | What it does | Best for |
31
34
  |---|---|---|
35
+ | [Bug-autofix](./bug-autofix) | Polls a tracker, triages each bug, opens a fix PR for autofixable ones, writes the result back. Chains three reusable building-block agents (`ticket-triage` → `code-fix` → `tracker-writeback`). | End-to-end bug SDLC, automated remediation |
36
+ | [GitHub AI scout](./github-ai-scout) | Daily scan of new/trending AI projects on GitHub, LLM-scored against your rubric, shortlist posted to Slack | Tracking a fast-moving space without manual triage |
37
+ | [Pipeline supervisor](./pipeline-supervisor) | Watches the project's *other* agents, flags failing/slow ones, posts an improvement proposal to Slack/Lark | Zibby managing Zibby — agent fleet health |
38
+ | [Sentry triage](./sentry-triage) | Hourly: fetch unresolved Sentry issues, classify by severity, route via Slack/Lark (author DM + usergroup mention) | Automated incident routing without a human triager |
32
39
  | [`zibby test`](./test) | Drives a browser via Cursor or Claude, runs assertions, generates a Playwright script + verification video | E2E test generation from plain-English specs |
33
- | [Sentry Triage](./sentry-triage) | Hourly: fetch unresolved Sentry issues, classify by severity, route via Slack/Lark — author DM + usergroup mention | Automated incident routing without a human triager |
34
- | `zibby analyze` | Reads a Jira/Linear ticket, walks the codebase, produces an implementation plan | Pre-implementation planning, ticket triage |
35
- | `zibby generate` | Generates test specs from a ticket + codebase | Backfilling test coverage on legacy projects |
36
- | `zibby video` | Re-records or organizes verification videos for an existing test | Producing demos, regenerating after code changes |
37
40
 
38
- ## Why recipes matter
41
+ Plus reusable **building-block agents** that the orchestrators compose via sub-graph dispatch — `ticket-triage`, `code-fix`, `tracker-writeback`, `notify-slack`, `notify-lark`, `notify-notion`. Each is independently deployable and usable on its own.
42
+
43
+ ## Why a marketplace
39
44
 
40
- Three reasons we ship vertical workflows alongside the platform:
45
+ Three reasons we ship ready-made agents alongside the platform:
41
46
 
42
- 1. **Proof of concept** — every recipe IS a Zibby workflow. If `zibby test` works, the platform works. You can see the actual graph definition and adapt it.
43
- 2. **Faster onboarding** — you don't need to design a full graph on day one. Run a recipe, see the output, then build your own.
44
- 3. **Demonstrates multi-vendor** — the test recipe runs across Cursor / Claude / Codex / Gemini. Pick the agent that gives you the best results for your use case; the recipe doesn't care.
47
+ 1. **Proof of concept** — every marketplace agent IS a Zibby agent. If `bug-autofix` works, the platform works. You can see the actual graph definition and adapt it.
48
+ 2. **Faster onboarding** — you don't need to design a full graph on day one. Deploy an agent, see the output, then build your own.
49
+ 3. **Composable** — the orchestrators (`bug-autofix`) are built from smaller building-block agents dispatched as sub-graphs, so you can reuse the pieces in your own agents.
45
50
 
46
- ## Building your own recipe
51
+ ## Building your own agent
47
52
 
48
- If you have a workflow you'd want shipped as a built-in:
53
+ If you have an agent you'd want shipped as a built-in:
49
54
 
50
55
  ```bash
51
- zibby workflow new my-recipe # scaffold
56
+ zibby agent new my-agent # scaffold (zibby workflow new still works)
52
57
  # ... build it out ...
53
- zibby workflow run my-recipe # test locally
54
- zibby workflow deploy my-recipe # ship to your cloud account
58
+ zibby agent run my-agent # test locally
59
+ zibby agent deploy my-agent # ship to your cloud account
55
60
  ```
56
61
 
57
- If it's broadly useful, we may pull it into the official recipes set. Open an issue or PR.
62
+ If it's broadly useful, we may pull it into the official marketplace. Open an issue or PR.
58
63
 
59
64
  ## Next
60
65
 
61
- - **[`zibby test` recipe](./test)** — the most-used recipe, walked through end-to-end
62
- - **[Build your own workflow](../get-started/your-first-workflow)** — scaffold and customize
63
- - **[Concepts: graph](../concepts/graph)** — the primitives every recipe is built on
66
+ - **[Bug-autofix agent](./bug-autofix)** — the flagship orchestrator, walked through end-to-end
67
+ - **[Build your own agent](../get-started/your-first-workflow)** — scaffold and customize
68
+ - **[Concepts: graph](../concepts/graph)** — the primitives every agent is built on
@@ -0,0 +1,57 @@
1
+ ---
2
+ sidebar_position: 6
3
+ title: Pipeline supervisor
4
+ ---
5
+
6
+ # `pipeline-supervisor` — Zibby managing Zibby
7
+
8
+ A scheduled supervisor agent that watches the project's *other* agents, finds the ones that are failing or slow, and posts a human-reviewable improvement proposal to Slack or Lark.
9
+
10
+ v1 is strictly **READ → PROPOSE → NOTIFY**. It never edits another agent's graph — that's the safe starting point. The auto-PATCH step is a deliberate TODO, not implemented.
11
+
12
+ ```
13
+ scan_pipelines (deterministic + Zibby REST API, PAT-authed)
14
+ → propose_improvements (LLM — one proposal per flagged pipeline)
15
+ → notify (LLM + SKILLS.CHAT_NOTIFY — one review card)
16
+ ```
17
+
18
+ If `scan_pipelines` flags nothing, the graph short-circuits straight to `notify` (which posts/skips without an LLM call on the proposer).
19
+
20
+ ## How it reads other agents
21
+
22
+ A direct authed `GET /executions?projectId=<id>&limit=200` against the Zibby REST API (the same route the dashboard and remote MCP server use), carrying a **user personal access token** in `Authorization: Bearer`.
23
+
24
+ It must be a USER PAT (`zby_pat_…`), **not** the Fargate-injected `PROJECT_API_TOKEN`: every cross-pipeline read route requires a `userId` from the authorizer, and a project token carries none — so it 401s.
25
+
26
+ ## Config (ENV tab)
27
+
28
+ Required:
29
+
30
+ - `ZIBBY_PAT` — user personal access token the supervisor reads executions with.
31
+ - `SLACK_CHANNEL` **or** `LARK_RECEIVE_ID` — where the review card goes.
32
+
33
+ Optional:
34
+
35
+ - `SUPERVISOR_PROJECT_ID` — project to supervise (defaults to the running project).
36
+ - `SLACK_MENTIONS` / `LARK_MENTIONS` — JSON array of mentions on the card.
37
+
38
+ ## Input (per-run dials)
39
+
40
+ | Field | Default | Meaning |
41
+ |---|---|---|
42
+ | `lookbackHours` | 24 | Hours of execution history to scan |
43
+ | `minFailRate` | 0.4 | Flag a pipeline failing ≥ this fraction of recent runs |
44
+ | `targetWorkflowTypes` | — | Optional name filter (case-insensitive substring) |
45
+ | `maxPipelines` | 25 | Cap on distinct pipelines analyzed per run |
46
+
47
+ ## Trigger
48
+
49
+ Cron — typically daily or hourly, depending on how active the supervised project is.
50
+
51
+ ## Deploy
52
+
53
+ ```bash
54
+ zibby agent templates # browse the marketplace
55
+ zibby agent new pipeline-supervisor -t pipeline-supervisor # scaffold
56
+ zibby agent deploy pipeline-supervisor
57
+ ```
@@ -5,7 +5,7 @@ title: Chat memory
5
5
 
6
6
  # Chat memory skill
7
7
 
8
- Persistent agent memory across sessions — facts, decisions, preferences, task history. Dolt-backed by default; pluggable to mem0 for embedding-based recall.
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
9
 
10
10
  - **ID:** `chat-memory`
11
11
  - **Runs in-process** — no MCP spawn
@@ -16,7 +16,7 @@ For test-run history (selectors, page models, prior runs) see [Memory](./memory.
16
16
 
17
17
  | Tool | What it does |
18
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 |
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
20
  | `memory_recall` | Search by `query`, `category`, `ticketKey`, or `tier`. Ranked by relevance × recency |
21
21
  | `memory_brief` | Compact briefing — recent sessions + top long/mid-tier memories. Call at conversation start |
22
22
  | `memory_end_session` | Save a session summary + key facts (semicolon-separated) for future recall |
@@ -25,13 +25,7 @@ For test-run history (selectors, page models, prior runs) see [Memory](./memory.
25
25
 
26
26
  ## Setup
27
27
 
28
- **Dolt (default).** Install Dolt; the skill auto-creates `.zibby/memory/` on first use.
29
-
30
- ```bash
31
- brew install dolt
32
- ```
33
-
34
- **mem0 (optional).** Set `ZIBBY_MEMORY_BACKEND=mem0` (or `memory.backend: 'mem0'` in `.zibby.config.mjs`) and `npm install mem0ai` in your workspace. Configure with:
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:
35
29
 
36
30
  ```bash
37
31
  ZIBBY_MEM0_OPENAI_BASE_URL=https://api.openai.com/v1
@@ -41,7 +35,42 @@ ZIBBY_MEM0_EMBEDDER_MODEL=text-embedding-3-small
41
35
  ZIBBY_MEM0_EMBEDDING_DIMS=1536
42
36
  ```
43
37
 
44
- mem0 mode skips Dolt session/task tables and relies on embedding search; `memory_end_session`, `task_log`, and `task_history` still write to Dolt for cross-session continuity.
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.
45
74
 
46
75
  ## Use in a workflow
47
76
 
@@ -15,8 +15,12 @@ Per-skill reference for everything shipped in `@zibby/skills`. For the mental mo
15
15
  | [Sentry](./sentry.md) | `sentry` | `sentry_list_projects`, `sentry_list_issues`, `sentry_get_issue` | OAuth (PKCE) |
16
16
  | [Lark](./lark.md) | `lark` | `lark_send_message`, `lark_reply`, `lark_list_chats`, `lark_get_chat_history` | App ID + App Secret |
17
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) |
18
19
  | [Slack](./slack.md) | `slack` | Channels, post/reply, reactions, history, users | Bot token + team ID |
19
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). Workflows publish a `report` object to Notion blocks (`reportToNotionBlocks`), e.g. the `notify-notion` template | OAuth (dashboard) / `NOTION_API_KEY` (SDK) |
20
24
  | [Memory](./memory.md) | `memory` | Test history, selectors, page model (Dolt) | `zibby init --mem` |
21
25
  | [Chat memory](./chat-memory.md) | `chat-memory` | `memory_store`, `memory_recall`, `memory_brief`, `task_log`, `task_history` | None (Dolt or mem0) |
22
26
  | [Core tools](./core-tools.md) | `core-tools` | `read_file`, `write_file`, `list_directory`, `run_command`, `open_url`, `wait` | None |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zibby/skills",
3
- "version": "0.1.31",
3
+ "version": "0.1.33",
4
4
  "description": "Built-in skill definitions for Zibby test automation framework",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -58,6 +58,8 @@
58
58
  "dependencies": {
59
59
  "@zibby/agent-workflow": "^0.3.0",
60
60
  "@modelcontextprotocol/sdk": "^1.29.0",
61
+ "better-sqlite3": "^12.6.2",
62
+ "mem0ai": "npm:@zibby/mem0ai@^3.0.5",
61
63
  "zod": "^3.23.0 || ^4.0.0"
62
64
  },
63
65
  "peerDependencies": {