<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Satoshi Ebisawa</title>
    <description>The latest articles on DEV Community by Satoshi Ebisawa (@satococoa).</description>
    <link>https://dev.to/satococoa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F387347%2F3a3031af-2f53-49c9-bb63-ce1b3a3021a8.png</url>
      <title>DEV Community: Satoshi Ebisawa</title>
      <link>https://dev.to/satococoa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/satococoa"/>
    <language>en</language>
    <item>
      <title>git-worktreeinclude: A Tiny CLI for Safely Carrying Over Ignored Files Across Git Worktrees</title>
      <dc:creator>Satoshi Ebisawa</dc:creator>
      <pubDate>Tue, 17 Mar 2026 15:58:02 +0000</pubDate>
      <link>https://dev.to/satococoa/git-worktreeinclude-a-tiny-cli-for-safely-carrying-over-ignored-files-across-git-worktrees-5cdm</link>
      <guid>https://dev.to/satococoa/git-worktreeinclude-a-tiny-cli-for-safely-carrying-over-ignored-files-across-git-worktrees-5cdm</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/satococoa/git-worktreeinclude" rel="noopener noreferrer"&gt;https://github.com/satococoa/git-worktreeinclude&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is this?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;git-worktreeinclude&lt;/code&gt; is a CLI for safely copying Git-ignored files from the original worktree to another worktree based on the definitions in &lt;code&gt;.worktreeinclude&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Do you use &lt;code&gt;git worktree&lt;/code&gt;?&lt;br&gt;
Ever since I started using CLI-based coding agents, I’ve been using worktrees every day in my development workflow.&lt;/p&gt;

&lt;p&gt;The main benefit of worktrees is that they let you separate contexts for different tasks and work on them in parallel. Now that parallel work has become normal in team development and AI-assisted development, worktrees have become an essential part of my workflow.&lt;/p&gt;

&lt;p&gt;To make worktrees more convenient, I’ve also released OSS like the following:&lt;br&gt;
&lt;a href="https://github.com/satococoa/wtp" rel="noopener noreferrer"&gt;https://github.com/satococoa/wtp&lt;/a&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/satococoa/wtp-a-better-git-worktree-cli-tool-4i8l" class="crayons-story__hidden-navigation-link"&gt;wtp: A Better Git Worktree CLI Tool&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/satococoa" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F387347%2F3a3031af-2f53-49c9-bb63-ce1b3a3021a8.png" alt="satococoa profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/satococoa" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Satoshi Ebisawa
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Satoshi Ebisawa
                
              
              &lt;div id="story-author-preview-content-2728493" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/satococoa" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F387347%2F3a3031af-2f53-49c9-bb63-ce1b3a3021a8.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Satoshi Ebisawa&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/satococoa/wtp-a-better-git-worktree-cli-tool-4i8l" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 28 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/satococoa/wtp-a-better-git-worktree-cli-tool-4i8l" id="article-link-2728493"&gt;
          wtp: A Better Git Worktree CLI Tool
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/git"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;git&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/go"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;go&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/satococoa/wtp-a-better-git-worktree-cli-tool-4i8l" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;7&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/satococoa/wtp-a-better-git-worktree-cli-tool-4i8l#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




&lt;p&gt;Recently, I’ve mostly been using the Codex app as my coding agent.&lt;br&gt;
The Codex app makes it easy to work in parallel across local environments, worktrees, and the cloud, and it also has a mechanism for running setup scripts right after a worktree is created.&lt;/p&gt;

&lt;p&gt;With this mechanism, you can copy &lt;code&gt;.env&lt;/code&gt; from the main worktree or run &lt;code&gt;pnpm install&lt;/code&gt;.&lt;br&gt;
Also, this configuration can be managed as &lt;code&gt;PROJECT_ROOT/.codex/environments/environment.toml&lt;/code&gt;, which makes it possible to share it across a team.&lt;/p&gt;

