[{"data":1,"prerenderedAt":742},["ShallowReactive",2],{"tutorial":3},{"sys":4,"total":6,"skip":7,"limit":6,"items":8,"includes":740},{"type":5},"Array",1,0,[9],{"metadata":10,"sys":13,"fields":34},{"tags":11,"concepts":12},[],[],{"space":14,"id":19,"type":20,"createdAt":21,"updatedAt":22,"environment":23,"publishedVersion":27,"revision":28,"contentType":29,"locale":33},{"sys":15},{"type":16,"linkType":17,"id":18},"Link","Space","mqwrag4of3hk","1euP0wC44XZOu6gJsaVeyv","Entry","2026-01-27T01:09:03.975Z","2026-01-27T01:11:11.705Z",{"sys":24},{"id":25,"type":16,"linkType":26},"master","Environment",72,2,{"sys":30},{"type":16,"linkType":31,"id":32},"ContentType","tutorial","en-US",{"title":35,"slug":36,"introduction":37,"body":82,"tags":705},"Installing Goose-CLI with Ollama for Local AI Coding","installing-goose-cli-with-ollama-for-local-ai-coding",{"data":38,"content":39,"nodeType":81},{},[40,74],{"data":41,"content":42,"nodeType":73},{},[43,48,57,61,69],{"data":44,"marks":45,"value":46,"nodeType":47},{},[],"If you're (like me) liking the idea of having an AI coding assistant that runs completely locally on your machine (privacy!), there's a good chance you've stumbled upon ","text",{"data":49,"content":51,"nodeType":56},{"uri":50},"https://block.github.io/goose/",[52],{"data":53,"marks":54,"value":55,"nodeType":47},{},[],"Goose-CLI","hyperlink",{"data":58,"marks":59,"value":60,"nodeType":47},{},[],". Combine it with ",{"data":62,"content":64,"nodeType":56},{"uri":63},"https://ollama.com/",[65],{"data":66,"marks":67,"value":68,"nodeType":47},{},[],"Ollama",{"data":70,"marks":71,"value":72,"nodeType":47},{},[]," for running AI models locally, and you've got yourself a pretty powerful setup that doesn't send your code to the cloud.","paragraph",{"data":75,"content":76,"nodeType":73},{},[77],{"data":78,"marks":79,"value":80,"nodeType":47},{},[],"Let's see what we need to do in order to get both systems up and running, configure them to work together, and set up some convenient shortcuts to switch between coding and writing tasks.","document",{"nodeType":81,"data":83,"content":84},{},[85,92,112,128,136,143,152,159,167,174,181,189,196,204,216,223,230,238,245,252,260,267,274,281,289,322,329,336,344,351,359,366,373,381,388,433,440,447,454,462,470,478,486,494,502,509,516,590,597,604,611,618,698],{"nodeType":73,"data":86,"content":87},{},[88],{"nodeType":47,"value":89,"marks":90,"data":91},"Before we dive in, let's clarify what we're setting up:",[],{},{"nodeType":73,"data":93,"content":94},{},[95,100,104,108],{"nodeType":47,"value":55,"marks":96,"data":99},[97],{"type":98},"bold",{},{"nodeType":47,"value":101,"marks":102,"data":103}," is an open-source tool  that acts as an autonomos coding assistant in your terminal. Think of it as having a colleague who can read your codebase, write code, run commands, and create files - all from the command line. ",[],{},{"nodeType":47,"value":68,"marks":105,"data":107},[106],{"type":98},{},{"nodeType":47,"value":109,"marks":110,"data":111}," is (in their own words) \"Docker for AI models\". It handles downloading, managing, and running large language models on your local machine. No cloud. No API costs. Complete privacy.",[],{},{"nodeType":73,"data":113,"content":114},{},[115,119,124],{"nodeType":47,"value":116,"marks":117,"data":118},"The model we're using (",[],{},{"nodeType":47,"value":120,"marks":121,"data":123},"qwen2.5-coder:7b",[122],{"type":98},{},{"nodeType":47,"value":125,"marks":126,"data":127},") is specifically trained for code generation, debugging, and understanding codebases. The 7b stands for the 7 billion parameters on the model that balance between performance and resource usage.",[],{},{"nodeType":129,"data":130,"content":131},"heading-2",{},[132],{"nodeType":47,"value":133,"marks":134,"data":135},"Installing Ollama",[],{},{"nodeType":73,"data":137,"content":138},{},[139],{"nodeType":47,"value":140,"marks":141,"data":142},"Let's start with Ollama, as we need it running before we configure Goose. Using Homebrew:",[],{},{"nodeType":73,"data":144,"content":145},{},[146],{"nodeType":47,"value":147,"marks":148,"data":151},"brew install ollama",[149],{"type":150},"code",{},{"nodeType":73,"data":153,"content":154},{},[155],{"nodeType":47,"value":156,"marks":157,"data":158},"Verify the installation worked:",[],{},{"nodeType":73,"data":160,"content":161},{},[162],{"nodeType":47,"value":163,"marks":164,"data":166},"ollama --version",[165],{"type":150},{},{"nodeType":129,"data":168,"content":169},{},[170],{"nodeType":47,"value":171,"marks":172,"data":173},"Starting Ollama",[],{},{"nodeType":73,"data":175,"content":176},{},[177],{"nodeType":47,"value":178,"marks":179,"data":180},"On macOS, Ollama usually starts automatically after installation. You can verify it's running by checking if you can access:",[],{},{"nodeType":73,"data":182,"content":183},{},[184],{"nodeType":47,"value":185,"marks":186,"data":188},"curl http://localhost:11434",[187],{"type":150},{},{"nodeType":73,"data":190,"content":191},{},[192],{"nodeType":47,"value":193,"marks":194,"data":195},"If you get a response saying \"Ollama is running\", you're good to go. If not, start it manually:",[],{},{"nodeType":73,"data":197,"content":198},{},[199],{"nodeType":47,"value":200,"marks":201,"data":203},"ollama serve",[202],{"type":150},{},{"nodeType":73,"data":205,"content":206},{},[207,211],{"nodeType":47,"value":208,"marks":209,"data":210},"This starts the server on ",[],{},{"nodeType":47,"value":212,"marks":213,"data":215},"http://localhost:11434",[214],{"type":150},{},{"nodeType":129,"data":217,"content":218},{},[219],{"nodeType":47,"value":220,"marks":221,"data":222},"Pulling the AI model",[],{},{"nodeType":73,"data":224,"content":225},{},[226],{"nodeType":47,"value":227,"marks":228,"data":229},"Now we can install a model. Open a terminal and pull it:",[],{},{"nodeType":73,"data":231,"content":232},{},[233],{"nodeType":47,"value":234,"marks":235,"data":237},"ollama pull qwen2.5-coder:7b",[236],{"type":150},{},{"nodeType":73,"data":239,"content":240},{},[241],{"nodeType":47,"value":242,"marks":243,"data":244},"The model is roughly 4.7 GB, so grab a coffee while it downloads.",[],{},{"nodeType":73,"data":246,"content":247},{},[248],{"nodeType":47,"value":249,"marks":250,"data":251},"Verify it's installed:",[],{},{"nodeType":73,"data":253,"content":254},{},[255],{"nodeType":47,"value":256,"marks":257,"data":259},"ollama list",[258],{"type":150},{},{"nodeType":73,"data":261,"content":262},{},[263],{"nodeType":47,"value":264,"marks":265,"data":266},"You should see qwen2.5-coder:7b listed with its size and download time.",[],{},{"nodeType":129,"data":268,"content":269},{},[270],{"nodeType":47,"value":271,"marks":272,"data":273},"Testing Ollama",[],{},{"nodeType":73,"data":275,"content":276},{},[277],{"nodeType":47,"value":278,"marks":279,"data":280},"Before we move on, let's make sure everything works:",[],{},{"nodeType":73,"data":282,"content":283},{},[284],{"nodeType":47,"value":285,"marks":286,"data":288},"ollama run qwen2.5-coder:7b \"Write a TypeScript function that takes in two numbers and returns the product of the numbers\"",[287],{"type":150},{},{"nodeType":73,"data":290,"content":291},{},[292,296,302,307,313,318],{"nodeType":47,"value":293,"marks":294,"data":295},"If you see a code response, you're good! Press ",[],{},{"nodeType":47,"value":297,"marks":298,"data":301},"Ctrl+D",[299,300],{"type":150},{"type":98},{},{"nodeType":47,"value":303,"marks":304,"data":306}," or type ",[305],{"type":150},{},{"nodeType":47,"value":308,"marks":309,"data":312},"/bye",[310,311],{"type":150},{"type":98},{},{"nodeType":47,"value":314,"marks":315,"data":317}," ",[316],{"type":150},{},{"nodeType":47,"value":319,"marks":320,"data":321},"to exit.",[],{},{"nodeType":129,"data":323,"content":324},{},[325],{"nodeType":47,"value":326,"marks":327,"data":328},"Installing Goose-CLI",[],{},{"nodeType":73,"data":330,"content":331},{},[332],{"nodeType":47,"value":333,"marks":334,"data":335},"Now that Ollama is running, let's get Goose installed (again) using Homebrew:",[],{},{"nodeType":73,"data":337,"content":338},{},[339],{"nodeType":47,"value":340,"marks":341,"data":343},"brew install goose",[342],{"type":150},{},{"nodeType":73,"data":345,"content":346},{},[347],{"nodeType":47,"value":348,"marks":349,"data":350},"Check it installed correctly:",[],{},{"nodeType":73,"data":352,"content":353},{},[354],{"nodeType":47,"value":355,"marks":356,"data":358},"goose --version",[357],{"type":150},{},{"nodeType":129,"data":360,"content":361},{},[362],{"nodeType":47,"value":363,"marks":364,"data":365},"Configuring Goose with Ollama",[],{},{"nodeType":73,"data":367,"content":368},{},[369],{"nodeType":47,"value":370,"marks":371,"data":372},"This is where it gets interesting. Run the configuration wizard:",[],{},{"nodeType":73,"data":374,"content":375},{},[376],{"nodeType":47,"value":377,"marks":378,"data":380},"goose configure",[379],{"type":150},{},{"nodeType":73,"data":382,"content":383},{},[384],{"nodeType":47,"value":385,"marks":386,"data":387},"You'll see an interactive menu. Here's what to do:",[],{},{"nodeType":389,"data":390,"content":391},"ordered-list",{},[392,403,413,423],{"nodeType":393,"data":394,"content":395},"list-item",{},[396],{"nodeType":73,"data":397,"content":398},{},[399],{"nodeType":47,"value":400,"marks":401,"data":402},"Select \"Configure Providers\"",[],{},{"nodeType":393,"data":404,"content":405},{},[406],{"nodeType":73,"data":407,"content":408},{},[409],{"nodeType":47,"value":410,"marks":411,"data":412},"Choose \"Ollama\"",[],{},{"nodeType":393,"data":414,"content":415},{},[416],{"nodeType":73,"data":417,"content":418},{},[419],{"nodeType":47,"value":420,"marks":421,"data":422},"When asked for OLLAMA_HOST, just enter the defaults.",[],{},{"nodeType":393,"data":424,"content":425},{},[426],{"nodeType":73,"data":427,"content":428},{},[429],{"nodeType":47,"value":430,"marks":431,"data":432},"Select qwen2.5-coder:7b as your model",[],{},{"nodeType":73,"data":434,"content":435},{},[436],{"nodeType":47,"value":437,"marks":438,"data":439},"That's it! Goose is now configured to use your local Ollama model.",[],{},{"nodeType":129,"data":441,"content":442},{},[443],{"nodeType":47,"value":444,"marks":445,"data":446},"Using your new setup",[],{},{"nodeType":73,"data":448,"content":449},{},[450],{"nodeType":47,"value":451,"marks":452,"data":453},"You're done! Here's how to use it:",[],{},{"nodeType":73,"data":455,"content":456},{},[457],{"nodeType":47,"value":458,"marks":459,"data":461},"Start a coding session:",[460],{"type":98},{},{"nodeType":73,"data":463,"content":464},{},[465],{"nodeType":47,"value":466,"marks":467,"data":469},"goose session --name \"name your session for easier retrieval\"",[468],{"type":150},{},{"nodeType":73,"data":471,"content":472},{},[473],{"nodeType":47,"value":474,"marks":475,"data":477},"List all your sessions:",[476],{"type":98},{},{"nodeType":73,"data":479,"content":480},{},[481],{"nodeType":47,"value":482,"marks":483,"data":485},"goose list",[484],{"type":150},{},{"nodeType":73,"data":487,"content":488},{},[489],{"nodeType":47,"value":490,"marks":491,"data":493},"Resume your last session:",[492],{"type":98},{},{"nodeType":73,"data":495,"content":496},{},[497],{"nodeType":47,"value":498,"marks":499,"data":501},"goose resume {session_name}",[500],{"type":150},{},{"nodeType":129,"data":503,"content":504},{},[505],{"nodeType":47,"value":506,"marks":507,"data":508},"What can Goose do?",[],{},{"nodeType":73,"data":510,"content":511},{},[512],{"nodeType":47,"value":513,"marks":514,"data":515},"Once you're in a Goose session, you can ask it to:",[],{},{"nodeType":517,"data":518,"content":519},"unordered-list",{},[520,530,540,550,560,570,580],{"nodeType":393,"data":521,"content":522},{},[523],{"nodeType":73,"data":524,"content":525},{},[526],{"nodeType":47,"value":527,"marks":528,"data":529},"Read and understand your codebase",[],{},{"nodeType":393,"data":531,"content":532},{},[533],{"nodeType":73,"data":534,"content":535},{},[536],{"nodeType":47,"value":537,"marks":538,"data":539},"Write new features or functions",[],{},{"nodeType":393,"data":541,"content":542},{},[543],{"nodeType":73,"data":544,"content":545},{},[546],{"nodeType":47,"value":547,"marks":548,"data":549},"Debug existing code",[],{},{"nodeType":393,"data":551,"content":552},{},[553],{"nodeType":73,"data":554,"content":555},{},[556],{"nodeType":47,"value":557,"marks":558,"data":559},"Refactor code for better readability",[],{},{"nodeType":393,"data":561,"content":562},{},[563],{"nodeType":73,"data":564,"content":565},{},[566],{"nodeType":47,"value":567,"marks":568,"data":569},"Run terminal commands",[],{},{"nodeType":393,"data":571,"content":572},{},[573],{"nodeType":73,"data":574,"content":575},{},[576],{"nodeType":47,"value":577,"marks":578,"data":579},"Create and modify files",[],{},{"nodeType":393,"data":581,"content":582},{},[583],{"nodeType":73,"data":584,"content":585},{},[586],{"nodeType":47,"value":587,"marks":588,"data":589},"Generate tests",[],{},{"nodeType":73,"data":591,"content":592},{},[593],{"nodeType":47,"value":594,"marks":595,"data":596},"For example, you might say:",[],{},{"nodeType":73,"data":598,"content":599},{},[600],{"nodeType":47,"value":601,"marks":602,"data":603},"You: \"Create a REST API endpoint for user authentication using TypeScript and Express.js\"",[],{},{"nodeType":73,"data":605,"content":606},{},[607],{"nodeType":47,"value":608,"marks":609,"data":610},"And Goose will read your project structure, create the necessary files, and implement the functionality.",[],{},{"nodeType":129,"data":612,"content":613},{},[614],{"nodeType":47,"value":615,"marks":616,"data":617},"Practical tips ☝",[],{},{"nodeType":517,"data":619,"content":620},{},[621,636,651,666],{"nodeType":393,"data":622,"content":623},{},[624],{"nodeType":73,"data":625,"content":626},{},[627,632],{"nodeType":47,"value":628,"marks":629,"data":631},"Be specific in your requests.",[630],{"type":98},{},{"nodeType":47,"value":633,"marks":634,"data":635}," Instead of \"fix this bug\", try \"fix the authentication bug where users can't log in with email addresses containing plus signs\".",[],{},{"nodeType":393,"data":637,"content":638},{},[639],{"nodeType":73,"data":640,"content":641},{},[642,647],{"nodeType":47,"value":643,"marks":644,"data":646},"Reference your files.",[645],{"type":98},{},{"nodeType":47,"value":648,"marks":649,"data":650}," Goose can read your project, so you can say things like \"Look at src/auth.js and add error handling for network timeouts\".",[],{},{"nodeType":393,"data":652,"content":653},{},[654],{"nodeType":73,"data":655,"content":656},{},[657,662],{"nodeType":47,"value":658,"marks":659,"data":661},"Iterate on solutions.",[660],{"type":98},{},{"nodeType":47,"value":663,"marks":664,"data":665}," Start broad, then refine. \"Create a web scraper\" → \"Add rate limiting\" → \"Add retry logic with exponential backoff\".",[],{},{"nodeType":393,"data":667,"content":668},{},[669],{"nodeType":73,"data":670,"content":671},{},[672,677,681,686,690,694],{"nodeType":47,"value":673,"marks":674,"data":676},"Exit sessions cleanly.",[675],{"type":98},{},{"nodeType":47,"value":678,"marks":679,"data":680}," When you're done, type ",[],{},{"nodeType":47,"value":682,"marks":683,"data":685},"exit",[684],{"type":98},{},{"nodeType":47,"value":687,"marks":688,"data":689}," or press ",[],{},{"nodeType":47,"value":297,"marks":691,"data":693},[692],{"type":98},{},{"nodeType":47,"value":695,"marks":696,"data":697}," to close your session properly.",[],{},{"nodeType":73,"data":699,"content":700},{},[701],{"nodeType":47,"value":702,"marks":703,"data":704},"Have fun!",[],{},[706,724],{"metadata":707,"sys":710,"fields":721},{"tags":708,"concepts":709},[],[],{"space":711,"id":713,"type":20,"createdAt":714,"updatedAt":714,"environment":715,"publishedVersion":717,"revision":6,"contentType":718,"locale":33},{"sys":712},{"type":16,"linkType":17,"id":18},"uMTBll2e3XbH2Q8NUe4h0","2022-12-12T11:31:23.149Z",{"sys":716},{"id":25,"type":16,"linkType":26},3,{"sys":719},{"type":16,"linkType":31,"id":720},"tag",{"title":722,"slug":723},"Artificial Intelligence","artificial-intelligence",{"metadata":725,"sys":728,"fields":737},{"tags":726,"concepts":727},[],[],{"space":729,"id":731,"type":20,"createdAt":732,"updatedAt":732,"environment":733,"publishedVersion":28,"revision":6,"contentType":735,"locale":33},{"sys":730},{"type":16,"linkType":17,"id":18},"3mtglgsTfKouXT4bWCU7BM","2022-11-30T12:30:06.284Z",{"sys":734},{"id":25,"type":16,"linkType":26},{"sys":736},{"type":16,"linkType":31,"id":720},{"title":738,"slug":739},"Tooling","tooling",{"Entry":741},[724,706],1774484162607]