[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6H7XKXWD0MANYB7YF3W73WJ":3,"skill-same:01M6H7XKXWD0MANYB7YF3W73WJ":88},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":60,"commitSha":61,"skillDirectory":62,"forksCount":63,"repositoryHtmlUrl":64,"repositoryHomepageUrl":6,"ownerHtmlUrl":65,"ownerBlogUrl":66,"ownerDescription":6,"updatedAt":67,"install":68,"resources":81},"01M6H7XKXWD0MANYB7YF3W73WJ","Agent Browser",null,"A fast Rust-based headless browser automation CLI with Node.js fallback that enables AI agents to navigate, click, type, and snapshot pages via structured commands.","0xharryriddle\u002Fcodex-field-kit","0xharryriddle","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F100945007?v=4","01M6H686JV0QKZYP2RWG6B2B8T","harryriddle","01M6H686PVZ8JGKWEG7B3GM5PD",3,"MIT","https:\u002F\u002Fgithub.com\u002F0xharryriddle\u002Fcodex-field-kit\u002Fblob\u002Fmain\u002Fskills\u002Fagent-browser\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"agent browser","browser","node","headless","extracting","click","type","pages","commands","forms","fallback","snapshot","testing","data","automation","rust","ai agents","structured data","browser automation","cli","2026-11-10 10:12:30",false,"---\nname: Agent Browser\ndescription: A fast Rust-based headless browser automation CLI with Node.js fallback that enables AI agents to navigate, click, type, and snapshot pages via structured commands.\nread_when:\n  - Automating web interactions\n  - Extracting structured data from pages\n  - Filling forms programmatically\n  - Testing web UIs\nmetadata: {\"clawdbot\":{\"emoji\":\"?\",\"requires\":{\"bins\":[\"node\",\"npm\"]}}}\n---\n\n# Agent Browser\n\nA fast Rust-based headless browser automation CLI with Node.js fallback that enables AI agents to navigate, click, type, and snapshot pages via structured commands.\n\n## Installation\n\n### npm recommended\n\n```bash\nnpm install -g agent-browser\nagent-browser install\nagent-browser install --with-deps\n```\n\n### From Source\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fagent-browser\ncd agent-browser\npnpm install\npnpm build\nagent-browser install\n```\n\n## Quick Start\n\n```bash\nagent-browser open example.com\nagent-browser snapshot\nagent-browser click @e2\nagent-browser fill @e3 \"test@example.com\"\nagent-browser get text @e1\nagent-browser screenshot page.png\nagent-browser close\n```\n\n## Using Real Chrome Profile (for OAuth\u002FLogged-in Sessions)\n\nFor sites requiring Google\u002FDiscord\u002Fetc login (like star-swap.com):\n\n**Method 1: Launch Chrome with custom profile, connect via CDP**\n\n```bash\n# Terminal 1: Launch Chrome with your real profile and remote debugging\ngoogle-chrome --remote-debugging-port=9222 --user-data-dir=\u002Fhome\u002Fwillr\u002F.config\u002Fgoogle-chrome\u002FDefault &\n\n# Terminal 2: Connect agent-browser to that Chrome instance\nagent-browser --cdp 9222 open \"https:\u002F\u002Fstar-swap.com\"\nagent-browser --cdp 9222 snapshot -i\nagent-browser --cdp 9222 click e2\n\n# This reuses your existing Google session - no re-login needed!\n# Works for: Google OAuth, Discord OAuth, any site you're logged into in Chrome\n```\n\n**Method 2: Session persistence (first-time manual login)**\n\n```bash\n# First time: headed mode, login manually\nagent-browser --headed --session starswap open \"https:\u002F\u002Fstar-swap.com\"\n# Complete Google OAuth manually in the browser window\n# Close when done\n\n# Future runs: cookies persist!\nagent-browser --session starswap open \"https:\u002F\u002Fstar-swap.com\"\n# Already logged in automatically\n```\n\n**am.will.ryan Chrome profile:** `\u002Fhome\u002Fwillr\u002F.config\u002Fgoogle-chrome\u002FDefault`\n\n## Core Commands\n\n### Navigation\n\n```bash\nagent-browser open \u003Curl>\nagent-browser back\nagent-browser forward\nagent-browser reload\n```\n\n### Interaction\n\n```bash\nagent-browser click \u003Csel>\nagent-browser dblclick \u003Csel>\nagent-browser focus \u003Csel>\nagent-browser type \u003Csel> \u003Ctext>\nagent-browser fill \u003Csel> \u003Ctext>\nagent-browser clear \u003Csel>\nagent-browser press \u003Ckey>\nagent-browser keydown \u003Ckey>\nagent-browser keyup \u003Ckey>\nagent-browser hover \u003Csel>\nagent-browser select \u003Csel> \u003Cval>\nagent-browser check \u003Csel>\nagent-browser uncheck \u003Csel>\nagent-browser drag \u003Csrc> \u003Ctgt>\nagent-browser upload \u003Csel> \u003Cfiles>\n```\n\n### Extraction and Info\n\n```bash\nagent-browser snapshot\nagent-browser get text \u003Csel>\nagent-browser get html \u003Csel>\nagent-browser get value \u003Csel>\nagent-browser get attr \u003Csel> \u003Cattr>\nagent-browser get title\nagent-browser get url\nagent-browser get count \u003Csel>\nagent-browser get box \u003Csel>\nagent-browser screenshot [path]\nagent-browser pdf \u003Cpath>\n```\n\n### Check State\n\n```bash\nagent-browser is visible \u003Csel>\nagent-browser is enabled \u003Csel>\nagent-browser is checked \u003Csel>\n```\n\n### Find Elements\n\n- agent-browser find role \u003Crole> \u003Caction> [value]\n- agent-browser find text \u003Ctext> \u003Caction>\n- agent-browser find label \u003Clabel> \u003Caction> [value]\n- agent-browser find placeholder \u003Cph> \u003Caction> [value]\n- agent-browser find alt \u003Ctext> \u003Caction>\n- agent-browser find title \u003Ctext> \u003Caction>\n- agent-browser find testid \u003Cid> \u003Caction> [value]\n\nActions include click, fill, check, hover, and text.\n\n### Wait and Timing\n\n```bash\nagent-browser wait \u003Cselector>\nagent-browser wait \u003Cms>\nagent-browser wait --text \"Welcome\"\nagent-browser wait --url \"**\u002Fdash\"\nagent-browser wait --load networkidle\n```\n\n### Advanced Control\n\n```bash\nagent-browser scroll \u003Cdir> [px]\nagent-browser scrollintoview \u003Csel>\nagent-browser eval \u003Cjs>\nagent-browser mouse move \u003Cx> \u003Cy>\nagent-browser cookies\nagent-browser storage local\nagent-browser tab new [url]\nagent-browser frame \u003Csel>\nagent-browser dialog accept [text]\n```\n\n## Sessions\n\nRun multiple isolated browser instances.\n\n```bash\nagent-browser --session agent1 open site-a.com\nagent-browser --session agent2 open site-b.com\n```\n\n## Snapshot Options\n\nThe snapshot command supports filtering to reduce output size.\n\n- agent-browser snapshot -i\n- agent-browser snapshot -c\n- agent-browser snapshot -d 3\n- agent-browser snapshot -s \"#main\"\n\n## Selectors and Refs\n\nRefs provide deterministic element selection from snapshots. Use the @ref syntax.\n\n```bash\nagent-browser snapshot\nagent-browser click @e2\n```\n\n## Agent Mode\n\nUse --json for machine readable output.\n\n```bash\nagent-browser snapshot --json\n```\n\n### Optimal AI Workflow\n\n- Navigate with agent-browser open \u003Curl>\n- Observe with agent-browser snapshot -i --json\n- Act with @ref from the snapshot\n- Verify with agent-browser snapshot\n\n## Troubleshooting\n\n- If the command is not found on Linux ARM64, use the full path in the bin folder.\n- If an element is not found, use snapshot to find the correct ref.\n- If the page is not loaded, add a wait command after navigation.\n- Use --headed to see the browser window for debugging.\n\n## Options\n\n- --session \u003Cname> uses an isolated session.\n- --json provides JSON output.\n- --full takes a full page screenshot.\n- --headed shows the browser window.\n- --timeout sets the command timeout in milliseconds.\n\n## Notes\n\n- Refs are stable per page load but change on navigation.\n- Always snapshot after navigation to get new refs.\n- Use fill instead of type for input fields to ensure existing text is cleared.","# Agent Browser\n\nA fast Rust-based headless browser automation CLI with Node.js fallback that enables AI agents to navigate, click, type, and snapshot pages via structured commands.\n\n## Installation\n\n### npm recommended\n\n```bash\nnpm install -g agent-browser\nagent-browser install\nagent-browser install --with-deps\n```\n\n### From Source\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fagent-browser\ncd agent-browser\npnpm install\npnpm build\nagent-browser install\n```\n\n## Quick Start\n\n```bash\nagent-browser open example.com\nagent-browser snapshot\nagent-browser click @e2\nagent-browser fill @e3 \"test@example.com\"\nagent-browser get text @e1\nagent-browser screenshot page.png\nagent-browser close\n```\n\n## Using Real Chrome Profile (for OAuth\u002FLogged-in Sessions)\n\nFor sites requiring Google\u002FDiscord\u002Fetc login (like star-swap.com):\n\n**Method 1: Launch Chrome with custom profile, connect via CDP**\n\n```bash\n# Terminal 1: Launch Chrome with your real profile and remote debugging\ngoogle-chrome --remote-debugging-port=9222 --user-data-dir=\u002Fhome\u002Fwillr\u002F.config\u002Fgoogle-chrome\u002FDefault &\n\n# Terminal 2: Connect agent-browser to that Chrome instance\nagent-browser --cdp 9222 open \"https:\u002F\u002Fstar-swap.com\"\nagent-browser --cdp 9222 snapshot -i\nagent-browser --cdp 9222 click e2\n\n# This reuses your existing Google session - no re-login needed!\n# Works for: Google OAuth, Discord OAuth, any site you're logged into in Chrome\n```\n\n**Method 2: Session persistence (first-time manual login)**\n\n```bash\n# First time: headed mode, login manually\nagent-browser --headed --session starswap open \"https:\u002F\u002Fstar-swap.com\"\n# Complete Google OAuth manually in the browser window\n# Close when done\n\n# Future runs: cookies persist!\nagent-browser --session starswap open \"https:\u002F\u002Fstar-swap.com\"\n# Already logged in automatically\n```\n\n**am.will.ryan Chrome profile:** `\u002Fhome\u002Fwillr\u002F.config\u002Fgoogle-chrome\u002FDefault`\n\n## Core Commands\n\n### Navigation\n\n```bash\nagent-browser open \u003Curl>\nagent-browser back\nagent-browser forward\nagent-browser reload\n```\n\n### Interaction\n\n```bash\nagent-browser click \u003Csel>\nagent-browser dblclick \u003Csel>\nagent-browser focus \u003Csel>\nagent-browser type \u003Csel> \u003Ctext>\nagent-browser fill \u003Csel> \u003Ctext>\nagent-browser clear \u003Csel>\nagent-browser press \u003Ckey>\nagent-browser keydown \u003Ckey>\nagent-browser keyup \u003Ckey>\nagent-browser hover \u003Csel>\nagent-browser select \u003Csel> \u003Cval>\nagent-browser check \u003Csel>\nagent-browser uncheck \u003Csel>\nagent-browser drag \u003Csrc> \u003Ctgt>\nagent-browser upload \u003Csel> \u003Cfiles>\n```\n\n### Extraction and Info\n\n```bash\nagent-browser snapshot\nagent-browser get text \u003Csel>\nagent-browser get html \u003Csel>\nagent-browser get value \u003Csel>\nagent-browser get attr \u003Csel> \u003Cattr>\nagent-browser get title\nagent-browser get url\nagent-browser get count \u003Csel>\nagent-browser get box \u003Csel>\nagent-browser screenshot [path]\nagent-browser pdf \u003Cpath>\n```\n\n### Check State\n\n```bash\nagent-browser is visible \u003Csel>\nagent-browser is enabled \u003Csel>\nagent-browser is checked \u003Csel>\n```\n\n### Find Elements\n\n- agent-browser find role \u003Crole> \u003Caction> [value]\n- agent-browser find text \u003Ctext> \u003Caction>\n- agent-browser find label \u003Clabel> \u003Caction> [value]\n- agent-browser find placeholder \u003Cph> \u003Caction> [value]\n- agent-browser find alt \u003Ctext> \u003Caction>\n- agent-browser find title \u003Ctext> \u003Caction>\n- agent-browser find testid \u003Cid> \u003Caction> [value]\n\nActions include click, fill, check, hover, and text.\n\n### Wait and Timing\n\n```bash\nagent-browser wait \u003Cselector>\nagent-browser wait \u003Cms>\nagent-browser wait --text \"Welcome\"\nagent-browser wait --url \"**\u002Fdash\"\nagent-browser wait --load networkidle\n```\n\n### Advanced Control\n\n```bash\nagent-browser scroll \u003Cdir> [px]\nagent-browser scrollintoview \u003Csel>\nagent-browser eval \u003Cjs>\nagent-browser mouse move \u003Cx> \u003Cy>\nagent-browser cookies\nagent-browser storage local\nagent-browser tab new [url]\nagent-browser frame \u003Csel>\nagent-browser dialog accept [text]\n```\n\n## Sessions\n\nRun multiple isolated browser instances.\n\n```bash\nagent-browser --session agent1 open site-a.com\nagent-browser --session agent2 open site-b.com\n```\n\n## Snapshot Options\n\nThe snapshot command supports filtering to reduce output size.\n\n- agent-browser snapshot -i\n- agent-browser snapshot -c\n- agent-browser snapshot -d 3\n- agent-browser snapshot -s \"#main\"\n\n## Selectors and Refs\n\nRefs provide deterministic element selection from snapshots. Use the @ref syntax.\n\n```bash\nagent-browser snapshot\nagent-browser click @e2\n```\n\n## Agent Mode\n\nUse --json for machine readable output.\n\n```bash\nagent-browser snapshot --json\n```\n\n### Optimal AI Workflow\n\n- Navigate with agent-browser open \u003Curl>\n- Observe with agent-browser snapshot -i --json\n- Act with @ref from the snapshot\n- Verify with agent-browser snapshot\n\n## Troubleshooting\n\n- If the command is not found on Linux ARM64, use the full path in the bin folder.\n- If an element is not found, use snapshot to find the correct ref.\n- If the page is not loaded, add a wait command after navigation.\n- Use --headed to see the browser window for debugging.\n\n## Options\n\n- --session \u003Cname> uses an isolated session.\n- --json provides JSON output.\n- --full takes a full page screenshot.\n- --headed shows the browser window.\n- --timeout sets the command timeout in milliseconds.\n\n## Notes\n\n- Refs are stable per page load but change on navigation.\n- Always snapshot after navigation to get new refs.\n- Use fill instead of type for input fields to ensure existing text is cleared.",{"name":5,"metadata":49,"read_when":55,"description":7},{"clawdbot":50},{"emoji":51,"requires":52},"?",{"bins":53},[26,54],"npm",[56,57,58,59],"Automating web interactions","Extracting structured data from pages","Filling forms programmatically","Testing web UIs","main","6c13f6f4ac5a3bc1e6b78cd2bb1704f122c4a73e","skills\u002Fagent-browser",0,"https:\u002F\u002Fgithub.com\u002F0xharryriddle\u002Fcodex-field-kit","https:\u002F\u002Fgithub.com\u002F0xharryriddle","https:\u002F\u002Fharryriddle.vercel.app","2026-04-11 11:49:51",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add 0xharryriddle\u002Fcodex-field-kit --skill \"Agent Browser\"",{"tool":74,"command":75},"bunx","bunx skills add 0xharryriddle\u002Fcodex-field-kit --skill \"Agent Browser\"",{"tool":77,"command":78},"pnpm","pnpm dlx skills add 0xharryriddle\u002Fcodex-field-kit --skill \"Agent Browser\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002F0xharryriddle\u002Fcodex-field-kit\u002Fblob\u002Fmain\u002Fskills\u002Fagent-browser\u002FSKILL.md",true,[82],{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},".clawdhub\u002Forigin.json","REFERENCE","参考文档",147,"https:\u002F\u002Fgithub.com\u002F0xharryriddle\u002Fcodex-field-kit\u002Fblob\u002Fmain\u002Fskills\u002Fagent-browser\u002F.clawdhub\u002Forigin.json",[89,118,137,146,172,198],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":98,"publishedAt":44},"01M6H7ZKE6MR33HC84QZ1TA6MV","vercel-react-best-practices","React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React\u002FNext.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.","https:\u002F\u002Fgithub.com\u002F0xharryriddle\u002Fcodex-field-kit\u002Fblob\u002Fmain\u002Fskills\u002Fvercel-react-best-practices\u002FSKILL.md",[95],{"categoryNo":96,"categoryName":97,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[99,100,101,102,103,104,105,106,31,107,108,109,110,111,112,113,114,115,116,117],"react best practices","react","vercel react best practices","best practices","vercel","tasks","data fetching","triggers","next","performance optimization","refactoring","Next.js","Optimization","code","guidelines","react components","components","performance","writing",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":44},"01M6H7ZGC2WK8SEKYHWDNTMDA9","swarm-planner","[EXPLICIT INVOCATION ONLY] Creates dependency-aware implementation plans optimized for parallel multi-agent execution.","https:\u002F\u002Fgithub.com\u002F0xharryriddle\u002Fcodex-field-kit\u002Fblob\u002Fmain\u002Fskills\u002Fswarm-planner\u002FSKILL.md",[],[125,126,127,128,129,130,131,132,133,134,135,136],"swarm","swarm planner","planner","parallel","multi-agent","only","execution","plans","dependency","for","multi","implementation",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":44},"01M6H7ZD93853RZCYQWH1D38TM","super-swarm-spark","Only to be triggered by explicit super-swarm-spark commands.","https:\u002F\u002Fgithub.com\u002F0xharryriddle\u002Fcodex-field-kit\u002Fblob\u002Fmain\u002Fskills\u002Fsuper-swarm-spark\u002FSKILL.md",[],[144,125,145,130,32],"super swarm spark","spark",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":44},"01M6H7Z987QBY49JCCPT953EAZ","role-creator","Create and install Codex custom agent roles in ~\u002F.codex\u002Fconfig.toml, generate role config files, enforce supported keys, and guide users through required role inputs (model, reasoning effort, developer_instructions).","https:\u002F\u002Fgithub.com\u002F0xharryriddle\u002Fcodex-field-kit\u002Fblob\u002Fmain\u002Fskills\u002Frole-creator\u002FSKILL.md",[],[153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],"role","creator","role creator","keys","users","roles","toml","enforce","install","guide","instructions","model","developer","reasoning","generate","create","config","codex","files",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":179,"publishedAt":44},"01M6H7Z5TRPMDQ7YSZQXPN1G60","read-github","Read and search GitHub repository documentation via gitmcp.io MCP service.\n\n**WHEN TO USE:**\n- User provides a GitHub URL\n- User mentions a specific repo in owner\u002Frepo format\n- User asks \"what does this repo do?\", \"read the docs for X repo\", or similar\n- User wants to search code or docs within a repo","https:\u002F\u002Fgithub.com\u002F0xharryriddle\u002Fcodex-field-kit\u002Fblob\u002Fmain\u002Fskills\u002Fread-github\u002FSKILL.md",[178],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[180,181,182,112,183,184,185,186,134,187,188,189,190,191,192,193,194,195,196,197],"github","read github","read","documentation","docs","MCP","search","when to use","URL","via","io","service","do","use","user","repo","format","repository",{"skillNo":199,"name":127,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":201,"categories":202,"keywords":203,"publishedAt":44},"01M6H7Z215CTKYJ4Y1X6EQWN6M","Create comprehensive, phased implementation plans with sprints and atomic tasks. Use when user says: \"make a plan\", \"create a plan\", \"plan this out\", \"plan the implementation\", \"help me plan\", \"design a plan\", \"draft a plan\", \"write a plan\", \"outline the steps\", \"break this down into tasks\", \"what's the plan for\", or any similar planning request. Also triggers on explicit \"\u002Fplanner\" or \"\u002Fplan\" commands.","https:\u002F\u002Fgithub.com\u002F0xharryriddle\u002Fcodex-field-kit\u002Fblob\u002Fmain\u002Fskills\u002Fplanner\u002FSKILL.md",[],[127,204,134,205,206,207,106,132,32,208,209,193,210,211,212,213,214,168,104,215],"outline","atomic","with","sprints","draft","me","write","phased implementation","plan","help","planning","design"]