&lt;p&gt;Example configuration&lt;br&gt;
&lt;a href="https://x.com/satococoa/status/2018562572132520118" rel="noopener noreferrer"&gt;https://x.com/satococoa/status/2018562572132520118&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had also been using a small tool I made to easily copy files from the main worktree.&lt;br&gt;
&lt;a href="https://github.com/satococoa/wtcp" rel="noopener noreferrer"&gt;https://github.com/satococoa/wtcp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, in team development, the files people want to copy right after creating a worktree often differ from person to person.&lt;/p&gt;

&lt;p&gt;I also considered adding &lt;code&gt;PROJECT_ROOT/.codex/environments/environment.toml&lt;/code&gt; to &lt;code&gt;.gitignore&lt;/code&gt;, but it never felt quite right.&lt;/p&gt;

&lt;p&gt;That was when I learned about the &lt;code&gt;.worktreeinclude&lt;/code&gt; mechanism.&lt;br&gt;
I thought it would be nice if Codex had something like this too, so I went ahead and built it myself for now.&lt;/p&gt;
&lt;h2&gt;
  
  
  Basic usage
&lt;/h2&gt;

&lt;p&gt;Basically, it works the same way as Claude Code’s &lt;code&gt;.worktreeinclude&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;First, place a &lt;code&gt;.worktreeinclude&lt;/code&gt; file in the main worktree and list the files you want to carry over between worktrees.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.env
.env.local
.vscode/settings.json
.mise.local.toml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run the following in the newly created worktree.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktreeinclude apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it.&lt;br&gt;
This copies only the files that are listed in &lt;code&gt;.worktreeinclude&lt;/code&gt; and ignored by Git, from the main worktree to the current worktree.&lt;/p&gt;

&lt;p&gt;If you combine it with the Codex app’s setup script, you can also run it automatically right after a worktree is created.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;The key feature of this tool is that, rather than simply copying files, it is designed to behave in a safety-first way.&lt;/p&gt;

&lt;p&gt;Only files that are listed in &lt;code&gt;.worktreeinclude&lt;/code&gt; and ignored by Git are eligible to be copied.&lt;br&gt;
This helps avoid accidentally copying files that are tracked by Git across worktrees.&lt;/p&gt;

&lt;p&gt;Also, if a file with different contents already exists at the destination, it will not overwrite it by default.&lt;br&gt;
You can explicitly overwrite it only when needed by passing &lt;code&gt;--force&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It’s designed for the use case where you want to carry over local-only files, but you want to avoid a sloppy sync mechanism that could cause accidents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;I think this is especially a good fit for people who use &lt;code&gt;git worktree&lt;/code&gt; regularly or who combine coding agents with parallel work across multiple tasks.&lt;/p&gt;

&lt;p&gt;I’ve already introduced it into a project I use for work, and it has been useful for me.&lt;br&gt;
If it sounds useful, give it a try.&lt;/p&gt;

</description>
      <category>git</category>
      <category>worktree</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>wtp: A Better Git Worktree CLI Tool</title>
      <dc:creator>Satoshi Ebisawa</dc:creator>
      <pubDate>Mon, 28 Jul 2025 13:42:36 +0000</pubDate>
      <link>https://dev.to/satococoa/wtp-a-better-git-worktree-cli-tool-4i8l</link>
      <guid>https://dev.to/satococoa/wtp-a-better-git-worktree-cli-tool-4i8l</guid>
      <description>&lt;p&gt;Working with multiple tasks in parallel using Claude Code has become my daily routine, making git worktree essential for my workflow.&lt;/p&gt;

&lt;p&gt;While git worktree is convenient, after creating and deleting worktrees multiple times daily, I started noticing some pain points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The worktree add command is somewhat verbose and tedious

&lt;ul&gt;
&lt;li&gt;When creating worktrees based on branch names, you end up typing the branch name twice&lt;/li&gt;
&lt;li&gt;For existing branches: &lt;code&gt;git worktree add .worktrees/hoge hoge&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;For new branches: &lt;code&gt;git worktree add -b hoge .worktrees/hoge&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;I almost always need to manually copy .env files and run npm install after creation

