Lines 383-423javascript
383AFTER completing the test, you MUST call memory_save_insight at least once:
384- Save any useful finding: reliable selectors, timing quirks, navigation patterns, workarounds.
385- Category: selector_tip | timing | navigation | workaround | flaky | general
386- Be specific \u2014 future runs will read your insights.`,resolve(){let s=No();if(!s)throw new Error(`\u274C Memory MCP server not found
388 Install @zibby/ui-memory:
389 npm install @zibby/ui-memory`);let t=br(process.cwd(),".zibby","memory");if(!Io(br(t,".dolt")))throw new Error(`\u274C Memory database not initialized
392 zibby init --mem`);try{let e=So("dolt",["sql","-q","SELECT COUNT(*) AS cnt FROM test_runs","-r","json"],{cwd:t,encoding:"utf-8",timeout:5e3}),r=JSON.parse(e.trim()).rows||[];if(!r[0]||r[0].cnt===0)return console.log("[memory] Database empty \u2014 memory tools activate after first completed run"),null}catch(e){throw new Error(`\u274C Dolt not found or memory database error
395 https://docs.dolthub.com/introduction/installation
397 Error: ${e.message}`,{cause:e})}return{command:"node",args:[s,"--db-path",t],description:this.description}},tools:[{name:"memory_get_test_history",description:"Query recent test runs with pass/fail results and timing",input_schema:{type:"object",properties:{specPath:{type:"string",description:"Filter by spec path (substring match)"},limit:{type:"number",description:"Max results (default 10)"}}}},{name:"memory_get_selectors",description:"Query known selectors for a page with stability metrics",input_schema:{type:"object",properties:{pageUrl:{type:"string",description:"Filter by page URL (subs ...
3981. Go to Settings \u2192 Integrations (https://studio.zibby.dev/integrations)
3992. Click "Connect Jira" and authorize via Atlassian OAuth
4003. After OAuth completes, ask me to install Jira again`},github:{description:"GitHub issues, PRs, repository management",integrationProvider:"github",envKeys:[],setupInstructions:`To connect GitHub:
4011. Go to Settings \u2192 Integrations (https://studio.zibby.dev/integrations)
4022. Click "Connect GitHub" and authorize
4033. After OAuth completes, ask me to install GitHub again`},slack:{description:"Slack messages, channels, reactions",integrationProvider:"slack",envKeys:[],setupInstructions:`To connect Slack:
4041. Go to Settings \u2192 Integrations (https://studio.zibby.dev/integrations)
4052. Click "Connect Slack" and authorize
4063. After OAuth completes, ask me to install Slack again`},sentry:{description:"Sentry error tracking \u2014 projects, issues, events",integrationProvider:"sentry",envKeys:[],setupInstructions:`To connect Sentry:
4071. Go to Settings \u2192 Integrations (https://studio.zibby.dev/integrations)
4082. Click "Connect Sentry" and authorize
4093. After OAuth completes, ask me to install Sentry again`},runner:{description:"Run zibby test workflows from chat (parallel supported)",envKeys:[],setupInstructions:"Ready to use. Runs zibby test workflows as background processes \u2014 each with its own browser and session."},browser:{description:"Playwright browser automation (navigate, click, fill, screenshot)",envKeys:[],setupInstructions:"Ready to use. Starts a Playwright browser for web automation."},memory:{description:"Test memory database (Dolt) \u2014 history, selectors, insights",envKeys:[],setupInstructions:"Ready to use. Requires ...
410`)}function xo(){if(process.env.ZIBBY_USER_TOKEN)return process.env.ZIBBY_USER_TOKEN;try{let s=Ao(To(),".zibby","config.json");return Oo(s)&&JSON.parse(Ro(s,"utf-8")).sessionToken||null}catch{return null}}function jo(){return(process.env.ZIBBY_API_URL||process.env.ZIBBY_PROD_API_URL||"https://api-prod.zibby.app").replace(/\/$/,"")}function lt(){return`${(process.env.ZIBBY_FRONTEND_URL||process.env.ZIBBY_PROD_FRONTEND_URL||"https://studio.zibby.dev").replace(/\/$/,"")}/integrations`}function $o(s){try{let t=process.platform;return Eo(t==="darwin"?"open":t==="win32"?"cmd":"xdg-open",t==="win32"? ...
411`)}function Ho(s,t){let e=s.cwd?qe(s.cwd,t):t;return Or(s.command,{cwd:e,encoding:"utf-8",timeout:3e4,maxBuffer:Bo,stdio:["pipe","pipe","pipe"]})||"(no output)"}function zo(s){let{url:t}=s;if(
412You have access to the user's Sentry. Use these tools:
413- sentry_list_projects: List projects in the organization
414- sentry_list_issues: List errors/issues (supports Sentry search query, project filter, sort)
415- sentry_get_issue: Get detailed info about a specific issue (requires issueId)
416- sentry_update_issue: Change an issue's status (resolved / resolvedInNextRelease / ignored / unresolved / muted), assignment, or bookmark (requires issueId; needs write scope)
417- sentry_add_comment: Post a comment/note on an issue (requires issueId + text; needs write scope)`,resolve(){let s=Xo();if(!s)return null;let t={};for(let e of["PROJECT_API_TOKEN","ZIBBY_USER_TOKEN","ZIBBY_ACCOUNT_API_URL","ZIBBY_ENV","ZIBBY_PROD_ACCOUNT_API_URL","PROGRESS_API_URL","EXECUTION_ID","PROJECT_ID","STAGE","ZIBBY_SELF_HOST","SENTRY_URL","SENTRY_ORG","SENTRY_AUTH_TOKEN"])process.env[e]&&(t[e]=process.env[e]);return{type:"stdio",command:"node",args:[s],env:t,alwaysLoad:!0}},async handleToolCall(s,t={}){try{switch(s){case"sentry_list_projects":{let e=await ta();return JSON.stringify({ ...
419`;try{process.stderr.write(r)}catch{}}function ft(){X.length=0;for(let[,s]of P)if(s.status==="queued"&&(s.status="cancelled"),s.status==="running"&&s._child)try{s._child.kill("SIGTERM")}catch{}}process.on(
420You can run zibby test workflows directly from chat:
HighCommand Output Exfiltration
Source combines command execution, command-output handling, and outbound requests; review data flow before blocking.
dist/index.jsView on unpkg · L403 422**CRITICAL: When user asks to test a ticket:**
4231. Load the issue with your tracker tools (whatever is connected)
Long lines were clipped for display.