&lt;ul&gt;
&lt;li&gt;While Claude Code helps with this when needed, it's more efficient to automate these repetitive tasks&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Cleaning up both worktree and branch separately after completing work is tedious&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;While a simple shell script could solve these requirements, I decided to build a proper CLI tool with Claude Code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/satococoa/wtp" rel="noopener noreferrer"&gt;https://github.com/satococoa/wtp&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Main Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  wtp add
&lt;/h3&gt;

&lt;p&gt;While git worktree requires specifying both path and branch name, wtp only needs the branch name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create new branch with worktree&lt;/span&gt;
wtp add &lt;span class="nt"&gt;-b&lt;/span&gt; feature/new-auth

&lt;span class="c"&gt;# Review PR (existing remote branch)&lt;/span&gt;
wtp add fix/hogefuga
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The worktree path is automatically generated according to &lt;code&gt;.wtp.yml&lt;/code&gt; configuration (defaults to &lt;code&gt;../worktrees&lt;/code&gt;). Remote branch tracking is also automatic.&lt;/p&gt;

&lt;h3&gt;
  
  
  post create hook
&lt;/h3&gt;

&lt;p&gt;Define post_create in &lt;code&gt;.wtp.yml&lt;/code&gt; to automatically execute commands after worktree creation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;hooks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;post_create&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;copy&lt;/span&gt;
      &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.env.example&lt;/span&gt;
      &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.env&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;command&lt;/span&gt;
      &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;npm&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;install"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Automate common tasks like copying .env files and installing dependencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  remove --with-branch
&lt;/h3&gt;

&lt;p&gt;Since deleting worktree and branch separately is tedious, I made it possible to delete both together.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# With regular git worktree&lt;/span&gt;
git worktree remove feature/done
git branch &lt;span class="nt"&gt;-d&lt;/span&gt; feature/done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With wtp, you can delete both in one command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wtp remove feature/done &lt;span class="nt"&gt;--with-branch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Warnings are shown for unmerged branches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  When urgent fixes come in during development
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create new worktree while keeping current feature work&lt;/span&gt;
wtp add &lt;span class="nt"&gt;-b&lt;/span&gt; hotfix/urgent-bug

&lt;span class="c"&gt;# Fix bug and create PR&lt;/span&gt;
&lt;span class="c"&gt;# ...&lt;/span&gt;

&lt;span class="c"&gt;# Delete both worktree and branch after completion&lt;/span&gt;
wtp remove hotfix/urgent-bug &lt;span class="nt"&gt;--with-branch&lt;/span&gt;

&lt;span class="c"&gt;# Return to original work&lt;/span&gt;
wtp &lt;span class="nb"&gt;cd &lt;/span&gt;feature/new-auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  PR Review
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# When review request comes in (for existing remote branch)&lt;/span&gt;
wtp add feature/pr-123

&lt;span class="c"&gt;# Actually run the application for review&lt;/span&gt;
&lt;span class="c"&gt;# ...&lt;/span&gt;

&lt;span class="c"&gt;# Delete worktree after review (remote branch remains)&lt;/span&gt;
wtp remove feature/pr-123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Other Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  wtp list
&lt;/h3&gt;

&lt;p&gt;Display worktree list in a clean format.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;% wtp list
PATH                           BRANCH           STATUS  HEAD
&lt;span class="nt"&gt;----&lt;/span&gt;                           &lt;span class="nt"&gt;------&lt;/span&gt;           &lt;span class="nt"&gt;------&lt;/span&gt;  &lt;span class="nt"&gt;----&lt;/span&gt;
@                              main             managed 99c30171
feature/add-auth               feature/add-auth managed 99c30171
fix/123/hogefuga&lt;span class="k"&gt;*&lt;/span&gt;              fix/123/hogefuga managed 99c30171
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  wtp cd
&lt;/h3&gt;

&lt;p&gt;Navigate between worktrees with shell integration and tab completion.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Move to worktree&lt;/span&gt;
wtp &lt;span class="nb"&gt;cd &lt;/span&gt;feature/auth

&lt;span class="c"&gt;# Return to main worktree&lt;/span&gt;
wtp &lt;span class="nb"&gt;cd&lt;/span&gt; @

&lt;span class="c"&gt;# Tab completion is available&lt;/span&gt;
wtp &lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;TAB&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuration File (.wtp.yml)
&lt;/h3&gt;

&lt;p&gt;Define project-specific settings. Generate initial config with &lt;code&gt;wtp init&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wtp init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Complete configuration file structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.0"&lt;/span&gt;
&lt;span class="na"&gt;defaults&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;base_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;../worktrees"&lt;/span&gt;  &lt;span class="c1"&gt;# worktree creation location&lt;/span&gt;

&lt;span class="na"&gt;hooks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;post_create&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# File copying&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;copy&lt;/span&gt;
      &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.env.example"&lt;/span&gt;
      &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.env"&lt;/span&gt;

    &lt;span class="c1"&gt;# Command execution (environment variables can be set)&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;command&lt;/span&gt;
      &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bundle&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;install"&lt;/span&gt;
      &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;development"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Homebrew
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;satococoa/tap/wtp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Go install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/satococoa/wtp/cmd/wtp@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Shell Integration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;When installed via Homebrew&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;zsh: Completion files are automatically placed. No additional setup needed if FPATH is correctly configured&lt;/li&gt;
&lt;li&gt;bash/fish: Completion files are placed, but refer to each shell's documentation for detailed setup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Manual shell integration setup&lt;/strong&gt; (when installed via go install, etc.):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Zsh: Add to ~/.zshrc&lt;/span&gt;
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;wtp completion zsh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Bash: Add to ~/.bashrc&lt;/span&gt;
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;wtp completion bash&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Fish: Add to ~/.config/fish/config.fish&lt;/span&gt;
wtp completion fish | &lt;span class="nb"&gt;source&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📝 I primarily use zsh, so bash/fish functionality is untested&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Go?
&lt;/h2&gt;

&lt;p&gt;I consulted with Claude Code on language choice. Reasons for choosing Go:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single binary distribution (easy installation via brew or go install)&lt;/li&gt;
&lt;li&gt;Easy cross-platform support&lt;/li&gt;
&lt;li&gt;Static typing helps AI write more stable code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After actually developing with it, I found Go well-suited for Agentic Coding. With static typing and built-in fmt and linting, minimal configuration is needed. Adding golangci-lint and GoReleaser makes CI/CD work seamlessly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;I created a tool to solve the tedious aspects of git worktree. If you have similar frustrations, please give it a try.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/satococoa/wtp" rel="noopener noreferrer"&gt;https://github.com/satococoa/wtp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>go</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Boost Productivity: Using git-worktree with AI Coding Tools</title>
      <dc:creator>Satoshi Ebisawa</dc:creator>
      <pubDate>Wed, 14 May 2025 15:01:44 +0000</pubDate>
      <link>https://dev.to/satococoa/boost-productivity-using-git-worktree-with-ai-coding-tools-2lln</link>
      <guid>https://dev.to/satococoa/boost-productivity-using-git-worktree-with-ai-coding-tools-2lln</guid>
      <description>&lt;p&gt;Are you enjoying working with your favorite coding agents (&lt;a href="https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt;, &lt;a href="https://www.cursor.com/" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;, &lt;a href="https://docs.anthropic.com/en/docs/claude-code/overview" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt;, &lt;a href="https://help.openai.com/en/articles/11096431-openai-codex-cli-getting-started" rel="noopener noreferrer"&gt;OpenAI Codex&lt;/a&gt;, ...etc.) ?&lt;/p&gt;

&lt;p&gt;Even these agents are getting faster and faster, you'll often find yourself waiting for them to finish their work.&lt;br&gt;
While waiting for them, what do you usually do?&lt;/p&gt;

&lt;p&gt;Editing your code while agents are working will confuse them. So, is waiting all you can do?&lt;/p&gt;

&lt;p&gt;If you use &lt;a href="https://git-scm.com/docs/git-worktree" rel="noopener noreferrer"&gt;git-worktree&lt;/a&gt;, you can do all of the following while your agents are working:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix another pull request to respond to your colleagues' code review&lt;/li&gt;
&lt;li&gt;Fetch your colleagues' pull request and review locally&lt;/li&gt;
&lt;li&gt;Tackle other issues&lt;/li&gt;
&lt;li&gt;Work on documentation or tests in a separate branch&lt;/li&gt;
&lt;li&gt;Handle urgent bug fixes&lt;/li&gt;
&lt;li&gt;Let one agent generate code in one branch while you review another agent's output in a different branch&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's git-worktree?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;git worktree&lt;/code&gt; lets you check out multiple branches into &lt;strong&gt;separate directories&lt;/strong&gt; simultaneously. Unlike &lt;code&gt;git checkout&lt;/code&gt; which switches your entire working directory, worktrees create additional working directories that all link back to your main repository.&lt;/p&gt;

&lt;p&gt;The main benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Work on multiple branches at once without stashing/committing&lt;/li&gt;
&lt;li&gt;Each directory has its own independent state&lt;/li&gt;
&lt;li&gt;All worktrees share the same Git history (efficient storage)&lt;/li&gt;
&lt;li&gt;Perfect for parallel development workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to use
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a worktree for an existing branch&lt;/span&gt;
git worktree add ../feature-login feature/login

&lt;span class="c"&gt;# Create a new branch and worktree in one command&lt;/span&gt;
git worktree add &lt;span class="nt"&gt;-b&lt;/span&gt; fix/api-error ../api-fix main

&lt;span class="c"&gt;# List all your worktrees&lt;/span&gt;
git worktree list

&lt;span class="c"&gt;# Remove a worktree when done&lt;/span&gt;
git worktree remove ../feature-login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember that &lt;code&gt;.env&lt;/code&gt; files and other files in &lt;code&gt;.gitignore&lt;/code&gt; won't be copied to new worktrees. Copy these manually when needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By combining git worktree with coding agents, you unlock a truly parallel development workflow. While agents are busy generating code in one directory, you can be productive in another. This approach eliminates idle waiting time and maximizes your productivity.&lt;/p&gt;

</description>
      <category>git</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to setup an official GitHub MCP Server without Docker nor Installing</title>
      <dc:creator>Satoshi Ebisawa</dc:creator>
      <pubDate>Sat, 10 May 2025 14:29:09 +0000</pubDate>
      <link>https://dev.to/satococoa/how-to-setup-an-official-github-mcp-server-without-docker-nor-installing-g6f</link>
      <guid>https://dev.to/satococoa/how-to-setup-an-official-github-mcp-server-without-docker-nor-installing-g6f</guid>
      <description>&lt;p&gt;GitHub offers an official GitHub MCP Server that enhances AI assistants with GitHub capabilities:&lt;br&gt;
&lt;a href="https://github.com/github/github-mcp-server" rel="noopener noreferrer"&gt;https://github.com/github/github-mcp-server&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While the official installation process recommends Docker, you don't actually need it.&lt;/p&gt;

&lt;p&gt;If you're familiar with other MCPs, you know the &lt;code&gt;npx&lt;/code&gt; or &lt;code&gt;uvx&lt;/code&gt; approach that doesn't require Docker or installation. &lt;/p&gt;

&lt;p&gt;You can use github-mcp-server in the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Setup (Example for Claude Desktop)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"github"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/Users/satoshi/.local/share/mise/shims/go"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"run"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"github.com/github/github-mcp-server/cmd/github-mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"--dynamic-toolsets"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"GITHUB_PERSONAL_ACCESS_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;YOUR PAT&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"HOME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/Users/satoshi"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Important notes:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;code&gt;command&lt;/code&gt;, enter your full path to the Go executable (find it with &lt;code&gt;which go&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;go run&lt;/code&gt; compiles and runs Go programs without an explicit "Install" process (similar to &lt;code&gt;npx&lt;/code&gt; or &lt;code&gt;uvx&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;HOME&lt;/code&gt; environment variable is required specifically for Claude Desktop&lt;/li&gt;
&lt;li&gt;You'll need a GitHub Personal Access Token with appropriate permissions&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>go</category>
      <category>mcp</category>
      <category>github</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
