# Devpit documentation (full text) > Every page of https://devpit.zubyr.dev/docs except the blog, as plain Markdown, in reading order. Each page is also served on its own: add .md to its URL. # Get started with Devpit on Windows Install Devpit with one PowerShell line, Scoop or a zip file, then take the first-launch tour and set up the icon font. Devpit is a free toolkit for developers on Windows 10 and 11, in one terminal menu. It runs on x64 and ARM64. This page takes you from nothing to your first useful run. ## Install Devpit Pick one way. The first one is the easiest. ### Option 1: the PowerShell one-liner 1. Open **Windows Terminal** or **PowerShell**. 2. Paste this line and press `Enter`. ```powershell irm https://devpit.zubyr.dev/install | iex ``` 3. Wait for the six steps to finish. The installer: 1. finds the latest release on GitHub, 2. downloads the zip for your PC (x64 or ARM64), 3. checks its SHA256 checksum, 4. puts `devpit.exe` and `devpit-shim.exe` in `%LOCALAPPDATA%\Programs\devpit`, 5. installs the [icon font](https://devpit.zubyr.dev/docs/getting-started#the-icon-font), 6. if Claude Code is on your PC, asks `Let AI agents (Claude Code) use Devpit? [y/N]`. The default is No. See [Using Devpit with AI agents](https://devpit.zubyr.dev/docs/ai-agents). 4. The installer adds that folder to your user PATH. Open a new terminal window, or run the path it prints. 5. Type `devpit` and press `Enter`. You do not need administrator rights. The installer never asks for them. To skip the icon font, pass `-NoFont`. The `iex` command cannot take flags, so use a script block: ```powershell & ([scriptblock]::Create((irm https://devpit.zubyr.dev/install))) -NoFont ``` Pass `-NoAgent` the same way and the installer never asks about the AI agent skill. If Devpit is already installed, the installer asks what to do. Type `U` to update, `R` to remove, or `C` to cancel. ### Option 2: Scoop Scoop keeps Devpit up to date for you. 1. Add the bucket once: ```powershell scoop bucket add zubyr https://github.com/zubairbinshaukat/scoop-bucket ``` 2. Install: ```powershell scoop install devpit ``` 3. Type `devpit`. Scoop does not install the icon font. Run `devpit font install` afterwards, or use Settings. See [the icon font](https://devpit.zubyr.dev/docs/getting-started#the-icon-font). ### Option 3: the zip file 1. Open the [latest release on GitHub](https://github.com/zubairbinshaukat/devpit/releases/latest). 2. Download the zip that matches your PC: - `devpit__windows_amd64.zip` for most PCs (x64) - `devpit__windows_arm64.zip` for ARM PCs 3. Unzip it. Inside is `devpit.exe`. 4. Put `devpit.exe` in a folder you like, for example `C:\Tools`. 5. To run it from anywhere, add that folder to your PATH. You can also build it yourself. Devpit needs Go 1.26 or newer and no C compiler: ```powershell git clone https://github.com/zubairbinshaukat/devpit cd devpit go build -o devpit.exe . ``` ### Check your download (optional) Each release has a `checksums.txt` file. To check a zip by hand: ```powershell Get-FileHash .\devpit_0.2.0_windows_amd64.zip -Algorithm SHA256 ``` The hash must match the line for that file in `checksums.txt`. Releases also carry a build attestation. If you use the GitHub CLI you can check it: ```powershell gh attestation verify .\devpit_0.2.0_windows_amd64.zip --repo zubairbinshaukat/devpit ``` > **Note: SmartScreen** > > Devpit is not code-signed yet. > Windows SmartScreen may say the publisher is unknown the first time you run it. > The checks above show that the file is the one GitHub built. ## First launch Type `devpit` in a terminal. Use a window at least 80 columns wide and 24 rows tall. Windows Terminal works best. The first time, a short wizard asks four things. Press `Enter` to go forward and `Esc` to go back. Nothing is saved until the last step, so you can stop and start again. 1. **Welcome.** Shows what Devpit is and three promises: nothing is deleted without a preview and a confirmation, the default answer is always No, and nothing leaves your PC unless you turn usage stats on. 2. **Icons.** Shows a few icons and asks "Do these look like icons?". Answer Yes only if you see icons and not boxes. If the installer put the font in, this starts on Yes. Terminals that can only show plain characters skip this step. 3. **Theme.** Pick a look. The screen repaints as you move, so you choose by looking. There are seven: auto, dark, light, aqua, blue, rose and mono. 4. **Privacy.** Usage stats. It starts on No. Read [Safety and privacy](https://devpit.zubyr.dev/docs/safety-and-privacy) to see exactly what would be sent. *Screenshot: Devpit first-run wizard, step 1 of 4, Welcome, listing three promises: nothing is deleted without a preview and confirmation, the default answer is No, and nothing leaves the PC unless usage stats are on* After the wizard you see the main menu. *Screenshot: Devpit main menu with the block-letter DEVPIT logo and six sections: Accounts, Free Up Disk Space, Ports & Network, Install & Update, Share Files and Devpit Settings* The menu has six sections, in this order: | Key | Section | What is inside | Guide | | --- | --- | --- | --- | | `1` | Accounts | The right account in every folder for Claude Code, Git, GitHub, Vercel and more | [Accounts](https://devpit.zubyr.dev/docs/features/accounts) | | `2` | Free Up Disk Space | Scan and clean dev junk, caches and temp files | [Free up disk space](https://devpit.zubyr.dev/docs/features/free-up-disk-space) | | `3` | Ports & Network | **Fix stuck ports & apps** and **Network tools** | [Fix stuck ports](https://devpit.zubyr.dev/docs/features/fix-stuck-ports), [Network tools](https://devpit.zubyr.dev/docs/features/network-tools) | | `4` | Install & Update | **Install developer apps** and **Update everything** | [Install developer apps](https://devpit.zubyr.dev/docs/features/install-developer-apps), [Update everything](https://devpit.zubyr.dev/docs/features/update-everything) | | `5` | Share Files | Move big folders between two PCs on your network | [Share files](https://devpit.zubyr.dev/docs/features/share-files) | | `6` | Devpit Settings | Theme, icons, never-touch list, dev ports, privacy | [Settings](https://devpit.zubyr.dev/docs/features/settings) | **Ports & Network** and **Install & Update** each open a small menu with two entries. Press `1` or `2` there, or move and press `Enter`. Move with `↑` and `↓`, press `Enter` to open a section, and press `Esc` to go back. Press `?` on any screen to see its keys. Press `q` on the main menu to quit. The mouse works too. See [Keyboard and mouse](https://devpit.zubyr.dev/docs/keyboard-and-mouse) for every key. ## Your first run Pick the section for the job you have. Two common first steps: ### Use another account in a folder 1. Open a terminal in the folder, for example `cd C:\Work`, and type `devpit`. 2. Press `1` for **Accounts**. You see each tool, the account it uses here, and why. 3. Open a tool, choose **Use another account here…**, pick the account and read the preview. The full steps are in [Accounts](https://devpit.zubyr.dev/docs/features/accounts). ### Free up disk space 1. On the main menu press `2`. 2. Choose **Project Junk**. 3. Pick the folder where your projects live. 4. Wait for the scan. Devpit lists what it found, with sizes. 5. Look at the list. Untick anything you want to keep. 6. Press `d`, read the question, and answer. Nothing is deleted until you confirm. The default answer is No. The full steps are in [Free up disk space](https://devpit.zubyr.dev/docs/features/free-up-disk-space). ## The icon font Devpit can draw small icons for folders, Git and Node. Windows Terminal does not ship a font with those icons, so Devpit uses a helper font. Without it, Devpit still works and shows plain shapes and letters. **What it is.** The font is **Symbols Nerd Font Mono**, from the Nerd Fonts project. It contains only icons, no letters. Devpit downloads a fixed version from GitHub and checks its checksum before it installs anything. **What installing does.** 1. Installs the font for your user only. It needs no admin rights. 2. Adds it to Windows Terminal as a fallback font. Your own font stays the main font. 3. Saves a copy of your Windows Terminal `settings.json` first, next to it, with the ending `.devpit-bak`. After installing, close all Windows Terminal windows and open one again. **Install it.** Any one of these: - The installer does it for you, unless you used `-NoFont`. - Run `devpit font install`. - Open Devpit, go to **Settings**, and choose **Icon font**. **Check it.** ```powershell devpit font status ``` **Remove it.** ```powershell devpit font remove ``` This removes the font and puts your old Windows Terminal settings back. The uninstall choice in the installer does this too. If your icons still look like boxes, see [Troubleshooting](https://devpit.zubyr.dev/docs/troubleshooting). You can always turn icons off in Settings and use the plain shapes. ## Update Devpit Devpit checks GitHub once a day for a newer version. When there is one, a small `update` label appears in the header. Nothing is downloaded or replaced for you. To update: - **Installed with the one-liner:** run the same line again and type `U`. - **Installed with Scoop:** run `scoop update devpit`. **Settings**, then **About Devpit**, shows the right command for your install. You can turn the check off in Settings. See [What's new](https://devpit.zubyr.dev/docs/whats-new) for what each release changed. ### After an update The first time you open Devpit after an update to a new version, a **What's new** card comes before the main menu, once. It says what is new in a line or two, lists **Where things moved** (for example, Git & SSH is now under Accounts › Git), and links to the full notes. If Claude Code is on your PC and Devpit's AI agent skill is missing or older, the card also offers it: press `a` to open the **AI agent skill** screen. Nothing is installed until you say yes there. Press `Enter` to go on to the main menu. *Screenshot: What's new card shown once after updating to Devpit 0.4: Accounts is new, where Git & SSH, the ports and network tools and Install and Update moved, an offer to open the AI agent skill screen, and the link to the full notes* The card is never shown on a fresh install (the first-run wizard covers it) or when you run a `devpit` command. To see it again, open **Settings**, then **What's new**. ## Uninstall Devpit If you used **Accounts**, run this first, while Devpit is still installed: ```powershell devpit accounts cleanup ``` It lists what Devpit added for accounts (folder rules, shims and their PATH entry, its Git files and the block at the end of your `.gitconfig`, the `github.com` sign-in helper, Wrangler bindings, the agent skill) and removes only that after you say yes. Without it, Git keeps reading Devpit's rules file, and pushes to GitHub would still ask Devpit's helper, which is gone. Account folders and sign-ins are never deleted. Add `--copy-links` to turn shared Claude Code skills and folders into each account's own copies. Then: - **Installed with the one-liner:** run the install line again and type `R`. It removes Devpit, the icon font, Devpit's AI agent skill and its PATH entry. Your settings are left alone. - **Installed with Scoop:** run `scoop uninstall devpit`. - **Zip file:** delete `devpit.exe`. Settings stay in `%APPDATA%\devpit`. Delete that folder if you want them gone too. ## Next steps - [Accounts](https://devpit.zubyr.dev/docs/features/accounts): the right account in every folder. - [Free up disk space](https://devpit.zubyr.dev/docs/features/free-up-disk-space): get space back from `node_modules`, caches and build folders. - [Safety and privacy](https://devpit.zubyr.dev/docs/safety-and-privacy): how deleting and switching accounts are protected. - [All features](https://devpit.zubyr.dev/docs/features): one short guide for each section. ## Common questions ### Do I need administrator rights to install Devpit? No. The installer puts devpit.exe in your own user folder, adds that folder to your user PATH and installs the icon font for your user only. Windows only asks for admin later, for the few jobs that need it, such as Chocolatey updates. ### Is it safe to run the install one-liner? The script is short and readable at devpit.zubyr.dev/install. It downloads the latest release from GitHub, checks the SHA256 checksum against the checksums.txt file published with that release, and installs nothing if the checksum does not match. ### How do I install Devpit without the icon font? Run the installer through a script block and pass -NoFont. The exact command is in the install steps on this page. You can add the font later from Settings, Icon font. ### Windows SmartScreen warns about Devpit. Is that normal? Yes, for now. Devpit is not code-signed yet, so SmartScreen may say the publisher is unknown. You can check the download yourself with the SHA256 checksum and the build attestation on the GitHub release page. ### Where does Devpit keep its settings? In one file, %APPDATA%\devpit\config.toml. Caches and logs are in %LOCALAPPDATA%\devpit. Nothing in either folder is uploaded. ## Related - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [Free up disk space and delete node_modules on Windows](https://devpit.zubyr.dev/docs/features/free-up-disk-space): Find and delete node_modules, build folders, caches and other developer junk safely, with a preview, risk labels and a confirmation before anything goes. - [Devpit keyboard shortcuts and mouse controls](https://devpit.zubyr.dev/docs/keyboard-and-mouse): Every Devpit shortcut in one place, from the main menu keys to the results table, plus what clicking, scrolling and hovering do with the mouse. - [Is Devpit safe? What it protects and what it sends](https://devpit.zubyr.dev/docs/safety-and-privacy): How Devpit protects your files and accounts with previews, a default of No and undo, why it stores no tokens, and exactly what opt-in usage stats send. --- Canonical page: https://devpit.zubyr.dev/docs/getting-started # Devpit documentation Docs for Devpit, the free toolkit for developers on Windows. The right account in every folder, disk space back, stuck ports freed and tools updated. Devpit is a free toolkit for developers on Windows 10 and 11, in one terminal menu. It is small, fast and open source. These pages show you how to use it, one step at a time. ## Install in one line Open PowerShell and run: ```powershell irm https://devpit.zubyr.dev/install | iex ``` Then type `devpit`. No administrator rights needed. [Other ways to install](https://devpit.zubyr.dev/docs/getting-started) include Scoop and a plain zip file. ## What do you want to do? - [Use the right account in every folder](https://devpit.zubyr.dev/docs/features/accounts): Claude Code, Git, GitHub, Vercel and more pick the account you set for each folder. Preview, undo, verify. - [Free up disk space](https://devpit.zubyr.dev/docs/features/free-up-disk-space): Find node_modules, build folders and caches. See the size. Delete only what you tick. - [Fix a stuck port](https://devpit.zubyr.dev/docs/features/fix-stuck-ports): Port 3000 already in use? See who holds it and stop it after you confirm. - [Network tools](https://devpit.zubyr.dev/docs/features/network-tools): Local and public IP, ping and DNS flush. - [Install developer apps](https://devpit.zubyr.dev/docs/features/install-developer-apps): Pick from a short list. Devpit installs through Scoop, winget or Chocolatey. - [Update everything](https://devpit.zubyr.dev/docs/features/update-everything): One pass through winget, Scoop, Chocolatey and npm. Untick what you want to keep. - [Share files](https://devpit.zubyr.dev/docs/features/share-files): Copy a big folder between two PCs on your network, with resume. - [Settings](https://devpit.zubyr.dev/docs/features/settings): Themes, icons, the never-touch list, dev ports and usage stats. ## Why you can trust it - **Nothing changes without a preview**: You always see what will happen first. Nothing is deleted or switched until you confirm, and the default answer is **No**. - **No tokens**: Each tool keeps its own login. Devpit stores no token, and every account change can be undone. - **Risk labels on everything**: **Safe**, **Review** or **Careful**. Careful items need a typed word and go to the Recycle Bin. - **Nothing is sent by default**: Usage stats are off until you turn them on, and they never include file names or paths. - **Open source**: MIT licence. Releases have checksums and a build attestation. Read every rule in the [safety and privacy](https://devpit.zubyr.dev/docs/safety-and-privacy) page. ## Reference - [Keyboard and mouse](https://devpit.zubyr.dev/docs/keyboard-and-mouse): Every shortcut in one place. - [Command line](https://devpit.zubyr.dev/docs/command-line): Every devpit command and flag. - [Troubleshooting](https://devpit.zubyr.dev/docs/troubleshooting): Plain-words fixes for real problems. - [What's new](https://devpit.zubyr.dev/docs/whats-new): What changed in each release. Made by [Zubair bin Shaukat](https://zubyr.dev) in Lahore. Devpit is open source. [Report a problem or suggest something](https://github.com/zubairbinshaukat/devpit/issues). ## Common questions ### What is Devpit? Devpit is a free, open-source toolkit for developers on Windows. One terminal menu puts the right account in every folder for Claude Code, Git, GitHub and more, frees disk space, fixes stuck ports, installs and updates your tools and moves big folders between PCs. ### How do I install Devpit? In PowerShell run irm https://devpit.zubyr.dev/install | iex, or add the zubyr Scoop bucket and run scoop install devpit. You can also download the zip from GitHub. No administrator rights are needed. ### Which versions of Windows does Devpit support? Windows 10 and Windows 11, on x64 and ARM64. Linux and macOS are planned. ### Is Devpit free? Yes. Devpit is free and open source under the MIT licence. There is no account, and usage stats are off unless you turn them on. ### Where do I start? Read Getting started to install Devpit and take the first-launch tour. Then pick the section you need: Accounts if you use more than one account, Free up disk space if your drive is full. ## Related - [Get started with Devpit on Windows](https://devpit.zubyr.dev/docs/getting-started): Install Devpit with one PowerShell line, Scoop or a zip file, then take the first-launch tour and set up the icon font. - [All features](https://devpit.zubyr.dev/docs/features): Everything the Devpit toolkit does on Windows, one short guide per feature, from accounts per folder and disk space to stuck ports and sharing big folders. - [Troubleshooting](https://devpit.zubyr.dev/docs/troubleshooting): Plain-words fixes for real Devpit and Windows problems, from winget error codes to stuck ports and icons that show as boxes. --- Canonical page: https://devpit.zubyr.dev/docs # All features Everything the Devpit toolkit does on Windows, one short guide per feature, from accounts per folder and disk space to stuck ports and sharing big folders. Devpit has one menu with six sections. Each feature has its own guide. | Key | Section | Guides | | --- | --- | --- | | `1` | Accounts | [Accounts](https://devpit.zubyr.dev/docs/features/accounts), [Claude Code](https://devpit.zubyr.dev/docs/features/accounts-claude-code), [Git and GitHub](https://devpit.zubyr.dev/docs/features/accounts-git-and-github), [Other tools](https://devpit.zubyr.dev/docs/features/accounts-other-tools) | | `2` | Free Up Disk Space | [Free up disk space](https://devpit.zubyr.dev/docs/features/free-up-disk-space) | | `3` | Ports & Network | [Fix stuck ports and apps](https://devpit.zubyr.dev/docs/features/fix-stuck-ports), [Network tools](https://devpit.zubyr.dev/docs/features/network-tools) | | `4` | Install & Update | [Install developer apps](https://devpit.zubyr.dev/docs/features/install-developer-apps), [Update everything](https://devpit.zubyr.dev/docs/features/update-everything) | | `5` | Share Files | [Share files](https://devpit.zubyr.dev/docs/features/share-files) | | `6` | Devpit Settings | [Settings](https://devpit.zubyr.dev/docs/features/settings) | - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [Two Claude Code accounts on one Windows PC](https://devpit.zubyr.dev/docs/features/accounts-claude-code): Add a second Claude Code account with Devpit, pick which folders use it, and bring your skills, agents, commands and settings over without copying a login. - [A different Git and GitHub account per folder](https://devpit.zubyr.dev/docs/features/accounts-git-and-github): Commit with your work email in C:\Work and push as the right GitHub account, with gh, HTTPS or an SSH key. Devpit shows the exact Git lines it writes. - [Vercel, Firebase, Supabase, Cloudflare and Convex accounts](https://devpit.zubyr.dev/docs/features/accounts-other-tools): What Devpit can switch for Vercel, Firebase, Supabase, Cloudflare and Convex, how it applies each account, and what it cannot do, in plain words. - [Free up disk space and delete node_modules on Windows](https://devpit.zubyr.dev/docs/features/free-up-disk-space): Find and delete node_modules, build folders, caches and other developer junk safely, with a preview, risk labels and a confirmation before anything goes. - [Fix "port 3000 is already in use" on Windows](https://devpit.zubyr.dev/docs/features/fix-stuck-ports): Free a busy port such as 3000 or 5173 in two keystrokes, list busy dev ports, and stop stuck Node processes safely with Devpit. - [Check your IP, ping a host and flush DNS on Windows](https://devpit.zubyr.dev/docs/features/network-tools): See your local and public IP address, ping a host to test your connection, and clear the Windows DNS cache from one Devpit menu. - [Install developer apps on Windows with Devpit](https://devpit.zubyr.dev/docs/features/install-developer-apps): Pick developer tools from a short list and let Devpit install them through Scoop, winget or Chocolatey, one at a time, with live progress. - [Update all your Windows apps and dev tools at once](https://devpit.zubyr.dev/docs/features/update-everything): Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. - [Copy big folders between two PCs on your network](https://devpit.zubyr.dev/docs/features/share-files): Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. - [Devpit settings, themes, icons and the never-touch list](https://devpit.zubyr.dev/docs/features/settings): Every Devpit setting explained, from themes and icons to usage stats, the never-touch list, dev ports and the icon font, and where the settings file lives. --- Canonical page: https://devpit.zubyr.dev/docs/features # Use the right account in every folder on Windows Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. You use more than one account: a work GitHub and a personal one, two Claude Code subscriptions, a client's Vercel team. **Accounts** remembers which account each folder uses. After that, `claude`, `git`, `gh`, `vercel`, `firebase`, `supabase` and `wrangler` use the right one in that folder by themselves. Open it from the main menu with `1`, or click the **Accounts** tab. > **Note: Rules apply in terminals** > > Rules apply to the tools you start in a terminal: Windows Terminal, PowerShell, cmd, Git Bash and the VS Code terminal, and to scripts and AI agents started there. > Editor extensions and desktop apps (for example the Claude desktop app or a VS Code extension) keep their own login. > Devpit does not switch those. ## What the Accounts page shows The page answers one question for the folder you are in: which account does each tool use here, and why? "Here" is the folder your terminal was in when you started `devpit`. *Screenshot: Devpit Accounts page for a project folder: each tool with the account it uses there and why, such as a folder rule on C:\Projects, everywhere, or set by the project's .env.local for Convex* The screenshots on this page use a made-up PC. The last column is the **why**: | Why | Meaning | | --- | --- | | `everywhere` | No folder rule applies here, so the tool uses the account you picked for everywhere. Until you pick one, that is `default`: the tool's own normal sign-in. | | `folder rule: C:\Work` | You set a rule for that folder. It covers the folder and every folder inside it. | | `set by this project's .env.local` | The project picks the account (Convex). Devpit shows it but does not change it. | | `not signed in` / `not installed` | The tool has no login yet, or Devpit cannot find it. Rules you made for it are kept. | An account shown as `default (not checked yet)` is the tool's own sign-in, which Devpit has not asked the tool about yet. Press `v` to check it. Under the table, the page explains the words **Folder rule** and **Not checked yet** whenever the table uses them. When rules are nested, the nearest folder wins, one tool at a time. A rule on `C:\Work\client-api` beats a rule on `C:\Work` inside `client-api`, for that tool only. The tool page shows the chain of rules and which one won. If you start Devpit in your home folder or at a drive root, "here" means little, so Devpit asks you to pick a folder first. Devpit never runs Claude Code's own sign-in check to fill this page. On some Claude Code versions that check can sign an idle account out (Claude Code issue [#95822](https://github.com/anthropics/claude-code/issues/95822)). The page shows the account Devpit has on record, and [Verify](https://devpit.zubyr.dev/docs/features/accounts#verify-before-you-push-or-deploy) asks Claude Code only when you say so. ## Switch an account, step by step This example makes Claude Code use your `work` account in `C:\Work`. 1. Open a terminal in the folder, for example `cd C:\Work`, and type `devpit`. 2. Press `1` to open **Accounts**. 3. Move to the **Claude Code** row and press `Enter`. The tool page opens with a **Right now** block: who is signed in here, why that account (**Why this one**), and which account other folders use. Below it are the choices, grouped: **Change the account** (**Use another account here**, **Use another account everywhere**, **Use another account just once**, and **Forget this folder's choice** when a folder rule applies), **Sign in** (**Sign in again**, **Sign in with another account**), **Claude Code setup** and **Manage** (**Rename or remove an account**). The highlighted choice is explained beside the list, with what happens when you press `Enter`. A choice a tool cannot make stays in the list, greyed, with the reason. Press `v` to check who the tool is really signed in as. *Screenshot: Claude Code page in Devpit Accounts: a Right now block with who is signed in here, why that account and which one other folders use, then choices grouped under Change the account, Sign in, Claude Code setup and Manage, with the highlighted choice explained beside them* 4. Choose **Use another account here**. 5. Pick the account from the list. Type to filter it. If the account is not there yet, choose **+ Sign in with another account**: Devpit runs the tool's own sign-in, you finish it in the browser, and you give the account a short name such as `work`. See [Add a second Claude Code account](https://devpit.zubyr.dev/docs/features/accounts-claude-code#add-a-second-account). *Screenshot: Account picker asking which Claude Code account to use, with default and work listed, a type-to-filter box and Sign in with another account at the end* 6. Answer **Where should work be used?** See [Where a rule applies](https://devpit.zubyr.dev/docs/features/accounts#where-a-rule-applies). 7. Read the preview. It says in plain words what will change, and the exact lines Devpit will write. The question **Make this change?** starts on **No**. *Screenshot: Plain-words preview of a Claude Code folder rule, listing the line Devpit will write to accounts.toml, with a Make this change question that starts on No* 8. Press `y`. Devpit makes the change and shows each step as it happens. Press `l` to see the raw log. 9. The done card shows the result. Press `v` to verify, `u` to undo, or `Enter` to go back to Accounts. *Screenshot: Done card after an account change with a tick for each step and keys to verify, undo or go back to Accounts* From then on, `claude` started in `C:\Work`, or in any folder inside it, uses `work`. The first time a tool gets a second account or a rule, Devpit adds its shim folder to your user PATH. **Open a new terminal** after that: terminals that were already open do not see the new PATH. ### How it works, in one paragraph For Claude Code, GitHub's `gh`, Vercel, Firebase and Supabase, Devpit puts a small program with the tool's name (a **shim**, for example `claude.exe`) in `%LOCALAPPDATA%\Programs\devpit\shims`, first on your user PATH. When you run `claude`, the shim finds the nearest folder rule and starts the real Claude Code with that account, for that one process. Git uses its own `includeIf` rules instead, and Cloudflare uses Wrangler's own folder bindings, so neither needs a shim. A shim is only made when a tool gets its second account or its first rule. If the shim cannot read Devpit's rules for any reason, it starts the real tool untouched and prints one warning line. A broken Devpit never stops a tool from running. ## Where a rule applies After you pick an account, Devpit asks where it should be used: *Screenshot: Where should work be used question with four choices: This folder, Everywhere, Just this once and Another folder* | Choice | What it does | | --- | --- | | **This folder** | This folder and every folder inside it. | | **Everywhere** | Every folder without a choice (a folder rule) of its own. The preview lists the folder rules that still win. | | **Just this once** | One command with that account. Devpit shows the `devpit run` command to type in any terminal, ready to copy. Nothing is saved, so there is nothing to undo. | | **Another folder** | Pick a different folder, or type its path. The rule covers it and every folder inside it. | *Screenshot: Just this once screen showing the devpit claude run command to run one command with the work account, with nothing saved (Just this once: the command to run, with nothing saved)* Not every tool offers every choice. Git has no "just this once", because Git takes its identity from config files, not from a sign-in. Cloudflare has no "everywhere" in this version. Convex has none, because Devpit does not switch Convex. [Other tools](https://devpit.zubyr.dev/docs/features/accounts-other-tools) has the full list. A rule on a whole drive, such as `D:\`, asks a second time before it is saved. A rule on your home folder comes with a note that it covers every project inside it. ## The preview Every change has a preview, and the default answer is **No**. The words come from the change itself. A folder rule reads like this: ```text In C:\Work and every folder inside it, Claude Code will use work (you@work.com). Everywhere else stays default. ``` Under the sentences, **Devpit will write:** lists each file it changes and the exact lines, starting with its own rules file, `accounts.toml`. For Git, the list also has the Git files described on [Git and GitHub](https://devpit.zubyr.dev/docs/features/accounts-git-and-github#the-files-devpit-writes). Changing the account used **everywhere** lists the folders that keep their own rule and will not change. What you answered Yes to is exactly what is applied: if the rules or Git files changed between the preview and your answer, Devpit stops and changes nothing. ## Undo - On the done card, press `u`. - On the Accounts page, `u` undoes the last change. - From a terminal, run `devpit undo`. Undo shows what it will put back and asks first. It puts every file back exactly as it was before the change. A change made in one go, such as `devpit use work` for several tools, is undone in one go. If a file Devpit wrote was changed by hand since, undo stops and changes nothing. It names the file. See [Undo says a file was changed by hand](https://devpit.zubyr.dev/docs/troubleshooting/accounts-undo-file-changed-by-hand). Undo never deletes an account folder that holds a sign-in. ## Verify before you push or deploy Press `v` on the Accounts page or on a done card, or run: ```powershell devpit accounts verify ``` *Screenshot: Verify screen comparing the expected account with what each tool says is signed in, with a note that idle Claude Code accounts are only checked when asked* Verify compares, for each installed tool, the account Devpit expects in this folder with what the tool reports. Git, and which GitHub account a push will use, are checked from the config files, without asking any server. The other tools are asked who is signed in. On a mismatch, verify shows a fix for it. From the command line, a mismatch gives exit code `4`. Claude Code is a special case. Asking Claude Code who is signed in can sign an idle account out on some versions (issue [#95822](https://github.com/anthropics/claude-code/issues/95822)). So verify only asks the account used in this folder. To check the other accounts too, press `a` on the verify screen, or run `devpit accounts verify --all`. Both ask you first before they check idle Claude Code accounts. Press `r` to check again. Verify also reports things that get in the way: - a variable set in this terminal that overrides the account, such as `GH_TOKEN` or `CLAUDE_CONFIG_DIR`, - a tool found on PATH before Devpit's shim, - a terminal opened before Devpit added its shim folder to PATH, - a rule that names an account that no longer exists. ## Browse folders Press `b` on the Accounts page. You see every folder that has a rule, and which account each tool uses there. Fold a branch with `←` `→`, filter with `/`, and press `Enter` on any folder to change it. *Screenshot: Browse folders tree showing Everywhere and the C:\Projects folder with the account each tool uses there* Press `f` to look at another folder without leaving Devpit. ### Fix old rules A folder can move or disappear after you made a rule for it. Browse folders marks such a rule: - **folder not found**: the folder was moved, renamed or deleted. - **drive not connected**: the USB drive or network share is not there right now. The rule stays and works again when the drive is back. Devpit never removes a rule by itself. Press `x` in Browse folders for **Fix old rules**, then `d` to remove the rule or `p` to point it at the folder's new place. ## The first time you open Accounts If Devpit finds accounts already on this PC, it says so first: **Found accounts already on this PC**. It looks for: - accounts and folder links made by [claude-acc](https://devpit.zubyr.dev/docs/troubleshooting/moving-from-claude-acc), - other Claude Code config folders, - `gh` accounts that Devpit does not list yet. *Screenshot: Found accounts already on this PC card listing one Claude Code account and six folder links from claude-acc, with Use them in Devpit and Ignore* Choose **Use them in Devpit** or **Ignore**. Imported accounts stay where they are, so nobody signs in again. Detecting them only reads; nothing changes until you say yes to a preview. If you chose Ignore, press `i` on the Accounts page to come back to it. ## From the command line Everything on this page also works from a terminal. A command that would change something asks `[y/N]` first. With nobody at a terminal (a script or an AI agent), it changes nothing and exits with code `3` unless you add `--yes`, and `--yes` is only for after the user agreed. | In the app | Command | | --- | --- | | The Accounts page | `devpit accounts` | | One tool's row and its why | `devpit claude` (or `git`, `github`, `vercel`, `firebase`, `supabase`, `cloudflare`, `convex`) | | A tool's accounts | `devpit claude list` | | Use another account here | `devpit claude use work` | | … in another folder | `devpit claude use work --folder C:\Work` | | … everywhere | `devpit claude use work --everywhere` | | Just this once | `devpit claude run work -- claude -p "summarise this repo"` | | The same account name for every tool | `devpit use work` | | Sign in with another account | `devpit claude add` | | Verify | `devpit accounts verify` (add `--json` for scripts) | | Undo | `devpit undo` | | Import from claude-acc | `devpit claude import --from claude-acc` | | Remove everything Devpit added | `devpit accounts cleanup` | `gh` and `wrangler` work as tool names too. Every read command takes `--json`. The full list, with every flag, is in the [command line reference](https://devpit.zubyr.dev/docs/command-line#devpit-accounts). For AI agents, `devpit agent install` writes a Devpit skill into Claude Code with the same rules: read first, ask the user, then pass `--yes`. See [Using Devpit with AI agents](https://devpit.zubyr.dev/docs/ai-agents). ## Keys | Key | Where | What it does | | --- | --- | --- | | `↑` `↓` | Everywhere | Move | | `Enter` | Accounts page | Open the tool on this row | | `v` | Accounts page, done card | Verify | | `u` | Accounts page, done card | Undo the last change | | `b` | Accounts page | Browse folders that have rules | | `f` | Accounts page | Look at another folder | | `i` | Accounts page | Accounts already on this PC (import), when Devpit found some | | `r` | Accounts page | Reload the page | | `a` | Verify | Also check the accounts not used here (asks first for Claude Code) | | `x` | Browse folders | Fix old rules: then `d` remove, `p` point elsewhere | | `c` | Just this once | Copy the command | | Type | Account picker | Filter the list | | `y` / `n` | Preview | Answer (No is the default) | | `l` | While applying | Show the raw log | | `Enter` | Done card | Go back | | `?` | Everywhere | Show the keys for this screen | | `Esc` | Everywhere | Go back | See [Keyboard and mouse](https://devpit.zubyr.dev/docs/keyboard-and-mouse#accounts) for every key. ## Good to know - **Tokens stay where they are.** Each tool keeps its own login. Devpit's rules file, `%APPDATA%\devpit\accounts.toml`, holds names, emails and folder paths only. - **Your repositories are not touched.** Rules live in Devpit's files in your user folder, so nothing shows up in `git status`. - **Account folders Devpit makes** live in `%USERPROFILE%\.devpit\accounts\\`. They are outside OneDrive and are never removed when you uninstall Devpit. Free Up Disk Space can never select them. - **A tool installed for all users** can sit in the system PATH, and Windows puts the system PATH before your user PATH. Then that copy runs before Devpit's shim and rules do not apply to it. Verify finds this and says what to move. See [The shim is not first on PATH](https://devpit.zubyr.dev/docs/troubleshooting/accounts-shim-not-first-on-path). - **A PowerShell function or alias** with a tool's name runs before any program on PATH, shims included. `Get-Command claude` shows which one runs. - **WSL is not covered.** Rules apply to Windows programs. - **Rename or remove an account** with **Rename or remove an account** on the tool page. Removing one lists the folder rules that used it and what those folders use afterwards, suggests the tool's own sign-out first, and asks you to type a word. The account's folder, and the sign-in in it, is kept. Both changes have a preview and can be undone. - **Two Devpit windows** can be open at once. Only one can change accounts at a time. ## Safety - No token is shown, copied, stored, logged or put in `--json` output. - Every change has a preview, the default answer is **No**, and it can be undone exactly. - Undo stops, and changes nothing, when a file Devpit wrote was changed by hand. - A crash in the middle of a change never leaves it half made: the next start finishes it or puts it back. - `devpit accounts cleanup` removes only what Devpit added: its folder rules, shims and PATH entry, its Git files and include block, the Wrangler bindings it made and its agent skill. It never deletes an account folder or a sign-in. - Accounts has no network traffic of its own. The only connections are each tool's own sign-in and its "who am I" check. The full list is on [Safety and privacy](https://devpit.zubyr.dev/docs/safety-and-privacy#accounts). ## Common questions ### Does Devpit store my tokens or passwords? No. Each tool keeps its own login where it always does. Devpit's rules file holds only account names, emails and folder paths. The only token Devpit ever handles is the one gh already holds, and it passes it in memory to the gh or git process that needs it, never to a file, a log or the screen. ### Does it work in VS Code? In the VS Code terminal, yes, like in any other terminal. Editor extensions and desktop apps keep their own login, so Devpit does not switch those. ### Which account wins when two folder rules apply? The nearest one. A rule on C:\Work\client-api wins over a rule on C:\Work inside client-api. This is worked out one tool at a time, so Git can follow one rule and Claude Code another. ### Does Devpit change my repositories? No. Rules live in Devpit's own files in your user folder, never in a repository, so nothing shows up in git status. For Git, Devpit adds one marked block at the end of your global .gitconfig that points at its own rules file. ### How do I take everything back? Press u on the done card or run devpit undo to take back the last change. To remove everything Devpit added for accounts, run devpit accounts cleanup. It lists what it will remove first, and it never deletes an account folder or a sign-in. ### Why does a new terminal need to be opened? The first time a tool gets a second account or a rule, Devpit puts a small folder of shims at the front of your user PATH. Windows gives a new PATH only to programs started after that, so terminals that were already open do not see it. ## Related - [Two Claude Code accounts on one Windows PC](https://devpit.zubyr.dev/docs/features/accounts-claude-code): Add a second Claude Code account with Devpit, pick which folders use it, and bring your skills, agents, commands and settings over without copying a login. - [A different Git and GitHub account per folder](https://devpit.zubyr.dev/docs/features/accounts-git-and-github): Commit with your work email in C:\Work and push as the right GitHub account, with gh, HTTPS or an SSH key. Devpit shows the exact Git lines it writes. - [Vercel, Firebase, Supabase, Cloudflare and Convex accounts](https://devpit.zubyr.dev/docs/features/accounts-other-tools): What Devpit can switch for Vercel, Firebase, Supabase, Cloudflare and Convex, how it applies each account, and what it cannot do, in plain words. - [Is Devpit safe? What it protects and what it sends](https://devpit.zubyr.dev/docs/safety-and-privacy): How Devpit protects your files and accounts with previews, a default of No and undo, why it stores no tokens, and exactly what opt-in usage stats send. --- Canonical page: https://devpit.zubyr.dev/docs/features/accounts # Two Claude Code accounts on one Windows PC Add a second Claude Code account with Devpit, pick which folders use it, and bring your skills, agents, commands and settings over without copying a login. Claude Code keeps everything for one account in one config folder: the login, settings, skills and history. The variable `CLAUDE_CONFIG_DIR` points Claude Code at another folder, and that is the way Claude Code documents for using several accounts. Devpit sets it for you, folder by folder, and only for the `claude` process it starts. Your main account stays where it is: your normal `%USERPROFILE%\.claude`. In Devpit it is called `default`. Read [Accounts](https://devpit.zubyr.dev/docs/features/accounts) first for the page, the preview, undo and verify. This page covers what is special about Claude Code. ## Add a second account 1. Open Devpit, press `1` for **Accounts**, then open **Claude Code**. 2. Choose **Use another account here**, then **+ Sign in with another account**. 3. Devpit makes a new, empty folder, `%USERPROFILE%\.devpit\accounts\claude\`, and runs Claude Code's own `claude auth login` with that folder set. Each step is shown as it happens. 4. Finish the sign-in in your browser. 5. Devpit shows who signed in and asks for a short name, suggested from the email, for example `work`. 6. Devpit asks the one question about your setup. See [Bring your setup over](https://devpit.zubyr.dev/docs/features/accounts-claude-code#bring-your-setup-over). 7. Answer **Where should this apply?** and confirm the preview, as for any [account change](https://devpit.zubyr.dev/docs/features/accounts#switch-an-account-step-by-step). If you cancel the sign-in or close the browser, nothing is saved and no half-made folder is left behind. If the new account has the same email as one you already have, Devpit warns you. Two folders signed in to the same account can sign each other out when the login refreshes. From a terminal, `devpit claude add` does steps 3 to 5. `--console` signs in with an Anthropic Console account (API billing) instead. > **Note: Not checked with real logins yet** > > Adding an account and the setup sharing below are covered by tests with fake tools and real folders on Windows. > The full sign-in with two real Claude Code subscriptions has not been checked end to end for this release yet. ## Bring your setup over A new account starts empty: no skills, no settings, no `CLAUDE.md`. Devpit asks one question, **Bring your Claude Code setup to work?** (with your account's name), and offers these answers: | Answer | What it does | | --- | --- | | **Keep them in sync** | Share what is safe to share; copy settings and hooks. Shared items stay in step with your main account. | | **Copy them once** | A separate copy of everything safe, now. | | **Start empty** | Bring nothing over. | | **Choose** | Pick item by item, starting from the defaults below. | | **Not now** | Shown right after you add an account: do this later from the Claude Code page, with **Bring your Claude Code setup over**. | *Screenshot: Bring your Claude Code setup question with the answers Keep them in sync, Copy them once, Start empty, Choose and Not now* Before anything changes you see a preview, **Make this change?**, starting on No. One undo takes all of it back. Careful rows are never ticked by any of the four answers. You tick them yourself. ### The item list Each row is one kind of thing, with a safety label and a choice of **Share**, **Copy** or **Skip**. Move with `↑` `↓`, pick with `←` `→` or `Space`, and press `Enter` to continue. *Screenshot: Claude Code item list with a row per item, such as skills, agents, commands, CLAUDE.md, plugins, settings, hooks, MCP servers and chat history, each with a Safe, Review, Careful or Locked label and Share, Copy or Skip* | Item | Label | Default | How it is done | | --- | --- | --- | --- | | Skills | Safe | Share | One link per skill folder. The `skills\synced` folder stays per account. | | Agents | Safe | Share | One link for the whole `agents\` folder. | | Commands | Safe | Share | One link for the whole `commands\` folder. | | CLAUDE.md | Safe | Share | One import line at the top of the account's own `CLAUDE.md`, pointing at your main one. Its own text stays below. | | Plugins | Safe | Same list | The list of enabled plugins and marketplaces is copied. Each account installs its own copy. | | Settings | Review | Copy | `settings.json`, key by key. Keys that may hold secrets (such as `env` or `apiKeyHelper`) are only copied on the Careful path. | | Hooks | Review | Copy | The hooks part of `settings.json`. Hooks run commands on your PC, so look at them first. | | MCP servers | Careful | Copy, unticked | Only the MCP server entries of `.claude.json`, never the rest of that file. They may hold API keys, so Devpit asks twice. | | Chat history | Review | Skip | Big and private. If you pick it, it is copied once, never shared. | | Login | Locked | Never | Each account keeps its own sign-in. Devpit never copies, links or opens it. | | Account info | Locked | Never | The account's own identity in `.claude.json`. | **Safe** items rebuild or change nothing on their own. **Review** items are fine to bring over, but look first. **Careful** items may hold secrets. **Locked** rows are always shown so you can see they are left alone, and you cannot pick them. ### What "Share" means Share uses **NTFS junctions**: a junction is a folder entry that points at another folder, so both accounts read the same files. Junctions need no administrator rights and no Developer Mode. They point at your main `.claude` folder, which never moves, so they keep working if you uninstall Devpit. Skills are linked one folder per skill, never the whole `skills` folder. A skill you add later inside the other account stays in that account until you share it. A skill you add later to your main account is linked into the other account the next time `claude` starts there through Devpit. Devpit only adds links at that moment; anything that moves or renames files happens in the menu, behind a preview. ### When the other account already has things If the account already has a skill, agent or setting with the same name, Devpit asks what to do. Nothing is deleted or overwritten under any choice. *Screenshot: Question about items the other Claude Code account already has, with the choices Keep, Replace and Keep both, and a note that nothing is deleted or overwritten* | Choice | What happens to the account's own item | | --- | --- | | **Keep** (default) | It stays. With Share, items whose names are new are moved into your main account and linked back, so both accounts get them. Same-named ones stay beside it as `name.from-`. With Copy, the account's own item keeps its name and your main one is put beside it as `name.from-default`. | | **Replace** | It moves to a dated backup folder inside the account, and the shared or copied item takes the name. | | **Keep both** | It is renamed `name-`, and with Share it is shared too. | ### When a link cannot be made Share falls back to **Copy**, and the row says why. Devpit's reasons: - one of the folders is on a network drive, - one of the folders is inside OneDrive, which does not keep links, - the two accounts are on different drives, - one of the folders reaches another drive through a `subst` drive or a link, - the drive uses FAT or exFAT, which cannot hold links. A copied item does not follow your main account. Copy it again later to bring changes over. ### Change it later Open **Claude Code** in Accounts and choose **Bring your Claude Code setup over** to see what is shared, copied or kept apart, item by item. - **Stop sharing** (`s`) turns a shared item into the account's own copy: Devpit copies it first, removes only the link, and puts the copy in its place. `h` shares a copied item instead. - A link whose target is gone is shown as **broken link**, with a repair (`r`). See [A shared skill link is broken](https://devpit.zubyr.dev/docs/troubleshooting/claude-shared-skill-link-broken). - A link made by another tool is left alone, and the row says so. `devpit accounts cleanup --copy-links` turns every shared link of every account into the account's own copies, for when you want to stop using Devpit. ## Pick which folders use it Use **Use another account here** on the Claude Code page, or from a terminal: ```powershell devpit claude use work # this folder and every folder inside it devpit claude use work --folder C:\Work # another folder devpit claude run work -- claude -p "hello" # one command, nothing saved ``` Then plain `claude` picks the account by folder: in a terminal, in the VS Code terminal, in a VS Code task, in `cmd`, in Git Bash, and for AI agents that run `claude`. Open a new terminal after your first rule, so it sees Devpit's shim folder on PATH. ## Limits - **Editor extensions and the desktop app keep their own login.** Rules apply to `claude` started in a terminal. The Claude Code extension for VS Code or JetBrains and the Claude desktop app only partly honour `CLAUDE_CONFIG_DIR`, so Devpit does not switch them. - **A system-wide install can win.** If `claude` is also on the system PATH, Windows finds it before Devpit's shim. Verify reports it. See [The shim is not first on PATH](https://devpit.zubyr.dev/docs/troubleshooting/accounts-shim-not-first-on-path). - **`CLAUDE_CONFIG_DIR` set elsewhere.** If a profile or another tool sets it, `claude` started through Devpit still uses Devpit's rule, but anything started another way uses that folder. Verify reports it. See [CLAUDE_CONFIG_DIR is set by something else](https://devpit.zubyr.dev/docs/troubleshooting/claude-config-dir-set-by-something-else). - **Verify asks first.** Asking Claude Code who is signed in can sign an idle account out on some versions (issue [#95822](https://github.com/anthropics/claude-code/issues/95822)). Devpit never runs that check for the Accounts page, and verify checks only the account used in the folder unless you agree to more. - **Token variables win.** `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` and `CLAUDE_CODE_OAUTH_TOKEN` make Claude Code use that key instead of the account's sign-in. Devpit never clears them; verify reports them. ## Coming from claude-acc Devpit can import claude-acc's accounts and folder links in place, so nobody signs in again: ```powershell devpit claude import --from claude-acc ``` See [Moving from claude-acc](https://devpit.zubyr.dev/docs/troubleshooting/moving-from-claude-acc) for the safe order of steps. ## Safety - Login files (`.credentials.json`, `.claude.json`) are never copied, linked or read. Only whether they exist is checked. - Nothing in the other account is overwritten: same-named items are kept beside, renamed or moved to a backup folder. - Links are never followed when removing: stopping a share removes only the link. - MCP servers, which may hold API keys, are never ticked for you, and settings that may hold secrets are only copied on that Careful path. Asking twice for them is the rule for the item list screen; its test is still to come (see the [safety rules](https://github.com/zubairbinshaukat/devpit/blob/main/docs/safety.md)). - Uninstalling Devpit never breaks an account: links point at your own `.claude` folder, and cleanup can turn them into copies. ## Common questions ### Where does each Claude Code account keep its login? In its own config folder, where Claude Code itself puts it. Your main account is your normal .claude folder. Each account you add in Devpit gets a folder under .devpit\accounts\claude in your user folder. Devpit never opens, copies or links the login files. ### Can both accounts use the same skills? Yes. Devpit can link each skill from your main account into the other one, so a skill you change is changed for both. Agents and commands are linked as whole folders, and CLAUDE.md gets one import line. ### Why are plugins not shared? A plugins folder shared between accounts hits an open Claude Code bug (issue 82272) whose suggested fix deletes plugins. So Devpit copies the list of enabled plugins and marketplaces, and each account installs its own copy. ### Can I sign in to the same account twice? Devpit warns you if a new account has the same email as one you already have. Two folders signed in to the same account can sign each other out when the login refreshes. ### Does it switch the Claude desktop app or the VS Code extension? No. Devpit's rules apply to claude started in a terminal, including the VS Code terminal, and to scripts and agents started there. The desktop app and editor extensions keep their own login. ## Related - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [CLAUDE_CONFIG_DIR is set by something other than Devpit](https://devpit.zubyr.dev/docs/troubleshooting/claude-config-dir-set-by-something-else): Devpit says CLAUDE_CONFIG_DIR is set in this terminal by something else. What it changes for Claude Code, where it usually comes from and how to remove it. - [Moving from claude-acc to Devpit](https://devpit.zubyr.dev/docs/troubleshooting/moving-from-claude-acc): Import claude-acc's Claude Code accounts and folder links into Devpit in place, check them, then retire claude-acc in the right order without signing in again. - [Share Claude Code skills between two accounts on Windows](https://devpit.zubyr.dev/docs/blog/share-claude-code-skills-between-accounts-windows): Share skills, agents, commands and CLAUDE.md between two Claude Code accounts on Windows with junctions, symlinks or copies, and why plugins are different. --- Canonical page: https://devpit.zubyr.dev/docs/features/accounts-claude-code # A different Git and GitHub account per folder Commit with your work email in C:\Work and push as the right GitHub account, with gh, HTTPS or an SSH key. Devpit shows the exact Git lines it writes. Git and GitHub are two different questions, so Devpit shows them as two rows: - **Commits as**: the name and email written into each commit. This is Git's own setting. - **Pushes as**: the GitHub account that `git push` and `gh` sign in with. They often go together, but they do not have to. You can commit with your work email and push to a personal fork, for example. Read [Accounts](https://devpit.zubyr.dev/docs/features/accounts) first for the page, the preview, undo and verify. > **Note: Git & SSH Setup moved here** > > Earlier versions had a **Git & SSH Setup** section on the main menu. > Seeing and setting the name and email your commits use is now the **Git** row of Accounts, and making an SSH key is on the Git page too (also reachable from the **GitHub** row with **Pushes and SSH keys**). ## Commits as: a name and email per folder 1. Open a terminal in the folder, type `devpit`, press `1` for **Accounts**, and open **Git**. 2. The **Right now** block at the top says what is true in this folder: **Commits as** (the name and email Git will commit with here, and which setting decided it) and **Pushes as** (the GitHub account a push uses, and what picks it). Below it are the choices, in three groups: **Commits**, **Pushes** and **Manage**. The highlighted choice is explained beside the list (under it on a small terminal), including what happens when you press `Enter`. Press `v` to check who each tool is really signed in as. *Screenshot: Git page in Devpit Accounts: a Right now block saying who commits are made as and which GitHub account pushes use, and where each comes from, then choices grouped under Commits, Pushes and Manage, with the highlighted choice explained beside them* 3. Choose **Commit as someone else here** (or **Commit as someone else everywhere**), then pick a saved name and email. To save one, choose **Add a name and email**: type a short name for it in Devpit, the name on commits (leave it empty to keep the one in your usual Git settings) and the email. Git has no sign-in: a name and an email is all it needs. If Devpit knows your GitHub accounts, it suggests their email addresses: press `Tab` to reach the list and `Enter` to pick one. GitHub's private `noreply` address links commits to your account without showing your email. 4. Read the preview. It shows the exact lines Devpit will write. The default answer is **No**. *Screenshot: Preview of a Git folder rule saying Git will commit with the work name and email in this folder and every folder inside it* **Rename or remove a name and email** renames or removes one, with a preview like every other change. From a terminal: ```powershell devpit git add --name work --email you@work.com --display-name "Your Name" devpit git use work --folder C:\Work ``` Git has no "just this once": it takes its identity from config files, not from a sign-in. For one commit, run `git -c user.email=you@example.com commit`. ### The files Devpit writes Everything lives in `%USERPROFILE%\.devpit\git`: | File | What is in it | | --- | --- | | `rules.gitconfig` | One `[includeIf "gitdir/i:C:/Work/"]` block per folder rule, listed from the outside in, because Git lets the last match win. Also the GitHub push helper, when Devpit manages pushes. | | `.gitconfig` | One per identity: `[user] name` and `email`. | | `default.gitconfig` | Your own global identity, used only when a folder inside a ruled folder is set back to `default`. | | `ssh-.gitconfig` | One per folder that pushes with its own SSH key: `core.sshCommand`. | | `devpit.json` | Settings that have no place in Devpit's rules file: per-folder SSH keys and the helper you had before Devpit took over pushes. | Each `.gitconfig` file Devpit writes starts with `# Written by Devpit.` and ends with a checksum line. If you change one by hand, Devpit notices and stops instead of overwriting your edit. Your global `~/.gitconfig` gets one block, added at the very end: ```ini # Added by Devpit: its folder rules for Git and GitHub. Keep this block last; Devpit removes it with the last rule. [include] path = "C:/Users/you/.devpit/git/rules.gitconfig" ``` It must stay last. Lines you add after it win over Devpit's rules, and verify tells you which file wins. Devpit appends the block itself rather than with `git config --add`, because Git would put the line inside an `[include]` section you may already have, wherever it is. Before writing, Devpit has Git read the result back to make sure it parses and the include is last. When the last Git and GitHub rule is gone, Devpit removes the block again. `devpit accounts cleanup` removes it too, with Devpit's Git files. ### When a rule applies - **Once the folder is a Git repo.** `includeIf "gitdir/…"` only works inside a repository. In a folder that is not a repo yet, Git uses your global identity. The rule applies from `git init` or `git clone` on, and it is already in effect while the clone runs. - **The nearest folder wins.** Rules are written from the outside in, so a rule on `C:\Work\client` beats `C:\Work` inside `client`. - **Letter case does not matter.** Devpit writes `gitdir/i:`, the case-insensitive form, with forward slashes and a trailing slash. - **The repo's own setting wins.** A `user.email` set inside one repository (`git config user.email …` without `--global`) beats every rule. Devpit shows it as "set by this repo's own config". - **Worktrees.** A linked worktree follows the rule for the folder of its main repository, not the folder the worktree sits in. Newer Git versions have a `worktree/i:` condition for this. Devpit uses it only when it has checked that your Git understands it; Git 2.55 ignores it silently. - **Network drives.** Rules are allowed. Git rules need the path as Git sees it. ## Pushes as: the GitHub account Devpit uses the GitHub CLI, `gh`, for GitHub accounts. `gh` 2.40 and later can hold several accounts side by side. Add one with **+ Sign in with another account** in the account list (on the GitHub row, or **Push as another GitHub account here** on the Git page), or `devpit github add`. Both run `gh auth login`, which adds an account and does not sign out the others. Devpit never runs `gh auth switch`, because that would change the account for every terminal at once. ### gh follows the folder When you run `gh` in a folder with a GitHub rule, Devpit's `gh.exe` shim asks `gh` for that account's token (`gh auth token --user `) and starts the real `gh` with it, for that one process. The token goes from `gh` to the child process in memory. It is never written to a file, shown, or logged. ### git push follows the folder For HTTPS remotes on `github.com`, Devpit adds its own sign-in helper to `rules.gitconfig`: ```ini [credential "https://github.com"] helper = helper = !"C:/Users/you/AppData/Local/Programs/devpit/devpit.exe" git-credential ``` The empty `helper =` line clears the helpers Git had for `github.com`, so Devpit's helper is the only one that answers. That matters: otherwise Git Credential Manager could save a work token as your default GitHub login. - In a folder that uses a named account, the helper gives Git that account's token from `gh`, in memory, and does nothing when Git asks it to store or erase one. - In a folder that uses `default`, the helper hands the request to the helpers you had before, usually Git Credential Manager. Devpit recorded them when it took over, and undo puts them back. - During `git clone`, the helper works out the target folder from the new repository, not from the folder you ran the command in. The path in the example is where the installer puts Devpit; yours is wherever `devpit.exe` is. > **Caution: Not checked with real logins yet** > > The helper is covered by tests with fake accounts. > A push through it on a PC with Git Credential Manager installed, with two real GitHub accounts, has not been checked end to end for this release yet. > If a push asks for a password or uses the wrong account, see [git push asks for a password](https://devpit.zubyr.dev/docs/troubleshooting/git-push-asks-for-password-or-wrong-account). The **Pushes as** row says what decides the account in this folder: | Row says | Meaning | | --- | --- | | Devpit's sign-in helper | Devpit's helper answers for `github.com` here. | | Git's own sign-in helper | Devpit does not manage pushes yet. Git's own helper, usually Git Credential Manager, answers. | | this repo's own sign-in helper | The repository's own config puts another helper first. | | the SSH key | The remote is an SSH address, so the SSH key decides. See below. | | not GitHub / no remote | Nothing for Devpit to decide here. | For one push with another account, run: ```powershell devpit github run work -- git push ``` ## SSH remotes A remote such as `git@github.com:you/repo.git` uses SSH, not HTTPS. GitHub then sees whichever account the SSH key belongs to, and Devpit's sign-in helper is not used. To push as a different account over SSH, give the folder its own key. Devpit writes `core.sshCommand` for that folder, in its own `ssh-.gitconfig`: ```ini [core] sshCommand = "ssh -i 'C:/Users/you/.ssh/id_ed25519_devpit_work' -o IdentitiesOnly=yes" ``` `IdentitiesOnly=yes` makes SSH offer that key and no other, so the right account is used. Pushes over HTTPS are not affected. ## Generate an SSH key On the Git page in Accounts, choose **Push with an SSH key**. 1. Choose **Make a new key**. Devpit suggests a file named after the GitHub account, for example `%USERPROFILE%\.ssh\id_ed25519_devpit_work`. To use a key you already have, choose **Use a key I already have** and type the path of its private key. 2. Devpit creates an **ed25519** key with `ssh-keygen`, which comes with the OpenSSH client that is part of Windows. The comment in the key is usually the account's email. 3. If a key is already at that path, Devpit says so and creates nothing: "Devpit never replaces a key: one that is in use somewhere would stop working." You can use that key, or go back and pick another path. 4. You see the **public key**. Press `c` to copy it. *Screenshot: Push with an SSH key screen after making a new key: the key path, the public key in a box, and keys to copy it or use it for this folder* 5. Press `Enter` to use the key for pushes from this folder. You see a preview first, as for any change. > **Caution: No passphrase** > > Devpit creates the key without a passphrase. > That is easy to use, but anyone who can read the private key file can use the key. > Only the `.pub` file is safe to share. > To add a passphrase later, run `ssh-keygen -p -f` with the key's path. ### Add the key to GitHub Sign in to github.com as the account the key is for, then: 1. Open [github.com/settings/keys](https://github.com/settings/keys). 2. Click **New SSH key**. 3. Give it a title, for example the name of your PC. 4. Paste the public key and save. 5. Test it in a terminal, with your key's path: ```powershell ssh -i $env:USERPROFILE\.ssh\id_ed25519_devpit_work -T git@github.com ``` The first time, SSH asks if you trust the host. Check that it is GitHub, then type `yes`. GitHub answers with a "successfully authenticated" message and the account's user name. Devpit never uploads your key. It only shows the public half for you to copy. ## Good to know - **Variables win.** `GIT_AUTHOR_EMAIL`, `GIT_COMMITTER_EMAIL` and friends override every config file, and `GH_TOKEN` or `GITHUB_TOKEN` make `gh` use that token. Devpit never clears them; verify reports them with the fix. - **WSL is not covered.** Git inside WSL reads its own config. - **Undo touches only Devpit's lines.** If you edited one of Devpit's files or its block by hand, undo stops and tells you which file. - **No tokens anywhere.** A Git email rule is plain text config, and GitHub tokens stay in `gh`'s own storage. ## Safety - Nothing you type can add lines to Git's config: a name, email or path with a line break or control character is refused, and everything else is quoted. - The only token Devpit handles is a `gh` account's, fetched when a process starts, given only to that `gh` or `git` process, and never written anywhere. - Devpit never runs `gh auth switch` or anything that prints a token. - An existing SSH key is never overwritten. - `devpit accounts cleanup` removes Devpit's Git files, its include block and its `github.com` helper, and nothing else. ## Common questions ### Where did Git & SSH Setup go? Into Accounts. Your Git name and email are the Git row of Accounts, and the SSH key for GitHub is an option on the GitHub row. The old docs address now leads to this page. ### Does Devpit change my repositories? No. It writes its own files in .devpit\git in your user folder and adds one marked include block at the end of your global .gitconfig. Nothing is written inside a repository, so nothing shows up in git status. ### Why does my folder rule not change the email outside a repository? Git's includeIf gitdir rule only applies inside a Git repository. In a folder that is not a repository yet, Git reads only your global identity. Once you run git init or git clone there, the rule applies. ### Does Devpit see my GitHub token? Only in memory, for a moment. When a gh or git process needs a named account, Devpit asks gh for that account's token and hands it to that one process. It is never saved, shown or logged. ### Will Devpit overwrite my SSH key? No. A new key gets its own file name, and Devpit refuses to create a key where a file already exists. ## Related - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [git push asks for a password or uses the wrong account](https://devpit.zubyr.dev/docs/troubleshooting/git-push-asks-for-password-or-wrong-account): git push to GitHub asks for a password, or pushes as the wrong GitHub account, in a folder with a Devpit rule. How to see what decides it and fix it. - [Permission denied (publickey)](https://devpit.zubyr.dev/docs/troubleshooting/permission-denied-publickey): Fix git and SSH 'Permission denied (publickey)' on Windows: use the git user, check that a key is loaded, and add the public key to GitHub. - [A different Git email per folder on Windows (includeIf)](https://devpit.zubyr.dev/docs/blog/different-git-email-per-folder-windows-includeif): Use Git's includeIf to commit with your work email in C:\Work and your own email everywhere else, plus the Windows gotchas that make a rule silently fail. --- Canonical page: https://devpit.zubyr.dev/docs/features/accounts-git-and-github # Vercel, Firebase, Supabase, Cloudflare and Convex accounts What Devpit can switch for Vercel, Firebase, Supabase, Cloudflare and Convex, how it applies each account, and what it cannot do, in plain words. Besides Claude Code, Git and GitHub, Accounts covers five more tools. Each one supports multiple accounts in its own way, so each gets a different level of support. Devpit says on each row what the tool supports, and why when it does not. | Tool | Folder rules | Everywhere | Just this once | Add an account | Level | | --- | --- | --- | --- | --- | --- | | Vercel | Yes | Yes | Yes | Yes | Full | | Firebase | Yes | Yes | Yes | Yes | Full | | Supabase | Yes | Yes | Yes | Yes | Full on a recent CLI, else show only | | Cloudflare (Wrangler) | Yes | No | Yes | Yes | Beta | | Convex | No | No | No | No | Show and verify only | The steps are the same as for any tool: open **Accounts**, pick the row, **Use another account here**, pick the scope, confirm the preview. See [Accounts](https://devpit.zubyr.dev/docs/features/accounts). Run the tool by its own name (`vercel`, `firebase`, `supabase`) for folder rules to apply. Devpit's shim catches that name; it cannot catch `npx vercel`. "Just this once" runs one command with an account and saves nothing: ```powershell devpit vercel run work -- vercel deploy ``` Vercel, Firebase and Cloudflare take the account as a command-line option, so for them the command must start with the tool (or `npx` and the tool). > **Note: What has been checked with real logins** > > Each tool's behaviour below was checked against the tool's own code and help, and with empty test folders on a Windows PC. > Signed-in runs with real accounts have not all been checked yet for this release: a signed-in Vercel `whoami`, Firebase and Supabase end to end, and Wrangler profile bindings with mixed letter case are still on the list. ## Vercel | | | | --- | --- | | **How Devpit applies an account** | Each account you add gets its own Vercel config folder, `%USERPROFILE%\.devpit\accounts\vercel\`. The `vercel.exe` shim adds `--global-config ` in front of your own arguments. | | **Adding an account** | `vercel --global-config login` into a fresh folder. The folder is kept only if the sign-in finished. Vercel writes `config.json`, `auth.json` and telemetry files there itself. | | **Who is signed in** | `vercel whoami --json` with that folder. | | **default** | Vercel's own config folder, untouched. | | **What it cannot do** | If `VERCEL_TOKEN` is set, "Vercel uses this token instead of any signed-in account." `VERCEL_ORG_ID` and `VERCEL_PROJECT_ID` pick the team and project whatever account is signed in. Devpit never clears them; verify reports them. | | **Needs** | A Vercel CLI with `--global-config`. Devpit checks this when it runs, not from the version number. | A folder linked to a Vercel project (`.vercel\project.json`) names the team or person that owns it. Verify uses that to warn when the account in use there may not see the project. It never asks Vercel's API about it. ## Firebase | | | | --- | --- | | **How Devpit applies an account** | Firebase holds several accounts itself. A Devpit account is a name for one of them. The `firebase.exe` shim adds `--account `, an option every Firebase command honours. | | **Adding an account** | `firebase login:add`. Firebase only allows it when you already have a default login. | | **Who is signed in** | `firebase login:list`, in its text form. Devpit never runs `firebase login:list --json`, because that prints every account's tokens. | | **default** | Firebase's own choice, untouched: its default login, or the account a project picked with `firebase login:use`. A Devpit rule overrides that per-project choice. | | **What it cannot do** | `FIREBASE_TOKEN` makes "Firebase use this token instead of any signed-in account", and `GOOGLE_APPLICATION_CREDENTIALS` may make it use a service account. Devpit never clears them; verify reports them. | | **Needs** | A Firebase CLI with the `--account` option and `firebase login:add`. | ## Supabase | | | | --- | --- | | **How Devpit applies an account** | Each account gets its own folder, `%USERPROFILE%\.devpit\accounts\supabase\`. The `supabase.exe` shim sets `SUPABASE_HOME` to that folder and `SUPABASE_NO_KEYRING=1` for that one process, so the CLI keeps that account's login in the folder instead of Windows Credential Manager. | | **Adding an account** | `supabase login` with that folder set. | | **Who is signed in** | `supabase whoami --output-format json`. | | **default** | Supabase's own login in Windows Credential Manager, untouched. | | **What it cannot do** | `SUPABASE_ACCESS_TOKEN` "Supabase uses this token before any signed-in account, including the one Devpit picks." Devpit never clears it; verify reports it. | | **Needs** | A Supabase CLI that honours `SUPABASE_NO_KEYRING`, and 2.118.0 or later for `whoami`. Devpit tests the installed CLI once, in an empty temporary folder. If it fails, the row is show-only and says why, for example: "does not keep a separate sign-in per folder (it ignores SUPABASE_NO_KEYRING and uses Windows Credential Manager), so Devpit shows it but cannot switch it." | The login file in an account folder, `access-token`, is a plain-text token written by the Supabase CLI. Devpit never opens it; it only checks that it is there. Free Up Disk Space can never select the folder. ## Cloudflare (beta) | | | | --- | --- | | **How Devpit applies an account** | A Devpit Cloudflare account is a Wrangler profile of the same name. A folder rule is mirrored into Wrangler's own folder bindings with `wrangler auth activate `, and removed with `wrangler auth deactivate`. Wrangler then picks the profile itself, so there is no shim, and the rule also works for `npx wrangler`. | | **Adding an account** | `wrangler auth create `. Wrangler does not allow the names `default` and `staging`. | | **Just this once** | `--profile `, a Wrangler option. | | **Who is signed in** | `wrangler whoami --json`. | | **What it cannot do** | "Wrangler profiles are beta. Everywhere else, Wrangler uses its own default login (`wrangler login`); Devpit cannot change that in this version." `CLOUDFLARE_API_TOKEN`, `CLOUDFLARE_API_KEY` and `CLOUDFLARE_EMAIL` make Wrangler use those instead of a profile; verify reports them. | | **Needs** | Wrangler with named profiles. 4.143.0 is the oldest version Devpit has checked. | Wrangler matches folders by exact letter case. Devpit writes the folder the way it is spelled on disk, not the way you typed it, and the preview says so. If Wrangler already has a binding for the same folder spelled differently, the preview warns you. Verify compares Devpit's rules with Wrangler's bindings and reports any difference, for example a binding made by hand. ## Convex (show and verify only) > Convex picks the account per project. Devpit shows it but does not switch it. That is the sentence every Convex screen shows. | | | | --- | --- | | **What Devpit shows** | The deployment a folder uses, from the `CONVEX_DEPLOYMENT` line in the project's `.env.local`, with the team and project when Convex wrote them. | | **How it reads the file** | Line by line. Only the `CONVEX_DEPLOYMENT` line is kept. `CONVEX_DEPLOY_KEY` is only reported as there or not, never its value. Nothing else from the file is shown or logged. | | **Who is signed in** | Not checked. `npx convex login status` may download Convex, and the login it reads holds a token. | | **What it cannot do** | Switch accounts. `devpit convex use`, `run` and `add` stop with that reason. `CONVEX_DEPLOY_KEY`, `CONVEX_DEPLOYMENT` and `CONVEX_OVERRIDE_ACCESS_TOKEN` set in a terminal override the project; verify reports them. | To use another Convex account in a project, sign in with Convex's own commands in that project. ## Safety - Devpit never runs a command that prints a token, such as `firebase login:list --json`. - Supabase's `access-token` file is only checked to exist, never read. Who is signed in is asked of the tool itself (Convex is not asked at all). - Token variables are never cleared, only reported, so Devpit never silently changes which credential a tool uses. - Wrangler's bindings are changed only through `wrangler auth activate` and `deactivate`, and undo puts the exact binding back. ## Common questions ### Why does Devpit not switch Convex? Convex picks the account per project, in the project's .env.local file. Only an undocumented token variable could switch the signed-in person, and Devpit handles no tokens. Convex is also usually run through npx, which a shim cannot catch. So Devpit shows the project a folder uses and verifies it, but does not switch it. ### Why is Cloudflare marked beta? Devpit uses Wrangler's own named profiles, which Wrangler itself marks as experimental. Folder rules work; the account used everywhere stays Wrangler's own default login. ### Do folder rules work with npx vercel? Not for Vercel, Firebase or Supabase. Devpit's shim catches the program name, so run the tool directly. Cloudflare is different: its rules live in Wrangler's own folder bindings, so they also work for npx wrangler. ### Where are the logins kept? In each tool's own storage. Vercel and Supabase accounts you add get their own folder under .devpit\accounts in your user folder, and the tool writes its login there itself. Firebase and Wrangler keep every account in their own store. Devpit never opens a login file. ## Related - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [Which deploy CLIs support multiple accounts in 2026?](https://devpit.zubyr.dev/docs/blog/multiple-accounts-vercel-firebase-supabase-cloudflare-convex): Vercel, Firebase, Supabase, Cloudflare Wrangler and Convex compared: which CLIs keep several logins, which can follow a folder, and the workarounds that exist. - [A Devpit folder rule is not applying](https://devpit.zubyr.dev/docs/troubleshooting/accounts-folder-rule-not-applying): You made a folder rule in Devpit Accounts, but the tool still uses its usual account there. Main causes, from Git repos to old terminals and moved folders. --- Canonical page: https://devpit.zubyr.dev/docs/features/accounts-other-tools # Fix "port 3000 is already in use" on Windows Free a busy port such as 3000 or 5173 in two keystrokes, list busy dev ports, and stop stuck Node processes safely with Devpit. You start your dev server and see: ```text Error: listen EADDRINUSE: address already in use :::3000 ``` Something else is using the port. Often it is an old copy of the same server that never closed. Devpit finds it and stops it, after you say yes. Open it from the main menu: press `3` for **Ports & Network**, then `1` for **Fix stuck ports & apps**. *Screenshot: Ports & Network menu with two entries: Fix stuck ports & apps, and Network tools, each with a one-line description* The section has three tools. *Screenshot: Fix Stuck Ports and Apps submenu with three tools: Kill a port, Busy dev ports and Node processes* ## Kill a port Use this when you know the port number. 1. Choose **Kill a port**. 2. Type the port number, for example `3000`. Digits only, from 1 to 65535. 3. Press `Enter`. 4. Devpit shows who is listening: the protocol, address, PID and program name. *Screenshot: Kill a port screen with port 3000 typed in and a table showing the listening node.exe process with its PID and address* 5. Read the question, for example "Kill node.exe (PID 12345) on port 3000?". The default answer is **No**. 6. Press `y` to stop it. 7. Devpit waits up to two seconds and then tells you "Port 3000 is free", or that it is still busy. If nobody is using the port, Devpit says "Port 3000 is already free". Then the error came from something else, such as a firewall or a typo in your config. ### Kill the whole process tree Dev servers are often started by another program. If Devpit sees that the parent is `npm`, `pnpm`, `yarn`, `node`, `cmd` or PowerShell, it shows an extra option: ```text [t] Kill process tree (also stops 2 other process(es) started by npm.exe) ``` Press `t` to switch it on before you answer. This stops the parent and everything it started. Use it when the server keeps coming back after you kill it. ## Busy dev ports Use this when you do not know which port is stuck. 1. Choose **Busy dev ports**. 2. Devpit checks every port on your dev list and shows the ones in use, with the PID, program and parent program. 3. Move with `↑` `↓` and mark rows with `Space`. 4. Press `k` to kill the marked ones. Answer the question. 5. Press `r` to refresh the list. *Screenshot: Busy dev ports list showing ports 3000, 5173 and 8080 in use with process names and PIDs, some rows marked for killing* The default list is 3000 to 3010, 4200, 5000, 5173, 5174, 8000, 8080, 8081, 8888, 9000 and 19000 to 19006 (the Expo range). You can change it in [Settings](https://devpit.zubyr.dev/docs/features/settings). ## Node processes Use this to find stuck `node`, `npm`, `pnpm` and `yarn` programs that may not hold a port at all. 1. Choose **Node processes**. 2. Mark the ones to stop with `Space`. 3. Press `k` and answer the question. ## What Devpit will never stop Some processes are protected. Devpit shows a reason instead of a tick box and you cannot select them: - PID 0 and PID 4 (the Windows System process), - Windows services, - every other program that lives in `C:\Windows\System32`. The shells `cmd.exe`, `powershell.exe` and `conhost.exe` are the exception. They are not services, and dev tools start them constantly, so Devpit lets you stop them, mostly as part of a process tree. ## Keys | Key | What it does | | --- | --- | | `↑` `↓` | Move | | `Enter` | Choose a tool, or check the port you typed | | `Space` | Mark or unmark a row | | `k` | Kill the marked rows | | `t` | Turn "kill process tree" on or off, when it is offered | | `r` | Refresh the list | | `y` / `n` | Answer the question (No is the default) | | `Esc` | Go back | You can click rows and use the mouse wheel too. See [Keyboard and mouse](https://devpit.zubyr.dev/docs/keyboard-and-mouse). ## If Devpit says "needs admin" Windows only lets you stop a program that runs with the same or lower rights than you. If the program was started as administrator, Devpit shows "needs admin" and does not stop it. Devpit does not raise its own rights for this. 1. Close the app the normal way, in its own window, or 2. Open a terminal as administrator, run `devpit` there, and try again. ## Safety Nothing is stopped without your confirmation, and the default answer is No. Devpit stops only the processes you picked. Stopping a program ends it right away, so save your work first. Dev servers can usually just be started again. ## Common questions ### How do I fix port 3000 is already in use on Windows? Open Devpit, choose Ports and Network, then Fix stuck ports and apps, then Kill a port, type 3000 and press Enter. Devpit shows which app holds the port. Press y to stop it. Then start your dev server again. ### Can Devpit kill any process? No. Devpit refuses to stop PID 0 and 4, Windows services, and other programs that live in the Windows System32 folder. It shows the reason instead of a tick box. The shell programs cmd, PowerShell and conhost are the exception, because dev tools start them all the time. ### What does Kill process tree do? A dev server is often started by another program such as npm, pnpm, yarn, node, cmd or PowerShell. If you kill only the server, its parent can start it again. Kill process tree also stops the parent and everything it started. ### Devpit says it needs admin. What now? Windows refused to let Devpit stop that process because it runs with higher rights. Devpit does not raise its own rights for this. Close the app in its own window, or run Devpit from a terminal that was opened as administrator. ### Which ports does Busy dev ports check? 3000 to 3010, 4200, 5000, 5173, 5174, 8000, 8080, 8081, 8888, 9000 and the Expo range 19000 to 19006. You can change the list in Settings. ## Related - [Devpit settings, themes, icons and the never-touch list](https://devpit.zubyr.dev/docs/features/settings): Every Devpit setting explained, from themes and icons to usage stats, the never-touch list, dev ports and the icon font, and where the settings file lives. - [Is Devpit safe? What it protects and what it sends](https://devpit.zubyr.dev/docs/safety-and-privacy): How Devpit protects your files and accounts with previews, a default of No and undo, why it stores no tokens, and exactly what opt-in usage stats send. - [Troubleshooting](https://devpit.zubyr.dev/docs/troubleshooting): Plain-words fixes for real Devpit and Windows problems, from winget error codes to stuck ports and icons that show as boxes. --- Canonical page: https://devpit.zubyr.dev/docs/features/fix-stuck-ports # Free up disk space and delete node_modules on Windows Find and delete node_modules, build folders, caches and other developer junk safely, with a preview, risk labels and a confirmation before anything goes. Developer machines fill up with folders that can be rebuilt: `node_modules`, `dist`, `target`, caches. Devpit finds them, shows their size, and deletes only what you tick. Open it from the main menu with `2`, or choose **Free Up Disk Space**. ## What you can scan The section opens a small menu with four rows. | Row | What it does | | --- | --- | | **Project Junk** | Looks through your projects folder for build output and dependency folders such as `node_modules`, `dist`, `.next`, `target`, `bin`, `obj`, `__pycache__` and virtual environments. | | **Full Scan** | Everything in Project Junk, plus package manager caches (npm, yarn, pnpm, pip, NuGet, Gradle, Maven, Cargo, Go and more), Windows temporary files, editor caches, old Scoop versions, Docker leftovers and large files. | | **Choose folder** | Scans a folder you pick instead of your default one. | | **Resume interrupted deletes** | Finishes anything a stopped clean left behind. | *Screenshot: Free Up Disk Space submenu with four rows: Project Junk, Full Scan, Choose folder and Resume interrupted deletes* A folder only counts as junk when a marker file sits beside it. For example `node_modules` needs a `package.json`, and `target` needs a `Cargo.toml`. Devpit checks the marker again right before it deletes. ## Clean up in six steps 1. Press `2` on the main menu. 2. Choose **Project Junk** (or **Full Scan**). 3. If you have not set a projects folder, Devpit asks. Pick a recent folder, type a path, or browse. Network paths are not allowed. 4. Wait for the scan. You see the folders checked, the items found and the total size. The list fills in as it goes. *Screenshot: Devpit scanning a projects folder, with a progress bar, the count of folders checked and items found so far, and the first results filling the list* 5. Read the results. Devpit groups items by project and labels each one with a risk. Safe items start ticked. Tick or untick with `Space`. *Screenshot: Scan results grouped by project, each row with a tick box, a size bar and a risk label of Safe, Review or Careful, and a footer showing the selected total* 6. Press `d`. Devpit asks one question, for example "Delete 14 items (2.1 GB)?", and shows how to get each kind back. The default answer is **No**. Press `y` to go on. *Screenshot: Delete confirmation asking to delete 14 items of 2.1 GB, with restore hints such as run npm install, and the No button selected by default* When it finishes you see a summary with the space freed, how many items went, and how long it took. *Screenshot: Summary card after a clean-up saying Freed 2.1 GB, with the number of items removed and how long it took* ## What the risk labels mean Every item has a label before you choose. | Label | Meaning | What happens when you delete it | | --- | --- | --- | | **Safe** | Rebuilds on its own, for example from a lockfile. Pre-ticked. | Deleted for good. It is renamed first so an interrupted delete can be finished. | | **Review** | Safe to remove, but the next build is slower or downloads again. | Moved to the Recycle Bin. | | **Careful** | May hold something you cannot get back. Never pre-ticked. | Moved to the Recycle Bin, and you must type `DELETE` first. | Devpit never pre-ticks: - a project you touched in the last 7 days, - a folder it could not fully verify, - a file that only exists in the cloud (a OneDrive or Dropbox placeholder), - any Careful item. ## Keys | Key | What it does | | --- | --- | | `↑` `↓` or `k` `j` | Move | | `PgUp` `PgDn` | Move a page | | `Space` | Tick or untick the row (or a whole project) | | `a` | Tick all, or none | | `←` `→` | Fold or unfold a group | | `s` | Sort by size, name or age | | `/` | Filter by text | | `o` | Show only items older than 30 days (the number can be changed in Settings) | | `d` | Delete the ticked items | | `r` | Scan again | | `Esc` | Stop a scan or delete, or go back | The mouse works here too: click a tick box, click a fold arrow, scroll with the wheel. See [Keyboard and mouse](https://devpit.zubyr.dev/docs/keyboard-and-mouse) for all keys. ## If something is skipped Devpit tells you why in plain words, for example: > Couldn't delete api\node_modules — it's open in Code.exe. Close it and press R to retry. 1. Close the program that has the folder open. 2. On the summary, press `R` to retry the locked items. Other reasons you may see: the item is on your never-touch list, it sits under a junction or symlink, it is on a network drive, or it no longer matches the rule that found it. Devpit never deletes through a link and never touches a drive root or the Windows folder. If you press `Esc` during a delete, Devpit finishes the item it is working on and shows what was done. Nothing is left half removed. Choose **Resume interrupted deletes** later to finish the rest. ## How to get things back - **Review and Careful items:** open the Recycle Bin and restore them. - **Safe items:** rebuild them. The confirmation shows how, for example run `npm install` for `node_modules`. ## Good to know - Devpit shows the last results for a folder straight away, marked "stale · rescanning", while a fresh scan runs. - **Settings** lets you change the projects folder, the never-touch list and the "active project" window. See [Settings](https://devpit.zubyr.dev/docs/features/settings). - Devpit keeps a running total of the space it has freed on your PC and shows it on this screen. - The full list of protections is on [Safety and privacy](https://devpit.zubyr.dev/docs/safety-and-privacy). ## Common questions ### Is it safe to delete node_modules? Yes. node_modules is rebuilt when you run npm install, pnpm install or yarn install. Devpit labels it Safe, only lists it when a package.json sits beside it, and shows the size before you confirm. ### Why is one of my projects not ticked? Devpit never pre-ticks a project you touched in the last 7 days, a folder it could not fully verify, or a cloud placeholder. You can still tick it yourself. The 7 day window can be changed in Settings. ### Where do the deleted files go? Safe items are deleted for good, after being renamed so an interrupted delete can be finished. Review and Careful items go to the Recycle Bin, so you can restore them. ### What does stale, rescanning mean? Devpit shows the results of your last scan of that folder straight away, marked stale, while a fresh scan runs. When the scan ends the list is updated. ### Will Devpit delete my Docker volumes? No, never. Devpit only offers Docker build cache, dangling images and stopped containers, and it refuses to run any Docker command that includes volumes. ### How do I stop Devpit from ever touching a folder? Add the folder to the never-touch list in Settings. Both the scanner and the deleter skip it, every time. ## Related - [Is Devpit safe? What it protects and what it sends](https://devpit.zubyr.dev/docs/safety-and-privacy): How Devpit protects your files and accounts with previews, a default of No and undo, why it stores no tokens, and exactly what opt-in usage stats send. - [Devpit settings, themes, icons and the never-touch list](https://devpit.zubyr.dev/docs/features/settings): Every Devpit setting explained, from themes and icons to usage stats, the never-touch list, dev ports and the icon font, and where the settings file lives. - [Devpit keyboard shortcuts and mouse controls](https://devpit.zubyr.dev/docs/keyboard-and-mouse): Every Devpit shortcut in one place, from the main menu keys to the results table, plus what clicking, scrolling and hovering do with the mouse. --- Canonical page: https://devpit.zubyr.dev/docs/features/free-up-disk-space # Install developer apps on Windows with Devpit Pick developer tools from a short list and let Devpit install them through Scoop, winget or Chocolatey, one at a time, with live progress. Setting up a new PC means installing the same tools again. Devpit has a short list of common developer tools. You tick what you want, and it installs them one after another. Open it from the main menu: press `4` for **Install & Update**, then `1` for **Install developer apps**. *Screenshot: Install & Update menu with two entries: Install developer apps, and Update everything, each with a one-line description* ## What is in the list There are 26 apps in nine groups. | Group | Apps | | --- | --- | | Runtimes | Node.js LTS, Python, Go, Rust (via rustup), .NET SDK, Eclipse Temurin JDK | | Editors | Visual Studio Code, Notepad++ | | Terminals & Shell | Windows Terminal, PowerShell 7, oh-my-posh, starship | | VCS | Git, GitHub CLI | | Containers | Docker Desktop | | Package Managers | pnpm, Yarn, Bun | | CLI Tools | ripgrep, fd, fzf, jq, bat, 7-Zip, lazygit | | Fonts | Cascadia Code | Each app shows a one-line description. ## Install apps 1. On the main menu press `4`, then `1`. 2. Wait a moment while Devpit checks which tools you already have. 3. Move with `↑` `↓` and press `Space` to tick the apps you want. *Screenshot: Install Developer Apps list grouped by category, with some apps ticked, some marked installed and a short description under the highlighted app* 4. Press `Enter`. 5. Read the question, for example "Install 3 app(s)?". It shows the package manager and the exact command for each app. The default answer is **No**. 6. Press `y` to start. 7. Watch the progress. Each app is one live row with a spinner, a progress bar when the manager reports one, and the last thing the installer said. *Screenshot: Devpit installing three apps one after another, each as a live row with a spinner or progress bar and the last line the installer printed* 8. When it ends you see a summary. Press `Enter` to finish. ## Which package manager is used Devpit uses one manager per run: | Setting | What Devpit does | | --- | --- | | auto (default) | Picks Scoop if it is installed, then winget, then Chocolatey | | scoop, winget or choco | Uses the one you choose in [Settings](https://devpit.zubyr.dev/docs/features/settings) | The commands Devpit runs are these, with the package name filled in: ```powershell scoop install winget install --id -e --accept-source-agreements --accept-package-agreements choco install -y ``` Some apps are greyed out: - **installed** means Devpit already found the app on your PATH. - **not available via …** means the app has no verified package name for the manager in use. ## Admin rights - **Scoop** installs for your user and needs no admin. - **winget** may show a Windows prompt for some packages. Devpit tells you on the confirmation screen. - **Chocolatey** always needs admin. Devpit asks once for the whole run, so ten apps are one prompt. If you say no, those apps are marked "skipped (needs admin)", not failed. ## Keys | Key | What it does | | --- | --- | | `↑` `↓` | Move | | `Space` | Tick or untick an app | | `Enter` | Install the ticked apps | | `y` / `n` | Answer the question (No is the default) | | `l` | Show or hide the full log while installing | | `s` (twice) | Skip the app that is installing now. Press it again within 5 seconds to confirm. The summary shows how to install it later | | `Esc` | Stop. The app in flight is cut short and the rest are skipped | You can also click a row to tick it. See [Keyboard and mouse](https://devpit.zubyr.dev/docs/keyboard-and-mouse). ## If an install fails The summary lists each app that failed or was skipped, with a reason. Press `l` to read the full output. Run the command from the confirmation screen yourself to see the manager's own message. ## After installing Open a new terminal window so it sees the new PATH. To keep everything current, use [Update everything](https://devpit.zubyr.dev/docs/features/update-everything). To set your Git name and email next, or a different one per folder, see [Git and GitHub accounts](https://devpit.zubyr.dev/docs/features/accounts-git-and-github). ## Common questions ### Which package manager does Devpit use to install apps? Devpit uses one manager per run. With the default setting it picks Scoop if you have it, then winget, then Chocolatey. You can choose a manager in Settings. The confirmation shows the manager and the exact command for every app. ### Why can I not tick some apps? An app is greyed out when Devpit already finds it on your PATH, marked installed, or when the app has no verified package name for the manager Devpit is using, marked not available via that manager. ### Does installing with Chocolatey need admin rights? Yes. Devpit runs all Chocolatey installs in one helper that asks for administrator rights once, so ten apps mean one Windows prompt. If you decline, the apps are marked skipped, not failed. ### What if an install seems stuck? Press l to open the full log and see what the installer says. Press Esc to stop. The app in flight is cut short and the rest are skipped. ## Related - [Update all your Windows apps and dev tools at once](https://devpit.zubyr.dev/docs/features/update-everything): Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. - [Devpit settings, themes, icons and the never-touch list](https://devpit.zubyr.dev/docs/features/settings): Every Devpit setting explained, from themes and icons to usage stats, the never-touch list, dev ports and the icon font, and where the settings file lives. - [A different Git and GitHub account per folder](https://devpit.zubyr.dev/docs/features/accounts-git-and-github): Commit with your work email in C:\Work and push as the right GitHub account, with gh, HTTPS or an SSH key. Devpit shows the exact Git lines it writes. --- Canonical page: https://devpit.zubyr.dev/docs/features/install-developer-apps # Check your IP, ping a host and flush DNS on Windows See your local and public IP address, ping a host to test your connection, and clear the Windows DNS cache from one Devpit menu. Three small tools for checking your connection. Open them from the main menu: press `3` for **Ports & Network**, then `2` for **Network tools**. *Screenshot: Network Tools submenu with three tools: My IP addresses, Ping a host and Flush DNS cache* ## My IP addresses 1. Choose **My IP addresses**. 2. Devpit lists your **local interfaces**, for example Wi-Fi or Ethernet, with their IPv4 and IPv6 addresses. Interfaces that are down, and the loopback address, are left out. 3. Under **Public IP** it shows the address the internet sees. It says "Looking up…" first, and "Offline" if it cannot reach a lookup service. *Screenshot: My IP addresses card listing local interfaces with their IPv4 and IPv6 addresses and the public IP address below* The local list appears at once. The public address takes a moment because Devpit has to ask a website for it. That is the only part of this screen that uses the internet. Use the local address when another PC on your Wi-Fi needs to reach yours. Use the public address when you need to tell a service where you connect from. ## Ping a host 1. Choose **Ping a host**. 2. Type a host name or IP address, for example `github.com`. Leave it empty to use `1.1.1.1`. 3. Press `Enter`. 4. The replies stream in as they arrive. After four requests you see a summary: packets sent and received, and the minimum, average and maximum time. *Screenshot: Ping results for a host with four reply lines and a summary of packets sent and received and minimum, average and maximum time* A reply time of a few milliseconds means a healthy connection. "Request timed out" on every line means nothing came back. If a host does not answer but other hosts do, that host may block ping. ## Flush DNS cache 1. Choose **Flush DNS cache**. 2. Read the question: "Flush the DNS resolver cache?" It clears cached lookups. Nothing else on your PC changes. The default answer is **No**. 3. Press `y`. 4. Devpit runs `ipconfig /flushdns` and shows its answer, for example "Successfully flushed the DNS Resolver Cache." Flush the DNS cache when a website moved to a new address and your PC still goes to the old one. > **Note** > > On some PCs Windows only allows this command from a terminal opened as administrator. > If Devpit shows an error, open a terminal as administrator, run `devpit`, and try again. ## Keys | Key | What it does | | --- | --- | | `↑` `↓` | Move in the menu | | `Enter` | Open a tool, send the ping, or go back when it is done | | `y` / `n` | Answer the flush question (No is the default) | | `Esc` | Go back | See [Keyboard and mouse](https://devpit.zubyr.dev/docs/keyboard-and-mouse) for every key. ## Privacy These tools run on your PC. Devpit sends nothing about you to its own server. The public IP lookup is a normal web request to a lookup service, and only happens when you open that screen. See [Safety and privacy](https://devpit.zubyr.dev/docs/safety-and-privacy) for everything Devpit connects to. ## Common questions ### Which website does Devpit ask for my public IP? Devpit asks api.ipify.org first and ifconfig.me second, and gives up after five seconds. Only the plain web request is sent. This lookup only happens when you open My IP addresses. ### What does flushing the DNS cache do? It clears the list of website names that Windows remembered. Windows looks them up again the next time. Nothing else on your PC changes. Devpit runs the ipconfig /flushdns command and asks you first. ### Why does the ping stop after four replies? Devpit sends four echo requests, the same as ping -n 4, and then shows a summary with sent, received and the minimum, average and maximum time. ### Which host does Ping use if I leave the box empty? 1.1.1.1, the public DNS service run by Cloudflare. Type any host name or IP address to test something else. ## Related - [Copy big folders between two PCs on your network](https://devpit.zubyr.dev/docs/features/share-files): Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. - [Troubleshooting](https://devpit.zubyr.dev/docs/troubleshooting): Plain-words fixes for real Devpit and Windows problems, from winget error codes to stuck ports and icons that show as boxes. - [Is Devpit safe? What it protects and what it sends](https://devpit.zubyr.dev/docs/safety-and-privacy): How Devpit protects your files and accounts with previews, a default of No and undo, why it stores no tokens, and exactly what opt-in usage stats send. --- Canonical page: https://devpit.zubyr.dev/docs/features/network-tools # Devpit settings, themes, icons and the never-touch list Every Devpit setting explained, from themes and icons to usage stats, the never-touch list, dev ports and the icon font, and where the settings file lives. Open **Devpit Settings** from the main menu with `6`. Changes save as soon as you make them, and the row says **✓ saved** for a moment. The settings are in six groups: **Look**, **Cleaning**, **Tools**, **AI agents**, **Privacy and updates** and **About**. Each row shows its name on the left and its current value on the right. The row you are on is explained in plain words: under the list, or in a pane on the right when the window is at least 100 columns wide. There are three kinds of rows: - **Choices** such as Theme, shown as `‹ auto ›`. `←` and `→` pick the one before or after, and `Enter` or `Space` picks the next. - **On and off** switches such as Emoji. `Enter`, `Space`, `←` or `→` flip them. - **Rows that open a screen**, marked `›`. `Enter` or `Space` opens it. *Screenshot: Devpit Settings in six groups, Look, Cleaning, Tools, AI agents, Privacy and updates, and About, each row a label with its current value in a column of its own, and a pane on the right explaining the highlighted setting in plain words* ## The settings ### Look | Setting | What it does | How it changes | | --- | --- | --- | | **Theme** | The colours Devpit uses. `auto` follows your terminal, light or dark; `dark` and `light` pick one. `aqua`, `blue` and `rose` change the accent colour, and `mono` uses no colour at all, only shapes and words. | Choice | | **Icons** | The symbols Devpit draws. `unicode` works in every modern terminal. `nerd` adds file and tool icons but needs the icon font. `ascii` uses plain letters for old consoles. `auto` picks for you. | Choice | | **Emoji** | An emoji now and then in titles and summaries. Never in lists or tables, so columns always line up. | On or off | | **Icon font** | Installs the free Symbols Nerd Font for your Windows user (no admin needed) and adds it to Windows Terminal as a fallback, so nerd icons can draw. Your own font stays as it is. | Opens a screen | | **Icon check** | Shows a few icons and asks whether they look right. Nerd icons are only used after you say yes. | Opens a screen | ### Cleaning | Setting | What it does | How it changes | | --- | --- | --- | | **Projects folder** | The folder Free Up Disk Space looks through first, usually where you keep your code. It also lists the folders you scanned lately, so you can remove one. | Opens a screen | | **Never-touch folders** | Folders Devpit never scans and never deletes from, whatever is inside them. Devpit's own files and login folders such as `.ssh` and `.claude` are protected anyway. | Opens a screen | | **Recent projects** | A project you changed in the last 7 days (the default) counts as in use. Its junk is still listed but never ticked for you. | Opens a screen (1 to 365 days) | | **Age filter** | In the cleaning results, the age filter shows only folders nobody touched for more than this many days (default 30). | Opens a screen (1 to 365 days) | | **Forget last scan** | Devpit remembers the last scan so results show up at once next time. This clears that memory, so the next scan reads the disk from scratch. Nothing on disk is deleted. | Asks first (default No) | ### Tools | Setting | What it does | How it changes | | --- | --- | --- | | **Package manager** | Which installer Install & Update uses for new apps. `auto` uses Scoop if you have it, then winget, then Chocolatey. Pick one to always use it. | Choice | | **Dev ports** | The ports **Busy dev ports** looks at in Ports & Network. Add your own, or go back to the defaults. | Opens a screen | ### AI agents | Setting | What it does | How it changes | | --- | --- | --- | | **AI agent skill** | Lets Claude Code use Devpit for you: check which account a folder uses and explain why. It never changes anything without your yes. | Opens a screen | The value says **installed**, **installed (shared link)**, **update available**, **another skill is there** or **not installed**. When Claude Code is not on this PC, the group shows one line instead: "Claude Code is not installed, so there is no skill to add." See [the AI agent skill screen](https://devpit.zubyr.dev/docs/features/settings#the-ai-agent-skill) below. ### Privacy and updates | Setting | What it does | How it changes | | --- | --- | --- | | **Usage stats** | When on, Devpit sends one small report after a cleanup: space freed and how many items. Never a file name, a path or anything about you. Off unless you turn it on. | On or off | | **Update check** | When on, Devpit asks GitHub once a day whether a newer version is out, and says so at the top. It sends nothing about you and never installs anything by itself. | On or off | ### About | Setting | What it does | How it changes | | --- | --- | --- | | **About Devpit** | The version you are running, who makes Devpit, links to the website and the source, and the one command that updates your install. | Opens a screen | | **What's new** | What changed in this version and where things moved: the same card Devpit shows once after an update. See [After an update](https://devpit.zubyr.dev/docs/getting-started#after-an-update). | Opens a screen | ## The AI agent skill **AI agent skill** opens a screen that says: - **What it lets Claude Code do:** check which account each tool uses in a folder and explain why, by running Devpit's read-only commands and reading its help pages. It can suggest a change and make it once you agree. - **What it never does:** it never changes anything without your yes, and never reads account folders, login files or tokens. - **Where it goes:** each Claude Code account and the state of the skill there. *Screenshot: AI agent skill screen in Settings: what the skill lets Claude Code do, what it never does, where SKILL.md is written, and an Install button* Below that are the buttons that apply: **Install**, **Update** or **Remove**. Move between them with `←` `→` and press `Enter`, or press `i` to install or update and `x` to remove. Each one asks first, with No as the default, and then shows what happened in each place. A `devpit` skill that Devpit did not write is never touched. The same can be done from a terminal with `devpit agent install`, `devpit agent status` and `devpit agent remove`. [Using Devpit with AI agents](https://devpit.zubyr.dev/docs/ai-agents) explains what the skill contains. ## Forget last scan Devpit keeps the results of the last disk scan so they show up at once the next time. **Forget last scan** asks "Forget the last scan?" and starts on **No**. Yes clears only that memory: the next scan reads the disk from scratch. Nothing on disk is deleted. ## Themes and icons Devpit has three icon sets and picks one for you. | Icon set | What you see | | --- | --- | | `nerd` | Real icons for folders, Git, Node and more. Needs the icon font. | | `unicode` | Plain shapes and check marks. Works in most terminals. | | `ascii` | Only basic characters. For very simple terminals. | You can also start Devpit with `devpit --ascii` to force the plain set for one run. The seven themes: - `auto`: follows your terminal's background - `dark`: Devpit aqua on a dark background - `light`: Devpit aqua on a light background - `aqua`: the house colour - `blue`: a calm blue accent - `rose`: a soft rose accent - `mono`: no colour at all, shapes and words only ## The icon font **Icon font** installs or removes the icon font. It does what `devpit font install` and `devpit font remove` do. 1. Open **Icon font**. 2. Press `Enter` to install (or to remove, when it is installed). 3. Close every Windows Terminal window and open a new one. 4. Open **Icon check** and answer Yes if the icons show. More about the font is in [Getting started](https://devpit.zubyr.dev/docs/getting-started#the-icon-font). ## Folder settings ### Projects folder - The first row is the **default folder**. Press `Enter` to edit it. It must exist. Network paths are not allowed. - Below it are your **recent folders**. Press `x` to remove one. ### Never-touch folders 1. Press `a` to add a path. 2. Type the full path and press `Enter`. 3. Press `x` on a row to remove it. Devpit skips these folders when scanning and refuses them when deleting. It also protects itself: it refuses to delete anything that holds `devpit.exe`. ### Dev ports The list is one line of numbers and ranges, for example `3000-3010, 5173, 8080`. Press `Enter` to save. Press `Ctrl`+`R` to go back to the default list. The default is 3000 to 3010, 4200, 5000, 5173, 5174, 8000, 8080, 8081, 8888, 9000 and 19000 to 19006. ## Usage stats and updates **Usage stats** are off until you turn them on. They send totals only, never file names or paths. Read exactly what is sent on [Safety and privacy](https://devpit.zubyr.dev/docs/safety-and-privacy). **Update check** looks at GitHub's public releases once a day. It shows an `update` label in the header when a newer version exists. Nothing is downloaded for you. These environment variables always win over the settings: | Variable | Effect | | --- | --- | | `DEVPIT_NO_TELEMETRY=1` or `DO_NOT_TRACK=1` | Usage stats off | | `DEVPIT_NO_UPDATE_CHECK=1` | Update check off | | `DEVPIT_CONFIG_DIR` | Use another folder for `config.toml` | | `DEVPIT_CACHE_DIR` | Use another folder for caches and logs | ## Where files are kept | What | Where | | --- | --- | | Settings | `%APPDATA%\devpit\config.toml` | | Caches and logs | `%LOCALAPPDATA%\devpit\` | If the settings file is damaged, Devpit renames it to `config.toml.broken-`, starts with the defaults and shows a warning. Your old file stays so you can look at it. ## Keys | Key | What it does | | --- | --- | | `↑` `↓` | Move (headings are skipped) | | `Home` / `End` | First or last setting | | `PgUp` / `PgDn` | Half a page up or down, when the list is taller than the window | | `Enter` / `Space` | Change the row, or open its screen | | `←` `→` | The choice before or after; flip an on/off row | | `a` | Add a path (never-touch folders) | | `x` | Remove a path or folder; remove the skill (AI agent skill) | | `i` | Install or update the skill (AI agent skill) | | `Ctrl`+`R` | Reset dev ports to the default | | `Esc` | Go back | With the mouse: pointing at a row selects it and shows its description, a click on a row's value changes it (or opens its screen), and the wheel moves through the list. See [Keyboard and mouse](https://devpit.zubyr.dev/docs/keyboard-and-mouse) for every key. ## Common questions ### Where are Devpit's settings stored? In one file, %APPDATA%\devpit\config.toml. Set the DEVPIT_CONFIG_DIR environment variable to use another folder. Changes in the app are saved as soon as you make them. ### How do I turn usage stats off? Open Settings and switch Usage stats to off. Setting the environment variable DEVPIT_NO_TELEMETRY=1 or DO_NOT_TRACK=1 turns them off whatever the setting says. Stats are off by default. ### How do I protect a folder from being cleaned? Add it to the never-touch list in Settings. Devpit skips it when scanning and refuses it when deleting. Devpit also refuses to delete the folder that holds its own program file. ### Icons show as boxes. What should I change? Set Icons to unicode or ascii in Settings to use plain shapes. Or choose Icon font to install the icon font, restart Windows Terminal, then run Icon check. ### What happens if my settings file is damaged? Devpit renames it to config.toml.broken with a number, starts with defaults and shows a warning. Your old file is kept so you can look at it. A settings file written by a newer Devpit is refused, not half applied. ## Related - [Is Devpit safe? What it protects and what it sends](https://devpit.zubyr.dev/docs/safety-and-privacy): How Devpit protects your files and accounts with previews, a default of No and undo, why it stores no tokens, and exactly what opt-in usage stats send. - [Get started with Devpit on Windows](https://devpit.zubyr.dev/docs/getting-started): Install Devpit with one PowerShell line, Scoop or a zip file, then take the first-launch tour and set up the icon font. - [Free up disk space and delete node_modules on Windows](https://devpit.zubyr.dev/docs/features/free-up-disk-space): Find and delete node_modules, build folders, caches and other developer junk safely, with a preview, risk labels and a confirmation before anything goes. --- Canonical page: https://devpit.zubyr.dev/docs/features/settings # Copy big folders between two PCs on your network Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. You want to move a big folder, for example a game, from one PC to another. Both PCs are on the same Wi-Fi or office network. Share Files does this with live progress, automatic retry and resume, and no commands to type. Open it from the main menu with `5`, or click the **Share** tab. There are two sides: - The PC that **shares** the folder. - The PC that **receives** the copy. ## On the PC that shares: Share a folder 1. Open Devpit and choose **Share Files**, then **Share a folder**. 2. Pick the folder to share. 3. If the PC has more than one network connection, pick the one the other PC is on. 4. If that network is set to **Public**, Devpit asks if it may switch it to **Private**. Windows blocks file sharing on a Public network. Devpit puts it back when you stop sharing. 5. Approve the Windows admin prompt. Devpit asks **once**. 6. Devpit sets up the firewall rule, a temporary login, and a **read-only** share of the folder. You see each step. 7. A card shows what the other PC needs: - the **address** (IP), - the **share** name, - the **user** name, - the **password**, - two commands for a PC without Devpit: a `net use` command that signs in, and a `robocopy` command that copies. The copy goes into a new folder, named after the share, in the folder that terminal is in. A long command wraps on the card instead of being cut, so you can read all of it. *Screenshot: Share a folder card showing the IP address, share name, user name and temporary password, and ready-to-copy commands for a PC that does not have Devpit* The card has these keys: | Key | What it does | | --- | --- | | `c` | Copy the `net use` line | | `r` | Copy the `robocopy` line | | `p` | Copy the password | | `s` or `Esc` | Stop sharing (asks first) | 8. Leave Devpit open while the other PC copies. Devpit keeps this PC awake, because a PC that sleeps stops sharing. 9. When you are done, stop sharing. Devpit removes what it set up: the shared folder, the temporary login, the firewall rule it turned on, and the network change. Devpit also does this when you quit it with `Ctrl`+`C`. ### If Devpit or the PC stopped while sharing A crash or a power cut can leave the share behind. The next time you open **Share Files**, it offers **Clean up an old share**. You can also run this in a terminal: ```powershell devpit share cleanup ``` Windows asks for permission once. If nothing is left, it says "Nothing to clean up." The temporary login also expires by itself after 48 hours. ## On the PC that receives: Copy from a shared folder 1. Open Devpit and choose **Share Files**, then **Copy from a shared folder**. 2. Type the IP address of the other PC. It is on the sharing PC's card. 3. Pick a shared folder from the list. If the other PC wants a sign-in before it lists its folders, Devpit asks first. 4. Sign in with the user name and password from the card. 5. Choose where to save the files. 6. Devpit measures the folder first. Nothing is copied yet. A big folder can take a minute. 7. You see the **exact size**, the number of files and the **free space** on the destination. Devpit warns you before it starts if: - there is not enough free space, - the destination is FAT32 and a file is bigger than 4 GB, - there is nothing new to copy, - some paths will be longer than 260 characters (this one only warns). 8. Press `Enter` to start. Devpit does not save the password. It is used once to sign in. *Screenshot: Copy from a shared folder in progress: 47 of 80 GB done, current speed and time left, the files being copied right now and a retrying notice* While it copies you see: - a progress bar and how much is done, for example 47 GB of 80 GB, - the speed and the time left, - how many files are done, and how long it has run, - the files finished most recently, - a notice when the network hiccups and Devpit tries a file again. Devpit runs `robocopy` for you, with up to 16 files at once. ## If the copy stops: Resume If the other PC stops answering, Devpit waits and tries again with a growing pause. When the PC answers, it carries on by itself. This works as long as Devpit stays open. You can also stop it yourself with `Esc`. Closing Devpit in the middle also leaves the copy to resume. To resume a copy made without Devpit, see [resume an interrupted file copy](https://devpit.zubyr.dev/docs/blog/resume-interrupted-file-copy-windows). 1. Open Devpit and choose **Share Files**. 2. Choose **Resume the copy from** the other PC. It shows how much is already copied. 3. Press `Enter` to resume, or `d` to throw the saved copy away. 4. If Windows has forgotten the sign-in, Devpit asks for the password again. The user name is already filled in. Finished files are skipped, and half-copied files carry on. ## When it ends You see one of two things: - a clear **Done** message with the size and time, or - a **list of the files that failed**, with the reason and what to do. Press `r` to try them again. If the same files keep failing for three rounds in a row and nothing new is copied, Devpit stops and shows that list. ## Good to know - The network sets the speed limit. Time is the folder size divided by your real speed. Devpit shows the real speed while it copies. The math, and what slows a copy down, is in [move 100 GB between PCs](https://devpit.zubyr.dev/docs/blog/move-100gb-between-computers). - For the fastest, steadiest link, connect the two PCs with a cable. See [connect two PCs with an Ethernet cable](https://devpit.zubyr.dev/docs/blog/direct-ethernet-cable-between-two-pcs). - It works in any Windows language. - It works whether or not the other PC has Devpit. - Both PCs must be on the same network. Sending over the internet is not part of this feature. For phones, Macs or other ways to move files, see [transfer files between two PCs over Wi-Fi](https://devpit.zubyr.dev/docs/blog/transfer-files-between-two-pcs-over-wifi) and [LocalSend vs Quick Share vs Syncthing](https://devpit.zubyr.dev/docs/blog/localsend-vs-quick-share-vs-syncthing). ## Safety - The share is **read-only**. The other PC cannot change or delete your files. - The sharing PC uses a temporary login named like `devpit-x7k2`, created for this share only. It can only read the shared folder. Its password is new every time and is never your own. - The login expires after 48 hours even if nothing removes it. - Devpit turns on only the firewall rule `FPS-SMB-In-TCP`, and only if it was off. When you stop, it turns off only what it turned on. If Windows names that rule differently, Devpit turns on the File and Printer Sharing group instead. - **Stop sharing** removes the share, the login, the firewall rule and the network change. Quitting Devpit does the same. - Share only the folder you mean to. Anyone on your network who has the password can read it while it is shared. - Devpit does not turn on SMB encryption for the share. Unless your Windows is set to require it, the files cross the network unencrypted. Use it on a network you trust. See [SMB vs FTP vs HTTP](https://devpit.zubyr.dev/docs/blog/smb-vs-ftp-vs-http-local-network) for what SMB protects and what it does not. - Devpit refuses to share Windows folders, Program Files, the shared program data folder, or the whole system drive. ## Common questions ### How fast is the copy? The network sets the speed limit. Time is the folder size divided by your real speed. Devpit shows the real speed and the time left while it copies, so measure it on your own network. ### What if the Wi-Fi drops halfway? Devpit waits until the other PC answers again and carries on by itself, as long as Devpit stays open. If you stopped the copy or closed Devpit, open Share Files and choose the resume entry. Finished files are skipped and half-copied files carry on. ### Does the other PC need Devpit? No. The sharing PC shows the address, share name, user name and password, plus a net use line and a robocopy line for someone who does not have Devpit. Copying works whether or not the other PC has Devpit. ### Does Devpit use my Windows password to share? No. Devpit creates a temporary login just for this share, so your own Windows password is never used. Stop sharing removes it. If it is ever left behind, it expires by itself after 48 hours. ### What does Devpit change in the firewall? It turns on the File and Printer Sharing rule for incoming SMB, named FPS-SMB-In-TCP, only if that rule is off. When you stop sharing it turns off only the rule it turned on. ## Related - [Check your IP, ping a host and flush DNS on Windows](https://devpit.zubyr.dev/docs/features/network-tools): See your local and public IP address, ping a host to test your connection, and clear the Windows DNS cache from one Devpit menu. - [Is Devpit safe? What it protects and what it sends](https://devpit.zubyr.dev/docs/safety-and-privacy): How Devpit protects your files and accounts with previews, a default of No and undo, why it stores no tokens, and exactly what opt-in usage stats send. - [Troubleshooting](https://devpit.zubyr.dev/docs/troubleshooting): Plain-words fixes for real Devpit and Windows problems, from winget error codes to stuck ports and icons that show as boxes. --- Canonical page: https://devpit.zubyr.dev/docs/features/share-files # Update all your Windows apps and dev tools at once Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. Keeping a dev PC current means running `winget`, `scoop`, `choco` and `npm` one after the other. Devpit does it in one pass, and lets you leave things out. Open it from the main menu: press `4` for **Install & Update**, then `2` for **Update everything**. ## How it works 1. Devpit finds which package managers you have: Scoop, winget, Chocolatey and npm. 2. It asks each one, at the same time, what is out of date. Each manager shows a spinner, then a result such as "winget 15 updates". 3. It lists every out-of-date app, grouped by manager. All are ticked to start. 4. You untick anything you want to leave alone and confirm. 5. It updates the ticked apps one by one. Each app is one live row. 6. You get a summary. The full log is one key away. ## Update your tools 1. On the main menu press `4`, then `2`. 2. Wait for the checks. This can take a minute on a cold start. 3. Look at the list. Untick apps with `Space`. Press `n` to untick all, or `a` to tick all. *Screenshot: Update Everything list of out-of-date apps grouped by winget, Scoop and Chocolatey, all ticked, with the installed and new version next to each* 4. Press `Enter`. 5. Read the question, for example "Update 12 apps?". It lists the commands. The default answer is **No**. 6. Press `y`. 7. Watch the rows. Each one ends in a tick, a warning or a cross with a reason. *Screenshot: Devpit updating apps one by one with live rows that end in a tick, a warning saying restart needed or a cross with a reason* 8. Read the summary and press `Enter`. ### What the rows can say | Row ends with | Meaning | | --- | --- | | Tick, "updated" | The app was updated. | | Tick, "up to date" | It was already current by the time Devpit got to it. | | Warning, "restart needed" | Updated, but Windows needs a restart to finish. | | Skipped, "pinned" or "held" | You (or a manager setting) pinned this app, so the manager refused. Devpit leaves it alone. | | Skipped, "needs admin" | The Windows admin prompt was declined. | | Cross, with a reason | It failed. The reason is in plain words, and the raw output is in the log. | In the list, some rows cannot be ticked or start unticked: - **pinned** and **held** apps are shown but locked. - **needs explicit upgrade** apps (a winget case) start unticked. `winget upgrade --all` skips them, but Devpit can update them by name if you tick them. - If a manager's answer cannot be read, for example on a translated Windows, that manager becomes one row, "Everything winget manages", that runs its normal upgrade-all commands. ## Order matters Devpit updates in a safe order. Most apps first, then Git, then Node.js and npm, then WSL, then the package managers themselves, and Devpit last. This stops a manager from replacing itself in the middle of a run, and stops an npm update from running while Node is being replaced. WSL is late on purpose: updating it shuts down running WSL distros. ## Admin rights - **Scoop** and **npm** need no admin. - **winget** may show a Windows prompt for some packages. - **Chocolatey** always needs admin. Devpit launches one helper for the whole Chocolatey part, so ten apps are one prompt. If you decline, the apps are marked "skipped (needs admin)". Devpit itself never runs as administrator. Only that small helper does, and only for the jobs that need it. ## Skip, admin apps and stuck apps While an app updates, you have these helps: - **Skip button.** Press `s` twice within 5 seconds to skip the app that is updating right now and move to the next one. The first press only asks you to press again. The summary shows "skipped by you" and the command to retry it. A skipped app is never reported as updated. Skipping stops that app's installer part way, so the app may be left half updated. - **What Skip cannot stop.** If an installer raises its own Windows admin prompt (UAC), that elevated installer runs outside Devpit's control. Skip stops winget, but that installer may keep running. Close it by hand. Apps that finish normally keep running whatever they started, for example an app that relaunches itself after the update. - **Clear crash messages.** If an app's installer crashes, the row says "crashed" with the Windows code, and the summary says what to try, instead of showing a bare number. - **Apps that need admin.** Some apps can only be updated as administrator (Windows error `0x80073D28`). Devpit waits, then tries these apps again together at the end, with one admin prompt. The row says "needs admin rights, retrying at the end". If you decline the prompt or it still fails, the summary gives the command to run yourself in an administrator terminal. If an app must be closed first, the row says so, for example "close Contoso App and retry". - **Stuck-app hint.** If an app prints nothing for 5 minutes, its row says "no output for 5m" and "press s twice to skip". A run where a few things went wrong ends like this. Each problem gets one row in plain words, and **What to do next** gives the exact step or command for it, wrapped over two lines if it is long rather than cut off: *Screenshot: Update Everything summary with nine apps updated, Docker Desktop skipped because it needs admin rights, Visual Studio Code in use and Git crashed with code 0xC0000409, and a What to do next list with the exact command for each* ## Keys | Key | What it does | | --- | --- | | `↑` `↓` | Move | | `Space` | Tick or untick an app | | `a` / `n` | Tick all / untick all | | `Enter` | Update the ticked apps, or finish on the summary | | `y` / `n` | Answer the question (No is the default) | | `l` | Show or hide the full log | | `Esc` | Stop. The app in flight is cut short and the rest are skipped | | `s` (twice) | Skip the app that is updating now | See [Keyboard and mouse](https://devpit.zubyr.dev/docs/keyboard-and-mouse) for every key. ## If an update fails Common reasons: - The app is running. Close it and run the update again. - The app needs admin rights. See the section above. - The manager itself is out of date or cannot reach the internet. Devpit keeps the raw output for every step. Press `l` to read it. See [Troubleshooting](https://devpit.zubyr.dev/docs/troubleshooting) for common errors and what they mean. ## Common questions ### Which package managers does Update Everything use? Scoop, winget, Chocolatey and npm global packages, whichever ones are installed on your PC. Devpit asks each one at the same time what is out of date and lists the answers together. ### Can I leave some apps out? Yes. Every app starts ticked. Untick what you want to keep as it is. Pinned and held apps are shown but cannot be ticked. Apps that winget says need explicit targeting start unticked. ### Why does Chocolatey ask for administrator rights? Chocolatey always needs admin. Devpit runs all Chocolatey updates in one helper that asks once, so ten apps are one Windows prompt. If you decline, they are marked skipped, not failed. ### What if one app fails to update? The others carry on. The summary shows the failed app with a reason in plain words, such as the app is in use and must be closed. Fix that, then run Update Everything again. ### Does Devpit update itself? It is always updated last, because a program cannot cleanly replace its own running file. Devpit also shows an update label in the header when a newer release exists, and Settings shows the command to upgrade. ## Related - [Install developer apps on Windows with Devpit](https://devpit.zubyr.dev/docs/features/install-developer-apps): Pick developer tools from a short list and let Devpit install them through Scoop, winget or Chocolatey, one at a time, with live progress. - [Troubleshooting](https://devpit.zubyr.dev/docs/troubleshooting): Plain-words fixes for real Devpit and Windows problems, from winget error codes to stuck ports and icons that show as boxes. - [Devpit settings, themes, icons and the never-touch list](https://devpit.zubyr.dev/docs/features/settings): Every Devpit setting explained, from themes and icons to usage stats, the never-touch list, dev ports and the icon font, and where the settings file lives. --- Canonical page: https://devpit.zubyr.dev/docs/features/update-everything # Using Devpit with AI agents What Devpit's Claude Code skill writes and where, what it tells an agent to do and never do, and how agents read Devpit's JSON, exit codes and Markdown docs. AI agents such as Claude Code can run `devpit` in a terminal, like you do. That lets an agent check which account a tool uses in a folder, and explain why, before it pushes, deploys or commits. Devpit has a small **skill** for Claude Code that teaches it how to do this safely. ## Add the skill There are three ways. Each one asks first, and the default answer is **No**. After an update, the [What's new card](https://devpit.zubyr.dev/docs/getting-started#after-an-update) also offers the skill when it is missing or older; it opens the Settings screen and installs nothing by itself. - **The installer.** On a fresh install, when Claude Code is on the PC, it asks `Let AI agents (Claude Code) use Devpit? [y/N]`. Only `y` or `yes` adds the skill. Pass `-NoAgent` and it never asks. An update never adds the skill; it only refreshes a skill Devpit wrote before. - **Settings.** Open **Settings**, then **AI agent skill** in the **AI agents** group. The screen shows what the skill lets Claude Code do, what it never does and where it goes, with **Install**, **Update** or **Remove**. - **The command line:** ```powershell devpit agent install ``` It lists each place it will write and asks `Write the skill?` first. *Screenshot: AI agent skill screen in Settings: what the skill lets Claude Code do, what it never does, where SKILL.md is written, and an Install button (Settings, AI agent skill)* If Claude Code is not on the PC, nothing is written. Devpit looks for `claude` on PATH, a `.claude` folder in your user folder, or a Claude Code account in Devpit. It never runs `claude` to find out. ## What it writes, and where One file, `SKILL.md`, in a `devpit` folder: - `%USERPROFILE%\.claude\skills\devpit\SKILL.md`, for Claude Code's default account, and - `skills\devpit\SKILL.md` in each Claude Code account Devpit manages, unless that account already gets the skill through a shared skills link. The file carries a marker line that says Devpit wrote it, and a skill version. `devpit agent install` updates Devpit's own older skill. It never overwrites a `devpit` skill that someone else wrote, or one from a newer Devpit. Running it again changes nothing. It also prints a short section to paste into `AGENTS.md`, for other agents that read that file. Devpit never writes into your repositories. To see where the skill is and whether it is current: ```powershell devpit agent status devpit agent status --json ``` ## What the skill tells an agent - **Read first.** `devpit accounts --json`, `devpit --json`, `devpit list --json` and `devpit accounts verify --json` change nothing. - **When you ask why something happened,** run `devpit accounts verify --json` and `devpit --json` first. Each problem comes with a fix and, when a page explains it, a `docs` link. Then open the one matching page from [llms.txt](https://devpit.zubyr.dev/llms.txt). Offline, use `devpit --help`. - **Ask before any change.** Tell you exactly what would change, and only after you agree run the command with `--yes`. Never switch on its own. - **Undo** with `devpit undo --yes`, again only when you ask. - **Never** read account folders or login files (such as `.credentials.json`, `.claude.json`, `hosts.yml` or anything under `.devpit\accounts`), never print, copy or pass on a token, and never pass `--yes` before you agreed to that exact change. ## What it cannot do Devpit itself never changes anything for an agent without `--yes`. With no terminal to answer in, a command that would change something changes nothing and exits with code `3`. The skill is instructions, not a lock: Devpit cannot tell who typed `--yes`. If an agent changed an account anyway, see [My AI agent changed an account without asking](https://devpit.zubyr.dev/docs/troubleshooting/ai-agent-changed-account-without-asking). ## For agents and scripts | What | Where | | --- | --- | | Machine-readable output | `--json` on every read command. The shape is in each command's `--help` and on the [command line reference](https://devpit.zubyr.dev/docs/command-line). | | Docs link per problem | `docs` in the `--json` output, and a `Docs:` line under the fix in the normal output | | Exit codes | `0` done, `1` failed, `2` wrong usage, `3` needs `--yes` (nothing changed), `4` verify found a mismatch | | Every docs page, listed | [https://devpit.zubyr.dev/llms.txt](https://devpit.zubyr.dev/llms.txt) | | One page as Markdown | Add `.md` to its URL, for example `https://devpit.zubyr.dev/docs/troubleshooting/accounts-wrong-account-used.md`. The docs home is `https://devpit.zubyr.dev/docs/index.md`. | | The whole docs in one file | [https://devpit.zubyr.dev/llms-full.txt](https://devpit.zubyr.dev/llms-full.txt) (large; one page is usually enough) | ## Remove it ```powershell devpit agent remove ``` It lists the files it will remove and asks first. It removes only `SKILL.md` files that carry Devpit's marker and were written in place, never one reached through a shared link, and the `devpit` folder when it is then empty. Skills from anyone else stay. You can also remove it in **Settings**, **AI agent skill**, **Remove**. `devpit accounts cleanup` removes it together with everything else Devpit added for accounts, and uninstalling with the installer removes it too. ## Common questions ### Can an AI agent change my accounts through Devpit on its own? Not without --yes. An agent runs devpit with no terminal to answer in, so a command that would change something changes nothing and exits with code 3 unless --yes is on the command line. The skill tells the agent to ask you first and pass --yes only after you agree. ### Does the skill let an agent read my logins? No. Devpit's commands never print a token, and the skill tells the agent never to read account folders, login files or tokens. ### Is the skill installed by default? No. The installer asks only when Claude Code is on the PC, and the default answer is No. You can also add it later in Settings or with devpit agent install. ## Related - [Command line reference](https://devpit.zubyr.dev/docs/command-line): Every devpit command and flag, generated from the app itself. See and switch accounts, verify, undo, install the icon font and more from a terminal. - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [My AI agent changed an account without asking](https://devpit.zubyr.dev/docs/troubleshooting/ai-agent-changed-account-without-asking): An AI agent switched which account a tool uses through Devpit? Why that needs --yes, how to see what changed, how to undo it, and how to stop it next time. - [Is Devpit safe? What it protects and what it sends](https://devpit.zubyr.dev/docs/safety-and-privacy): How Devpit protects your files and accounts with previews, a default of No and undo, why it stores no tokens, and exactly what opt-in usage stats send. --- Canonical page: https://devpit.zubyr.dev/docs/ai-agents # Command line reference Every devpit command and flag, generated from the app itself. See and switch accounts, verify, undo, install the icon font and more from a terminal. Run `devpit` with no arguments to open the app. The commands below are for scripts, AI agents, the installer and quick checks. This page is generated from the app's own command definitions, so it always matches the version you install. ## Commands - [`devpit`](https://devpit.zubyr.dev/docs/command-line#devpit): A pit stop for your dev machine - [`devpit accounts`](https://devpit.zubyr.dev/docs/command-line#devpit-accounts): Show every tool's account in this folder - [`devpit accounts cleanup`](https://devpit.zubyr.dev/docs/command-line#devpit-accounts-cleanup): Remove everything Devpit added for accounts, and nothing else - [`devpit accounts verify`](https://devpit.zubyr.dev/docs/command-line#devpit-accounts-verify): Check, for every tool, that the expected account is the one in use - [`devpit agent`](https://devpit.zubyr.dev/docs/command-line#devpit-agent): Teach AI agents to use Devpit safely - [`devpit agent install`](https://devpit.zubyr.dev/docs/command-line#devpit-agent-install): Write the Devpit skill for Claude Code and print an AGENTS.md section - [`devpit agent remove`](https://devpit.zubyr.dev/docs/command-line#devpit-agent-remove): Remove the Devpit skill files Devpit wrote - [`devpit agent status`](https://devpit.zubyr.dev/docs/command-line#devpit-agent-status): Show whether the Devpit skill is installed for Claude Code, and its version - [`devpit claude`](https://devpit.zubyr.dev/docs/command-line#devpit-claude): Show the Claude Code account used here, and why - [`devpit claude add`](https://devpit.zubyr.dev/docs/command-line#devpit-claude-add): Sign in to another Claude Code account and name it - [`devpit claude import`](https://devpit.zubyr.dev/docs/command-line#devpit-claude-import): Bring claude-acc's accounts and folder links into Devpit - [`devpit claude list`](https://devpit.zubyr.dev/docs/command-line#devpit-claude-list): List the Claude Code accounts - [`devpit claude run`](https://devpit.zubyr.dev/docs/command-line#devpit-claude-run): Run one command with an account, just this once (nothing is saved) - [`devpit claude use`](https://devpit.zubyr.dev/docs/command-line#devpit-claude-use): Use an account in this folder and every folder inside it (or everywhere) - [`devpit clean`](https://devpit.zubyr.dev/docs/command-line#devpit-clean): Free up disk space without opening the app (not available yet) - [`devpit cloudflare`](https://devpit.zubyr.dev/docs/command-line#devpit-cloudflare): Show the Cloudflare account used here, and why - [`devpit cloudflare add`](https://devpit.zubyr.dev/docs/command-line#devpit-cloudflare-add): Sign in to another Cloudflare account and name it - [`devpit cloudflare list`](https://devpit.zubyr.dev/docs/command-line#devpit-cloudflare-list): List the Cloudflare accounts - [`devpit cloudflare run`](https://devpit.zubyr.dev/docs/command-line#devpit-cloudflare-run): Run one command with an account, just this once (nothing is saved) - [`devpit cloudflare use`](https://devpit.zubyr.dev/docs/command-line#devpit-cloudflare-use): Use an account in this folder and every folder inside it (or everywhere) - [`devpit completion`](https://devpit.zubyr.dev/docs/command-line#devpit-completion): Generate the autocompletion script for the specified shell - [`devpit completion bash`](https://devpit.zubyr.dev/docs/command-line#devpit-completion-bash): Generate the autocompletion script for bash - [`devpit completion fish`](https://devpit.zubyr.dev/docs/command-line#devpit-completion-fish): Generate the autocompletion script for fish - [`devpit completion powershell`](https://devpit.zubyr.dev/docs/command-line#devpit-completion-powershell): Generate the autocompletion script for powershell - [`devpit completion zsh`](https://devpit.zubyr.dev/docs/command-line#devpit-completion-zsh): Generate the autocompletion script for zsh - [`devpit convex`](https://devpit.zubyr.dev/docs/command-line#devpit-convex): Show the Convex account used here, and why - [`devpit convex add`](https://devpit.zubyr.dev/docs/command-line#devpit-convex-add): Sign in to another Convex account and name it - [`devpit convex list`](https://devpit.zubyr.dev/docs/command-line#devpit-convex-list): List the Convex accounts - [`devpit convex run`](https://devpit.zubyr.dev/docs/command-line#devpit-convex-run): Run one command with an account, just this once (nothing is saved) - [`devpit convex use`](https://devpit.zubyr.dev/docs/command-line#devpit-convex-use): Use an account in this folder and every folder inside it (or everywhere) - [`devpit firebase`](https://devpit.zubyr.dev/docs/command-line#devpit-firebase): Show the Firebase account used here, and why - [`devpit firebase add`](https://devpit.zubyr.dev/docs/command-line#devpit-firebase-add): Sign in to another Firebase account and name it - [`devpit firebase list`](https://devpit.zubyr.dev/docs/command-line#devpit-firebase-list): List the Firebase accounts - [`devpit firebase run`](https://devpit.zubyr.dev/docs/command-line#devpit-firebase-run): Run one command with an account, just this once (nothing is saved) - [`devpit firebase use`](https://devpit.zubyr.dev/docs/command-line#devpit-firebase-use): Use an account in this folder and every folder inside it (or everywhere) - [`devpit font`](https://devpit.zubyr.dev/docs/command-line#devpit-font): Install, remove or check the icon font - [`devpit font install`](https://devpit.zubyr.dev/docs/command-line#devpit-font-install): Install Symbols Nerd Font Mono for the current user - [`devpit font remove`](https://devpit.zubyr.dev/docs/command-line#devpit-font-remove): Remove the icon font and undo the terminal patch - [`devpit font status`](https://devpit.zubyr.dev/docs/command-line#devpit-font-status): Report whether the icon font is installed - [`devpit git`](https://devpit.zubyr.dev/docs/command-line#devpit-git): Show the Git account used here, and why - [`devpit git add`](https://devpit.zubyr.dev/docs/command-line#devpit-git-add): Sign in to another Git account and name it - [`devpit git list`](https://devpit.zubyr.dev/docs/command-line#devpit-git-list): List the Git accounts - [`devpit git run`](https://devpit.zubyr.dev/docs/command-line#devpit-git-run): Run one command with an account, just this once (nothing is saved) - [`devpit git use`](https://devpit.zubyr.dev/docs/command-line#devpit-git-use): Use an account in this folder and every folder inside it (or everywhere) - [`devpit github`](https://devpit.zubyr.dev/docs/command-line#devpit-github): Show the GitHub account used here, and why - [`devpit github add`](https://devpit.zubyr.dev/docs/command-line#devpit-github-add): Sign in to another GitHub account and name it - [`devpit github list`](https://devpit.zubyr.dev/docs/command-line#devpit-github-list): List the GitHub accounts - [`devpit github run`](https://devpit.zubyr.dev/docs/command-line#devpit-github-run): Run one command with an account, just this once (nothing is saved) - [`devpit github use`](https://devpit.zubyr.dev/docs/command-line#devpit-github-use): Use an account in this folder and every folder inside it (or everywhere) - [`devpit ports`](https://devpit.zubyr.dev/docs/command-line#devpit-ports): List or free busy dev ports (not available yet) - [`devpit ports kill`](https://devpit.zubyr.dev/docs/command-line#devpit-ports-kill): Stop whatever is listening on a port (not available yet) - [`devpit settings`](https://devpit.zubyr.dev/docs/command-line#devpit-settings): Read or change a setting without opening the app (not available yet) - [`devpit share`](https://devpit.zubyr.dev/docs/command-line#devpit-share): Share files between PCs on your network (open the app to do it) - [`devpit share cleanup`](https://devpit.zubyr.dev/docs/command-line#devpit-share-cleanup): Remove a share that an earlier Devpit left behind - [`devpit supabase`](https://devpit.zubyr.dev/docs/command-line#devpit-supabase): Show the Supabase account used here, and why - [`devpit supabase add`](https://devpit.zubyr.dev/docs/command-line#devpit-supabase-add): Sign in to another Supabase account and name it - [`devpit supabase list`](https://devpit.zubyr.dev/docs/command-line#devpit-supabase-list): List the Supabase accounts - [`devpit supabase run`](https://devpit.zubyr.dev/docs/command-line#devpit-supabase-run): Run one command with an account, just this once (nothing is saved) - [`devpit supabase use`](https://devpit.zubyr.dev/docs/command-line#devpit-supabase-use): Use an account in this folder and every folder inside it (or everywhere) - [`devpit undo`](https://devpit.zubyr.dev/docs/command-line#devpit-undo): Undo the last account change - [`devpit update`](https://devpit.zubyr.dev/docs/command-line#devpit-update): Update tools through every detected package manager (not available yet) - [`devpit use`](https://devpit.zubyr.dev/docs/command-line#devpit-use): Switch every tool that has an account with this name - [`devpit vercel`](https://devpit.zubyr.dev/docs/command-line#devpit-vercel): Show the Vercel account used here, and why - [`devpit vercel add`](https://devpit.zubyr.dev/docs/command-line#devpit-vercel-add): Sign in to another Vercel account and name it - [`devpit vercel list`](https://devpit.zubyr.dev/docs/command-line#devpit-vercel-list): List the Vercel accounts - [`devpit vercel run`](https://devpit.zubyr.dev/docs/command-line#devpit-vercel-run): Run one command with an account, just this once (nothing is saved) - [`devpit vercel use`](https://devpit.zubyr.dev/docs/command-line#devpit-vercel-use): Use an account in this folder and every folder inside it (or everywhere) - [`devpit version`](https://devpit.zubyr.dev/docs/command-line#devpit-version): Print the Devpit version ## `devpit` A pit stop for your dev machine. Devpit is a toolkit for developers on Windows: the right account in every folder, disk space back, stuck ports freed, tools updated and big folders moved between PCs, from one menu. Run it with no arguments to open the app. For scripts and AI agents: every read command takes --json and never asks anything. A command that would change something asks first at a terminal (default No); with nobody at a terminal it changes nothing and exits 3 unless --yes is given, and --yes is only for after the user agreed. Agents: run `devpit agent install` for a skill with these rules. Exit codes: - 0: done - 1: failed - 2: wrong usage - 3: needs --yes: it would change something and nobody agreed - 4: verify found a mismatch ```text devpit [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | | `-h`, `--help` | bool | `false` | help for devpit | | `-v`, `--version` | bool | `false` | version for devpit | **Examples** ```powershell devpit devpit --ascii devpit accounts --json devpit claude use work --yes devpit version --short ``` **Subcommands** - [`accounts`](https://devpit.zubyr.dev/docs/command-line#devpit-accounts): Show every tool's account in this folder - [`agent`](https://devpit.zubyr.dev/docs/command-line#devpit-agent): Teach AI agents to use Devpit safely - [`claude`](https://devpit.zubyr.dev/docs/command-line#devpit-claude): Show the Claude Code account used here, and why - [`clean`](https://devpit.zubyr.dev/docs/command-line#devpit-clean): Free up disk space without opening the app (not available yet) - [`cloudflare`](https://devpit.zubyr.dev/docs/command-line#devpit-cloudflare): Show the Cloudflare account used here, and why - [`completion`](https://devpit.zubyr.dev/docs/command-line#devpit-completion): Generate the autocompletion script for the specified shell - [`convex`](https://devpit.zubyr.dev/docs/command-line#devpit-convex): Show the Convex account used here, and why - [`firebase`](https://devpit.zubyr.dev/docs/command-line#devpit-firebase): Show the Firebase account used here, and why - [`font`](https://devpit.zubyr.dev/docs/command-line#devpit-font): Install, remove or check the icon font - [`git`](https://devpit.zubyr.dev/docs/command-line#devpit-git): Show the Git account used here, and why - [`github`](https://devpit.zubyr.dev/docs/command-line#devpit-github): Show the GitHub account used here, and why - [`ports`](https://devpit.zubyr.dev/docs/command-line#devpit-ports): List or free busy dev ports (not available yet) - [`settings`](https://devpit.zubyr.dev/docs/command-line#devpit-settings): Read or change a setting without opening the app (not available yet) - [`share`](https://devpit.zubyr.dev/docs/command-line#devpit-share): Share files between PCs on your network (open the app to do it) - [`supabase`](https://devpit.zubyr.dev/docs/command-line#devpit-supabase): Show the Supabase account used here, and why - [`undo`](https://devpit.zubyr.dev/docs/command-line#devpit-undo): Undo the last account change - [`update`](https://devpit.zubyr.dev/docs/command-line#devpit-update): Update tools through every detected package manager (not available yet) - [`use`](https://devpit.zubyr.dev/docs/command-line#devpit-use): Switch every tool that has an account with this name - [`vercel`](https://devpit.zubyr.dev/docs/command-line#devpit-vercel): Show the Vercel account used here, and why - [`version`](https://devpit.zubyr.dev/docs/command-line#devpit-version): Print the Devpit version ## `devpit accounts` Show every tool's account in this folder. The Accounts table for this folder (or --folder): every tool, the account it uses, why, and anything wrong with its fix. It never runs a tool's sign-in check. --json shape: {folder, tools: [{tool, tool_name, folder, account: {name, email, login, display}, why, reason, rule_folder, everywhere, chain: [{folder, account, won, skipped}], installed, managed, supports: {folder_rules, everywhere, just_once, add_account, show_only, beta, why}, problems: [{kind, tool, message, fix, docs}]}], warning}. docs is the troubleshooting page that explains a problem. ```text devpit accounts [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | the folder to look at instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit accounts devpit accounts --json devpit accounts verify ``` **Subcommands** - [`cleanup`](https://devpit.zubyr.dev/docs/command-line#devpit-accounts-cleanup): Remove everything Devpit added for accounts, and nothing else - [`verify`](https://devpit.zubyr.dev/docs/command-line#devpit-accounts-verify): Check, for every tool, that the expected account is the one in use ## `devpit accounts cleanup` Remove everything Devpit added for accounts, and nothing else. Lists exactly what Devpit added (the folder rules, the shims and their PATH entry, its Git files, its [include] block and the github.com sign-in helper, the Wrangler bindings it made, the agent skill) and, after a yes, removes only that. Account folders and sign-ins are never deleted. --copy-links also turns a Claude Code account's links to your default setup into its own copies, so it keeps working without them. ```text devpit accounts cleanup [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--copy-links` | bool | `false` | also turn shared Claude Code links into each account's own copies | | `--yes` | bool | `false` | remove without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit accounts cleanup devpit accounts cleanup --yes ``` ## `devpit accounts verify` Check, for every tool, that the expected account is the one in use. For every installed tool, compares the account Devpit expects in this folder with what the tool says (Git and GitHub pushes offline, the others by asking the tool who is signed in), and lists every problem with its fix. Exit code 4 when anything does not match. By default only the account used in this folder is asked. --all asks every account; a check that can sign an idle account out (Claude Code) is skipped, with the reason, unless you agree at the prompt or pass --yes after the user agreed. --json shape: {folder, mismatch, checks: [{tool, account, here, expected, actual: {state, email, login, name, org, plan, method, note}, says, how, status, notes, docs}], problems: [{kind, tool, message, fix, docs}], skipped}. status is ok, mismatch, info, not installed or error. ```text devpit accounts verify [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--all` | bool | `false` | also check every account not used in this folder | | `--folder` | string | `none` | the folder to check instead of the current one | | `--json` | bool | `false` | print machine-readable output | | `--yes` | bool | `false` | with --all, also run checks that can sign an idle account out; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit accounts verify devpit accounts verify --json devpit accounts verify --all ``` ## `devpit agent` Teach AI agents to use Devpit safely. `devpit agent install` writes a Devpit skill (SKILL.md) into Claude Code's skills folder and into each Claude Code account Devpit manages, and prints an AGENTS.md section for other agents. The skill tells an agent to check with read commands first, to explain with the matching page from devpit.zubyr.dev/llms.txt, to ask before any change, and never to read account folders. `devpit agent status` says where it is and whether it is current. `devpit agent remove` takes out only the files it wrote. ```text devpit agent ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit agent status devpit agent install devpit agent remove ``` **Subcommands** - [`install`](https://devpit.zubyr.dev/docs/command-line#devpit-agent-install): Write the Devpit skill for Claude Code and print an AGENTS.md section - [`remove`](https://devpit.zubyr.dev/docs/command-line#devpit-agent-remove): Remove the Devpit skill files Devpit wrote - [`status`](https://devpit.zubyr.dev/docs/command-line#devpit-agent-status): Show whether the Devpit skill is installed for Claude Code, and its version ## `devpit agent install` Write the Devpit skill for Claude Code and print an AGENTS.md section. Writes skills\devpit\SKILL.md into ~/.claude and into each Devpit-managed Claude Code account that does not already get it through a shared link, and updates Devpit's own older skill. A devpit skill Devpit did not write, or one from a newer Devpit, is never overwritten. Running it again changes nothing. Without Claude Code on this PC it writes nothing. ```text devpit agent install [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--yes` | bool | `false` | write without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit agent install devpit agent install --yes ``` ## `devpit agent remove` Remove the Devpit skill files Devpit wrote. Removes only SKILL.md files carrying Devpit's marker, written in place (never through a shared link), and their devpit folder when it is then empty. ```text devpit agent remove [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--yes` | bool | `false` | remove without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit agent remove devpit agent remove --yes ``` ## `devpit agent status` Show whether the Devpit skill is installed for Claude Code, and its version. Says whether Claude Code was found (claude on PATH, a ~/.claude folder, or a Claude Code account in Devpit; claude is never run) and, for each place the skill goes, whether Devpit's skill is there, older, newer, in the way of a devpit skill someone else wrote, or shared through a link. Changes nothing. --json shape: {claude_code, claude_code_why, version, state, can_install, targets: [{account, file, state, version, shared_with, through_link, note}]}. state is one of: Claude Code not found, not installed, installed, installed through a shared link, update available, a different devpit skill is in the way. A target's state is create, update, up to date, newer, not Devpit's or shared. ```text devpit agent status [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit agent status devpit agent status --json ``` ## `devpit claude` Show the Claude Code account used here, and why. Shows which Claude Code account is used in this folder (or --folder), who it is, why (a folder rule or "everywhere"), the account used everywhere else, and anything wrong with a fix. It never runs the tool's sign-in check. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Claude Code. ```text devpit claude [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | the folder to look at instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit claude devpit claude --json devpit claude use work devpit claude list ``` **Subcommands** - [`add`](https://devpit.zubyr.dev/docs/command-line#devpit-claude-add): Sign in to another Claude Code account and name it - [`import`](https://devpit.zubyr.dev/docs/command-line#devpit-claude-import): Bring claude-acc's accounts and folder links into Devpit - [`list`](https://devpit.zubyr.dev/docs/command-line#devpit-claude-list): List the Claude Code accounts - [`run`](https://devpit.zubyr.dev/docs/command-line#devpit-claude-run): Run one command with an account, just this once (nothing is saved) - [`use`](https://devpit.zubyr.dev/docs/command-line#devpit-claude-use): Use an account in this folder and every folder inside it (or everywhere) ## `devpit claude add` Sign in to another Claude Code account and name it. Runs Claude Code's own sign-in for a new account, then asks for a name (suggested from the email). A sign-in that does not finish leaves nothing behind. With nobody at a terminal, --name and --yes are needed. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Claude Code. ```text devpit claude add [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--console` | bool | `false` | sign in with an Anthropic Console account (API billing) | | `--email` | string | `none` | pre-fill the sign-in page with this email, where the tool supports it | | `--name` | string | `none` | the name for the new account in Devpit | | `--yes` | bool | `false` | add it without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit claude add devpit claude add --name work --yes ``` ## `devpit claude import` Bring claude-acc's accounts and folder links into Devpit. Reads claude-acc's own files (its accounts, folder links and default account), shows what Devpit would add, and after a yes adds them as one change `devpit undo` takes back. Accounts stay where they are, so nobody signs in again. Then it prints the steps to retire claude-acc safely. ```text devpit claude import --from claude-acc [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--from` | string | `none` | where to import from: claude-acc | | `--yes` | bool | `false` | import without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit claude import --from claude-acc devpit claude import --from claude-acc --yes ``` ## `devpit claude list` List the Claude Code accounts. Lists "default" and every named account, who it is, where it is used, and accounts the tool itself has that Devpit does not list yet. The one used in this folder is marked. ```text devpit claude list [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | mark the account used in this folder instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit claude list devpit claude list --json ``` ## `devpit claude run` Run one command with an account, just this once (nothing is saved). Starts the command with the account applied to it and to everything it starts. Nothing is saved, so nothing needs undoing and no --yes is asked for. The exit code is the command's own. Vercel, Firebase and Cloudflare take the account as a command-line option, so for them the command must start with the tool (or npx and the tool). Devpit can set folder rules, an account for everywhere, just this once (`run`) for Claude Code. ```text devpit claude run -- [args...] ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit claude run work -- claude -p "summarise this repo" ``` ## `devpit claude use` Use an account in this folder and every folder inside it (or everywhere). Shows in plain words what would change and the exact files Devpit writes, asks [y/N] at a terminal (default No), then makes the change step by step. It can be undone with `devpit undo`. A unique start of a name works ("wo" for "work"); "default" is the tool's own sign-in. With nobody at a terminal it changes nothing and exits 3 unless --yes is given. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Claude Code. ```text devpit claude use [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--everywhere` | bool | `false` | use it wherever no folder rule says otherwise | | `--folder` | string | `none` | the folder (and every folder inside it) to use it in, instead of the current one | | `--yes` | bool | `false` | make the change without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit claude use work devpit claude use work --folder C:\Work --yes devpit claude use default --everywhere ``` ## `devpit clean` Free up disk space without opening the app. > **Caution: Not available yet** > > This command is reserved and does nothing yet. Use the app instead: run `devpit` and pick the section. ```text devpit clean [path] [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--dry-run` | bool | `false` | report what would be deleted, delete nothing | | `--json` | bool | `false` | print machine-readable output | | `--resume` | bool | `false` | finish tombstones left by an interrupted run | | `--yes` | bool | `false` | skip the confirmation prompt | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit clean D:\work --dry-run devpit clean --resume ``` ## `devpit cloudflare` Show the Cloudflare account used here, and why. Shows which Cloudflare account is used in this folder (or --folder), who it is, why (a folder rule or "everywhere"), the account used everywhere else, and anything wrong with a fix. It never runs the tool's sign-in check. Devpit can set folder rules, just this once (`run`) for Cloudflare. Beta: it relies on a feature the tool itself calls experimental. Wrangler profiles are beta. Everywhere else, Wrangler uses its own default login (`wrangler login`); Devpit cannot change that in this version. ```text devpit cloudflare [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | the folder to look at instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit cloudflare devpit cloudflare --json devpit cloudflare use work devpit cloudflare list ``` **Subcommands** - [`add`](https://devpit.zubyr.dev/docs/command-line#devpit-cloudflare-add): Sign in to another Cloudflare account and name it - [`list`](https://devpit.zubyr.dev/docs/command-line#devpit-cloudflare-list): List the Cloudflare accounts - [`run`](https://devpit.zubyr.dev/docs/command-line#devpit-cloudflare-run): Run one command with an account, just this once (nothing is saved) - [`use`](https://devpit.zubyr.dev/docs/command-line#devpit-cloudflare-use): Use an account in this folder and every folder inside it (or everywhere) ## `devpit cloudflare add` Sign in to another Cloudflare account and name it. Runs Cloudflare's own sign-in for a new account, then asks for a name (suggested from the email). A sign-in that does not finish leaves nothing behind. With nobody at a terminal, --name and --yes are needed. Wrangler names the profile when it is made, so the name is asked first. Devpit can set folder rules, just this once (`run`) for Cloudflare. Beta: it relies on a feature the tool itself calls experimental. Wrangler profiles are beta. Everywhere else, Wrangler uses its own default login (`wrangler login`); Devpit cannot change that in this version. ```text devpit cloudflare add [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--email` | string | `none` | pre-fill the sign-in page with this email, where the tool supports it | | `--name` | string | `none` | the name for the new account in Devpit | | `--yes` | bool | `false` | add it without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit cloudflare add devpit cloudflare add --name work --yes ``` ## `devpit cloudflare list` List the Cloudflare accounts. Lists "default" and every named account, who it is, where it is used, and accounts the tool itself has that Devpit does not list yet. The one used in this folder is marked. ```text devpit cloudflare list [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | mark the account used in this folder instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit cloudflare list devpit cloudflare list --json ``` ## `devpit cloudflare run` Run one command with an account, just this once (nothing is saved). Starts the command with the account applied to it and to everything it starts. Nothing is saved, so nothing needs undoing and no --yes is asked for. The exit code is the command's own. Vercel, Firebase and Cloudflare take the account as a command-line option, so for them the command must start with the tool (or npx and the tool). Devpit can set folder rules, just this once (`run`) for Cloudflare. Beta: it relies on a feature the tool itself calls experimental. Wrangler profiles are beta. Everywhere else, Wrangler uses its own default login (`wrangler login`); Devpit cannot change that in this version. ```text devpit cloudflare run -- [args...] ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit cloudflare run work -- wrangler deploy ``` ## `devpit cloudflare use` Use an account in this folder and every folder inside it (or everywhere). Shows in plain words what would change and the exact files Devpit writes, asks [y/N] at a terminal (default No), then makes the change step by step. It can be undone with `devpit undo`. A unique start of a name works ("wo" for "work"); "default" is the tool's own sign-in. With nobody at a terminal it changes nothing and exits 3 unless --yes is given. Devpit can set folder rules, just this once (`run`) for Cloudflare. Beta: it relies on a feature the tool itself calls experimental. Wrangler profiles are beta. Everywhere else, Wrangler uses its own default login (`wrangler login`); Devpit cannot change that in this version. ```text devpit cloudflare use [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--everywhere` | bool | `false` | use it wherever no folder rule says otherwise | | `--folder` | string | `none` | the folder (and every folder inside it) to use it in, instead of the current one | | `--yes` | bool | `false` | make the change without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit cloudflare use work devpit cloudflare use work --folder C:\Work --yes devpit cloudflare use default --everywhere ``` ## `devpit completion` Generate the autocompletion script for the specified shell. ```text devpit completion ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Subcommands** - [`bash`](https://devpit.zubyr.dev/docs/command-line#devpit-completion-bash): Generate the autocompletion script for bash - [`fish`](https://devpit.zubyr.dev/docs/command-line#devpit-completion-fish): Generate the autocompletion script for fish - [`powershell`](https://devpit.zubyr.dev/docs/command-line#devpit-completion-powershell): Generate the autocompletion script for powershell - [`zsh`](https://devpit.zubyr.dev/docs/command-line#devpit-completion-zsh): Generate the autocompletion script for zsh ## `devpit completion bash` Generate the autocompletion script for bash. ```text devpit completion bash ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--no-descriptions` | bool | `false` | disable completion descriptions | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | ## `devpit completion fish` Generate the autocompletion script for fish. ```text devpit completion fish [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--no-descriptions` | bool | `false` | disable completion descriptions | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | ## `devpit completion powershell` Generate the autocompletion script for powershell. ```text devpit completion powershell [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--no-descriptions` | bool | `false` | disable completion descriptions | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | ## `devpit completion zsh` Generate the autocompletion script for zsh. ```text devpit completion zsh [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--no-descriptions` | bool | `false` | disable completion descriptions | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | ## `devpit convex` Show the Convex account used here, and why. Shows which Convex account is used in this folder (or --folder), who it is, why (a folder rule or "everywhere"), the account used everywhere else, and anything wrong with a fix. It never runs the tool's sign-in check. Convex is show-only: Convex picks the account per project. Devpit shows it but does not switch it. `use`, `run` and `add` stop with that reason (exit 1). ```text devpit convex [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | the folder to look at instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit convex devpit convex --json devpit convex use work devpit convex list ``` **Subcommands** - [`add`](https://devpit.zubyr.dev/docs/command-line#devpit-convex-add): Sign in to another Convex account and name it - [`list`](https://devpit.zubyr.dev/docs/command-line#devpit-convex-list): List the Convex accounts - [`run`](https://devpit.zubyr.dev/docs/command-line#devpit-convex-run): Run one command with an account, just this once (nothing is saved) - [`use`](https://devpit.zubyr.dev/docs/command-line#devpit-convex-use): Use an account in this folder and every folder inside it (or everywhere) ## `devpit convex add` Sign in to another Convex account and name it. Runs Convex's own sign-in for a new account, then asks for a name (suggested from the email). A sign-in that does not finish leaves nothing behind. With nobody at a terminal, --name and --yes are needed. Convex is show-only: Convex picks the account per project. Devpit shows it but does not switch it. `use`, `run` and `add` stop with that reason (exit 1). ```text devpit convex add [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--email` | string | `none` | pre-fill the sign-in page with this email, where the tool supports it | | `--name` | string | `none` | the name for the new account in Devpit | | `--yes` | bool | `false` | add it without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit convex add devpit convex add --name work --yes ``` ## `devpit convex list` List the Convex accounts. Lists "default" and every named account, who it is, where it is used, and accounts the tool itself has that Devpit does not list yet. The one used in this folder is marked. ```text devpit convex list [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | mark the account used in this folder instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit convex list devpit convex list --json ``` ## `devpit convex run` Run one command with an account, just this once (nothing is saved). Starts the command with the account applied to it and to everything it starts. Nothing is saved, so nothing needs undoing and no --yes is asked for. The exit code is the command's own. Vercel, Firebase and Cloudflare take the account as a command-line option, so for them the command must start with the tool (or npx and the tool). Convex is show-only: Convex picks the account per project. Devpit shows it but does not switch it. `use`, `run` and `add` stop with that reason (exit 1). ```text devpit convex run -- [args...] ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit convex run work -- convex deploy ``` ## `devpit convex use` Use an account in this folder and every folder inside it (or everywhere). Shows in plain words what would change and the exact files Devpit writes, asks [y/N] at a terminal (default No), then makes the change step by step. It can be undone with `devpit undo`. A unique start of a name works ("wo" for "work"); "default" is the tool's own sign-in. With nobody at a terminal it changes nothing and exits 3 unless --yes is given. Convex is show-only: Convex picks the account per project. Devpit shows it but does not switch it. `use`, `run` and `add` stop with that reason (exit 1). ```text devpit convex use [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--everywhere` | bool | `false` | use it wherever no folder rule says otherwise | | `--folder` | string | `none` | the folder (and every folder inside it) to use it in, instead of the current one | | `--yes` | bool | `false` | make the change without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit convex use work devpit convex use work --folder C:\Work --yes devpit convex use default --everywhere ``` ## `devpit firebase` Show the Firebase account used here, and why. Shows which Firebase account is used in this folder (or --folder), who it is, why (a folder rule or "everywhere"), the account used everywhere else, and anything wrong with a fix. It never runs the tool's sign-in check. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Firebase. ```text devpit firebase [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | the folder to look at instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit firebase devpit firebase --json devpit firebase use work devpit firebase list ``` **Subcommands** - [`add`](https://devpit.zubyr.dev/docs/command-line#devpit-firebase-add): Sign in to another Firebase account and name it - [`list`](https://devpit.zubyr.dev/docs/command-line#devpit-firebase-list): List the Firebase accounts - [`run`](https://devpit.zubyr.dev/docs/command-line#devpit-firebase-run): Run one command with an account, just this once (nothing is saved) - [`use`](https://devpit.zubyr.dev/docs/command-line#devpit-firebase-use): Use an account in this folder and every folder inside it (or everywhere) ## `devpit firebase add` Sign in to another Firebase account and name it. Runs Firebase's own sign-in for a new account, then asks for a name (suggested from the email). A sign-in that does not finish leaves nothing behind. With nobody at a terminal, --name and --yes are needed. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Firebase. ```text devpit firebase add [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--email` | string | `none` | pre-fill the sign-in page with this email, where the tool supports it | | `--name` | string | `none` | the name for the new account in Devpit | | `--yes` | bool | `false` | add it without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit firebase add devpit firebase add --name work --yes ``` ## `devpit firebase list` List the Firebase accounts. Lists "default" and every named account, who it is, where it is used, and accounts the tool itself has that Devpit does not list yet. The one used in this folder is marked. ```text devpit firebase list [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | mark the account used in this folder instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit firebase list devpit firebase list --json ``` ## `devpit firebase run` Run one command with an account, just this once (nothing is saved). Starts the command with the account applied to it and to everything it starts. Nothing is saved, so nothing needs undoing and no --yes is asked for. The exit code is the command's own. Vercel, Firebase and Cloudflare take the account as a command-line option, so for them the command must start with the tool (or npx and the tool). Devpit can set folder rules, an account for everywhere, just this once (`run`) for Firebase. ```text devpit firebase run -- [args...] ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit firebase run work -- firebase deploy ``` ## `devpit firebase use` Use an account in this folder and every folder inside it (or everywhere). Shows in plain words what would change and the exact files Devpit writes, asks [y/N] at a terminal (default No), then makes the change step by step. It can be undone with `devpit undo`. A unique start of a name works ("wo" for "work"); "default" is the tool's own sign-in. With nobody at a terminal it changes nothing and exits 3 unless --yes is given. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Firebase. ```text devpit firebase use [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--everywhere` | bool | `false` | use it wherever no folder rule says otherwise | | `--folder` | string | `none` | the folder (and every folder inside it) to use it in, instead of the current one | | `--yes` | bool | `false` | make the change without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit firebase use work devpit firebase use work --folder C:\Work --yes devpit firebase use default --everywhere ``` ## `devpit font` Install, remove or check the icon font. Installs Symbols Nerd Font Mono for the current user (no admin needed) and adds it to Windows Terminal as a fallback font, so your own font is kept. The same as Settings › Icon font. ```text devpit font ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit font status devpit font install --quiet ``` **Subcommands** - [`install`](https://devpit.zubyr.dev/docs/command-line#devpit-font-install): Install Symbols Nerd Font Mono for the current user - [`remove`](https://devpit.zubyr.dev/docs/command-line#devpit-font-remove): Remove the icon font and undo the terminal patch - [`status`](https://devpit.zubyr.dev/docs/command-line#devpit-font-status): Report whether the icon font is installed ## `devpit font install` Install Symbols Nerd Font Mono for the current user. ```text devpit font install [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `-q`, `--quiet` | bool | `false` | print only the one-line result | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit font install devpit font install --quiet ``` ## `devpit font remove` Remove the icon font and undo the terminal patch. ```text devpit font remove ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit font remove ``` ## `devpit font status` Report whether the icon font is installed. ```text devpit font status ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit font status ``` ## `devpit git` Show the Git account used here, and why. Shows which Git account is used in this folder (or --folder), who it is, why (a folder rule or "everywhere"), the account used everywhere else, and anything wrong with a fix. It never runs the tool's sign-in check. Devpit can set folder rules, an account for everywhere for Git. Git takes its commit identity from its config files, not from a sign-in, so there is no "just this once". For one commit, run git -c user.email=you@example.com commit. ```text devpit git [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | the folder to look at instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit git devpit git --json devpit git use work devpit git list ``` **Subcommands** - [`add`](https://devpit.zubyr.dev/docs/command-line#devpit-git-add): Sign in to another Git account and name it - [`list`](https://devpit.zubyr.dev/docs/command-line#devpit-git-list): List the Git accounts - [`run`](https://devpit.zubyr.dev/docs/command-line#devpit-git-run): Run one command with an account, just this once (nothing is saved) - [`use`](https://devpit.zubyr.dev/docs/command-line#devpit-git-use): Use an account in this folder and every folder inside it (or everywhere) ## `devpit git add` Sign in to another Git account and name it. Adds a Git identity (Git has no sign-in): the email, the name commits are made under, and a name for it in Devpit. Devpit can set folder rules, an account for everywhere for Git. Git takes its commit identity from its config files, not from a sign-in, so there is no "just this once". For one commit, run git -c user.email=you@example.com commit. ```text devpit git add [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--display-name` | string | `none` | the name Git commits under (default: the one in your global Git config) | | `--email` | string | `none` | the email Git commits under | | `--name` | string | `none` | the name for the new account in Devpit | | `--yes` | bool | `false` | add it without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit git add devpit git add --name work --email zubair@work.com --display-name "Zubair" --yes ``` ## `devpit git list` List the Git accounts. Lists "default" and every named account, who it is, where it is used, and accounts the tool itself has that Devpit does not list yet. The one used in this folder is marked. ```text devpit git list [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | mark the account used in this folder instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit git list devpit git list --json ``` ## `devpit git run` Run one command with an account, just this once (nothing is saved). Starts the command with the account applied to it and to everything it starts. Nothing is saved, so nothing needs undoing and no --yes is asked for. The exit code is the command's own. Vercel, Firebase and Cloudflare take the account as a command-line option, so for them the command must start with the tool (or npx and the tool). Devpit can set folder rules, an account for everywhere for Git. Git takes its commit identity from its config files, not from a sign-in, so there is no "just this once". For one commit, run git -c user.email=you@example.com commit. ```text devpit git run -- [args...] ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit git run work -- git commit ``` ## `devpit git use` Use an account in this folder and every folder inside it (or everywhere). Shows in plain words what would change and the exact files Devpit writes, asks [y/N] at a terminal (default No), then makes the change step by step. It can be undone with `devpit undo`. A unique start of a name works ("wo" for "work"); "default" is the tool's own sign-in. With nobody at a terminal it changes nothing and exits 3 unless --yes is given. Devpit can set folder rules, an account for everywhere for Git. Git takes its commit identity from its config files, not from a sign-in, so there is no "just this once". For one commit, run git -c user.email=you@example.com commit. ```text devpit git use [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--everywhere` | bool | `false` | use it wherever no folder rule says otherwise | | `--folder` | string | `none` | the folder (and every folder inside it) to use it in, instead of the current one | | `--yes` | bool | `false` | make the change without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit git use work devpit git use work --folder C:\Work --yes devpit git use default --everywhere ``` ## `devpit github` Show the GitHub account used here, and why. Shows which GitHub account is used in this folder (or --folder), who it is, why (a folder rule or "everywhere"), the account used everywhere else, and anything wrong with a fix. It never runs the tool's sign-in check. Devpit can set folder rules, an account for everywhere, just this once (`run`) for GitHub. ```text devpit github [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | the folder to look at instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit github devpit github --json devpit github use work devpit github list ``` **Subcommands** - [`add`](https://devpit.zubyr.dev/docs/command-line#devpit-github-add): Sign in to another GitHub account and name it - [`list`](https://devpit.zubyr.dev/docs/command-line#devpit-github-list): List the GitHub accounts - [`run`](https://devpit.zubyr.dev/docs/command-line#devpit-github-run): Run one command with an account, just this once (nothing is saved) - [`use`](https://devpit.zubyr.dev/docs/command-line#devpit-github-use): Use an account in this folder and every folder inside it (or everywhere) ## `devpit github add` Sign in to another GitHub account and name it. Runs GitHub's own sign-in for a new account, then asks for a name (suggested from the email). A sign-in that does not finish leaves nothing behind. With nobody at a terminal, --name and --yes are needed. Devpit can set folder rules, an account for everywhere, just this once (`run`) for GitHub. ```text devpit github add [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--email` | string | `none` | pre-fill the sign-in page with this email, where the tool supports it | | `--name` | string | `none` | the name for the new account in Devpit | | `--yes` | bool | `false` | add it without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit github add devpit github add --name work --yes ``` ## `devpit github list` List the GitHub accounts. Lists "default" and every named account, who it is, where it is used, and accounts the tool itself has that Devpit does not list yet. The one used in this folder is marked. ```text devpit github list [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | mark the account used in this folder instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit github list devpit github list --json ``` ## `devpit github run` Run one command with an account, just this once (nothing is saved). Starts the command with the account applied to it and to everything it starts. Nothing is saved, so nothing needs undoing and no --yes is asked for. The exit code is the command's own. Vercel, Firebase and Cloudflare take the account as a command-line option, so for them the command must start with the tool (or npx and the tool). Devpit can set folder rules, an account for everywhere, just this once (`run`) for GitHub. ```text devpit github run -- [args...] ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit github run work -- gh pr list ``` ## `devpit github use` Use an account in this folder and every folder inside it (or everywhere). Shows in plain words what would change and the exact files Devpit writes, asks [y/N] at a terminal (default No), then makes the change step by step. It can be undone with `devpit undo`. A unique start of a name works ("wo" for "work"); "default" is the tool's own sign-in. With nobody at a terminal it changes nothing and exits 3 unless --yes is given. Devpit can set folder rules, an account for everywhere, just this once (`run`) for GitHub. ```text devpit github use [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--everywhere` | bool | `false` | use it wherever no folder rule says otherwise | | `--folder` | string | `none` | the folder (and every folder inside it) to use it in, instead of the current one | | `--yes` | bool | `false` | make the change without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit github use work devpit github use work --folder C:\Work --yes devpit github use default --everywhere ``` ## `devpit ports` List or free busy dev ports. > **Caution: Not available yet** > > This command is reserved and does nothing yet. Use the app instead: run `devpit` and pick the section. ```text devpit ports ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit ports ``` **Subcommands** - [`kill`](https://devpit.zubyr.dev/docs/command-line#devpit-ports-kill): Stop whatever is listening on a port (not available yet) ## `devpit ports kill` Stop whatever is listening on a port. > **Caution: Not available yet** > > This command is reserved and does nothing yet. Use the app instead: run `devpit` and pick the section. ```text devpit ports kill ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit ports kill 3000 ``` ## `devpit settings` Read or change a setting without opening the app. > **Caution: Not available yet** > > This command is reserved and does nothing yet. Use the app instead: run `devpit` and pick the section. ```text devpit settings [key] [value] ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit settings devpit settings theme ``` ## `devpit share` Share files between PCs on your network (open the app to do it). ```text devpit share ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit share cleanup ``` **Subcommands** - [`cleanup`](https://devpit.zubyr.dev/docs/command-line#devpit-share-cleanup): Remove a share that an earlier Devpit left behind ## `devpit share cleanup` Remove a share that an earlier Devpit left behind. If Devpit or the PC stopped while a folder was shared, the share, its temporary login and the firewall or network changes may still be there. This removes them. Windows asks for permission once. ```text devpit share cleanup ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit share cleanup ``` ## `devpit supabase` Show the Supabase account used here, and why. Shows which Supabase account is used in this folder (or --folder), who it is, why (a folder rule or "everywhere"), the account used everywhere else, and anything wrong with a fix. It never runs the tool's sign-in check. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Supabase. ```text devpit supabase [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | the folder to look at instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit supabase devpit supabase --json devpit supabase use work devpit supabase list ``` **Subcommands** - [`add`](https://devpit.zubyr.dev/docs/command-line#devpit-supabase-add): Sign in to another Supabase account and name it - [`list`](https://devpit.zubyr.dev/docs/command-line#devpit-supabase-list): List the Supabase accounts - [`run`](https://devpit.zubyr.dev/docs/command-line#devpit-supabase-run): Run one command with an account, just this once (nothing is saved) - [`use`](https://devpit.zubyr.dev/docs/command-line#devpit-supabase-use): Use an account in this folder and every folder inside it (or everywhere) ## `devpit supabase add` Sign in to another Supabase account and name it. Runs Supabase's own sign-in for a new account, then asks for a name (suggested from the email). A sign-in that does not finish leaves nothing behind. With nobody at a terminal, --name and --yes are needed. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Supabase. ```text devpit supabase add [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--email` | string | `none` | pre-fill the sign-in page with this email, where the tool supports it | | `--name` | string | `none` | the name for the new account in Devpit | | `--yes` | bool | `false` | add it without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit supabase add devpit supabase add --name work --yes ``` ## `devpit supabase list` List the Supabase accounts. Lists "default" and every named account, who it is, where it is used, and accounts the tool itself has that Devpit does not list yet. The one used in this folder is marked. ```text devpit supabase list [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | mark the account used in this folder instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit supabase list devpit supabase list --json ``` ## `devpit supabase run` Run one command with an account, just this once (nothing is saved). Starts the command with the account applied to it and to everything it starts. Nothing is saved, so nothing needs undoing and no --yes is asked for. The exit code is the command's own. Vercel, Firebase and Cloudflare take the account as a command-line option, so for them the command must start with the tool (or npx and the tool). Devpit can set folder rules, an account for everywhere, just this once (`run`) for Supabase. ```text devpit supabase run -- [args...] ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit supabase run work -- supabase deploy ``` ## `devpit supabase use` Use an account in this folder and every folder inside it (or everywhere). Shows in plain words what would change and the exact files Devpit writes, asks [y/N] at a terminal (default No), then makes the change step by step. It can be undone with `devpit undo`. A unique start of a name works ("wo" for "work"); "default" is the tool's own sign-in. With nobody at a terminal it changes nothing and exits 3 unless --yes is given. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Supabase. ```text devpit supabase use [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--everywhere` | bool | `false` | use it wherever no folder rule says otherwise | | `--folder` | string | `none` | the folder (and every folder inside it) to use it in, instead of the current one | | `--yes` | bool | `false` | make the change without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit supabase use work devpit supabase use work --folder C:\Work --yes devpit supabase use default --everywhere ``` ## `devpit undo` Undo the last account change. Shows what the last account change was and what undoing it puts back, asks [y/N] (default No), then puts every file back exactly as it was. If Devpit's files were changed by hand since, it stops and says which, and changes nothing. Account folders that hold a sign-in are never deleted. ```text devpit undo [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--yes` | bool | `false` | undo without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit undo devpit undo --yes ``` ## `devpit update` Update tools through every detected package manager. > **Caution: Not available yet** > > This command is reserved and does nothing yet. Use the app instead: run `devpit` and pick the section. ```text devpit update ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit update ``` ## `devpit use` Switch every tool that has an account with this name. For every tool with an account called <name> (for example "work" in Claude Code, GitHub and Vercel), uses that account in this folder (or --folder, or --everywhere). It shows every change first and asks once [y/N]; `devpit undo` takes all of them back together. With nobody at a terminal it changes nothing and exits 3 unless --yes is given. ```text devpit use [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--everywhere` | bool | `false` | use it wherever no folder rule says otherwise | | `--folder` | string | `none` | the folder (and every folder inside it) to use it in, instead of the current one | | `--yes` | bool | `false` | make the change without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit use work devpit use work --folder C:\Work --yes devpit use default --everywhere ``` ## `devpit vercel` Show the Vercel account used here, and why. Shows which Vercel account is used in this folder (or --folder), who it is, why (a folder rule or "everywhere"), the account used everywhere else, and anything wrong with a fix. It never runs the tool's sign-in check. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Vercel. ```text devpit vercel [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | the folder to look at instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit vercel devpit vercel --json devpit vercel use work devpit vercel list ``` **Subcommands** - [`add`](https://devpit.zubyr.dev/docs/command-line#devpit-vercel-add): Sign in to another Vercel account and name it - [`list`](https://devpit.zubyr.dev/docs/command-line#devpit-vercel-list): List the Vercel accounts - [`run`](https://devpit.zubyr.dev/docs/command-line#devpit-vercel-run): Run one command with an account, just this once (nothing is saved) - [`use`](https://devpit.zubyr.dev/docs/command-line#devpit-vercel-use): Use an account in this folder and every folder inside it (or everywhere) ## `devpit vercel add` Sign in to another Vercel account and name it. Runs Vercel's own sign-in for a new account, then asks for a name (suggested from the email). A sign-in that does not finish leaves nothing behind. With nobody at a terminal, --name and --yes are needed. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Vercel. ```text devpit vercel add [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--email` | string | `none` | pre-fill the sign-in page with this email, where the tool supports it | | `--name` | string | `none` | the name for the new account in Devpit | | `--yes` | bool | `false` | add it without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit vercel add devpit vercel add --name work --yes ``` ## `devpit vercel list` List the Vercel accounts. Lists "default" and every named account, who it is, where it is used, and accounts the tool itself has that Devpit does not list yet. The one used in this folder is marked. ```text devpit vercel list [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--folder` | string | `none` | mark the account used in this folder instead of the current one | | `--json` | bool | `false` | print machine-readable output | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit vercel list devpit vercel list --json ``` ## `devpit vercel run` Run one command with an account, just this once (nothing is saved). Starts the command with the account applied to it and to everything it starts. Nothing is saved, so nothing needs undoing and no --yes is asked for. The exit code is the command's own. Vercel, Firebase and Cloudflare take the account as a command-line option, so for them the command must start with the tool (or npx and the tool). Devpit can set folder rules, an account for everywhere, just this once (`run`) for Vercel. ```text devpit vercel run -- [args...] ``` **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit vercel run work -- vercel deploy ``` ## `devpit vercel use` Use an account in this folder and every folder inside it (or everywhere). Shows in plain words what would change and the exact files Devpit writes, asks [y/N] at a terminal (default No), then makes the change step by step. It can be undone with `devpit undo`. A unique start of a name works ("wo" for "work"); "default" is the tool's own sign-in. With nobody at a terminal it changes nothing and exits 3 unless --yes is given. Devpit can set folder rules, an account for everywhere, just this once (`run`) for Vercel. ```text devpit vercel use [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--everywhere` | bool | `false` | use it wherever no folder rule says otherwise | | `--folder` | string | `none` | the folder (and every folder inside it) to use it in, instead of the current one | | `--yes` | bool | `false` | make the change without asking; only after the user agreed | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit vercel use work devpit vercel use work --folder C:\Work --yes devpit vercel use default --everywhere ``` ## `devpit version` Print the Devpit version. ```text devpit version [flags] ``` **Flags** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--short` | bool | `false` | print only the version number | **Flags from `devpit`** | Flag | Type | Default | What it does | | --- | --- | --- | --- | | `--ascii` | bool | `false` | force the plain ASCII icon tier | **Examples** ```powershell devpit version devpit version --short ``` ## Environment variables | Variable | What it does | | --- | --- | | `DEVPIT_NO_TELEMETRY` | Set to 1 to switch usage stats off, whatever the setting says. | | `DO_NOT_TRACK` | The common Do Not Track switch. Set to 1 to switch usage stats off. | | `DEVPIT_NO_UPDATE_CHECK` | Set to 1 to skip the once-a-day check for a newer Devpit. | | `DEVPIT_CONFIG_DIR` | Use this folder for config.toml instead of %APPDATA%\devpit. | | `DEVPIT_CACHE_DIR` | Use this folder for caches and logs instead of %LOCALAPPDATA%\devpit. | | `DEVPIT_ACCOUNTS_DIR` | Use this folder for the account folders Devpit creates instead of %USERPROFILE%\.devpit\accounts. Devpit's Git rule files move with it, to a git folder beside it. Meant for tests and portable installs. | | `DEVPIT_SHIM_DIR` | Use this folder for the account shims (claude.exe, gh.exe and the rest) instead of %LOCALAPPDATA%\Programs\devpit\shims. While it is set, Devpit does not change your user PATH, so put that folder first on PATH yourself. Meant for tests and portable installs. | | `DEVPIT_REDUCED_MOTION` | Turn off spinners and other movement in the app. | ## Related - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [Get started with Devpit on Windows](https://devpit.zubyr.dev/docs/getting-started): Install Devpit with one PowerShell line, Scoop or a zip file, then take the first-launch tour and set up the icon font. - [Is Devpit safe? What it protects and what it sends](https://devpit.zubyr.dev/docs/safety-and-privacy): How Devpit protects your files and accounts with previews, a default of No and undo, why it stores no tokens, and exactly what opt-in usage stats send. --- Canonical page: https://devpit.zubyr.dev/docs/command-line # Devpit keyboard shortcuts and mouse controls Every Devpit shortcut in one place, from the main menu keys to the results table, plus what clicking, scrolling and hovering do with the mouse. Devpit is made for the keyboard, and the mouse works too. Press `?` on any screen to see the keys for that screen. The footer at the bottom of the window always shows the keys that work right now. ## Keys that work everywhere | Key | What it does | | --- | --- | | `?` | Show or hide the shortcuts for this screen | | `Esc` | Go back one screen. While a scan, delete, install or update is running, it stops the work instead | | `Tab` | Go to the next section on the tab bar | | `Shift`+`Tab` | Go to the previous section | | `Ctrl`+`C` | Quit from anywhere. If work is running, Devpit asks it to stop first | | `q` | Quit, from the main menu only | On a screen with a form, such as the Share Files sign-in, `Tab` moves between fields and does not change section. While work is running, `Tab` does nothing. ## Main menu | Key | What it does | | --- | --- | | `1` | Accounts | | `2` | Free Up Disk Space | | `3` | Ports & Network | | `4` | Install & Update | | `5` | Share Files | | `6` | Devpit Settings | The digits work on the main menu only, so a number you type in a form stays a number. The tabs in the header are, in the same order: **Accounts**, **Clean**, **Ports & Net**, **Apps**, **Share** and **Settings**. **Ports & Network** and **Install & Update** each open a small menu with two entries: | Section | `1` | `2` | | --- | --- | --- | | Ports & Network | Fix stuck ports & apps | Network tools | | Install & Update | Install developer apps | Update everything | Press the digit, or move and press `Enter`. `Esc` goes back to that small menu. ## Menus and lists These keys work in every menu and pick list. | Key | What it does | | --- | --- | | `↑` or `k` | Move up | | `↓` or `j` | Move down | | `Enter` | Choose the highlighted row | | `Space` | Tick or untick a row, in lists that have tick boxes | | `Home` `End` | First or last row, in Settings and on the Accounts tool pages | Settings and the Accounts tool pages (and the Git page) share one layout: what is true now at the top, then the choices in short groups under headings. The cursor skips the headings. A row ending in `›` opens a screen; a value in `‹ ›` changes in place with `Enter`, `Space` or `←` `→`; `●`/`○` is on or off. The highlighted row is explained beside the list (under it on a small window), including what happens when you press `Enter`. A row that cannot be used right now stays in the list, greyed, with the reason. ## Questions (the confirm box) Every question starts on **No**. | Key | What it does | | --- | --- | | `y` | Yes | | `n` or `Esc` | No | | `←` `→` or `h` `l` | Move between No and Yes | | `Enter` | Choose what is highlighted (No, unless you moved) | For **Careful** items in Free Up Disk Space you must type a word first: `DELETE`. Type it exactly, in capital letters, then press `Enter`. `y` alone does not work there. `Esc` cancels. ## Accounts | Key | What it does | | --- | --- | | `↑` `↓` | Move between tools | | `Enter` | Open the tool on this row | | `v` | Verify: check every tool, expected against actual. Also works on a tool page and the Git page | | `u` | Undo the last account change | | `b` | Browse the folders that have rules | | `f` | Look at another folder | | `i` | Accounts already on this PC (import), when Devpit found some | | `a` | On the verify screen: also check the accounts not used here (asks first for Claude Code) | | `x` | In Browse folders: fix old rules (`d` remove, `p` point elsewhere) | | `←` `→` or `Space` | In the Claude Code item list: Share, Copy or Skip | | `c` | Copy: the "just this once" command, or a new SSH public key | | Type | In the account picker: filter the list | | `y` / `n` | Answer the preview (No is the default) | | `l` | While a change is applied: show the raw log | | `v` / `u` / `Enter` | On the done card: verify, undo, or go back | More in [Accounts](https://devpit.zubyr.dev/docs/features/accounts). ## Free Up Disk Space | Key | What it does | | --- | --- | | `↑` `↓` | Move | | `PgUp` `PgDn` | Move a page | | `Space` | Tick or untick the row, or all rows under a project heading | | `a` | Tick all, or untick all | | `←` `→` or `h` `l` | Fold or unfold a group | | `s` | Sort by size, name or age | | `/` | Filter the list by text | | `o` | Show only items older than the "older than" days (30 by default) | | `Enter` | Continue, on screens that say so | | `d` | Delete the ticked items (asks first) | | `r` | Scan again | | `R` | On the summary: retry items that something else had open | | `Esc` | Stop a scan or delete, or go back | More in [Free up disk space](https://devpit.zubyr.dev/docs/features/free-up-disk-space). ## Fix stuck ports & apps | Key | What it does | | --- | --- | | `0`–`9` | Type the port number | | `Backspace` | Delete a digit | | `Enter` | Check the port, or choose a tool | | `Space` | Mark or unmark a row in a list | | `k` | Kill the marked rows (asks first) | | `t` | Turn "kill process tree" on or off, when it is offered | | `r` | Refresh the list | More in [Fix stuck ports and apps](https://devpit.zubyr.dev/docs/features/fix-stuck-ports). ## Install developer apps and Update everything | Key | What it does | | --- | --- | | `↑` `↓` | Move | | `Space` | Tick or untick an app | | `a` / `n` | Tick all / untick all (Update only) | | `Enter` | Install or update the ticked apps, or finish on the summary | | `l` | Show or hide the full log | | `s` (twice) | While a run is going: skip the app that is installing or updating now. Press it a second time within 5 seconds to confirm | | `Esc` | Stop the run | More in [Install developer apps](https://devpit.zubyr.dev/docs/features/install-developer-apps) and [Update everything](https://devpit.zubyr.dev/docs/features/update-everything). ## Share Files | Key | What it does | | --- | --- | | `↑` `↓` `Enter` | Choose Share a folder, Copy from a shared folder, Resume, or Clean up | | `c` | On the sharing card: copy the `net use` line | | `r` | On the sharing card: copy the `robocopy` line. After a copy that had failed files: try them again | | `p` | On the sharing card: copy the password | | `s` or `Esc` | On the sharing card: stop sharing (asks first) | | `Tab` | In the sign-in form: switch between user name and password | | `Enter` | Start the copy when Devpit says there is room, or resume a saved copy | | `d` | On the resume question: throw the saved copy away. On a "signed in as someone else" error: close old connections to that PC | | `Esc` | While copying: stop, and resume later | More in [Share files](https://devpit.zubyr.dev/docs/features/share-files). ## Network tools | Key | What it does | | --- | --- | | `Enter` | Open a tool, start the ping, or go back when it is done | | `y` / `n` | Answer the flush DNS question | More in [Network tools](https://devpit.zubyr.dev/docs/features/network-tools). ## Settings | Key | What it does | | --- | --- | | `↑` `↓`, `Home` `End`, `PgUp` `PgDn` | Move; group headings are skipped | | `Enter` or `Space` | Change the highlighted setting, or open its screen | | `←` `→` | The choice before or after; flip an on/off setting | | `Enter` | Save, in an edit screen | | `a` | Add a path to the never-touch folders | | `x` | Remove a path or a recent folder; remove the skill on the AI agent skill screen | | `i` | Install or update the skill, on the AI agent skill screen | | `Ctrl`+`R` | Reset the dev ports to the default list | | `Esc` | Go back | More in [Settings](https://devpit.zubyr.dev/docs/features/settings). ## First-run wizard | Key | What it does | | --- | --- | | `Enter` | Next step | | `Esc` or `Backspace` | Previous step | | `↑` `↓` `←` `→` | Choose an option | | `y` / `n` | Yes or no, where the step asks a question | ## The mouse The mouse is an extra. The keyboard does everything. | Action | What it does | | --- | --- | | Click a tab in the header | Jump to that section | | Click a menu row | Open it, like pressing `Enter` | | Hover a row on a menu | Highlights it and shows its description | | Click a row in Settings or on an Accounts tool page | The first click highlights it; a click on the highlighted row, or on a value, changes or opens it | | Click a tick box | Ticks or unticks that row, or everything under a project heading | | Click a fold arrow | Folds or unfolds a group | | Click a row | Moves the cursor there | | Scroll wheel | Scrolls menus and lists | Your terminal must pass mouse events to Devpit. Windows Terminal does. ## Window size Devpit needs a window at least **80 columns by 24 rows**. If it is smaller, Devpit tells you and waits. Resize the window and it redraws by itself. ## Common questions ### How do I see the shortcuts inside Devpit? Press the question mark key on any screen. Devpit shows the keys for that screen and the keys that work everywhere. Press the question mark or Esc to close it. ### How do I quit Devpit? Press q on the main menu, or press Ctrl+C anywhere. If a delete or install is running, Ctrl+C asks it to stop first and Devpit leaves when the item in flight is finished. A second Ctrl+C leaves at once. ### Does Devpit work with a mouse? Yes. Click a tab or a menu row, click a tick box, scroll a list with the wheel, and hover a row to read its description. In Settings and on the Accounts tool pages, the pointer highlights a row and a click on the highlighted row (or on its value) acts. The keyboard still does everything. ### Why does Devpit say it needs a bigger window? Devpit draws its screens in at least 80 columns by 24 rows. Make the terminal window bigger and it redraws by itself. ## Related - [Get started with Devpit on Windows](https://devpit.zubyr.dev/docs/getting-started): Install Devpit with one PowerShell line, Scoop or a zip file, then take the first-launch tour and set up the icon font. - [Free up disk space and delete node_modules on Windows](https://devpit.zubyr.dev/docs/features/free-up-disk-space): Find and delete node_modules, build folders, caches and other developer junk safely, with a preview, risk labels and a confirmation before anything goes. - [Devpit settings, themes, icons and the never-touch list](https://devpit.zubyr.dev/docs/features/settings): Every Devpit setting explained, from themes and icons to usage stats, the never-touch list, dev ports and the icon font, and where the settings file lives. --- Canonical page: https://devpit.zubyr.dev/docs/keyboard-and-mouse # Is Devpit safe? What it protects and what it sends How Devpit protects your files and accounts with previews, a default of No and undo, why it stores no tokens, and exactly what opt-in usage stats send. Devpit deletes files and switches the accounts your tools use, so the rules are strict. They are not settings and not advice. The code enforces them, and a test pins each one. Where a rule is decided but its test is still to come, this page says so. ## How deleting is protected 1. **You see a preview first.** Nothing is deleted before you have seen the list and the sizes. 2. **You must confirm.** Deleting only starts after you answer a question. 3. **The default answer is No.** Pressing `Enter` on a fresh question answers No. There is no way to build a dialog that starts on Yes. 4. **Careful items need a typed word.** You must type `DELETE` first. Pressing `y` is not enough. 5. **You are told how to get it back.** Every confirmation says how, for example run `npm install`. ### What is never pre-ticked - Careful items. - Projects you touched in the last 7 days. - Folders Devpit could not fully verify. - Cloud placeholder files (OneDrive, Dropbox). Devpit skips them and never downloads them. ### What Devpit checks before it deletes - **The marker file.** A folder only counts as junk when its marker sits beside it: `package.json` for `node_modules`, `Cargo.toml` for `target`, a `.csproj` or `.sln` for `bin` and `obj`. Devpit checks again right before it deletes. - **Links are never followed.** Junctions, symlinks and other reparse points are treated as dead ends. Following them is the bug that made other cleaners delete real source code. - **Places that are always refused:** drive roots, anything inside the Windows folder, network paths, and every folder on your never-touch list. - **Devpit's own program file** is always refused. - **Current app versions** are never removed. For Scoop, Devpit leaves the version that `current` points to, and never touches `persist`. - **Docker volumes** are never touched. Devpit does not run any Docker command that includes volumes, in any spelling. ### How deleting works - **Safe items** are first renamed to a temporary name in the same folder. The rename is instant. It shows straight away that the space is freed, and it makes a crash harmless: you can never be left with a half-emptied folder that looks like a working one. A small marker file inside says which folder it was. Devpit finishes the removal later, from **Resume interrupted deletes**, and only for folders with that marker. - **Review and Careful items** go to the **Recycle Bin**, so you can restore them. ### Stopping is safe Press `Esc` during a delete. Devpit finishes the item it is on and shows what was done. Finished deletions stay done. Nothing is left half removed. ### Nothing fails quietly A locked folder, a folder you cannot read, a cancelled scan: each one is counted, named and explained on the summary, with what to do about it. For example: "Couldn't delete api\node_modules — it's open in Code.exe. Close it and press R to retry." ## Other protections - **Processes.** Devpit never stops PID 0 or 4, Windows services, or other programs in `C:\Windows\System32`. The shells `cmd`, PowerShell and `conhost` are the one exception, because dev tools start them all the time. See [Fix stuck ports and apps](https://devpit.zubyr.dev/docs/features/fix-stuck-ports). - **SSH keys.** An existing key is never overwritten. A key Devpit makes for a GitHub account gets its own file name, and Devpit stops if a file is already there. See [Git and GitHub accounts](https://devpit.zubyr.dev/docs/features/accounts-git-and-github#generate-an-ssh-key). - **Admin rights.** The app you type into never runs as administrator. Jobs that need it, such as Chocolatey updates, run in a separate small helper that asks Windows for permission once. The helper only accepts a short list of jobs, and only deletes inside a short list of Windows temp folders. - **Settings file.** A damaged file is renamed and kept, never silently thrown away. A file from a newer Devpit is refused, not half applied. Saving is done in a way that never leaves a half-written file. ## Accounts [Accounts](https://devpit.zubyr.dev/docs/features/accounts) changes which account Claude Code, Git, GitHub and other tools use in a folder. These rules apply to it. ### No tokens - **Devpit stores no token.** Each tool keeps its own login where it always does. Devpit's rules file, `%APPDATA%\devpit\accounts.toml`, holds account names, emails and folder paths only. - **No token is shown, copied, logged or put in `--json` output.** Who is signed in is read without the token, and everything Devpit shows or logs is checked for anything that looks like a secret. A test plants a fake token in fake tools and checks it never comes out. - **The one token Devpit handles** is a GitHub account's, which it asks `gh` for when a `gh` or `git` process starts. It goes only to that process, in memory, and is never written anywhere. If anything goes wrong, `gh` starts untouched with one warning. - **No command that prints or moves a token** is ever run: never `firebase login:list --json`, never `gh … --show-token`, never `gh auth switch`. - **Login files are never read, copied or linked:** Claude Code's `.credentials.json` and Supabase's `access-token`. Only whether they exist is checked. Claude Code's `.claude.json` is never copied or linked either; only its MCP server entries are read, when you choose to bring MCP servers over. ### Every change can be checked and undone - **Every change has a preview, and the default answer is No.** What is applied is exactly what you saw: if anything changed in between, Devpit stops. - **Undo is exact.** Devpit records each change before it makes it, with what was there before. Undo puts it back. If a file Devpit wrote was changed by hand since, undo stops and changes nothing. - **A crash never leaves a change half made.** A change that was not finished is put back at the next start. - **An account folder that holds a sign-in is never deleted** by an undo, and a cancelled sign-in leaves nothing behind. - **Nothing you type can add lines to Git's config.** A name, email or path with a line break is refused. - **Without a terminal, nothing changes without `--yes`.** A script or an AI agent gets exit code 3 and the message "This would change … Re-run with --yes after the user agrees." Variables such as `CI` or `CLAUDECODE` never stand in for a person. ### What it touches, and what it leaves alone - **Login and account folders can never be selected in Free Up Disk Space:** `.claude`, `.ssh`, `.devpit`, `.claude-switch`, and the `gh`, Vercel, Wrangler, Supabase and Convex login folders. Account folders Devpit makes live inside `.devpit`. - **`devpit accounts cleanup` removes only what Devpit added:** folder rules, shims and their PATH entry, its Git files and include block, the Wrangler bindings it made and its agent skill. Never an account folder or a sign-in. - **Sharing a Claude Code setup never overwrites anything** in the other account: same-named items are kept beside it, renamed, or moved to a backup folder. Links are never followed when removing. - **Uninstalling never breaks an account.** Shared links point at your own `.claude` folder, and `devpit accounts cleanup --copy-links` turns them into copies. - **Careful items** (MCP servers, which may hold API keys) are never ticked for you and are only copied on the Careful path. That they ask twice on screen is decided, but the screen's test is still to come. - **Arguments reach a tool exactly, or not at all.** A shim never passes your arguments through `cmd.exe` in a way that could change them: npm tools run as `node.exe` directly, and other batch files only get plain arguments. - **A broken Devpit never blocks a tool.** If the shim cannot work out the account, it starts the real tool untouched with one warning line. - **Claude Code's idle accounts are not asked who they are** unless you agree, because on some versions that check can sign an idle account out (Claude Code issue [#95822](https://github.com/anthropics/claude-code/issues/95822)). ### No network of its own Accounts has no network code. The only connections are each tool's own sign-in and "who am I" check, which the tool makes itself. ## What Devpit sends Short version: **usage stats are off until you turn them on.** Everything else runs on your PC: the scan, the sizes, the deleting, the port list and your settings. Devpit reads and writes these places, and nothing in them is uploaded: | What | Where | | --- | --- | | Settings | `%APPDATA%\devpit\config.toml` | | Account rules and the undo history | `%APPDATA%\devpit\accounts.toml`, `%APPDATA%\devpit\accounts-journal.jsonl` | | Account folders Devpit made | `%USERPROFILE%\.devpit\accounts\` | | Git rule files | `%USERPROFILE%\.devpit\git\` | | Caches and logs | `%LOCALAPPDATA%\devpit\` | ### Usage stats (off by default) On first run Devpit asks, with the answer already on No: > Help show how much space Devpit saves? Only totals are sent — no file names or paths. You can change your mind in **Settings**, then **Usage stats**. If you turn it on, Devpit sends **one small report after a clean-up that removed something**. It is sent in the background to `https://devpit.zubyr.dev/api/report`. This is the whole report: | Field | What it holds | | --- | --- | | `v` | The version of the report format (1) | | `installId` | A random ID made on your PC. It is not made from your machine, user or network | | `version` | The Devpit version, for example `0.2.0` | | `os` | The operating system name, `windows` | | `osVersion` | The Windows version number, for example `10.0.26100` | | `freedBytes` | How many bytes were freed | | `items` | How many items were removed | | `types` | How many items of each kind were removed, by the short name of the rule that found them, for example `node_modules`. A name that is not a short plain name is dropped, not sent. At most 32 kinds | **What is never sent:** - File, folder or project names - Any path - Your user name, machine name or domain - The contents of any file - The apps or tools you have installed - Anything at all when a scan finds nothing, or when you cancel **How it behaves.** A report never slows you down. If you are offline or the server is slow, it is dropped quietly. It is not retried and not saved to disk. The server rejects impossible numbers. It keeps a hashed form of your IP address for at most one hour, only to limit how many reports one connection can send. The totals are shown on the Devpit website as public counters: space freed, items by type and how many people use it. ### Turn stats off for good Any one of these: - Leave **Usage stats** off in Settings. - Set `DEVPIT_NO_TELEMETRY=1` in your environment. - Set `DO_NOT_TRACK=1` in your environment. The two variables always win, even if the setting is on. Devpit never asks in a run without a screen, and never turns stats on by itself. ```powershell # for this terminal only $env:DEVPIT_NO_TELEMETRY = "1" # for your user account, from now on [Environment]::SetEnvironmentVariable("DEVPIT_NO_TELEMETRY", "1", "User") ``` ### Every other connection Devpit makes These are not usage stats. Each one happens only for the reason given. | When | Where to | What it is for | | --- | --- | --- | | Once a day, if the update check is on | `api.github.com` (public releases of Devpit) | To see if a newer version exists. Nothing but the web request is sent. The answer is cached on your PC. Turn it off in Settings or with `DEVPIT_NO_UPDATE_CHECK=1`. A build made from source never checks | | You open **My IP addresses** | `api.ipify.org`, then `ifconfig.me` | To show your public IP address | | You install the icon font | `github.com` (a fixed Nerd Fonts release) | To download the icon font. The file is checked against a fixed SHA256 before it is used | | You run the installer or update | `github.com` | To download the release and its checksums | | You use Install or Update | The sources of Scoop, winget, Chocolatey or npm | These tools contact their own servers. Devpit only runs their commands | | You ping a host | The host you typed | That is what ping does | | You add, check or use an account | That tool's own servers | The tool's own sign-in and "who am I" check, run by the tool itself (for example `gh api user` or `vercel whoami`) | Devpit never downloads or replaces itself. When a newer version exists it only tells you the command to run. ## Check what you download - The install script is short and readable at [`devpit.zubyr.dev/install`](https://devpit.zubyr.dev/install). - It checks the SHA256 of the zip against the `checksums.txt` that comes with the release. - Releases are built on GitHub Actions and carry a build attestation and a software bill of materials. - Devpit is **not code-signed yet**, so Windows SmartScreen may warn about an unknown publisher. Devpit is never packed with UPX, because packed programs trip antivirus scanners. To check a zip yourself, see [Getting started](https://devpit.zubyr.dev/docs/getting-started#check-your-download-optional). ## Read the rules The full table of safety rules, and the test that pins each one, is in the repository: - [Safety rules](https://github.com/zubairbinshaukat/devpit/blob/main/docs/safety.md) - [Privacy policy](https://github.com/zubairbinshaukat/devpit/blob/main/PRIVACY.md) - [Security policy](https://github.com/zubairbinshaukat/devpit/blob/main/SECURITY.md) If what Devpit collects ever changes, the privacy policy changes in the same release, the release notes say so, and anyone who had opted in is asked again. ## Common questions ### Can Devpit delete something by accident? It is built so it cannot. Nothing is deleted without a preview and an explicit yes, the default answer is always No, and Careful items also need a typed word. Safe items are renamed before they are removed, and the other items go to the Recycle Bin. ### Does Devpit store my tokens or passwords for Accounts? No. Each tool keeps its own login where it always does. Devpit's rules file holds only account names, emails and folder paths. The only token Devpit ever handles is a GitHub account's, passed in memory from gh to the one gh or git process that needs it. ### Does Devpit collect my data? Not unless you turn usage stats on. They are off by default. If you turn them on, one small report of totals is sent after a clean-up that removed something. It never contains file names, paths, your user name or your machine name. ### How do I make sure nothing is ever sent? Set the environment variable DEVPIT_NO_TELEMETRY=1 or DO_NOT_TRACK=1. Either one turns usage stats off whatever the setting says. Keep Usage stats off in Settings too. ### Does Devpit connect to the internet at other times? Only for things you can see: a once-a-day check of GitHub for a new version, the public IP lookup when you open My IP addresses, the icon font download when you install it, and the package managers you run. The page lists each one. ### Is Devpit code-signed? Not yet. Windows SmartScreen may warn about an unknown publisher. Releases have SHA256 checksums and a build attestation so you can check that a file is the one GitHub built. ## Related - [Free up disk space and delete node_modules on Windows](https://devpit.zubyr.dev/docs/features/free-up-disk-space): Find and delete node_modules, build folders, caches and other developer junk safely, with a preview, risk labels and a confirmation before anything goes. - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [Devpit settings, themes, icons and the never-touch list](https://devpit.zubyr.dev/docs/features/settings): Every Devpit setting explained, from themes and icons to usage stats, the never-touch list, dev ports and the icon font, and where the settings file lives. - [Get started with Devpit on Windows](https://devpit.zubyr.dev/docs/getting-started): Install Devpit with one PowerShell line, Scoop or a zip file, then take the first-launch tour and set up the icon font. --- Canonical page: https://devpit.zubyr.dev/docs/safety-and-privacy # What's new in Devpit What changed in each Devpit release, from new screens to fixes, taken straight from the GitHub release notes. Every release is listed here, newest first. The same notes are on the [GitHub releases page](https://github.com/zubairbinshaukat/devpit/releases). To upgrade, see [Getting started](https://devpit.zubyr.dev/docs/getting-started#update-devpit). ## v0.2.0 Released 23 September 2026. [Release page](https://github.com/zubairbinshaukat/devpit/releases/tag/v0.2.0) The first release after launch, and mostly about getting around faster. ### New - **Section tabs.** Every screen now has a tab bar in the header. `Tab` and `Shift+Tab` move along it, and `1`–`7` jump straight to a section from the main menu. - **Mouse support.** Click a tab, click a menu row, scroll a list with the wheel. The keyboard still does everything; the mouse is an addition, not a replacement. - **Update notice.** Devpit asks GitHub once a day whether a newer release exists. When one does, a small `update` pill appears in the header and **Settings → About Devpit** shows the one command that upgrades your install, whether that is Scoop, winget or the install script. Nothing is downloaded or replaced for you. Turn it off in Settings or with `DEVPIT_NO_UPDATE_CHECK=1`. - **About Devpit** in Settings: version, build, author, links and licence. - **Opt-in usage stats now work.** If you said yes on first run, one small report goes out after a cleanup: bytes freed, item counts and rule names. Never a path, name or username. Off by default, and `DEVPIT_NO_TELEMETRY=1` or `DO_NOT_TRACK=1` always wins. Details in [PRIVACY.md](https://github.com/zubairbinshaukat/devpit/blob/main/PRIVACY.md). ### Changed - New wordmark on the home screen and in the installer. - Installer output shows each of its four steps and a summary at the end. ### Fixed - The PowerShell installer failed on checksum verification under PowerShell 7. It now verifies correctly. ## v0.1.0 Released 23 September 2026. [Release page](https://github.com/zubairbinshaukat/devpit/releases/tag/v0.1.0) This release has no written notes. See the [release page](https://github.com/zubairbinshaukat/devpit/releases/tag/v0.1.0) for the files and checksums. ## Related - [Get started with Devpit on Windows](https://devpit.zubyr.dev/docs/getting-started): Install Devpit with one PowerShell line, Scoop or a zip file, then take the first-launch tour and set up the icon font. - [Command line reference](https://devpit.zubyr.dev/docs/command-line): Every devpit command and flag, generated from the app itself. See and switch accounts, verify, undo, install the icon font and more from a terminal. --- Canonical page: https://devpit.zubyr.dev/docs/whats-new # Troubleshooting Plain-words fixes for real Devpit and Windows problems, from winget error codes to stuck ports and icons that show as boxes. Something not working? Find your problem below. Each page starts with the short answer, then the steps. If your problem is not here, [open an issue on GitHub](https://github.com/zubairbinshaukat/devpit/issues) and include what you saw on the screen. - [The term 'winget' is not recognized](https://devpit.zubyr.dev/docs/troubleshooting/winget-term-not-recognized): Fix "The term 'winget' is not recognized" in PowerShell: check App Installer, the App execution alias and PATH, then register or reset the package. - [My AI agent changed an account without asking](https://devpit.zubyr.dev/docs/troubleshooting/ai-agent-changed-account-without-asking): An AI agent switched which account a tool uses through Devpit? Why that needs --yes, how to see what changed, how to undo it, and how to stop it next time. - [CLAUDE_CONFIG_DIR is set by something other than Devpit](https://devpit.zubyr.dev/docs/troubleshooting/claude-config-dir-set-by-something-else): Devpit says CLAUDE_CONFIG_DIR is set in this terminal by something else. What it changes for Claude Code, where it usually comes from and how to remove it. - [EADDRINUSE: address already in use :::3000](https://devpit.zubyr.dev/docs/troubleshooting/eaddrinuse-address-already-in-use-3000): Fix Node's EADDRINUSE :::3000 error on Windows: find the process that holds port 3000, stop it, and see how Devpit frees a stuck port in two keys. - [EPERM: operation not permitted, rmdir (node_modules)](https://devpit.zubyr.dev/docs/troubleshooting/eperm-operation-not-permitted-rmdir): Fix EPERM and EBUSY errors when deleting node_modules on Windows: find the program that holds the files, close it, and delete the folder safely. - [A Devpit folder rule is not applying](https://devpit.zubyr.dev/docs/troubleshooting/accounts-folder-rule-not-applying): You made a folder rule in Devpit Accounts, but the tool still uses its usual account there. Main causes, from Git repos to old terminals and moved folders. - [git push asks for a password or uses the wrong account](https://devpit.zubyr.dev/docs/troubleshooting/git-push-asks-for-password-or-wrong-account): git push to GitHub asks for a password, or pushes as the wrong GitHub account, in a folder with a Devpit rule. How to see what decides it and fix it. - [You can't access this shared folder because your organization's security policies block unauthenticated guest access](https://devpit.zubyr.dev/docs/troubleshooting/guest-access-blocked-windows-11-24h2): Fix the Windows error that says security policies block unauthenticated guest access to a shared folder, with the safer options on Windows 11 24H2. - [Nerd Font icons show as boxes in Windows Terminal](https://devpit.zubyr.dev/docs/troubleshooting/nerd-font-icons-show-as-boxes-windows-terminal): Icons look like empty boxes in Windows Terminal? Add a Nerd Font symbols fallback to font.face, or run devpit font install to do it for you in one step. - [Flush the DNS cache on Windows: ipconfig /flushdns](https://devpit.zubyr.dev/docs/troubleshooting/flush-dns-ipconfig-flushdns): What ipconfig /flushdns and Clear-DnsClientCache do, when clearing the Windows DNS cache helps, and how to do it in one step from Devpit's Network Tools. - [Login expired or signed out in Devpit Accounts](https://devpit.zubyr.dev/docs/troubleshooting/accounts-signed-out-or-expired): Devpit shows an account as expired or not signed in. Why Claude Code logins expire on idle accounts, and how to sign in again without losing the account. - [Moving from claude-acc to Devpit](https://devpit.zubyr.dev/docs/troubleshooting/moving-from-claude-acc): Import claude-acc's Claude Code accounts and folder links into Devpit in place, check them, then retire claude-acc in the right order without signing in again. - [MSI error 1603: a fatal error occurred during installation](https://devpit.zubyr.dev/docs/troubleshooting/msi-error-1603-fatal-error-during-installation): Windows Installer error 1603 is a general failure. Learn how to read the MSI log with msiexec /L*V, see how winget reports it, and how Devpit shows the failure. - [MSI error 1618: another installation is already in progress](https://devpit.zubyr.dev/docs/troubleshooting/msi-error-1618-another-installation-in-progress): Windows Installer error 1618 means another install holds the installer lock. Wait for it, retry, and see how winget and Devpit report this state. - [Network discovery is turned off. Network computers and devices are not visible](https://devpit.zubyr.dev/docs/troubleshooting/network-discovery-is-turned-off): Fix 'Network discovery is turned off' on Windows 11, why it keeps turning off, and how to open a shared PC by its IP address without it. - [The specified network name is no longer available (error 64)](https://devpit.zubyr.dev/docs/troubleshooting/specified-network-name-no-longer-available): A big copy from a shared folder stopped with 'The specified network name is no longer available' (error 64, 0x80070040). Why it happens and how to resume. - [You do not have permission to access \\PC. Contact your network administrator to request access](https://devpit.zubyr.dev/docs/troubleshooting/you-do-not-have-permission-to-access): Fix 'You do not have permission to access \\PC' and system error 5 'Access is denied' on a Windows shared folder: set share and folder permissions safely. - [npm ERR! code EACCES: permission denied](https://devpit.zubyr.dev/docs/troubleshooting/npm-err-code-eacces): Fix npm ERR! code EACCES on Windows: check the npm prefix folder, change it to a folder you own, and see how Devpit shows a failed global npm update. - [Old account still used in VS Code or a desktop app](https://devpit.zubyr.dev/docs/troubleshooting/accounts-old-account-in-vs-code-or-desktop-app): Your Devpit folder rule works in the terminal, but a VS Code extension or a desktop app still uses the old account. Why, and what you can do about it. - [The source file name(s) are larger than is supported by the file system](https://devpit.zubyr.dev/docs/troubleshooting/source-file-names-are-larger-than-supported): Windows can't delete or move a folder because the path is too long. Learn about the 260 character limit, LongPathsEnabled, rd /s /q and the robocopy /MIR trick. - [Permission denied (publickey)](https://devpit.zubyr.dev/docs/troubleshooting/permission-denied-publickey): Fix git and SSH 'Permission denied (publickey)' on Windows: use the git user, check that a key is loaded, and add the public key to GitHub. - [git: Please tell me who you are](https://devpit.zubyr.dev/docs/troubleshooting/git-please-tell-me-who-you-are): Git says 'Please tell me who you are' when user.name and user.email are not set. Set them with git config --global, or set them per folder in Devpit's Accounts. - [robocopy exit codes: what 0, 1, 2, 3, 8 and 16 mean](https://devpit.zubyr.dev/docs/troubleshooting/robocopy-exit-codes): Robocopy exit codes are a bitmask. Codes 0 to 7 mean no failure, 8 and above mean a failure. See the full table for 1, 2, 4, 8 and 16, and how to read them. - [Scoop: "is held to version" and "still running"](https://devpit.zubyr.dev/docs/troubleshooting/scoop-is-held-to-version-still-running): Why scoop update skips an app: it is held with scoop hold, or it is still running. See the exact messages, how to fix each, and how Devpit shows them. - [A shared Claude Code skill link is broken](https://devpit.zubyr.dev/docs/troubleshooting/claude-shared-skill-link-broken): A Claude Code skill, agents or commands folder shared by Devpit shows as broken. Why the link stopped working and how to repair it without losing files. - [Devpit's shim is not first on PATH](https://devpit.zubyr.dev/docs/troubleshooting/accounts-shim-not-first-on-path): Verify says a tool is found before Devpit's shim, or that a new terminal is needed. What PATH order means on Windows and how to make folder rules apply. - [System error 1219: multiple connections by the same user](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1219-multiple-connections): Fix Windows system error 1219, 'Multiple connections to a server or shared resource by the same user', by disconnecting old connections with net use. - [System error 1326: user name or password is incorrect](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1326-user-name-or-password-incorrect): Fix Windows system error 1326, 'The user name or password is incorrect', when you open a shared folder: check the account on the sharing PC and sign in again. - [System error 53: The network path was not found](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found): Fix Windows 'System error 53. The network path was not found' and error 0x80070035 when you open a shared folder: check reachability, sharing, services. - [Undo stopped: a file was changed after Devpit wrote it](https://devpit.zubyr.dev/docs/troubleshooting/accounts-undo-file-changed-by-hand): devpit undo says a file was changed after Devpit wrote it and changed nothing. Why undo stops instead of overwriting your edit, and how to finish it. - [Windows cannot access \\PC: error 0x80004005 Unspecified error](https://devpit.zubyr.dev/docs/troubleshooting/windows-cannot-access-0x80004005): Fix 'Windows cannot access \\PC' with error 0x80004005 on a shared folder: get the real error number with net use, then apply the right fix. - [winget error 0x80073D28: needs administrator rights](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x80073d28): What winget error 0x80073D28 means when an upgrade fails, why some apps need administrator rights, and how to update them. - [winget 0x8A15002B: no applicable update found](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a15002b): Winget error 0x8A15002B means there is no applicable update for the package. It is not a failure. Learn what it means and how Devpit reports it as up to date. - [winget 0x8A150101: application is currently running](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a150101): Winget error 0x8A150101 means the app is running and cannot be replaced. Close it, retry, and see how Devpit marks the app as in use so you can retry. - [winget upgrade --all does not upgrade some apps](https://devpit.zubyr.dev/docs/troubleshooting/winget-upgrade-all-not-upgrading): Why winget upgrade --all skips apps: unknown versions, pins and packages that need explicit targeting. Winget's own messages, flags, and Devpit's view. - [A tool used the wrong account in this folder](https://devpit.zubyr.dev/docs/troubleshooting/accounts-wrong-account-used): Claude Code, Git, gh or Vercel used another account than the one you set in Devpit? Find out why in one command and fix the cause. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting # A Devpit folder rule is not applying You made a folder rule in Devpit Accounts, but the tool still uses its usual account there. Main causes, from Git repos to old terminals and moved folders. You set a folder rule, and the tool still uses its usual account in that folder. Run this in the folder first: ```powershell devpit accounts verify ``` Then check the causes below. ## Why it happens - **Git: the folder is not a repository yet.** `includeIf "gitdir/…"` applies only inside a Git repository. The rule takes effect once you `git init` or `git clone` there. - **The terminal was opened before the rule.** The first rule for Claude Code, `gh`, Vercel, Firebase or Supabase adds Devpit's shim folder to your PATH. Older terminals do not see it. Verify says: "This terminal was opened before Devpit added its shim folder to PATH." - **Another copy of the tool runs first.** See [The shim is not first on PATH](https://devpit.zubyr.dev/docs/troubleshooting/accounts-shim-not-first-on-path). - **The tool ran through `npx`.** Devpit's shim catches the tool's own name, not `npx vercel`. Cloudflare is the exception: its rules live in Wrangler's own bindings. - **A PowerShell function or alias** with the tool's name runs before any program on PATH. `Get-Command claude` shows what runs. - **The folder moved or its drive is gone.** Browse folders marks the rule **folder not found** or **drive not connected**. - **Cloudflare: letter case.** Wrangler matches folders by exact letter case. Devpit writes the folder as it is spelled on disk; a path typed with other letters may not match. - **WSL.** Rules apply to Windows programs, not to tools inside WSL. ## How to fix it 1. Run `devpit accounts` in the folder. If the why column does not name your rule, the rule does not cover this folder: check its path in **Accounts**, then `b` Browse folders. 2. Open a new terminal and try again. 3. For Git, check you are inside a repository: `git rev-parse --show-toplevel`. 4. For a moved folder, open **Browse folders**, then **Fix old rules**, and point the rule at the new place, or remove it. 5. Follow the fix that `devpit accounts verify` prints for anything else. ## When verify says a shim is missing or old Folder rules for Claude Code, `gh`, Vercel, Firebase and Supabase work through small programs called shims, in `%LOCALAPPDATA%\Programs\devpit\shims`. Verify reports these: | Verify says | What to do | | --- | --- | | `The shim for Claude Code is missing (…).` | Open **Accounts** in Devpit, or make any account change. Devpit creates it again. | | `The shim for Claude Code is from an older Devpit.` | The same: open **Accounts**, or make any account change, and Devpit refreshes it. | | `devpit-shim.exe is missing next to devpit.exe (…), so Devpit cannot make or refresh the shims folder rules need.` | Run the installer again, or put `devpit-shim.exe` next to `devpit.exe`. This happens when only `devpit.exe` was replaced by hand: both files ship in the release zip. | If verify says the shim is not first on PATH, or that a new terminal is needed, see [The shim is not first on PATH](https://devpit.zubyr.dev/docs/troubleshooting/accounts-shim-not-first-on-path). ## Cloudflare: Wrangler's binding differs Devpit mirrors each Cloudflare folder rule into Wrangler's own folder bindings, and verify compares the two. It reports a difference like this: ```text Devpit's rule says Cloudflare uses work in C:\Work, but Wrangler binds it to the profile personal. Devpit's rule says Cloudflare uses work in C:\Work, but Wrangler has no binding there. Devpit's rule says Cloudflare uses work in C:\Work, but Wrangler's binding is spelled c:\work (profile work), and Wrangler matches letter case exactly. Wrangler binds C:\Other to the profile work, but Devpit has no rule there (it was made with `wrangler auth activate`). ``` Wrangler follows its own binding, not Devpit's rule. To make them agree, pick one: - Make Wrangler follow the rule, with Wrangler's own command: `wrangler auth activate work "C:\Work"`, spelled exactly as the folder is on disk. - Remove a binding you do not want: `wrangler auth deactivate "C:\Other"`. - Keep a binding made outside Devpit and give it a Devpit rule instead: `devpit cloudflare use work --folder "C:\Other"`. It shows a preview and asks first. Then run `devpit accounts verify` again. ## Common questions ### Why does my Git folder rule do nothing? Git's includeIf gitdir rule only applies inside a Git repository. In a folder that is not a repository yet, Git reads only your global identity. Run git init or git clone there and the rule applies. ### Does Devpit remove a rule when the folder is gone? No. Devpit marks it as folder not found, or drive not connected for a USB drive or network share that is not there right now. Fix old rules in Browse folders offers to remove the rule or point it at the new place. ## Related - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [A tool used the wrong account in this folder](https://devpit.zubyr.dev/docs/troubleshooting/accounts-wrong-account-used): Claude Code, Git, gh or Vercel used another account than the one you set in Devpit? Find out why in one command and fix the cause. - [Devpit's shim is not first on PATH](https://devpit.zubyr.dev/docs/troubleshooting/accounts-shim-not-first-on-path): Verify says a tool is found before Devpit's shim, or that a new terminal is needed. What PATH order means on Windows and how to make folder rules apply. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/accounts-folder-rule-not-applying # Old account still used in VS Code or a desktop app Your Devpit folder rule works in the terminal, but a VS Code extension or a desktop app still uses the old account. Why, and what you can do about it. Devpit's folder rules apply to tools you start in a terminal: Windows Terminal, PowerShell, cmd, Git Bash, the **VS Code terminal**, and scripts, tasks and AI agents started from there. Editor extensions and desktop apps keep their own login. Devpit does not switch them. ## Why it happens - **Extensions and apps sign in on their own.** The Claude Code extension for VS Code or JetBrains, the Claude desktop app, GitHub's sign-in inside VS Code and similar tools keep their own login and only partly honour `CLAUDE_CONFIG_DIR` and the other variables Devpit sets. - **They do not start through Devpit's shim.** The shim picks the account when you type `claude` or `gh`. A desktop app is started by Windows, not by your terminal. - **The VS Code window is older than the rule.** VS Code passes its own PATH to its terminals. If VS Code was open before Devpit added its shim folder to PATH, its terminals do not see it either. ## How to fix it 1. **In the VS Code terminal:** close VS Code completely and open it again, so its terminals get the new PATH. Then run `devpit accounts` in the VS Code terminal to check. 2. **In an extension or desktop app:** sign in to the account you want inside the extension or app itself, with its own sign-in. 3. **For Git commits from VS Code's Source Control view:** Git's own `includeIf` rules apply there too, because they live in Git's config, not in a shim. If the email is wrong, check the repository is inside the ruled folder. 4. **For pushes from VS Code:** VS Code runs Git, and Git asks the sign-in helpers in its config, where Devpit's helper is the one for `github.com`. Pushes from VS Code with real accounts have not been checked for this release yet. If a push uses VS Code's own GitHub sign-in or the wrong account, see [git push asks for a password or uses the wrong account](https://devpit.zubyr.dev/docs/troubleshooting/git-push-asks-for-password-or-wrong-account). ## Common questions ### Does Devpit work in the VS Code terminal? Yes. The VS Code terminal is a normal terminal, so claude, gh, git and the rest follow Devpit's folder rules there, as long as it was opened after Devpit added its shim folder to PATH. ### Will Devpit support editor extensions later? Not in this version. Extensions and desktop apps keep their own login, and only partly honour the variables Devpit sets for terminal tools. ## Related - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [Two Claude Code accounts on one Windows PC](https://devpit.zubyr.dev/docs/features/accounts-claude-code): Add a second Claude Code account with Devpit, pick which folders use it, and bring your skills, agents, commands and settings over without copying a login. - [A tool used the wrong account in this folder](https://devpit.zubyr.dev/docs/troubleshooting/accounts-wrong-account-used): Claude Code, Git, gh or Vercel used another account than the one you set in Devpit? Find out why in one command and fix the cause. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/accounts-old-account-in-vs-code-or-desktop-app # Devpit's shim is not first on PATH Verify says a tool is found before Devpit's shim, or that a new terminal is needed. What PATH order means on Windows and how to make folder rules apply. `devpit accounts verify` can show one of these: ```text This terminal was opened before Devpit added its shim folder to PATH. ``` ```text Claude Code is found at C:\Program Files\… before Devpit's shim, so folder rules do not apply to it. ``` ```text Devpit's shim folder is not on your PATH, so folder rules are not applied. ``` Folder rules for Claude Code, `gh`, Vercel, Firebase and Supabase work through small programs called shims, in `%LOCALAPPDATA%\Programs\devpit\shims`. They only work when Windows finds the shim before the real tool. ## Why it happens - **The terminal is older than the shim folder.** Devpit adds the folder to your user PATH the first time a tool gets a second account or a rule. Windows gives the new PATH only to programs started after that. This includes VS Code: its terminals get VS Code's own PATH from when it started. - **The tool is on the system PATH.** Windows puts the system PATH before the user PATH. A tool installed for all users (for example by an installer that asks for admin) is found before Devpit's shim, wherever it sits in your user PATH. - **The shim folder was taken off PATH**, by hand or by another tool. ## How to fix it 1. **"This terminal was opened before…":** open a new terminal. For VS Code, close it completely and open it again. 2. **"…is found at … before Devpit's shim":** Devpit's fix names the folders, for example: "Windows puts the system PATH before the user PATH. Move C:\Program Files\… after …\devpit\shims in PATH, or remove it from the system PATH and install Claude Code for your user only." Changing the system PATH needs admin. You can check the order with: ```powershell where.exe claude ``` The first line is the one that runs. It should be in `…\devpit\shims`. 3. **"…shim folder is not on your PATH":** open **Accounts** in Devpit, or make any account change. Devpit puts the shim folder first on your user PATH again. Then open a new terminal. 4. Run `devpit accounts verify` again. `where.exe` only lists programs. A PowerShell function or alias with the tool's name runs before any of them; `Get-Command claude` shows that case. If you set `DEVPIT_SHIM_DIR`, Devpit leaves your PATH alone and you put that folder on PATH yourself. See the [environment variables](https://devpit.zubyr.dev/docs/command-line#environment-variables). ## Common questions ### What is a shim? A small program with the tool's name, such as claude.exe or gh.exe, in Devpit's shim folder. When you run claude, Windows finds the shim first, the shim picks the account for the folder you are in, and starts the real claude with it. ### Do I need administrator rights to fix this? Only if the tool was installed for all users into the system PATH. Then the fix is to move or remove it there, which needs admin, or to install the tool for your user only. Devpit itself never needs admin for Accounts. ## Related - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [A Devpit folder rule is not applying](https://devpit.zubyr.dev/docs/troubleshooting/accounts-folder-rule-not-applying): You made a folder rule in Devpit Accounts, but the tool still uses its usual account there. Main causes, from Git repos to old terminals and moved folders. - [A tool used the wrong account in this folder](https://devpit.zubyr.dev/docs/troubleshooting/accounts-wrong-account-used): Claude Code, Git, gh or Vercel used another account than the one you set in Devpit? Find out why in one command and fix the cause. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/accounts-shim-not-first-on-path # Login expired or signed out in Devpit Accounts Devpit shows an account as expired or not signed in. Why Claude Code logins expire on idle accounts, and how to sign in again without losing the account. The Accounts page or `devpit accounts verify` shows an account as **expired — sign in again** or **not signed in**. The account folder and everything in it are still there. Only the login needs to be renewed. ## Why it happens - **The tool's login ran out**, or you signed out with the tool itself. - **Claude Code issue [#95822](https://github.com/anthropics/claude-code/issues/95822).** On some Claude Code versions, a short command such as `claude auth status` starts a token refresh and exits before the new login is saved. On an idle account this leaves a spent login, and Claude Code then says "Login expired". This is why Devpit never runs that check for the Accounts page, and why verify asks before it checks idle Claude Code accounts. - **Two folders signed in to the same account** can sign each other out when the login refreshes. Devpit warns about this when you add an account with an email you already have. ## How to fix it On the tool's page in **Accounts**, choose **Sign in again**. It runs the tool's own sign-in for that account. From a terminal, run the tool's own sign-in with the account applied: ```powershell devpit claude run work -- claude auth login devpit vercel run work -- vercel login devpit supabase run work -- supabase login ``` For other tools: - **GitHub:** `gh auth login` for that account. `gh` keeps several accounts side by side. - **Cloudflare:** `wrangler auth create ` signs a profile in again. - **The default account** of any tool: use the tool's own sign-in as usual. Then run `devpit accounts verify` to check. Do not delete the account folder to "start fresh": it holds the account's settings and history too. ## Common questions ### Do I lose my settings when I sign in again? No. Signing in again writes a new login into the same account folder. Skills, settings and history in that folder stay as they are. ### Why does Devpit not check my Claude Code accounts all the time? Asking Claude Code who is signed in can sign an idle account out on some versions, Claude Code issue 95822. So the Accounts page shows what Devpit has on record, and verify checks only the account used in the folder unless you agree to more. ## Related - [Two Claude Code accounts on one Windows PC](https://devpit.zubyr.dev/docs/features/accounts-claude-code): Add a second Claude Code account with Devpit, pick which folders use it, and bring your skills, agents, commands and settings over without copying a login. - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [A tool used the wrong account in this folder](https://devpit.zubyr.dev/docs/troubleshooting/accounts-wrong-account-used): Claude Code, Git, gh or Vercel used another account than the one you set in Devpit? Find out why in one command and fix the cause. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/accounts-signed-out-or-expired # Undo stopped: a file was changed after Devpit wrote it devpit undo says a file was changed after Devpit wrote it and changed nothing. Why undo stops instead of overwriting your edit, and how to finish it. ```text C:\Users\you\.gitconfig was changed after Devpit wrote it, so Devpit stopped and changed nothing. Put it back the way it was, or make the change by hand ``` The path names the file. For Devpit's rules file, `accounts.toml`, the message names the change instead, for example: `… was changed after Devpit made the change "Claude Code uses work in C:\Work"`. ## Why it happens Undo puts every file of a change back exactly as it was. To do that safely, it first checks that each file is still exactly what Devpit wrote. If you, an editor or another tool changed one of them since, undo would throw that change away, so it stops instead and changes nothing. Common cases: - You added lines to `~/.gitconfig` after Devpit's block. - You edited one of Devpit's files in `%USERPROFILE%\.devpit\git` by hand. - `%APPDATA%\devpit\accounts.toml` was edited by hand. - A dotfiles tool rewrote `~/.gitconfig`. ## How to fix it Pick one: 1. **Put the file back** the way Devpit left it, then run `devpit undo` again. For `~/.gitconfig`, move your own lines above Devpit's block (the block that starts with `# Added by Devpit`), so it is the last thing in the file again. 2. **Make the change by hand.** Undo is a convenience. For a folder rule, set it back with `devpit use --folder `, or remove it in **Accounts**, then **Browse folders**. Each of these is a new change with its own preview. 3. **Remove everything Devpit added** with `devpit accounts cleanup`. It removes only Devpit's own lines and files and asks first. Devpit's own Git files say at the top `# Written by Devpit.` and are rewritten from its rules on every change. Put your own Git settings in `~/.gitconfig`, above Devpit's block, never in Devpit's files. ## Common questions ### Why does Devpit not just put the old file back? Because that would throw away your edit without asking. Devpit records what each file looked like before and after its change. If the file is no longer what Devpit wrote, someone changed it, so Devpit stops and leaves the choice to you. ### Did undo change anything before it stopped? No. Undo checks every file of the change first, and only starts when all of them are still what Devpit wrote. ## Related - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [A different Git and GitHub account per folder](https://devpit.zubyr.dev/docs/features/accounts-git-and-github): Commit with your work email in C:\Work and push as the right GitHub account, with gh, HTTPS or an SSH key. Devpit shows the exact Git lines it writes. - [Is Devpit safe? What it protects and what it sends](https://devpit.zubyr.dev/docs/safety-and-privacy): How Devpit protects your files and accounts with previews, a default of No and undo, why it stores no tokens, and exactly what opt-in usage stats send. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/accounts-undo-file-changed-by-hand # A tool used the wrong account in this folder Claude Code, Git, gh or Vercel used another account than the one you set in Devpit? Find out why in one command and fix the cause. A tool used another account than the one you picked. Devpit can tell you why in one command, in the folder where it happened: ```powershell devpit accounts verify ``` It compares, for each tool, the account Devpit expects in this folder with the one the tool reports, and prints a fix for every problem it finds. ## Why it happens - **A closer rule wins.** Rules apply to a folder and every folder inside it, and the nearest one wins. A rule on a subfolder can beat the rule you just made. - **A variable in the terminal wins.** `GH_TOKEN`, `GITHUB_TOKEN`, `VERCEL_TOKEN`, `FIREBASE_TOKEN`, `SUPABASE_ACCESS_TOKEN`, `CLOUDFLARE_API_TOKEN`, `ANTHROPIC_API_KEY` and `GIT_AUTHOR_EMAIL` all make a tool ignore the signed-in account. Devpit never clears them; verify lists them. - **The terminal is older than the rule.** The first rule for a tool puts Devpit's shim folder on your PATH. Terminals that were open before do not see it. - **Another copy of the tool runs first.** A copy on the system PATH, or a PowerShell function or alias with the tool's name, runs before Devpit's shim. - **The tool was started another way.** `npx vercel`, an editor extension and a desktop app do not go through Devpit's shim. - **Git: the repository says otherwise.** A `user.email` set inside the repository beats every rule. A linked worktree follows the rule of its main repository's folder. - **Convex** picks the account per project, in `.env.local`. Devpit shows it but does not switch it. - **The rule names an account that no longer exists.** The account was removed or renamed after the rule was made. Devpit skips that rule and the next rule out, or the account for everywhere, applies instead. The same goes for the account picked for everywhere: if it is gone, the tool's default sign-in is used. ## When a rule names a missing account Verify and `devpit accounts` say it in one of these ways: ```text The rule on C:\Work says Claude Code should use "work", but that account no longer exists, so the rule is skipped. Claude Code is set to use "work" everywhere, but that account no longer exists, so the default account is used. ``` Devpit never removes or changes the rule by itself. Pick one: - Point the folder at an account that exists: `devpit use --folder "C:\Work"`. - Remove the rule: open **Accounts**, press `b` for **Browse folders**, and change or remove it there. - For everywhere, pick the account again: `devpit use --everywhere`. - If the account was signed out rather than removed, see [Login expired or signed out](https://devpit.zubyr.dev/docs/troubleshooting/accounts-signed-out-or-expired). Each of these shows a preview and asks first. ## How to fix it 1. In the folder, run `devpit accounts`. The last column says **why** each tool uses its account. 2. If the why is not the rule you expected, open **Accounts** in Devpit, press `b` to browse folders, and check which rules cover this folder. 3. Run `devpit accounts verify` and follow the fix it prints. 4. If the fix says a variable is set, remove it from this terminal (`Remove-Item Env:GH_TOKEN` in PowerShell) and from wherever sets it, then open a new terminal. 5. If the tool was found before Devpit's shim, see [The shim is not first on PATH](https://devpit.zubyr.dev/docs/troubleshooting/accounts-shim-not-first-on-path). 6. For a one-off command with another account, run `devpit run -- `. Rules apply in terminals only. For VS Code extensions and desktop apps, see [Old account in VS Code or a desktop app](https://devpit.zubyr.dev/docs/troubleshooting/accounts-old-account-in-vs-code-or-desktop-app). ## Common questions ### How do I see which account a tool uses in a folder? Run devpit accounts in that folder, or open Accounts in the app. Each tool shows the account it uses there and why: everywhere, a folder rule, or a project file. devpit accounts verify also asks the tools themselves and compares. ### Can two folder rules disagree? Yes, and the nearest folder wins, one tool at a time. A rule on C:\Work\client wins over a rule on C:\Work inside client. The tool page in Accounts shows the chain of rules and which one won. ## Related - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [A Devpit folder rule is not applying](https://devpit.zubyr.dev/docs/troubleshooting/accounts-folder-rule-not-applying): You made a folder rule in Devpit Accounts, but the tool still uses its usual account there. Main causes, from Git repos to old terminals and moved folders. - [Devpit's shim is not first on PATH](https://devpit.zubyr.dev/docs/troubleshooting/accounts-shim-not-first-on-path): Verify says a tool is found before Devpit's shim, or that a new terminal is needed. What PATH order means on Windows and how to make folder rules apply. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/accounts-wrong-account-used # My AI agent changed an account without asking An AI agent switched which account a tool uses through Devpit? Why that needs --yes, how to see what changed, how to undo it, and how to stop it next time. Devpit changes an account only after a yes. An AI agent runs `devpit` with no terminal to answer in, so a command that would change something changes nothing and exits with code `3`, unless the command line has `--yes`. So if an agent changed an account, it ran the command with `--yes`. The Devpit skill tells agents to ask you first and to pass `--yes` only after you agree. Devpit cannot tell who typed `--yes`, so it cannot stop an agent that skips that step. ## See what changed 1. In the folder where it happened, run `devpit accounts`. It shows the account each tool uses here, and why. 2. Run `devpit undo` in a terminal. It shows the last account change and what undoing it would put back, then asks `[y/N]`. Press `n` (or `Enter`) if you only wanted to look. Nothing changes. ## Undo it - From a terminal: run `devpit undo` and answer `y`. - In the app: open **Accounts** and press `u`. Undo puts every file of that change back exactly as it was. A change made in one go, such as `devpit use work` for several tools, is undone in one go. Run `devpit undo` again to take back the change before that. If a file Devpit wrote was changed by hand since, undo stops and changes nothing. See [Undo says a file was changed by hand](https://devpit.zubyr.dev/docs/troubleshooting/accounts-undo-file-changed-by-hand). ## Stop it next time - Tell the agent to ask you before any account change. The Devpit skill already says so; see [Using Devpit with AI agents](https://devpit.zubyr.dev/docs/ai-agents) for what it contains. - If your agent can run commands without asking you first, do not let it run `devpit` commands that end in `--yes` on its own. - To take Devpit's skill out of Claude Code, run `devpit agent remove`, or open **Settings**, then **AI agent skill**, and choose **Remove**. Both list what will be removed and ask first. Only skill files Devpit wrote are removed. ## Common questions ### Can an AI agent change my accounts through Devpit without --yes? No. An agent runs devpit with no terminal to answer in. Then every command that would change something changes nothing and exits with code 3 unless --yes is on the command line. ### Can I undo a change an agent made? Yes, the same way as any account change: run devpit undo, or press u on the Accounts page. Both show what will be put back and ask first, with No as the default. ## Related - [Using Devpit with AI agents](https://devpit.zubyr.dev/docs/ai-agents): What Devpit's Claude Code skill writes and where, what it tells an agent to do and never do, and how agents read Devpit's JSON, exit codes and Markdown docs. - [Use the right account in every folder on Windows](https://devpit.zubyr.dev/docs/features/accounts): Tell Devpit once which account a folder uses, and Claude Code, Git, GitHub, Vercel and more use it there. Every change is previewed and can be undone. - [Undo stopped: a file was changed after Devpit wrote it](https://devpit.zubyr.dev/docs/troubleshooting/accounts-undo-file-changed-by-hand): devpit undo says a file was changed after Devpit wrote it and changed nothing. Why undo stops instead of overwriting your edit, and how to finish it. - [A tool used the wrong account in this folder](https://devpit.zubyr.dev/docs/troubleshooting/accounts-wrong-account-used): Claude Code, Git, gh or Vercel used another account than the one you set in Devpit? Find out why in one command and fix the cause. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/ai-agent-changed-account-without-asking # CLAUDE_CONFIG_DIR is set by something other than Devpit Devpit says CLAUDE_CONFIG_DIR is set in this terminal by something else. What it changes for Claude Code, where it usually comes from and how to remove it. ```text ! CLAUDE_CONFIG_DIR is set in this terminal by something other than Devpit (to C:\…). Claude Code started through Devpit uses Devpit's rule instead; started any other way, it uses that folder's sign-in. ``` `CLAUDE_CONFIG_DIR` tells Claude Code which config folder, and so which account, to use. Devpit sets it only for the one `claude` process it starts. This message means something else set it for the whole terminal. ## Why it happens - **claude-acc.** Its PowerShell profile line sets `CLAUDE_CONFIG_DIR` every time the terminal changes folder. See [Moving from claude-acc](https://devpit.zubyr.dev/docs/troubleshooting/moving-from-claude-acc). - **Your PowerShell profile** or another script sets it, for example `$env:CLAUDE_CONFIG_DIR = …`. - **It is set for your user or the whole PC** in Windows' environment variables. ## What it changes - `claude` started through Devpit's shim: nothing. Devpit's rule wins. For a named account Devpit sets the variable to that account's folder; for `default` it clears it. - Claude Code started any other way, for example by a full path, by an extension or by another program: it uses the folder the variable names. ## How to fix it 1. Find where it comes from. In PowerShell: ```powershell [Environment]::GetEnvironmentVariable("CLAUDE_CONFIG_DIR", "User") [Environment]::GetEnvironmentVariable("CLAUDE_CONFIG_DIR", "Machine") Select-String -Path $PROFILE -Pattern "CLAUDE_CONFIG_DIR|claude-acc" ``` 2. Remove it from this terminal: ```powershell Remove-Item Env:CLAUDE_CONFIG_DIR ``` In cmd: `set CLAUDE_CONFIG_DIR=`. 3. Remove it where it is set: delete the line from your profile (`notepad $PROFILE`), or remove it from your user environment variables. 4. Open a new terminal and run `devpit accounts verify`. If you want a folder to use a certain Claude Code account, make a folder rule in Devpit instead of setting the variable yourself. ## Common questions ### Is it a problem if CLAUDE_CONFIG_DIR is set? Not for claude started through Devpit's shim: Devpit sets the variable for a named account and clears it for the default one. But Claude Code started any other way, such as an editor extension or a full path to claude.exe, uses the folder the variable names. ### Will Devpit remove the variable for me? No. Devpit never changes your environment or your PowerShell profile. It tells you where the variable is set and how to remove it. ## Related - [Two Claude Code accounts on one Windows PC](https://devpit.zubyr.dev/docs/features/accounts-claude-code): Add a second Claude Code account with Devpit, pick which folders use it, and bring your skills, agents, commands and settings over without copying a login. - [Moving from claude-acc to Devpit](https://devpit.zubyr.dev/docs/troubleshooting/moving-from-claude-acc): Import claude-acc's Claude Code accounts and folder links into Devpit in place, check them, then retire claude-acc in the right order without signing in again. - [A tool used the wrong account in this folder](https://devpit.zubyr.dev/docs/troubleshooting/accounts-wrong-account-used): Claude Code, Git, gh or Vercel used another account than the one you set in Devpit? Find out why in one command and fix the cause. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/claude-config-dir-set-by-something-else # A shared Claude Code skill link is broken A Claude Code skill, agents or commands folder shared by Devpit shows as broken. Why the link stopped working and how to repair it without losing files. Devpit shares skills, agents and commands between Claude Code accounts with **junctions**: entries in the other account that point at folders in your main `%USERPROFILE%\.claude`. A junction is **broken** when the folder it points at is gone. ## Why it happens - **The skill was deleted or renamed in your main account.** The link in the other account still has the old name. - **The main `.claude` folder moved**, for example into OneDrive. Links to it no longer resolve. OneDrive does not keep links, so Devpit does not make them there. - **Another tool replaced the folder** with something else. ## How to fix it 1. Open **Accounts**, then **Claude Code**, and open the account that shows the broken item. 2. Choose **Bring your Claude Code setup over**. The item list marks the link as **broken link**. Press `r` to repair it. Repairing only changes the link, never your files. 3. If the skill was renamed on purpose, share it again under its new name. If it was deleted, remove the broken link. A link made by another tool is left alone and the row says so; fix that one with the tool that made it. Do not delete a shared folder through the link in the other account with Explorer or `Remove-Item -Recurse`: that can delete the files in your main account too. To stop sharing, use **Stop sharing** in Devpit: it copies the item first and removes only the link. > **Note: Check against the app** > > The item list and its repair are new in this release. If the screen differs from this page, the app is right; please [report it](https://github.com/zubairbinshaukat/devpit/issues). ## Common questions ### Did I lose the skill? Not because of the link. A shared skill lives in your main .claude folder and the other account only points at it. If the skill folder in your main account was deleted or renamed, the link has nothing to point at. Removing a broken link never deletes files. ### Why does a new skill in my main account not show in the other account? Devpit adds links for new skills the next time claude starts in that account through Devpit's shim. Start claude once in a folder that uses the account, or share the skill from Accounts. ## Related - [Two Claude Code accounts on one Windows PC](https://devpit.zubyr.dev/docs/features/accounts-claude-code): Add a second Claude Code account with Devpit, pick which folders use it, and bring your skills, agents, commands and settings over without copying a login. - [Share Claude Code skills between two accounts on Windows](https://devpit.zubyr.dev/docs/blog/share-claude-code-skills-between-accounts-windows): Share skills, agents, commands and CLAUDE.md between two Claude Code accounts on Windows with junctions, symlinks or copies, and why plugins are different. - [CLAUDE_CONFIG_DIR is set by something other than Devpit](https://devpit.zubyr.dev/docs/troubleshooting/claude-config-dir-set-by-something-else): Devpit says CLAUDE_CONFIG_DIR is set in this terminal by something else. What it changes for Claude Code, where it usually comes from and how to remove it. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/claude-shared-skill-link-broken # EADDRINUSE: address already in use :::3000 Fix Node's EADDRINUSE :::3000 error on Windows: find the process that holds port 3000, stop it, and see how Devpit frees a stuck port in two keys. **Error: listen EADDRINUSE: address already in use :::3000** means another program is already using port 3000, so your server cannot start there. ## What it means `EADDRINUSE` is Node's short name for "address already in use". Node says an attempt to bind a server to a local address failed because another server on the same computer already holds that address. The `:::3000` part is an address and a port: - `::` is the IPv6 "any address". Node listens there when you do not give a host name and IPv6 is available. - `:3000` is the port. ## Why it happens Most of the time it is your own old server: - A dev server from an earlier run is still alive. This is common when a terminal was closed but `node` kept running. - Two projects use the same default port. - Another program (not Node) uses port 3000. Only one program can listen on one address and port at a time. ## How Devpit fixes it Devpit has a section for exactly this: [Fix Stuck Ports & Apps](https://devpit.zubyr.dev/docs/features/fix-stuck-ports). 1. Open Devpit, choose **Ports & Network**, then **Fix stuck ports & apps**. 2. Choose **Kill a port** and type `3000`. 3. Devpit shows which process holds the port and asks you to confirm. The default answer is No. 4. After you confirm, it stops the process and waits up to two seconds to check that the port is really free. You can also choose **Busy dev ports**. It lists which of the usual dev ports are in use right now: 3000 to 3010, 4200, 5000, 5173, 5174, 8000, 8080, 8081, 8888, 9000 and 19000 to 19006. You can change that list in Settings. If the process was started by npm, pnpm, yarn or node, Devpit can stop the whole process tree, so the parent does not start a child again. Devpit will not stop some processes. It refuses PID 0 and 4, programs in the Windows System32 folder (except `cmd.exe`, `powershell.exe` and `conhost.exe`), and Windows services, and it says why. Devpit itself never runs as administrator, so if the process runs as administrator Devpit tells you it needs admin. Then close that program yourself or use an administrator terminal. ## The manual fix Find the process ID (PID) that owns the port. In PowerShell: ```powershell Get-NetTCPConnection -LocalPort 3000 ``` The `OwningProcess` column is the PID. Then look at what it is: ```powershell Get-Process -Id 12345 ``` Replace `12345` with your PID. If it is your old dev server, stop it: ```powershell Stop-Process -Id 12345 ``` You can do the same in Command Prompt. `netstat -ano` lists connections with their PID (`-a` all, `-n` numbers, `-o` owning PID). `taskkill /pid 12345` ends the process, and `/f` forces it and `/t` also ends its child processes: ```text netstat -ano taskkill /pid 12345 /t /f ``` Only force a process you understand. If it is not yours, pick another port instead, for example by setting the `PORT` environment variable that your framework reads. ## Sources - [Node.js: Common system errors (EADDRINUSE)](https://nodejs.org/api/errors.html#common-system-errors) - [Node.js: net.Server listen, default host and the `::` address](https://nodejs.org/api/net.html#serverlisten) - [Microsoft: Get-NetTCPConnection](https://learn.microsoft.com/powershell/module/nettcpip/get-nettcpconnection) - [Microsoft: Stop-Process](https://learn.microsoft.com/powershell/module/microsoft.powershell.management/stop-process) - [Microsoft: netstat](https://learn.microsoft.com/windows-server/administration/windows-commands/netstat) - [Microsoft: taskkill](https://learn.microsoft.com/windows-server/administration/windows-commands/taskkill) ## Common questions ### What does the three colons in :::3000 mean? The two colons at the start are the IPv6 address :: (the unspecified address, meaning every network interface). The third colon separates the address from the port, which is 3000. Node prints this form when your server listens without a host name and IPv6 is available. ### Is it safe to kill the process that uses port 3000? Usually yes, if it is your own old dev server. Check the process name first. Do not stop system processes. Devpit refuses to stop protected Windows processes and tells you why. ### Why is port 3000 still busy after I closed my terminal? Closing a terminal window does not always stop the programs it started. A node process can keep running in the background and keep the port. Find its process ID and stop it. ## Related - [Fix "port 3000 is already in use" on Windows](https://devpit.zubyr.dev/docs/features/fix-stuck-ports): Free a busy port such as 3000 or 5173 in two keystrokes, list busy dev ports, and stop stuck Node processes safely with Devpit. - [EPERM: operation not permitted, rmdir (node_modules)](https://devpit.zubyr.dev/docs/troubleshooting/eperm-operation-not-permitted-rmdir): Fix EPERM and EBUSY errors when deleting node_modules on Windows: find the program that holds the files, close it, and delete the folder safely. - [The source file name(s) are larger than is supported by the file system](https://devpit.zubyr.dev/docs/troubleshooting/source-file-names-are-larger-than-supported): Windows can't delete or move a folder because the path is too long. Learn about the 260 character limit, LongPathsEnabled, rd /s /q and the robocopy /MIR trick. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/eaddrinuse-address-already-in-use-3000 # EPERM: operation not permitted, rmdir (node_modules) Fix EPERM and EBUSY errors when deleting node_modules on Windows: find the program that holds the files, close it, and delete the folder safely. **Error: EPERM: operation not permitted, rmdir** (or **EBUSY: resource busy or locked**) means Windows refused to remove a file or folder inside `node_modules`, most often because something still has it open. ## What it means Both are system error codes that Node passes on. Node's error page says `EPERM` is "an attempt was made to perform an operation that requires elevated privileges". The libuv library, which Node uses for file work, describes `EPERM` as "operation not permitted" and `EBUSY` as "resource busy or locked". The error also names the failing call in its `syscall` property, here `rmdir`. The Windows error behind a lock is "The process cannot access the file because it is being used by another process" (system error 32). ## Why it happens `node_modules` holds thousands of files. If one of them is in use, the whole delete stops. Typical holders: - A dev server or `node` process that is still running in the folder. - An editor or terminal that has its current folder inside the project. - A build tool, watcher or language server that keeps a file open. - A file that is read-only, or a path that is too long (see [the path too long page](https://devpit.zubyr.dev/docs/troubleshooting/source-file-names-are-larger-than-supported)). ## How Devpit fixes or avoids it [Free Up Disk Space](https://devpit.zubyr.dev/docs/features/free-up-disk-space) deletes `node_modules` for you and is built for this case. - It lists a `node_modules` folder as junk when a `package.json` sits beside it. One without a `package.json` is shown as unverified and is never ticked for you. You always see a preview first, and the default answer is No. - Before it removes anything, it renames the folder to a name ending in `.devpit-` and random letters. If a program holds a file, the rename fails before a single byte is deleted, so you never get a half-emptied folder. - When that happens, the summary names the program when Windows can tell, for example: "Couldn't delete api\node_modules — it's open in Code.exe. Close it and press R to retry." If Windows cannot name a program, it says another program has it open. - Devpit never ends the program that holds the file. You close it and press `R`. - It removes the folder's contents in parallel, and it retries very long paths in the extended `\\?\` form. - If a run is stopped in the middle, the renamed folder is finished on the next start or from **Settings**, **Resume**. Devpit only finishes folders that carry its own marker file, never one that merely looks similar. ## The manual fix 1. Stop the dev server. Press `Ctrl`+`C` in the terminal that runs it. 2. Close the editor window for that project, and any terminal whose folder is inside it. 3. Move your terminal out of the project, then delete the folder with `rmdir`. `/s` deletes the whole tree and `/q` skips the confirmation: ```text cd .. rmdir /s /q my-project\node_modules ``` 4. If it still fails, restart Windows and run the same command before you open anything else. 5. Rebuild later with `npm install` in the project folder. `/q` deletes without asking. Check the path before you press Enter. If the message talks about a long name instead, follow [the path too long page](https://devpit.zubyr.dev/docs/troubleshooting/source-file-names-are-larger-than-supported). ## Sources - [Node.js: Common system errors (EPERM) and error.syscall](https://nodejs.org/api/errors.html#common-system-errors) - [libuv: Error constants (UV_EBUSY, UV_EPERM)](https://docs.libuv.org/en/v1.x/errors.html) - [Microsoft: System error codes 0 to 499 (ERROR_SHARING_VIOLATION, 32)](https://learn.microsoft.com/windows/win32/debug/system-error-codes--0-499-) - [Microsoft: rmdir](https://learn.microsoft.com/windows-server/administration/windows-commands/rmdir) - [Devpit safety rules](https://github.com/zubairbinshaukat/devpit/blob/main/docs/safety.md) ## Common questions ### Is it safe to delete node_modules? Yes. node_modules only holds installed dependencies. You can rebuild it from package.json and your lockfile with npm install, pnpm install or yarn. Keep the lockfile and package.json. ### What is the difference between EPERM and EBUSY? Node describes EPERM as an operation that is not permitted, which often needs more rights. The libuv library describes EBUSY as a resource that is busy or locked. On Windows, deleting node_modules usually fails with one of them when another program still has a file open. ### Does Devpit close the program that locks the folder? No. Devpit never ends the program that holds a file open. It names the program when Windows can tell, and asks you to close it and press R to retry. ## Related - [Free up disk space and delete node_modules on Windows](https://devpit.zubyr.dev/docs/features/free-up-disk-space): Find and delete node_modules, build folders, caches and other developer junk safely, with a preview, risk labels and a confirmation before anything goes. - [The source file name(s) are larger than is supported by the file system](https://devpit.zubyr.dev/docs/troubleshooting/source-file-names-are-larger-than-supported): Windows can't delete or move a folder because the path is too long. Learn about the 260 character limit, LongPathsEnabled, rd /s /q and the robocopy /MIR trick. - [EADDRINUSE: address already in use :::3000](https://devpit.zubyr.dev/docs/troubleshooting/eaddrinuse-address-already-in-use-3000): Fix Node's EADDRINUSE :::3000 error on Windows: find the process that holds port 3000, stop it, and see how Devpit frees a stuck port in two keys. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/eperm-operation-not-permitted-rmdir # Flush the DNS cache on Windows: ipconfig /flushdns What ipconfig /flushdns and Clear-DnsClientCache do, when clearing the Windows DNS cache helps, and how to do it in one step from Devpit's Network Tools. `ipconfig /flushdns` clears the list of website names that Windows remembers. It helps when a name still points to an old or wrong address. ## What it means When you open `example.com`, Windows asks a DNS server for its address and keeps the answer for a while. This saved list is the **DNS client resolver cache**. It makes repeat visits fast. Microsoft's `ipconfig` page says the DNS Client service uses it to resolve frequently queried names quickly, before it queries the DNS servers you have set. `/flushdns` "flushes and resets the contents of the DNS client resolver cache". Microsoft says that during DNS troubleshooting you can use it to discard negative cache entries (remembered failures), and any other entries that were added dynamically. ## Why it happens (when it helps) Try it when: - A site moved to a new server and your PC still goes to the old one. - A name failed once while a DNS record was missing, and it keeps failing after the record was fixed. That is a negative cache entry. - You changed DNS settings or a record on a test domain and want a fresh lookup. It does not help when the problem is the internet connection, the site itself, or your firewall. ## How Devpit fixes or avoids it Open [Network tools](https://devpit.zubyr.dev/docs/features/network-tools) (main menu, **Ports & Network**, then **Network tools**) and choose **Flush DNS cache**. 1. Devpit asks "Flush the DNS resolver cache?" and the default answer is No. It says this clears cached lookups and nothing else on the machine changes. 2. When you say yes, it runs `ipconfig /flushdns` and shows what Windows printed, or the error if it failed. The same screen can ping a host and show your local and public IP addresses, which helps you tell a DNS problem from a connection problem. ## The manual fix In Command Prompt or PowerShell: ```text ipconfig /flushdns ``` In PowerShell, the cmdlet does the same: ```powershell Clear-DnsClientCache ``` To see what is in the cache first, `ipconfig /displaydns` shows the cache contents, including entries loaded from the Hosts file: ```text ipconfig /displaydns ``` Then try your site again. ## Sources - [Microsoft: ipconfig (/flushdns, /displaydns)](https://learn.microsoft.com/windows-server/administration/windows-commands/ipconfig) - [Microsoft: Clear-DnsClientCache](https://learn.microsoft.com/powershell/module/dnsclient/clear-dnsclientcache) - [Devpit source: internal/network/dns.go](https://github.com/zubairbinshaukat/devpit/blob/main/internal/network/dns.go) ## Common questions ### Is it safe to flush the DNS cache? Yes. It only clears saved name lookups. Windows asks the DNS server again the next time you visit a site. Devpit's confirmation says the same: nothing else on the machine changes. ### What is the difference between ipconfig /flushdns and Clear-DnsClientCache? Microsoft's documentation says running the Clear-DnsClientCache cmdlet is equivalent to running ipconfig /flushdns. Use whichever shell you like. ### Will flushing the DNS cache speed up my internet? No. It fixes stale or wrong lookups. The cache exists to make repeated lookups faster, so an empty cache means the first lookup of each name is slower, once. ## Related - [Check your IP, ping a host and flush DNS on Windows](https://devpit.zubyr.dev/docs/features/network-tools): See your local and public IP address, ping a host to test your connection, and clear the Windows DNS cache from one Devpit menu. - [System error 53: The network path was not found](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found): Fix Windows 'System error 53. The network path was not found' and error 0x80070035 when you open a shared folder: check reachability, sharing, services. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/flush-dns-ipconfig-flushdns # git: Please tell me who you are Git says 'Please tell me who you are' when user.name and user.email are not set. Set them with git config --global, or set them per folder in Devpit's Accounts. ```text *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. ``` This is Git asking for your name and email. It needs them to write a commit. It does not know them yet. ## What it means Every Git commit records who made it. Git takes that from two settings, `user.name` and `user.email`. If they are missing and Git cannot work them out, it stops with this message. Often a second line follows, for example `fatal: unable to auto-detect email address`. ## Why it happens - A new PC, a new Windows user or a fresh Git install. Nothing is set yet. - You set the name and email in one repository, and now you are in a different one. ## How Devpit fixes or avoids it Open **Accounts** in Devpit and choose the **Git** row. See [Git and GitHub accounts](https://devpit.zubyr.dev/docs/features/accounts-git-and-github). - The row shows the name and email Git will commit as in this folder, and where they come from. - **Use another account here** saves a name and email for this folder and every folder inside it, or for everywhere. The preview shows the exact Git lines first. A folder rule only applies inside a Git repository. If you see this message in a new repository, the manual fix below works everywhere. ## The manual fix 1. Set your name and email for your whole Windows account: ```powershell git config --global user.name "Your Name" git config --global user.email "you@example.com" ``` 2. Check what Git now has: ```powershell git config --global --list ``` 3. Try your commit again. To use a different identity in one repository only, run the same two commands inside that repository without `--global`. If you push to GitHub over SSH and see a different error, read [Permission denied (publickey)](https://devpit.zubyr.dev/docs/troubleshooting/permission-denied-publickey). ## Sources - [Git source: ident.c (the message text)](https://github.com/git/git/blob/master/ident.c) - [Git documentation: git-config (--global, --list)](https://git-scm.com/docs/git-config) ## Common questions ### Do the name and email have to be real? Git needs a name that is not empty and an email address to put in each commit. If you push to a service such as GitHub, use the email that the service links to your account so commits are shown as yours. ### What is the difference between --global and a single repository? With --global git saves the name and email for your Windows account, for every repository. Without --global git saves them only in the current repository. Git's own message says to omit --global to set the identity only in this repository. ## Related - [A different Git and GitHub account per folder](https://devpit.zubyr.dev/docs/features/accounts-git-and-github): Commit with your work email in C:\Work and push as the right GitHub account, with gh, HTTPS or an SSH key. Devpit shows the exact Git lines it writes. - [Permission denied (publickey)](https://devpit.zubyr.dev/docs/troubleshooting/permission-denied-publickey): Fix git and SSH 'Permission denied (publickey)' on Windows: use the git user, check that a key is loaded, and add the public key to GitHub. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/git-please-tell-me-who-you-are # git push asks for a password or uses the wrong account git push to GitHub asks for a password, or pushes as the wrong GitHub account, in a folder with a Devpit rule. How to see what decides it and fix it. ```text Username for 'https://github.com': ``` Git is asking you to sign in, because no sign-in helper answered. Or the push went through, but as the wrong GitHub account. ## Why it happens - **The GitHub account is not signed in to `gh`.** Devpit's helper asks `gh` for the account's token. If that account is signed out in `gh`, there is nothing to give Git, and Git asks you. - **The remote is SSH, not HTTPS.** A remote like `git@github.com:you/repo.git` uses your SSH key, and the account that key belongs to. Devpit's helper is not used. - **The repository has its own helper.** A `credential.helper` set inside the repository comes first. Devpit shows it as "this repo's own sign-in helper". - **Lines after Devpit's block** in your `~/.gitconfig` can win over its rules. Verify tells you which file wins. - **A variable is set.** `GH_TOKEN` or `GITHUB_TOKEN` in the terminal make `gh` use that token. - **Devpit was uninstalled without cleanup.** The helper line in Devpit's rules file still points at a `devpit.exe` that is gone. ## How to fix it 1. In the repository folder, run `devpit accounts verify`, which checks which GitHub account a push will use. In the app, the **Pushes as** row of the Git page says what decides it here: Devpit's sign-in helper, Git's own helper, this repo's own helper, or the SSH key. 2. If the GitHub account is signed out, sign it in again with `gh auth login`, then check `gh auth status` lists it. 3. Check the remote: `git remote -v`. For an SSH remote, give the folder its own key, see [SSH remotes](https://devpit.zubyr.dev/docs/features/accounts-git-and-github#ssh-remotes). 4. Check the repository's own helper: `git config --local --get-all credential.helper`. 5. For one push as another account: `devpit github run work -- git push`. 6. If you removed Devpit, reinstall it and run `devpit accounts cleanup`, or delete the `[include]` block that names `rules.gitconfig` at the end of your `~/.gitconfig`. Never paste a token into a terminal or a file to make a push work. Sign in through `gh` and let the helper pass it. > **Note: Not checked with real logins yet** > > Pushing through Devpit's helper with Git Credential Manager installed and two real GitHub accounts has not been checked end to end for this release yet. > If you hit a case this page does not explain, please [open an issue](https://github.com/zubairbinshaukat/devpit/issues) with the output of `devpit accounts verify` (it holds no token). ## Common questions ### Does GitHub accept my account password for git push? No. GitHub does not accept account passwords for Git over HTTPS. Git needs a token from a sign-in helper such as gh, Git Credential Manager or Devpit's helper, or an SSH key. ### Which GitHub account does a push use? Over HTTPS, the account the sign-in helper answers with. Over SSH, the account the SSH key belongs to. The Pushes as row on Devpit's Git page says which one decides in the folder. ## Related - [A different Git and GitHub account per folder](https://devpit.zubyr.dev/docs/features/accounts-git-and-github): Commit with your work email in C:\Work and push as the right GitHub account, with gh, HTTPS or an SSH key. Devpit shows the exact Git lines it writes. - [Permission denied (publickey)](https://devpit.zubyr.dev/docs/troubleshooting/permission-denied-publickey): Fix git and SSH 'Permission denied (publickey)' on Windows: use the git user, check that a key is loaded, and add the public key to GitHub. - [A tool used the wrong account in this folder](https://devpit.zubyr.dev/docs/troubleshooting/accounts-wrong-account-used): Claude Code, Git, gh or Vercel used another account than the one you set in Devpit? Find out why in one command and fix the cause. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/git-push-asks-for-password-or-wrong-account # You can't access this shared folder because your organization's security policies block unauthenticated guest access Fix the Windows error that says security policies block unauthenticated guest access to a shared folder, with the safer options on Windows 11 24H2. Windows refused to open a share because the other side asked for a guest (no user name, no password) sign in. This is the Windows 11 24H2 error above. ## What it means Windows blocks guest logons to remote shares by default. Microsoft's documentation says: - Since Windows 10 version 1709 and Windows Server 2019, SMB2 and SMB3 clients do not allow guest access to a remote server by default, or a fall back to the Guest account after wrong credentials. - In Windows 11 Pro Insider Preview build 25267 and later builds, guest credentials cannot be used to connect to a remote share by default. - In Windows 11 version 24H2, SMB signing is required by default on the Pro, Enterprise and Education editions (not on Home). That causes problems with guest authentication, because signing does not work with guest. The message says "your organization", but on a PC you own it is usually just the Windows default. A managed work PC can also have a policy that sets it. ## Why it happens You are connecting to something that offers a share without accounts. Typical cases are a NAS, a router with a USB drive, or another PC that shares a folder to "Everyone" with no password. Microsoft's own advice is to upgrade or replace software or devices that only support guest authentication. ## How Devpit fixes or avoids it Devpit does not change these Windows policies. [Share Files](https://devpit.zubyr.dev/docs/features/share-files) avoids guest access on purpose. When you share a folder, Devpit creates a temporary login just for that share, shows its user name and password, and removes it when sharing stops. The receiving PC signs in with a real account, so Windows has no reason to block it. If Windows still blocks a sign-in (error 1272), Devpit says "Windows blocked the sign-in" and tells you not to turn off SMB signing. ## The manual fix Best to least safe: **1. Use a real account (recommended).** On the device that shares, create a user with a password, and sign in with it. If Windows says the user name or password is wrong, see [system error 1326](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1326-user-name-or-password-incorrect). **2. Allow insecure guest logons on your PC.** Only if you must. Microsoft warns that this can expose you to fake servers and other attacks. In PowerShell as administrator: ```powershell Set-SmbClientConfiguration -EnableInsecureGuestLogons $true -Force ``` Or with the Local Group Policy Editor: run `gpedit.msc`, then go to **Computer Configuration**, **Administrative Templates**, **Network**, **Lanman Workstation**, open **Enable insecure guest logons**, select **Enabled** and click **OK**. Or with the registry: under `HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\LanmanWorkstation` (create the key if needed) add a DWORD (32-bit) value named `AllowInsecureGuestAuth` and set it to `1`. Microsoft also says that SMB signing and SMB encryption policies must be disabled in Group Policy to use guest logons, and that this can leave you open to credential theft and relay attacks. That is a good reason to prefer option 1. **3. Turn it off again** when you are done. Set the same policy to **Disabled**, or set `EnableInsecureGuestLogons` back to `$false`. ## Sources - [Microsoft: Can't access shared folders from File Explorer (this error and the registry and Group Policy fixes)](https://learn.microsoft.com/troubleshoot/windows-client/networking/cannot-access-shared-folder-file-explorer) - [Microsoft: How to enable insecure guest logons in SMB2 and SMB3](https://learn.microsoft.com/windows-server/storage/file-server/enable-insecure-guest-logons-smb2-and-smb3) - [Microsoft: Control SMB signing behavior (which 24H2 editions require signing)](https://learn.microsoft.com/windows-server/storage/file-server/smb-signing) - [Microsoft Q&A: the error message text](https://learn.microsoft.com/en-us/answers/questions/3857630/you-cant-access-this-shared-folder-because-your-or) ## Common questions ### Is it safe to turn on insecure guest logons? Microsoft recommends that you do not. Guest logons allow an attacker to trick you into connecting to a fake server without any credential prompt, and guest logons do not support SMB signing or encryption. Turn it on only for a device you trust that cannot use a user name and password. ### Why did this start after I updated to Windows 11 24H2? Microsoft says SMB signing is required by default in Windows 11 24H2 Pro, Enterprise and Education. Guest logons cannot use signing, so guest access can fail even when guest fallback was allowed before. Guest logons were already off by default in many editions of Windows 10 and 11. ### What is the best fix? Do not use guest access. Give the shared folder a real user name and password, and sign in with it. That is what Devpit's Share Files feature does, with a temporary login for each share. ## Related - [Copy big folders between two PCs on your network](https://devpit.zubyr.dev/docs/features/share-files): Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. - [System error 1326: user name or password is incorrect](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1326-user-name-or-password-incorrect): Fix Windows system error 1326, 'The user name or password is incorrect', when you open a shared folder: check the account on the sharing PC and sign in again. - [System error 53: The network path was not found](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found): Fix Windows 'System error 53. The network path was not found' and error 0x80070035 when you open a shared folder: check reachability, sharing, services. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/guest-access-blocked-windows-11-24h2 # Moving from claude-acc to Devpit Import claude-acc's Claude Code accounts and folder links into Devpit in place, check them, then retire claude-acc in the right order without signing in again. [claude-acc](https://github.com/Nemo-Illusionist/claude-code-account-switcher) binds Claude Code accounts to folders with a PowerShell profile line. Devpit can take over those accounts and folder links without moving them, so nobody signs in again. The background is in the blog post [Moving from claude-acc to Devpit without signing in again](https://devpit.zubyr.dev/docs/blog/move-from-claude-acc-to-devpit). ## Import Open **Accounts** in Devpit. The first time, it says **Found accounts already on this PC** and lists what claude-acc has. Choose **Use them in Devpit**. Or from a terminal: ```powershell devpit claude import --from claude-acc ``` Devpit reads claude-acc's own files (its accounts, folder links and default account), shows what it would add, and after a yes adds them as one change. `devpit undo` takes the whole import back. Each claude-acc account stays where it is, under `%USERPROFILE%\.claude-switch\accounts`. claude-acc's `default` is Devpit's `default`: your normal `%USERPROFILE%\.claude`. ## Retire claude-acc, in this order The import prints these steps for your PC, with the exact file and line numbers. 1. **Check that Devpit picks the same accounts.** Run `devpit accounts verify`, or open Accounts in a few of the linked folders. Claude Code should show the account claude-acc used there. 2. **Remove claude-acc's line from your PowerShell profile.** Open it with `notepad $PROFILE` and delete the line under `# Claude Code Account Switcher`. Devpit does not edit your profile. 3. **Open a new terminal.** claude-acc's line sets `CLAUDE_CONFIG_DIR` every time a terminal changes folder. A terminal started after the line is gone has no such variable. In an old terminal, Devpit's shim overrides it for `claude`, but close it to be sure. 4. **Remove the program.** Delete claude-acc's `bin` folder inside `.claude-switch`. If you added that folder to PATH yourself, take it out of PATH too. 5. **Keep the account folders.** Do not delete `.claude-switch\accounts` or anything in it while Devpit uses them. > **Danger: Do not run claude-acc remove** > > Do not run `claude-acc remove` for an account you imported. > It moves the account's folder to the Recycle Bin, or deletes it outright with `--purge` or when the Recycle Bin cannot take it. > Either way that account is signed out. > **Note: Not checked end to end yet** > > Reading claude-acc's files was checked on a real PC with claude-acc installed (one account, six folder links). > Applying the import there and then running Claude Code in all six folders has not been checked end to end for this release yet. > Run `devpit accounts verify` after importing. ## Common questions ### Do I have to sign in to my accounts again? No. Devpit uses claude-acc's account folders where they are, and those folders hold the logins. Devpit's rules file only points at them. ### Can I delete the .claude-switch folder afterwards? Not the accounts folder inside it, and nothing in it, while Devpit uses those accounts. You can delete claude-acc's program from its bin folder. The config and links files can stay; nothing reads them once claude-acc is gone. ## Related - [Two Claude Code accounts on one Windows PC](https://devpit.zubyr.dev/docs/features/accounts-claude-code): Add a second Claude Code account with Devpit, pick which folders use it, and bring your skills, agents, commands and settings over without copying a login. - [Moving from claude-acc to Devpit without signing in again](https://devpit.zubyr.dev/docs/blog/move-from-claude-acc-to-devpit): How claude-acc stores Claude Code accounts on Windows, how Devpit imports them in place so nobody signs in again, and how to remove claude-acc safely. - [CLAUDE_CONFIG_DIR is set by something other than Devpit](https://devpit.zubyr.dev/docs/troubleshooting/claude-config-dir-set-by-something-else): Devpit says CLAUDE_CONFIG_DIR is set in this terminal by something else. What it changes for Claude Code, where it usually comes from and how to remove it. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/moving-from-claude-acc # MSI error 1603: a fatal error occurred during installation Windows Installer error 1603 is a general failure. Learn how to read the MSI log with msiexec /L*V, see how winget reports it, and how Devpit shows the failure. **Error 1603: A fatal error occurred during installation.** This is Windows Installer's general "the install failed" code. It does not say why. ## What it means Windows Installer (MSI) returns numbers when it finishes. Microsoft lists 1603 as `ERROR_INSTALL_FAILURE`: "A fatal error occurred during installation." When winget runs an MSI package and it fails, winget reports its own code, `0x8A150049` ("Running MSI install failed"), and its output can also show the installer's own exit code, such as "Installer failed with exit code: 1603". The real cause is inside the installer's log. ## Why it happens 1603 is a catch-all. Public reports in the winget project show it for very different causes, for example a package that needs administrator rights, or an old MSI file that is missing. Do not trust a guess. Read the log. ## How Devpit fixes or avoids it Devpit does not repair Windows Installer. In [Update Everything](https://devpit.zubyr.dev/docs/features/update-everything) it makes the failure easy to see: - A winget package that ends with `0x8A150049` shows as **msi install failed** in the summary, followed by the last line the installer printed. - Other winget codes without a special meaning show as `error 0x` plus the code, so you can search for it. - Winget's other MSI-related outcomes have their own plain words: "another install is running" for `0x8A150102`, "disk full" for `0x8A150105`, "no network" for `0x8A150107`. Devpit runs winget as a normal user, so a package that needs administrator rights is a first thing to check. See [winget 0x80073D28](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x80073d28). ## The manual fix 1. Make sure no other install or update is running. If you get 1618 instead, see [MSI error 1618](https://devpit.zubyr.dev/docs/troubleshooting/msi-error-1618-another-installation-in-progress). 2. Run the installer yourself with a verbose log. `/i` installs, and `/L*V` writes all information including verbose output to the file you name: ```text msiexec /i "C:\example.msi" /L*V "C:\package.log" ``` 3. Open `package.log` in a text editor and search for the word `error`. The lines around the first error say what failed. 4. Fix the cause the log names, then run the install again. If the log points at a missing file or a permission, try again from a terminal opened as administrator. ## Sources - [Microsoft: Windows Installer error codes (1603)](https://learn.microsoft.com/windows/win32/msi/error-codes) - [Microsoft: msiexec (logging options, /L*V)](https://learn.microsoft.com/windows-server/administration/windows-commands/msiexec) - [winget return codes (0x8A150049, 0x8A150102, 0x8A150105, 0x8A150107)](https://github.com/microsoft/winget-cli/blob/master/doc/windows/package-manager/winget/returnCodes.md) - [winget-cli issue #1143: silent install of an MSI package fails with 1603](https://github.com/microsoft/winget-cli/issues/1143) - [winget-cli issue #232: Installer failed with exit code 1603](https://github.com/microsoft/winget-cli/issues/232) - [UniGetUI issue #2742: update fails when the old MSI installer is missing (exit code 1603)](https://github.com/Devolutions/UniGetUI/issues/2742) ## Common questions ### What does exit code 1603 mean? It is the Windows Installer error ERROR_INSTALL_FAILURE, with the text A fatal error occurred during installation. It is a general code. It tells you the install failed, not why. The reason is in the installer log. ### How do I get the MSI log? Run the package yourself with msiexec /i and the /L*V option followed by a log file path, for example msiexec /i C:\example.msi /L*V C:\package.log. Then search the log for the word error. ## Related - [Update all your Windows apps and dev tools at once](https://devpit.zubyr.dev/docs/features/update-everything): Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. - [MSI error 1618: another installation is already in progress](https://devpit.zubyr.dev/docs/troubleshooting/msi-error-1618-another-installation-in-progress): Windows Installer error 1618 means another install holds the installer lock. Wait for it, retry, and see how winget and Devpit report this state. - [winget 0x8A150101: application is currently running](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a150101): Winget error 0x8A150101 means the app is running and cannot be replaced. Close it, retry, and see how Devpit marks the app as in use so you can retry. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/msi-error-1603-fatal-error-during-installation # MSI error 1618: another installation is already in progress Windows Installer error 1618 means another install holds the installer lock. Wait for it, retry, and see how winget and Devpit report this state. **Error 1618: Another installation is already in progress. Complete that installation before proceeding with this install.** Windows Installer only runs one install at a time. ## What it means Microsoft lists 1618 as `ERROR_INSTALL_ALREADY_RUNNING`. Windows Installer sets a lock (a mutex named `_MSIExecute`) while it processes an install. Two installations cannot run in the same process, so a new attempt returns 1618 while the lock is set. Winget has its own code for the same idea, `0x8A150102`: "Another installation is already in progress. Try again later." ## Why it happens - Another MSI installer or updater is running, maybe in the background. - Windows is installing an update. - A previous install is still finishing. - You started two installs or upgrades at the same time. ## How Devpit fixes or avoids it [Update Everything](https://devpit.zubyr.dev/docs/features/update-everything) runs one package-manager step at a time, so Devpit does not start two installs by itself. If something else on your PC holds the installer, the winget code `0x8A150102` shows in the summary as **another install is running**, and you can retry when the other install has ended. ## The manual fix 1. Wait a few minutes. If you started an installer, finish it or close it. 2. Check Windows Update in Settings for an update that is installing. 3. Run your command again. 4. If nothing at all is installing and it still fails, restart Windows and try again before you open other programs. ## Sources - [Microsoft: Windows Installer error codes (1618)](https://learn.microsoft.com/windows/win32/msi/error-codes) - [Microsoft: _MSIExecute Mutex](https://learn.microsoft.com/windows/win32/msi/-msiexecute-mutex) - [winget return codes (0x8A150102)](https://github.com/microsoft/winget-cli/blob/master/doc/windows/package-manager/winget/returnCodes.md) - [winget-cli issue #433: Installer failed with exit code 1618](https://github.com/microsoft/winget-cli/issues/433) - [winget-cli issue #376: Error 1618, cause and request for a clearer message](https://github.com/microsoft/winget-cli/issues/376) ## Common questions ### Why do I get 1618 when nothing seems to be installing? Windows Installer allows one installation at a time. Something else may be running in the background, for example another installer or an update. Winget-cli users have reported 1618 when an MSI installer was running in the background. Wait a few minutes and retry. ### Can I run two winget upgrades at once? It is safer not to. Two MSI installs cannot run at the same time. Devpit runs its package steps one after another for this reason. ## Related - [Update all your Windows apps and dev tools at once](https://devpit.zubyr.dev/docs/features/update-everything): Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. - [MSI error 1603: a fatal error occurred during installation](https://devpit.zubyr.dev/docs/troubleshooting/msi-error-1603-fatal-error-during-installation): Windows Installer error 1603 is a general failure. Learn how to read the MSI log with msiexec /L*V, see how winget reports it, and how Devpit shows the failure. - [winget 0x8A150101: application is currently running](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a150101): Winget error 0x8A150101 means the app is running and cannot be replaced. Close it, retry, and see how Devpit marks the app as in use so you can retry. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/msi-error-1618-another-installation-in-progress # Nerd Font icons show as boxes in Windows Terminal Icons look like empty boxes in Windows Terminal? Add a Nerd Font symbols fallback to font.face, or run devpit font install to do it for you in one step. If you see empty boxes where icons should be, the terminal's font has no glyph for those characters. ## What it means Every character is a picture in a font. Nerd Fonts add thousands of extra icons (folders, git branches, logos) in a private range of characters. If the font you use does not have them, the terminal has nothing to draw and shows a box. ## Why it happens Windows Terminal's default font is **Cascadia Mono**. It does not contain the Nerd Font icons, and no program can ask a terminal which fonts it has. That is why Devpit does not show Nerd Font icons unless you turn them on. ## How Devpit fixes or avoids it Devpit has three icon styles: `nerd` (opt-in), `unicode` (the default in a normal terminal) and `ascii` (plain). If you see boxes, you are most likely on the nerd style without the font. **Fix it in one step.** Run: ```powershell devpit font install ``` Or open Devpit and use **Settings**, **Icon font**. Devpit then: - Installs **Symbols Nerd Font Mono** for your user only. No administrator rights are needed. It downloads a pinned release and checks its SHA-256 checksum first. - Adds it to Windows Terminal as a **fallback** in the font list, so your own font is kept. - Saves a backup of your `settings.json` first (a copy ending in `.devpit-bak`) and writes the change safely. - Asks whether the icons render before it turns them on. Then **close all Windows Terminal windows and open one again**. Windows Terminal reads its font list once per process. Other commands: - `devpit font status` says whether the font is installed. - `devpit font remove` removes the font and undoes the Windows Terminal change. - `devpit --ascii` forces the plain style for one run. - The installer can skip the font. Use `-NoFont` (see [Getting started](https://devpit.zubyr.dev/docs/getting-started)). ## The manual fix 1. Install a Nerd Font, or the small **Symbols Only** font from the Nerd Fonts project. The project's own guide says that for font fallback you can use one of the `SymbolsOnly` fonts, and warns that scaling and placement of fallback symbols can be hit or miss. 2. Open `settings.json` in Windows Terminal. Select **Settings** in the dropdown menu while holding `Shift`. The stable release keeps it at `%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json`. 3. Put your font first and the symbols font second in `font.face`. The `face` property is inside the `font` object, and `defaults` applies to all profiles: ```json { "profiles": { "defaults": { "font": { "face": "Cascadia Mono, Symbols Nerd Font Mono" } } } } ``` 4. Save the file, close all Windows Terminal windows, and open it again. Comma-separated names in `face` were added in Windows Terminal 1.21. On an older version, use a full Nerd Font as the only `face` instead, for example the one you installed in step 1. ## Sources - [Windows Terminal 1.21 release notes: comma-separated font face names](https://github.com/microsoft/terminal/releases/tag/v1.21.1272.0) - [Microsoft: Windows Terminal profile appearance (font face, default Cascadia Mono)](https://learn.microsoft.com/windows/terminal/customize-settings/profile-appearance) - [Microsoft: Windows Terminal install (settings.json location)](https://learn.microsoft.com/windows/terminal/install#settings-json-file) - [Nerd Fonts: Option 7, font fallback with SymbolsOnly fonts](https://github.com/ryanoasis/nerd-fonts#option-7-font-fallback) - [Devpit icons notes](https://github.com/zubairbinshaukat/devpit/blob/main/docs/icons.md) ## Common questions ### Why does Windows Terminal show boxes instead of icons? The current font has no picture for that character, so the terminal draws a box. Windows Terminal's default font is Cascadia Mono, and it does not contain the Nerd Font icon characters. ### Do I need to replace my font? No. Windows Terminal accepts a comma-separated list of font names in font.face (since version 1.21). Put your normal font first and a Nerd Font symbols font second, and the terminal uses the second one only for the icons. ### How do I undo what Devpit changed? Run devpit font remove. It removes the font and undoes the Windows Terminal change. Before its first change Devpit also saves a backup of settings.json next to it with the ending .devpit-bak. ## Related - [Devpit settings, themes, icons and the never-touch list](https://devpit.zubyr.dev/docs/features/settings): Every Devpit setting explained, from themes and icons to usage stats, the never-touch list, dev ports and the icon font, and where the settings file lives. - [Get started with Devpit on Windows](https://devpit.zubyr.dev/docs/getting-started): Install Devpit with one PowerShell line, Scoop or a zip file, then take the first-launch tour and set up the icon font. - [EPERM: operation not permitted, rmdir (node_modules)](https://devpit.zubyr.dev/docs/troubleshooting/eperm-operation-not-permitted-rmdir): Fix EPERM and EBUSY errors when deleting node_modules on Windows: find the program that holds the files, close it, and delete the folder safely. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/nerd-font-icons-show-as-boxes-windows-terminal # Network discovery is turned off. Network computers and devices are not visible Fix 'Network discovery is turned off' on Windows 11, why it keeps turning off, and how to open a shared PC by its IP address without it. Windows shows this at the top of the **Network** folder in File Explorer. The full text is: "Network discovery is turned off. Network computers and devices are not visible. Please turn on network discovery in Network and Sharing Center." It means your PC is not looking for other PCs on the network, so the Network list stays empty. It does not mean the network is broken. ## What it means Network discovery is a setting that decides whether your PC can find other PCs and devices on the network, and whether they can find yours. Windows keeps this setting separately for **Private** and **Public** networks. Discovery only fills the list you browse. Opening a shared folder by its address does not need it. If you type `\\192.168.1.20\share` in the File Explorer address bar, Windows goes straight to that PC. ## Why it happens - **The network is set to Public.** Windows 11 marks **Public network** as "Recommended", so many networks are Public. Microsoft says that on a Public network your PC is hidden from other devices. On a Private network it is discoverable and can share files, and Microsoft says to use Private only when you know and trust the people and devices on it. - **Discovery is off for Private networks too.** Someone turned it off, or it was never turned on. - **A service it needs is not running.** Microsoft lists these services for network discovery: **DNS Client**, **Function Discovery Resource Publication**, **SSDP Discovery** and **UPnP Device Host**. Its File Explorer guide also names **Function Discovery Provider Host**. - **A firewall blocks it.** The Windows firewall needs the **Network discovery** feature allowed. A third-party firewall can block it too. If you turn discovery on and it switches back off after you save, Microsoft says the usual cause is one of the last two: a stopped service or a firewall. ## How Devpit fixes or avoids it Devpit does not change the network discovery setting. [Share Files](https://devpit.zubyr.dev/docs/features/share-files) does not need it. The receiving PC types the sharing PC's IP address, which is shown on the sharing PC's card, and Devpit lists the shared folders at that address. If the sharing PC's network is set to **Public**, Devpit asks before it switches it to **Private**, because Windows blocks file sharing on a Public network. When you stop sharing, Devpit puts it back. ## The manual fix ### 1. Set your own network to Private Do this only for a network you trust, such as your home Wi-Fi. 1. Open **Settings**, then **Network & internet**. 2. Choose **Wi-Fi** (or **Ethernet**), then the network you are connected to. 3. Under **Network profile type**, choose **Private network**. The other choice is **Public network (Recommended)**. ### 2. Turn on network discovery for Private networks 1. Open **Settings**, **Network & internet**, **Advanced network settings**, **Advanced sharing settings**. (Or type `manage advanced sharing settings` in Start.) 2. Under **Private networks**, turn on **Network discovery** and **File and printer sharing**. On older builds the same switches are in **Control Panel**, **Network and Internet**, **Network and Sharing Center**, **Advanced sharing settings**: select **Turn on network discovery**, then **Save changes**. ### 3. If the setting does not stay on 1. Press `Win`+`R`, type `services.msc` and press `Enter`. 2. Find each of these services and check that it is running: **DNS Client**, **Function Discovery Resource Publication**, **Function Discovery Provider Host**, **SSDP Discovery**, **UPnP Device Host**. For a stopped one, open it, set **Startup type** to **Automatic**, click **Start**, then **OK**. 3. Open **Control Panel**, **System and Security**, **Windows Defender Firewall**, then **Allow an app or feature through Windows Defender Firewall**. Click **Change settings**, tick **Network discovery** for **Private**, and click **OK**. 4. If you use another firewall or security suite, allow network discovery there too. 5. Turn discovery on again (step 2 above). Microsoft also says to restart the PC after you change the services. ### 4. Or skip the list If you know the other PC's IP address, you do not need the list at all. Type `\\IP\sharename` in the File Explorer address bar. If that fails with "The network path was not found", see [system error 53](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found). If it fails with 0x80004005, see [Windows cannot access \\\\PC](https://devpit.zubyr.dev/docs/troubleshooting/windows-cannot-access-0x80004005). ## Sources - [Microsoft: Can't turn on Network Discovery (services and firewall)](https://learn.microsoft.com/troubleshoot/windows-client/networking/cannot-turn-on-network-discovery) - [Microsoft: Can't access shared folders from File Explorer (Function Discovery services, Advanced sharing settings)](https://learn.microsoft.com/troubleshoot/windows-client/networking/cannot-access-shared-folder-file-explorer) - [Microsoft: File sharing over a network in Windows](https://support.microsoft.com/windows/file-sharing-over-a-network-in-windows-b58704b2-f53a-4b82-7bc1-80f9994725bf) - [Microsoft: Essential network settings and tasks in Windows (public and private networks)](https://support.microsoft.com/windows/essential-network-settings-and-tasks-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9) ## Common questions ### Do I need network discovery to copy files from another PC? No. Network discovery only fills the Network list in File Explorer. If you type the address of the share, for example \\192.168.1.20\share, Windows connects to it directly without the list. ### Why does network discovery keep turning itself off? Windows keeps one set of sharing settings for Private networks and one for Public networks. If your Wi-Fi is set to Public, the Public settings apply, and there network discovery is normally off. Set the network you trust to Private and turn discovery on under Private. ### Is it safe to turn on network discovery? On your own home or office network that you trust, it is normal. On a cafe, hotel or airport Wi-Fi, leave the network as Public so your PC is not visible to strangers. ## Related - [Copy big folders between two PCs on your network](https://devpit.zubyr.dev/docs/features/share-files): Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. - [System error 53: The network path was not found](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found): Fix Windows 'System error 53. The network path was not found' and error 0x80070035 when you open a shared folder: check reachability, sharing, services. - [Windows cannot access \\PC: error 0x80004005 Unspecified error](https://devpit.zubyr.dev/docs/troubleshooting/windows-cannot-access-0x80004005): Fix 'Windows cannot access \\PC' with error 0x80004005 on a shared folder: get the real error number with net use, then apply the right fix. - [Share a folder on Windows 11 with another PC](https://devpit.zubyr.dev/docs/blog/share-a-folder-on-windows-11): Share a folder between two PCs on the same network in Windows 11, step by step: Private network, sharing settings, a real account, permissions and 24H2. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/network-discovery-is-turned-off # npm ERR! code EACCES: permission denied Fix npm ERR! code EACCES on Windows: check the npm prefix folder, change it to a folder you own, and see how Devpit shows a failed global npm update. **npm ERR! code EACCES** means npm was denied permission to read, write or create something in a folder. ## What it means `EACCES` is a system error. Node describes it as "an attempt was made to access a file in a way forbidden by its file access permissions". The error normally names the path it could not use. Read that path first. It is the whole clue. ## Why it happens On Windows the most common causes are: - A global install (`npm install -g`) whose npm prefix folder is one your user cannot write to, for example a folder that needs administrator rights. - A project folder that is in a protected place, or owned by another user or by an administrator session. - Another program that holds the file. That usually shows as EPERM or EBUSY, see [EPERM: operation not permitted](https://devpit.zubyr.dev/docs/troubleshooting/eperm-operation-not-permitted-rmdir). By default, npm's global folder (the `prefix`) on Windows is `%AppData%\npm`, a folder in your user profile. If yours points somewhere else, check it. ## How Devpit fixes or avoids it [Update Everything](https://devpit.zubyr.dev/docs/features/update-everything) can run `npm update -g` as one of its steps. Devpit runs it as your normal user and does not raise its own rights, so a global folder that needs administrator rights will fail. That step then shows as failed in the summary with the last line npm printed, so you can see the path npm complained about. Devpit does not change your npm settings. ## The manual fix 1. Find your global folder: ```powershell npm config get prefix ``` 2. Look at the path. If it is `%AppData%\npm` (for example `C:\Users\you\AppData\Roaming\npm`) it should be writable. Then read the path named in the error, because the problem is somewhere else. 3. If it points to a protected folder, set it to a folder you own. `npm config set` saves the value: ```powershell npm config set prefix "$env:APPDATA\npm" ``` 4. On Windows npm links the commands of global packages directly into the prefix folder. Make sure that folder is in your `PATH`, then open a new terminal. 5. Run the install again. Do not fix it by running everything as administrator unless you are only testing. If the error is about a project folder, move the project to a folder in your user profile. ## Sources - [Node.js: Common system errors (EACCES)](https://nodejs.org/api/errors.html#common-system-errors) - [npm docs: folders (prefix, global installs and executables on Windows)](https://docs.npmjs.com/cli/configuring-npm/folders) - [npm docs: npm config (get, set)](https://docs.npmjs.com/cli/commands/npm-config) - [npm docs: Resolving EACCES permissions errors when installing packages globally](https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally/) ## Common questions ### Should I run npm as administrator to fix EACCES? It can make one command pass, but it is not a good habit. Files created as administrator can cause more permission problems later. Prefer a global folder that your own user account owns. ### Where does npm install global packages on Windows? By default the npm prefix on Windows is %AppData%\npm. Global packages go into a node_modules folder under the prefix, and their commands are linked directly into the prefix folder, so the prefix must be on your PATH. ## Related - [Update all your Windows apps and dev tools at once](https://devpit.zubyr.dev/docs/features/update-everything): Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. - [EPERM: operation not permitted, rmdir (node_modules)](https://devpit.zubyr.dev/docs/troubleshooting/eperm-operation-not-permitted-rmdir): Fix EPERM and EBUSY errors when deleting node_modules on Windows: find the program that holds the files, close it, and delete the folder safely. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/npm-err-code-eacces # Permission denied (publickey) Fix git and SSH 'Permission denied (publickey)' on Windows: use the git user, check that a key is loaded, and add the public key to GitHub. **Permission denied (publickey)** means the server closed the door because none of the keys your SSH client offered is accepted. ## What it means Your computer tried to log in with a key pair. The server looked at the public keys it knows for your account and found no match. GitHub's guide says the most common reasons are: a wrong server, a wrong user name, no key in use, or a public key that is not attached to your account. ## Why it happens - You used your own username. It must be `git`: `git@github.com`. - SSH could not find a private key file, so it offered nothing. - The key exists, but its public half was never added to your GitHub account. - You created the key with `sudo` or as another user, then ran Git as someone else. Then you are not using the same keys. ## How Devpit fixes or avoids it In Devpit, SSH keys for GitHub live under **Accounts**, on the **GitHub** row. See [Git and GitHub accounts](https://devpit.zubyr.dev/docs/features/accounts-git-and-github#generate-an-ssh-key). - **Push with an SSH key** creates an ed25519 key with `ssh-keygen` in your `.ssh` folder, with its own file name per account, and shows the public half so you can paste it into GitHub. - It never overwrites an existing key. If a file is already there, it stops. - It can use that key for one folder only (`core.sshCommand` with `IdentitiesOnly=yes`), so the right GitHub account is used there. - The key has an empty passphrase (Devpit runs `ssh-keygen` with an empty `-N`). Devpit does not upload the key to GitHub and does not load it into the ssh-agent. Do those two steps below. ## The manual fix 1. Test the connection with the `git` user and verbose output (`-v`). It shows which key files SSH tried: ```powershell ssh -vT git@github.com ``` 2. Read the output. "identity file ... type -1" and "Trying private key" mean SSH found no key file. Lines that say "Offering public key" mean it found one. 3. If there is no key, use **Push with an SSH key** in Devpit, or run ssh-keygen yourself: ```powershell ssh-keygen -t ed25519 -C "your_email@example.com" ``` 4. Make sure the ssh-agent is running and has your key. In a PowerShell window opened as administrator: ```powershell Get-Service -Name ssh-agent | Set-Service -StartupType Manual Start-Service ssh-agent ``` Then, in a normal window, add the private key (use your own user name in the path): ```powershell ssh-add c:/Users/YOU/.ssh/id_ed25519 ``` 5. Add the public key (the `.pub` file, for example `id_ed25519.pub`) to your GitHub account in your account settings, in the SSH keys section. GitHub's guide "Adding a new SSH key to your GitHub account" shows each click. 6. Test again. GitHub answers with "Hi USERNAME! You've successfully authenticated...": ```powershell ssh -T git@github.com ``` 7. If your key has another file name, tell SSH with `-i`: `ssh -i ~/.ssh/KEY-FILE -vT git@github.com`. Do not use `sudo` or administrator rights with Git for this. Keys made with elevated rights are not the keys your normal account uses. ## Sources - [GitHub Docs: Error: Permission denied (publickey)](https://docs.github.com/authentication/troubleshooting-ssh/error-permission-denied-publickey) - [GitHub Docs: Generating a new SSH key and adding it to the ssh-agent](https://docs.github.com/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent) - [GitHub Docs: Adding a new SSH key to your GitHub account](https://docs.github.com/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account) - [GitHub Docs: Testing your SSH connection](https://docs.github.com/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection) - [Devpit source: internal/gitssh/keygen.go](https://github.com/zubairbinshaukat/devpit/blob/main/internal/gitssh/keygen.go) ## Common questions ### Which username do I use for SSH to GitHub? Always git. All connections, including the ones for remote URLs, must be made as the git user. If you connect with your GitHub username, the connection fails with Permission denied (publickey). ### Does Devpit add my key to GitHub or to the ssh-agent? No. Devpit creates the key pair and shows the public key for you to copy. You paste the public key into your GitHub account settings yourself, and you load the private key into the ssh-agent if you use one. ### Does the key Devpit creates have a passphrase? No. Devpit runs ssh-keygen with an empty passphrase. Anyone who can read the private key file can use the key, so keep the .ssh folder private. ## Related - [A different Git and GitHub account per folder](https://devpit.zubyr.dev/docs/features/accounts-git-and-github): Commit with your work email in C:\Work and push as the right GitHub account, with gh, HTTPS or an SSH key. Devpit shows the exact Git lines it writes. - [git: Please tell me who you are](https://devpit.zubyr.dev/docs/troubleshooting/git-please-tell-me-who-you-are): Git says 'Please tell me who you are' when user.name and user.email are not set. Set them with git config --global, or set them per folder in Devpit's Accounts. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/permission-denied-publickey # robocopy exit codes: what 0, 1, 2, 3, 8 and 16 mean Robocopy exit codes are a bitmask. Codes 0 to 7 mean no failure, 8 and above mean a failure. See the full table for 1, 2, 4, 8 and 16, and how to read them. **Robocopy exit codes are not pass or fail.** A code from **0 to 7** means the copy had **no failure**. A code of **8 or more** means **at least one failure**. ## What it means Robocopy returns a number when it ends. Each bit of that number says something different, and bits can be added together. This is why you see codes like 3 or 7. Microsoft's note is short: any value equal to or greater than 8 indicates that there was at least one failure during the copy operation. ## The bit table | Bit | Meaning if set | | --- | --- | | 1 | One or more files were copied successfully (new files arrived). | | 2 | Extra files or directories exist in the destination that are not in the source. | | 4 | Some files or directories are mismatched. Look at the log. | | 8 | Some files or directories could not be copied. Copy errors happened and the retry limit was used up. | | 16 | Serious error. Robocopy copied no files. Either a usage error, or not enough access on the source or destination. | ## Common codes | Code | What happened | Failure? | | --- | --- | --- | | 0 | Nothing was copied. The files already exist in the destination, so the copy was skipped. No mismatch. | No | | 1 | All files were copied successfully. | No | | 2 | Extra files exist in the destination. Nothing was copied. | No | | 3 | Some files were copied, and extra files exist (1 + 2). | No | | 4 | Mismatched files or directories were found. | No | | 5 | Some files were copied and some were mismatched (1 + 4). | No | | 6 | Extra and mismatched files exist. Nothing was copied. | No | | 7 | Files were copied, and there were mismatches and extra files (1 + 2 + 4). | No | | 8 | Several files did not copy. | Yes | | 9 to 15 | Bit 8 plus a mix of bits 1, 2 and 4. Some files failed, and the rest of the digits say what else happened. | Yes | | 16 | Serious error. Nothing was copied. | Yes | Codes of 16 and above (16 plus other bits) also mean a serious error. A code above 7 always needs a look at the log. ## How Devpit fixes or avoids it Only [Share Files](https://devpit.zubyr.dev/docs/features/share-files) runs robocopy. It copies big folders between two PCs with live progress, automatic retry and resume. It reads robocopy's log, so it works in any Windows language. At the end it shows a clear "Done", or a list of the files that failed with a reason for each, so you do not have to read exit codes. It uses `/E /XJ /XO /MT:16 /Z /R:3 /W:5`. `/XO` keeps a file that is newer on the receiving PC instead of overwriting it with an older copy, and it never uses `/MIR` or `/PURGE`, so nothing on the receiving PC is ever deleted. ## The manual fix 1. Read the code robocopy left behind. In PowerShell: ```powershell $LASTEXITCODE ``` 2. Write a log so you can read what happened. `/LOG:` writes the status to a file, and `/TEE` also shows it on screen: ```text robocopy C:\src D:\dst /E /LOG:C:\copy.log /TEE ``` 3. If the code is 8 or more, open the log and search for `ERROR`. Fix the named files or folders and run the same command again. Robocopy skips files that are already the same. 4. For unreliable networks, `/Z` copies in restartable mode, so an interrupted file can pick up where it left off. `/R:n` sets how many times to retry a failed copy (the default is 1,000,000) and `/W:n` sets the wait between retries in seconds (the default is 30): ```text robocopy C:\src \\pc2\share /E /Z /R:5 /W:10 ``` 5. In a script, test for failure with a code of 8 or more, not for non-zero. ## Sources - [Microsoft: robocopy (options and exit codes)](https://learn.microsoft.com/windows-server/administration/windows-commands/robocopy) - [Microsoft: Return codes used by the Robocopy utility](https://learn.microsoft.com/troubleshoot/windows-server/backup-and-storage/return-codes-used-robocopy-utility) - [SS64: Robocopy exit codes (bit values 1, 2, 4, 8 and 16)](https://ss64.com/nt/robocopy-exit.html) - [Microsoft: about_Automatic_Variables ($LASTEXITCODE)](https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_automatic_variables) ## Common questions ### Is robocopy exit code 1 an error? No. Exit code 1 means all files were copied successfully. Codes from 0 to 7 mean no failure. Only a code of 8 or more means at least one failure. ### Why does my script think robocopy failed when it copied everything? Many tools treat any non-zero exit code as a failure. Robocopy returns 1, 2, 3 and so on for success cases. In a script, test for a code of 8 or more instead of a non-zero code. ### What does exit code 16 mean? A serious error. Robocopy did not copy any files. It is either a usage error, such as a wrong option or path, or an error caused by not having enough access on the source or destination folders. ## Related - [The source file name(s) are larger than is supported by the file system](https://devpit.zubyr.dev/docs/troubleshooting/source-file-names-are-larger-than-supported): Windows can't delete or move a folder because the path is too long. Learn about the 260 character limit, LongPathsEnabled, rd /s /q and the robocopy /MIR trick. - [System error 53: The network path was not found](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found): Fix Windows 'System error 53. The network path was not found' and error 0x80070035 when you open a shared folder: check reachability, sharing, services. - [Copy big folders between two PCs on your network](https://devpit.zubyr.dev/docs/features/share-files): Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/robocopy-exit-codes # Scoop: "is held to version" and "still running" Why scoop update skips an app: it is held with scoop hold, or it is still running. See the exact messages, how to fix each, and how Devpit shows them. Scoop skipped an app on purpose. It prints one of two messages: - `'app' is held to version 1.2.3` - `The following instances of "app" are still running. Close them and try again.` ## What it means **Held.** You (or a script) ran `scoop hold `. Scoop's own description is "Hold an app to disable updates". `scoop update` then leaves it at its current version. `scoop status` shows "Held package" in its Info column. **Still running.** Scoop checks whether any running process comes from the app's folder. If one does, it stops for that app and reports "Running process detected, skip updating." It cannot replace files that are in use. ## Why it happens - You held the app on purpose to keep a working version, and forgot. - The app, or a helper of it, is open. This includes background processes and tray apps. - A terminal or an editor started a tool from Scoop's folder for that app and is still using it. ## How Devpit fixes or avoids it In [Update Everything](https://devpit.zubyr.dev/docs/features/update-everything), Devpit reads `scoop status` before it starts: - A held app is listed as **held** and is not ticked, so Devpit never tries to update it. - If Scoop still says "is held to version", the row shows **held**. - If Scoop says an app "is still running", the row shows **in use, close it and retry**. Devpit does not run `scoop unhold` for you. Holding is your decision. ## The manual fix For a held app: 1. See what is held. `scoop status` lists apps and shows "Held package" in the Info column: ```powershell scoop status ``` 2. Release the hold, then update the app: ```powershell scoop unhold scoop update ``` Replace `` with the name, for example `git`. For a globally installed app, add `-g` (holding a global app needs administrator rights). For an app that is still running: 1. Close the app completely, including its window in the system tray. 2. Run `scoop update ` again. Scoop also has a setting to ignore running processes. It prints "Scoop is configured to ignore this condition." when that setting is on. Leave it off unless you know why you need it, because updating files in use can break the app. ## Sources - [Scoop source: scoop-hold.ps1](https://github.com/ScoopInstaller/Scoop/blob/master/libexec/scoop-hold.ps1) - [Scoop source: scoop-unhold.ps1](https://github.com/ScoopInstaller/Scoop/blob/master/libexec/scoop-unhold.ps1) - [Scoop source: scoop-update.ps1 ("is held to version", "Running process detected")](https://github.com/ScoopInstaller/Scoop/blob/master/libexec/scoop-update.ps1) - [Scoop source: scoop-status.ps1 ("Held package")](https://github.com/ScoopInstaller/Scoop/blob/master/libexec/scoop-status.ps1) - [Scoop source: lib/install.ps1 ("are still running. Close them and try again")](https://github.com/ScoopInstaller/Scoop/blob/master/lib/install.ps1) ## Common questions ### Why does scoop update exit with success when it skipped my app? Scoop prints a warning or error message and moves on. It can exit with code 0 even when it refused to touch a held or running app. Devpit therefore reads Scoop's message text as well as the exit code. ### How do I update a held Scoop app? Run scoop unhold followed by the app name, then scoop update followed by the app name. Use scoop hold to freeze it again later. ## Related - [Update all your Windows apps and dev tools at once](https://devpit.zubyr.dev/docs/features/update-everything): Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. - [winget upgrade --all does not upgrade some apps](https://devpit.zubyr.dev/docs/troubleshooting/winget-upgrade-all-not-upgrading): Why winget upgrade --all skips apps: unknown versions, pins and packages that need explicit targeting. Winget's own messages, flags, and Devpit's view. - [winget 0x8A150101: application is currently running](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a150101): Winget error 0x8A150101 means the app is running and cannot be replaced. Close it, retry, and see how Devpit marks the app as in use so you can retry. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/scoop-is-held-to-version-still-running # The source file name(s) are larger than is supported by the file system Windows can't delete or move a folder because the path is too long. Learn about the 260 character limit, LongPathsEnabled, rd /s /q and the robocopy /MIR trick. Windows adds "Try moving to a location which has a shorter path name, or try renaming to shorter name(s) before attempting this operation." This is Windows saying a path is too long to work with. ## What it means Windows has an old limit called `MAX_PATH`. It is 260 characters for a full path. That count includes the drive letter, the colon, the backslashes, the name parts and one hidden ending character. A folder like `node_modules` nests packages inside packages. The path can pass 260 characters easily, and then File Explorer and many programs cannot open, move or delete the files inside. ## Why it happens - Deep folders, for example `node_modules` inside `node_modules` inside a project that already sits in a long path. - Cloning a repo with long file names into a folder that itself has a long name. Microsoft names this exact case in its own guide. - A program that was written before long paths were supported. Windows 10 version 1607 and later can remove the limit, but two things must be true. The registry value `LongPathsEnabled` must be `1`, and the program must declare that it supports long paths. Many do not, so turning the setting on is not a full fix. ## How Devpit fixes or avoids it [Free Up Disk Space](https://devpit.zubyr.dev/docs/features/free-up-disk-space) removes folders with its own code, not with Explorer. If a delete fails because the path is over the limit, Devpit tries again with the extended-length form of the path, the one that starts with `\\?\`. That form tells Windows to skip the 260 character check. If something still cannot be removed, Devpit does not hide it. It puts the folder in the summary with a reason so you can act. ## The manual fix Try these from the simplest to the most technical. **1. Shorten the path.** Rename a parent folder to a shorter name, or move the folder up to something like `C:\p`. Then delete it. **2. Delete it with `rmdir`.** `/s` removes the whole tree and `/q` skips the confirmation: ```text rd /s /q "C:\path\to\node_modules" ``` `rd` is the short name of `rmdir`. Check the path first, because `/q` does not ask. **3. Turn on long paths.** Run this in PowerShell as administrator, then restart Windows if programs still fail. Microsoft says a restart might be needed because some processes started before the key was set: ```powershell New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" ` -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force ``` **4. Empty the folder with robocopy.** `/MIR` mirrors a source into a destination and deletes destination files that are not in the source. If the source is an empty folder, everything in the destination is deleted: ```text mkdir C:\empty robocopy C:\empty "C:\path\to\node_modules" /MIR rmdir "C:\path\to\node_modules" rmdir C:\empty ``` The first path is the empty source and the second is the folder to empty. If you swap them, robocopy copies instead of deleting. Microsoft's pages describe `/MIR` but do not describe this delete trick by name. It is a widely used use of that documented behaviour. When robocopy ends, its exit code tells you how it went: see [robocopy exit codes](https://devpit.zubyr.dev/docs/troubleshooting/robocopy-exit-codes). ## Sources - [Microsoft: Maximum path length limitation](https://learn.microsoft.com/windows/win32/fileio/maximum-file-path-limitation) - [Microsoft: rmdir](https://learn.microsoft.com/windows-server/administration/windows-commands/rmdir) - [Microsoft: robocopy (/MIR, /PURGE)](https://learn.microsoft.com/windows-server/administration/windows-commands/robocopy) - [Microsoft Q&A: the error text and the shorter path advice](https://learn.microsoft.com/en-us/answers/questions/2441993/the-source-file-name-s-are-larger-than-is-supporte) - [Jeff Geerling: deleting a directory with robocopy when the source path is too long](https://www.jeffgeerling.com/blog/2016/deleting-directory-windows-10-source-path-too-long-using-robocopy/) ## Common questions ### What is the maximum path length on Windows? In the classic Windows API the limit is MAX_PATH, which is 260 characters including the drive letter and a final null character. Paths in the extended form that starts with \\?\ can be about 32,767 characters. ### Does turning on LongPathsEnabled fix it for every program? No. Microsoft says the registry value only affects applications that have opted in with a longPathAware entry in their manifest. Some programs will still hit the 260 character limit. ### Is the robocopy empty folder trick safe? It is safe if you type the folders in the right order. The first folder is the empty source and the second is the folder you want to empty. If you swap them you copy files instead of deleting them, so read the command twice. ## Related - [Free up disk space and delete node_modules on Windows](https://devpit.zubyr.dev/docs/features/free-up-disk-space): Find and delete node_modules, build folders, caches and other developer junk safely, with a preview, risk labels and a confirmation before anything goes. - [EPERM: operation not permitted, rmdir (node_modules)](https://devpit.zubyr.dev/docs/troubleshooting/eperm-operation-not-permitted-rmdir): Fix EPERM and EBUSY errors when deleting node_modules on Windows: find the program that holds the files, close it, and delete the folder safely. - [robocopy exit codes: what 0, 1, 2, 3, 8 and 16 mean](https://devpit.zubyr.dev/docs/troubleshooting/robocopy-exit-codes): Robocopy exit codes are a bitmask. Codes 0 to 7 mean no failure, 8 and above mean a failure. See the full table for 1, 2, 4, 8 and 16, and how to read them. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/source-file-names-are-larger-than-supported # The specified network name is no longer available (error 64) A big copy from a shared folder stopped with 'The specified network name is no longer available' (error 64, 0x80070040). Why it happens and how to resume. A copy from a shared folder stopped in the middle with **The specified network name is no longer available.** File Explorer may show it as **Error 0x80070040**. In a command it is **System error 64**. Your PC had a working connection to the share, and then it broke. The fix is to find out why, then carry on without starting over. ## What it means Error 64 is `ERROR_NETNAME_DELETED`, with the text "The specified network name is no longer available." `0x80070040` is the same error: `0x8007` marks a Windows error, and `0x40` is 64. It is different from [system error 53](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found). With 53 Windows never reached the share. With 64 it was connected, and the connection went away. ## Why it happens The connection to the other PC dropped during the copy. Common reasons: - The Wi-Fi dropped or roamed to another access point for a moment. - The other PC went to sleep, restarted, or lost power. - The share was removed on the other PC, or the program that made it was closed. - A network cable was unplugged, or a VPN connected or disconnected. On Microsoft's Q&A forum, answers for this error also point to firewalls that cut idle or long connections and to security software, and suggest checking the event logs on both PCs for network errors at that time. ## How Devpit fixes or avoids it [Share Files](https://devpit.zubyr.dev/docs/features/share-files) expects this error during a long copy. - It keeps both PCs awake: the sharing PC while it shares, and the receiving PC while it copies. - When the other PC stops answering, Devpit shows "The network dropped", waits, and tries again with a growing pause. When the PC answers, it carries on by itself, as long as Devpit stays open. - If you close Devpit or stop the copy, open **Share Files** again and choose the resume entry. Finished files are skipped and a half-copied file carries on, because Devpit copies with robocopy in restartable mode (`/Z`). ## The manual fix 1. **Check the other PC.** Is it awake, on the same network, and still sharing? Open the share again in File Explorer to see. 2. **Keep both PCs awake** for the copy. In Command Prompt, this sets sleep to never while plugged in: ```text powercfg /change standby-timeout-ac 0 ``` After the copy, set it back, for example to 30 minutes: `powercfg /change standby-timeout-ac 30`. 3. **Use a cable if you can.** A wired connection does not roam or drop like Wi-Fi. See [connect two PCs with an Ethernet cable](https://devpit.zubyr.dev/docs/blog/direct-ethernet-cable-between-two-pcs). 4. **Carry on with robocopy** instead of starting over in File Explorer. On the receiving PC: ```text robocopy \\192.168.1.20\share D:\Copy /E /Z /R:5 /W:10 ``` Robocopy skips files that are already the same on both sides. With `/Z`, a file that was cut off can continue. If the network drops again, run the same command again. See [resume an interrupted file copy](https://devpit.zubyr.dev/docs/blog/resume-interrupted-file-copy-windows) for the full method, and [robocopy exit codes](https://devpit.zubyr.dev/docs/troubleshooting/robocopy-exit-codes) to read the result. 5. **If it happens at the same point every time**, test the port on the other PC with `Test-NetConnection 192.168.1.20 -Port 445` in PowerShell, and check a firewall or security program on either PC. ## Sources - [Microsoft: System error codes 0 to 499 (ERROR_NETNAME_DELETED, 64)](https://learn.microsoft.com/windows/win32/debug/system-error-codes--0-499-) - [Microsoft Q&A: The specified network name is no longer available (firewalls, security software, event logs)](https://learn.microsoft.com/answers/questions/5698093/the-specified-network-name-is-no-longer-available) - [Microsoft: robocopy (/Z restartable mode, /R, /W)](https://learn.microsoft.com/windows-server/administration/windows-commands/robocopy) - [Microsoft: powercfg command-line options (/change standby-timeout-ac)](https://learn.microsoft.com/windows-hardware/design/device-experiences/powercfg-command-line-options) - [Microsoft: Test-NetConnection](https://learn.microsoft.com/powershell/module/nettcpip/test-netconnection) ## Common questions ### Is error 0x80070040 the same as error 64? Yes. Windows wraps a Win32 error in a code that starts with 0x8007. The last part, 0x40, is 64 in decimal, which is ERROR_NETNAME_DELETED, The specified network name is no longer available. ### Did I lose the files that were already copied? No. Files that finished copying stay on your disk. Only the file that was being copied at that moment may be incomplete. A copy tool that skips finished files, such as robocopy, carries on from there. ### Can a PC going to sleep cause error 64? Yes. A PC that sleeps stops answering on the network, so the connection to its shared folder breaks in the middle of the copy. Keep both PCs awake during a long copy. ## Related - [Copy big folders between two PCs on your network](https://devpit.zubyr.dev/docs/features/share-files): Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. - [Resume an interrupted file copy on Windows](https://devpit.zubyr.dev/docs/blog/resume-interrupted-file-copy-windows): A big copy stopped halfway? File Explorer cannot resume it. Carry on where it stopped with robocopy /Z, BITS for one huge file, or Devpit Share Files. - [robocopy exit codes: what 0, 1, 2, 3, 8 and 16 mean](https://devpit.zubyr.dev/docs/troubleshooting/robocopy-exit-codes): Robocopy exit codes are a bitmask. Codes 0 to 7 mean no failure, 8 and above mean a failure. See the full table for 1, 2, 4, 8 and 16, and how to read them. - [System error 53: The network path was not found](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found): Fix Windows 'System error 53. The network path was not found' and error 0x80070035 when you open a shared folder: check reachability, sharing, services. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/specified-network-name-no-longer-available # System error 1219: multiple connections by the same user Fix Windows system error 1219, 'Multiple connections to a server or shared resource by the same user', by disconnecting old connections with net use. **System error 1219: Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. Disconnect all previous connections to the server or shared resource and try again.** ## What it means Error 1219 is `ERROR_SESSION_CREDENTIAL_CONFLICT`. Windows already has a connection to that server under one user name. You tried to connect again with a different user name. Windows does not allow that. ## Why it happens - You opened the shared folder before with one account (for example your own), and now you use another account for the same PC. - A mapped drive to that server is still connected with old credentials. - You changed the password or account on the other PC, but your PC still holds the old connection. ## How Devpit fixes or avoids it When you copy with [Share Files](https://devpit.zubyr.dev/docs/features/share-files) and Windows answers with error 1219, Devpit shows "Already signed in to that PC as someone else". Press `d` to close the old connections to that one PC, and Devpit tries again. It does not touch connections to other PCs. [Share Files](https://devpit.zubyr.dev/docs/features/share-files) also creates a temporary login just for the share, with its own user name, so your own Windows password is never used. If your PC already has an older connection to the same PC under a different name, Windows can still show 1219. Press `d` in Devpit, or disconnect the old one with the steps below, then connect again. ## The manual fix 1. Close any File Explorer window that shows the share. 2. Disconnect all connections to shared resources on your PC. Open Command Prompt and run: ```text net use * /delete ``` This disconnects active or remembered shared resources on the local computer. It does not delete any files. To see other options, such as removing only one connection, run `net help use`. 3. Open the share again, for example `\\192.168.1.20\share` in the File Explorer address bar, and sign in with the user name and password of the share. Use your own IP address and share name. 4. If the sign in fails with "The user name or password is incorrect", see [system error 1326](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1326-user-name-or-password-incorrect). ## Sources - [Microsoft: System error codes 1000 to 1299 (ERROR_SESSION_CREDENTIAL_CONFLICT, 1219)](https://learn.microsoft.com/windows/win32/debug/system-error-codes--1000-1299-) - [Microsoft: Troubleshoot SMB, disconnecting all shared resources with Net Use * /delete](https://learn.microsoft.com/troubleshoot/windows-server/networking/troubleshoot-smb-guidance) ## Common questions ### Will net use * /delete remove my files? No. It only disconnects network connections and mapped drives on your PC. Files on the other computer are not touched. Microsoft describes it as a command to disconnect active or remembered shared resources on a local computer. ### Why does Windows allow only one user name per server? Microsoft's error text says multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. You must disconnect the old connection first, then connect again. ## Related - [Copy big folders between two PCs on your network](https://devpit.zubyr.dev/docs/features/share-files): Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. - [System error 1326: user name or password is incorrect](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1326-user-name-or-password-incorrect): Fix Windows system error 1326, 'The user name or password is incorrect', when you open a shared folder: check the account on the sharing PC and sign in again. - [System error 53: The network path was not found](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found): Fix Windows 'System error 53. The network path was not found' and error 0x80070035 when you open a shared folder: check reachability, sharing, services. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/system-error-1219-multiple-connections # System error 1326: user name or password is incorrect Fix Windows system error 1326, 'The user name or password is incorrect', when you open a shared folder: check the account on the sharing PC and sign in again. **System error 1326: The user name or password is incorrect.** The other PC was found, and it did not accept the sign in. ## What it means Error 1326 is `ERROR_LOGON_FAILURE`, with the text "The user name or password is incorrect." Compare it with error 53: with 53 Windows cannot find the PC ([system error 53](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found)). With 1326 it found the PC and the login failed. ## Why it happens - A typo in the user name or password. - The account does not exist on the sharing PC, or is not active. Microsoft says an account that is not active cannot access resources on the computer. - You typed a user name from your own PC, but the sharing PC does not know that name. - An old connection to the same PC is still open with different credentials. That can also show [error 1219](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1219-multiple-connections). ## How Devpit fixes or avoids it [Share Files](https://devpit.zubyr.dev/docs/features/share-files) creates a **temporary login** for each share, so you never have to use your own Windows password. The sharing PC shows a card with the IP, share name, user name and password. Type them on the receiving PC exactly as shown. Stopping the share removes the login, and it is also removed when Devpit quits. The login expires by itself after 48 hours if nothing removed it. When Windows refuses a sign-in, Devpit says "The user name or password is wrong" and asks again. If the user name looks like a Microsoft account e-mail, Devpit tells you to type it as `MicrosoftAccount\you@example.com` and to use the account password, not a PIN. ## The manual fix 1. On the sharing PC, list the accounts. In Command Prompt: ```text net user ``` Confirm that the user name you use exists. To see details for one account, add its name: `net user username`. 2. On the receiving PC, close File Explorer windows that show the share and disconnect old connections: ```text net use * /delete ``` 3. Open the share again, for example `\\192.168.1.20\share`, and type the user name and password slowly. Copy and paste them if you can. 4. If you reset the password on the sharing PC, use the new one. 5. If you see a message about "unauthenticated guest access", see [the Windows 11 24H2 page](https://devpit.zubyr.dev/docs/troubleshooting/guest-access-blocked-windows-11-24h2). ## Sources - [Microsoft: System error codes 1300 to 1699 (ERROR_LOGON_FAILURE, 1326)](https://learn.microsoft.com/windows/win32/debug/system-error-codes--1300-1699-) - [Microsoft: net user](https://learn.microsoft.com/windows-server/administration/windows-commands/net-user) - [Microsoft: Troubleshoot SMB, Net Use * /delete](https://learn.microsoft.com/troubleshoot/windows-server/networking/troubleshoot-smb-guidance) ## Common questions ### Does error 1326 mean the other PC cannot be reached? No. If the PC could not be found you would see system error 53, The network path was not found. Error 1326 means the PC answered and refused the sign in. ### Can a disabled account cause a sign in failure? Microsoft's net user documentation says that if a user account is not active, the user can't access resources on the computer. Check that the account on the sharing PC is enabled. ## Related - [Copy big folders between two PCs on your network](https://devpit.zubyr.dev/docs/features/share-files): Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. - [System error 1219: multiple connections by the same user](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1219-multiple-connections): Fix Windows system error 1219, 'Multiple connections to a server or shared resource by the same user', by disconnecting old connections with net use. - [System error 53: The network path was not found](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found): Fix Windows 'System error 53. The network path was not found' and error 0x80070035 when you open a shared folder: check reachability, sharing, services. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/system-error-1326-user-name-or-password-incorrect # System error 53: The network path was not found Fix Windows 'System error 53. The network path was not found' and error 0x80070035 when you open a shared folder: check reachability, sharing, services. **System error 53 has occurred. The network path was not found.** Windows could not reach the other PC or the share you typed. It is the same error as **0x80070035** in a dialog box. ## What it means Error 53 is `ERROR_BAD_NETPATH` with the text "The network path was not found." Windows shows a Win32 error as an `0x8007....` code in some places. The last two hex digits are the error number: `0x35` is 53. So `0x80070035` and error 53 are the same problem. It is a "cannot find or reach it" error. It is not a permission error. ## Why it happens Microsoft's guides list these causes: - File and Printer Sharing for Microsoft Networks is disabled or not installed on the PC that shares. - The **TCP/IP NetBIOS Helper** service is stopped, or it runs as **Local System** instead of **Local Service**. Microsoft describes a case where no connection request is sent at all, yet connecting to TCP port 445 with telnet works. - Something blocks the connection: a firewall, security software or the router. - The name or IP address you typed is wrong, or the two PCs are not on the same network. ## How Devpit fixes or avoids it Devpit helps you find out which side is the problem: - [Network Tools](https://devpit.zubyr.dev/docs/features/network-tools) shows your local and public IP addresses and can ping a host, so you can check that the other PC answers. [Share Files](https://devpit.zubyr.dev/docs/features/share-files) sets up the share for you. On the sharing PC you pick a folder and approve one administrator prompt. Devpit turns on the file sharing firewall rule, makes a temporary login and shares the folder read-only. It shows a card with the IP, share name, user name and password. On the receiving PC you type that IP and pick the folder from a list. If the other PC does not answer, Devpit says "Cannot find that PC" and tells you to check the address, that both PCs are on the same network, and that sharing is still on. A VPN or a guest Wi-Fi can also block it. ## The manual fix 1. On the sharing PC, find its IP address, and on the other PC test that it is reachable on the SMB port (445): ```powershell Test-NetConnection 192.168.1.20 -Port 445 ``` Replace the address with the sharing PC's IP. `TcpTestSucceeded : True` means the port answers. 2. On the sharing PC turn on sharing. Open **Control Panel**, **Network and Internet**, **Network and Sharing Center**, **Advanced sharing settings**. Select **Turn on network discovery** and, under **Private**, **Turn on file and printer sharing**. Then **Save changes**. 3. Open **Services** and check **TCP/IP NetBIOS Helper**. Its startup type should be **Automatic**. If you see the port answer in step 1 but the name does not work, make sure it runs as **Local Service**. 4. Try the address, not the name: `\\192.168.1.20\share` in File Explorer's address bar. If that works, the problem is name lookup and not the share. 5. Check that a firewall or security program on either PC does not block the connection. 6. If you see a message about "unauthenticated guest access", read [the Windows 11 24H2 page](https://devpit.zubyr.dev/docs/troubleshooting/guest-access-blocked-windows-11-24h2). 7. If File Explorer shows **0x80004005** instead of 0x80070035, that is a different, general error. See [Windows cannot access, 0x80004005](https://devpit.zubyr.dev/docs/troubleshooting/windows-cannot-access-0x80004005). For the full sharing setup, see [share a folder on Windows 11](https://devpit.zubyr.dev/docs/blog/share-a-folder-on-windows-11). ## Sources - [Microsoft: System error codes 0 to 499 (ERROR_BAD_NETPATH, 53)](https://learn.microsoft.com/windows/win32/debug/system-error-codes--0-499-) - [Microsoft: System error 51 or 53 when you access shared resources](https://learn.microsoft.com/troubleshoot/windows-server/networking/system-error-51-53-access-shared-resources) - [Microsoft: Can't access shared folders from File Explorer](https://learn.microsoft.com/troubleshoot/windows-client/networking/cannot-access-shared-folder-file-explorer) - [Microsoft: Test-NetConnection](https://learn.microsoft.com/powershell/module/nettcpip/test-netconnection) - [Wine winerror.h: FACILITY_WIN32 is 7, ERROR_BAD_NETPATH is 53](https://github.com/wine-mirror/wine/blob/master/include/winerror.h) ## Common questions ### Is error 0x80070035 the same as system error 53? Yes. System error 53 is ERROR_BAD_NETPATH, with the text The network path was not found. Windows shows the same error as 0x80070035 in some dialogs, because a Win32 error code is wrapped into an HRESULT with the prefix 0x8007. The number 0x35 is 53. ### Does error 53 mean the password is wrong? No. Error 53 is about finding the other computer or the share. A wrong password gives system error 1326, The user name or password is incorrect. ## Related - [Copy big folders between two PCs on your network](https://devpit.zubyr.dev/docs/features/share-files): Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. - [Check your IP, ping a host and flush DNS on Windows](https://devpit.zubyr.dev/docs/features/network-tools): See your local and public IP address, ping a host to test your connection, and clear the Windows DNS cache from one Devpit menu. - [System error 1219: multiple connections by the same user](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1219-multiple-connections): Fix Windows system error 1219, 'Multiple connections to a server or shared resource by the same user', by disconnecting old connections with net use. - [You can't access this shared folder because your organization's security policies block unauthenticated guest access](https://devpit.zubyr.dev/docs/troubleshooting/guest-access-blocked-windows-11-24h2): Fix the Windows error that says security policies block unauthenticated guest access to a shared folder, with the safer options on Windows 11 24H2. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found # Windows cannot access \\PC: error 0x80004005 Unspecified error Fix 'Windows cannot access \\PC' with error 0x80004005 on a shared folder: get the real error number with net use, then apply the right fix. File Explorer shows a **Network Error** box: "Windows cannot access \\\\PC" (or \\\\PC\\share). It adds "Check the spelling of the name. Otherwise, there might be a problem with your network." and at the bottom **Error code: 0x80004005 Unspecified error**. The short answer: 0x80004005 does not say what went wrong. Ask Windows again with `net use`, which gives you a real error number, and fix that. ## What it means `0x80004005` is `E_FAIL`. Microsoft's list of common HRESULT values describes it as "Unspecified failure". File Explorer shows it when the connection failed for a reason it does not name. The same "Windows cannot access" box also appears with **0x80070035**. That one is a clear error: [system error 53, the network path was not found](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found). This page is about 0x80004005. ## Why it happens Because the code is general, there are several causes. Microsoft's pages and Q&A answers point to these: - **The other side only offers guest access.** Windows blocks guest sign-in to shares by default, and Windows 11 24H2 Pro, Enterprise and Education also require SMB signing, which guest sign-in cannot use. See [guest access blocked](https://devpit.zubyr.dev/docs/troubleshooting/guest-access-blocked-windows-11-24h2). - **An old device only speaks SMB 1.0.** SMB 1.0 is not installed by default on current Windows. An old NAS or router that only has SMB 1.0 cannot talk to a PC without it. - **Old saved sign-ins.** Your PC still holds a connection or saved password for that PC from before. - **Sharing is not allowed on the other PC**, or its firewall blocks file sharing. - **Permissions.** The account you use may not read that folder. See [you do not have permission to access](https://devpit.zubyr.dev/docs/troubleshooting/you-do-not-have-permission-to-access). ## How Devpit fixes or avoids it [Share Files](https://devpit.zubyr.dev/docs/features/share-files) does not go through File Explorer, so you do not get its general "Unspecified error". It reads the Windows error number behind a failure and, for the errors it knows, shows a plain sentence and a next step, in any Windows language. For example error 53 becomes "Cannot find that PC", 1326 becomes "The user name or password is wrong", 1219 becomes "Already signed in to that PC as someone else", and 1272 becomes "Windows blocked the sign-in". For a number it does not know, it shows the Windows text. It also avoids the usual causes on the sharing side: it creates a temporary login with a password (no guest access), shares the folder read-only to that login only, gives that login read access to the folder, and turns on the firewall rule for file sharing if it is off. ## The manual fix ### 1. Get the real error number Microsoft's own advice for a share that File Explorer cannot open is to try it from Command Prompt with `net use`. Open **Command Prompt** and run: ```text net use \\192.168.1.20\share ``` Use the other PC's IP address or name and the real share name. If it asks, type the user name and password. When it fails, `net use` prints "System error N has occurred" with a real number. Then: | Number | Meaning | Go to | | --- | --- | --- | | 53 | The network path was not found | [System error 53](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found) | | 5 | Access is denied | [No permission](https://devpit.zubyr.dev/docs/troubleshooting/you-do-not-have-permission-to-access) | | 1326 | The user name or password is incorrect | [System error 1326](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1326-user-name-or-password-incorrect) | | 1219 | Multiple connections by the same user | [System error 1219](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1219-multiple-connections) | | 1272 | Guest sign-in was blocked | [Guest access blocked](https://devpit.zubyr.dev/docs/troubleshooting/guest-access-blocked-windows-11-24h2) | If `net use` works, File Explorer will usually open the share after that too. ### 2. Clear old connections and saved passwords 1. In Command Prompt, run `net use * /delete`. If it asks to continue, answer `Y`. It disconnects your PC's shared-folder connections. It deletes no files. 2. Open **Control Panel**, **Credential Manager**, **Windows Credentials**. Remove saved entries that start with the other PC's name or IP. 3. Try the share again. ### 3. Check the sharing PC 1. Its network should be **Private**: **Settings**, **Network & internet**, **Wi-Fi** or **Ethernet**, the network, **Network profile type**. 2. **File and printer sharing** should be on under **Private networks**: **Settings**, **Network & internet**, **Advanced network settings**, **Advanced sharing settings**. 3. The share should use a real account with a password, not guest access. ### 4. For an old NAS or router Check the device maker's site for a firmware update that supports SMB 2 or 3. Microsoft's File Explorer guide lists turning on the **SMB 1.0/CIFS Client** feature, but Microsoft also says SMB 1.0 is not installed by default and should not be used. Use it only for a device that can never be updated, and turn it off again when you are done. Microsoft's page also lists one fix for this exact code: give the PC a fixed IP address instead of an automatic one. That helps when two devices got the same address. Most home networks do not need it. ## Sources - [Microsoft: Common HRESULT values (E_FAIL, 0x80004005)](https://learn.microsoft.com/windows/win32/seccrypto/common-hresult-values) - [Microsoft: Can't access shared folders from File Explorer (net use, SMB 1.0 client, 0x80004005)](https://learn.microsoft.com/troubleshoot/windows-client/networking/cannot-access-shared-folder-file-explorer) - [Microsoft: SMBv1 is not installed by default](https://learn.microsoft.com/windows-server/storage/file-server/troubleshoot/smbv1-not-installed-by-default-in-windows) - [Microsoft: Troubleshoot SMB (net use * /delete)](https://learn.microsoft.com/troubleshoot/windows-server/networking/troubleshoot-smb-guidance) - [Microsoft: net use](https://learn.microsoft.com/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/gg651155(v=ws.11)) - [Microsoft Q&A: the "Check the spelling of the name" dialog with 0x80004005](https://learn.microsoft.com/answers/questions/2840403/cant-connect-to-network-share-get-error-0x80004005) - [Microsoft support: Accessing Credential Manager](https://support.microsoft.com/windows/accessing-credential-manager-1b5c916a-6a16-889f-8581-fc16e8165ac0) ## Common questions ### What does 0x80004005 mean? It is E_FAIL, which Microsoft lists as Unspecified failure. It is a general code. It says something went wrong but not what, so you need a second step to find the real cause. ### Is 0x80004005 the same as 0x80070035? No. 0x80070035 is system error 53, The network path was not found, which means Windows could not reach the PC or the share. 0x80004005 does not name a cause at all. ### Should I turn on SMB 1.0 to fix it? Only as a last resort for an old device that cannot be updated. SMB 1.0 is not installed by default on current Windows and Microsoft recommends against using it. Update or replace the old device if you can. ## Related - [Copy big folders between two PCs on your network](https://devpit.zubyr.dev/docs/features/share-files): Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. - [System error 53: The network path was not found](https://devpit.zubyr.dev/docs/troubleshooting/system-error-53-network-path-not-found): Fix Windows 'System error 53. The network path was not found' and error 0x80070035 when you open a shared folder: check reachability, sharing, services. - [You can't access this shared folder because your organization's security policies block unauthenticated guest access](https://devpit.zubyr.dev/docs/troubleshooting/guest-access-blocked-windows-11-24h2): Fix the Windows error that says security policies block unauthenticated guest access to a shared folder, with the safer options on Windows 11 24H2. - [You do not have permission to access \\PC. Contact your network administrator to request access](https://devpit.zubyr.dev/docs/troubleshooting/you-do-not-have-permission-to-access): Fix 'You do not have permission to access \\PC' and system error 5 'Access is denied' on a Windows shared folder: set share and folder permissions safely. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/windows-cannot-access-0x80004005 # winget error 0x80073D28: needs administrator rights What winget error 0x80073D28 means when an upgrade fails, why some apps need administrator rights, and how to update them. **0x80073D28** with the text "The package installation failed because administrator privileges are required" means the upgrade needs administrator rights and winget ran without them. ## What it means This is not one of winget's own `0x8A15....` codes, and it does not appear in winget's table of return codes. The message that goes with it is clear: administrator privileges are required. Microsoft's WSL project has a public report with this exact text. There, `winget upgrade Microsoft.WSL` was run in a normal PowerShell window. Winget should ask for elevation (a UAC prompt), but the upgrade stopped early with 0x80073d28 instead. ## Why it happens - The package's installer needs administrator rights, and your terminal is a normal one. - Winget did not raise a UAC prompt, or the prompt was closed. - Some apps, such as a desktop app that installs a background service, can only be updated as administrator. Windows documents this as `ERROR_PACKAGED_SERVICE_REQUIRES_ADMIN_PRIVILEGES`. ## How Devpit fixes or avoids it [Update Everything](https://devpit.zubyr.dev/docs/features/update-everything) runs your updates as a normal user. Devpit itself never runs as administrator. When an app fails with `0x80073D28`, Devpit does not fail it on the spot. The row says "needs admin rights, retrying at the end". After the other apps are done, Devpit tries all of these apps again together, with one administrator prompt. *Screenshot: Update Everything near the end of a run: every app is done except Docker Desktop, whose row says retrying as administrator after it failed with error 0x80073D28* If you decline the prompt, or the retry fails, the summary shows the command to run yourself in an administrator terminal. If an app has to be closed first, its row says so, for example "close Contoso App and retry". ## The manual fix 1. Close the app you want to update. 2. Open **Windows Terminal** or PowerShell as administrator: right-click it and choose **Run as administrator**. 3. List what can be upgraded: ```powershell winget upgrade ``` 4. Upgrade the package by its ID. `--id` selects the package and `-e` means an exact match: ```powershell winget upgrade --id Publisher.PackageName -e ``` Replace `Publisher.PackageName` with the ID from the list. 5. If it says the application is running, see [winget 0x8A150101](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a150101). ## Sources - [Microsoft WSL issue #41645: winget upgrade Microsoft.WSL fails with 0x80073d28](https://github.com/microsoft/wsl/issues/41645) - [winget return codes (0x80073D28 is not in the table)](https://github.com/microsoft/winget-cli/blob/master/doc/windows/package-manager/winget/returnCodes.md) - [Microsoft: winget upgrade command (--id, -e)](https://learn.microsoft.com/windows/package-manager/winget/upgrade) ## Common questions ### Is winget 0x80073D28 dangerous? No. It is a permission message. The package installer needs administrator rights, and winget did not get them. Nothing is damaged and you can try again as administrator. ### Why did winget not show a UAC prompt? Winget normally asks for elevation when a package needs it. Microsoft's WSL project has a public report where winget upgrade Microsoft.WSL failed with 0x80073d28 instead of showing the prompt, so the prompt does not always appear. ### How do I update several apps that need administrator rights? Open one terminal as administrator and run winget upgrade for each package by its ID. Devpit's Update Everything collects these apps and updates them together at the end with a single administrator prompt. ## Related - [Update all your Windows apps and dev tools at once](https://devpit.zubyr.dev/docs/features/update-everything): Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. - [winget 0x8A150101: application is currently running](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a150101): Winget error 0x8A150101 means the app is running and cannot be replaced. Close it, retry, and see how Devpit marks the app as in use so you can retry. - [winget upgrade --all does not upgrade some apps](https://devpit.zubyr.dev/docs/troubleshooting/winget-upgrade-all-not-upgrading): Why winget upgrade --all skips apps: unknown versions, pins and packages that need explicit targeting. Winget's own messages, flags, and Devpit's view. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/winget-0x80073d28 # winget 0x8A15002B: no applicable update found Winget error 0x8A15002B means there is no applicable update for the package. It is not a failure. Learn what it means and how Devpit reports it as up to date. **0x8A15002B** is winget saying "No applicable update found". For most people it is not a failure: there was nothing to upgrade. ## What it means Winget names this code `APPINSTALLER_CLI_ERROR_UPDATE_NOT_APPLICABLE`. Its description in the return code table is "No applicable update found". A script or a tool that only looks at the exit code sees a non-zero number, so it looks like an error. The message on screen is a plain "nothing to do". ## Why it happens - The package is already at its newest version. - You asked to upgrade one package, and no newer version applies to it. - The list you saw earlier is old. Another update ran in the meantime. If you expected a newer version and winget does not offer it, the package may be pinned or its installed version may be unknown. See [winget upgrade --all not upgrading](https://devpit.zubyr.dev/docs/troubleshooting/winget-upgrade-all-not-upgrading). ## How Devpit fixes or avoids it In [Update Everything](https://devpit.zubyr.dev/docs/features/update-everything), Devpit reads the exit code of every winget step. For 0x8A15002B it shows **already up to date** and counts the package as fine. It does the same for winget's "already installed" codes and for the text "No available upgrade found" or "No newer package versions are available". You do not need to do anything. ## The manual fix There is nothing to repair. To check the current state yourself: 1. List what winget thinks can be upgraded: ```powershell winget upgrade ``` 2. Upgrade one package by its exact ID: ```powershell winget upgrade --id Publisher.PackageName -e ``` 3. To read Microsoft's text for any code, use the `error` command: ```powershell winget error 0x8A15002B ``` ## Sources - [winget return codes (0x8A15002B)](https://github.com/microsoft/winget-cli/blob/master/doc/windows/package-manager/winget/returnCodes.md) - [Microsoft: winget upgrade command](https://learn.microsoft.com/windows/package-manager/winget/upgrade) - [winget-cli: the `error` command source](https://github.com/microsoft/winget-cli/blob/master/src/AppInstallerCLICore/Commands/ErrorCommand.cpp) ## Common questions ### Is 0x8A15002B an error I need to fix? Usually not. Winget's own text is No applicable update found. It means there was nothing to upgrade for that package, so the package is already current or no update applies to it. ### How can I read what any winget code means? Run winget error followed by the code, for example winget error 0x8A15002B. Winget prints its own description of the code. ## Related - [Update all your Windows apps and dev tools at once](https://devpit.zubyr.dev/docs/features/update-everything): Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. - [winget upgrade --all does not upgrade some apps](https://devpit.zubyr.dev/docs/troubleshooting/winget-upgrade-all-not-upgrading): Why winget upgrade --all skips apps: unknown versions, pins and packages that need explicit targeting. Winget's own messages, flags, and Devpit's view. - [winget 0x8A150101: application is currently running](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a150101): Winget error 0x8A150101 means the app is running and cannot be replaced. Close it, retry, and see how Devpit marks the app as in use so you can retry. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a15002b # winget 0x8A150101: application is currently running Winget error 0x8A150101 means the app is running and cannot be replaced. Close it, retry, and see how Devpit marks the app as in use so you can retry. **0x8A150101** means winget could not upgrade the app because it is running. Winget's own message is: "Application is currently running. Exit the application then try again." ## What it means Winget has a list of return codes. This one is `APPINSTALLER_CLI_ERROR_INSTALL_PACKAGE_IN_USE`. The installer wanted to replace program files that are in use. Windows does not let a running program's files be replaced, so the upgrade stops and nothing is changed. Two close cousins from the same table: - `0x8A150103`: "One or more file is being used. Exit the application then try again." - `0x8A150111`: "Application is currently in use by another application." ## Why it happens - The app is open, or it is still running in the background or in the system tray after you closed its window. - A helper process of the app is running. - Another program has one of its files open. ## How Devpit fixes or avoids it In [Update Everything](https://devpit.zubyr.dev/docs/features/update-everything), Devpit reads the exit code of each winget step. For 0x8A150101, 0x8A150103 and 0x8A150111 the row says **in use, close it and retry** instead of showing a raw code. Scoop's "still running" message and npm's `EBUSY` are read the same way. When an app has to be closed first, the row also names it, for example "close Contoso App and retry". You can also press `s` twice to skip the app that is updating right now. The summary says how to retry it later. ## The manual fix 1. Save your work, then close the app. Also check the system tray (the small arrow near the clock) and quit it there. 2. If it will not go away, find it in Task Manager. Or end it by name in a terminal. `/im` is the program's file name and `/f` forces it: ```text taskkill /im appname.exe /f ``` 3. Run the upgrade again. `--id` picks the package and `-e` is an exact match: ```powershell winget upgrade --id Publisher.PackageName -e ``` 4. To read what winget itself says about any code, ask it: ```powershell winget error 0x8A150101 ``` ## Sources - [winget return codes (0x8A150101, 0x8A150103, 0x8A150111)](https://github.com/microsoft/winget-cli/blob/master/doc/windows/package-manager/winget/returnCodes.md) - [winget-cli: the `error` command source](https://github.com/microsoft/winget-cli/blob/master/src/AppInstallerCLICore/Commands/ErrorCommand.cpp) - [Microsoft: winget upgrade command](https://learn.microsoft.com/windows/package-manager/winget/upgrade) - [Microsoft: taskkill](https://learn.microsoft.com/windows-server/administration/windows-commands/taskkill) ## Common questions ### What is the difference between 0x8A150101, 0x8A150103 and 0x8A150111? 0x8A150101 says the application is currently running. 0x8A150103 says one or more files are being used. 0x8A150111 says the application is currently in use by another application. In each case you close the program and try again. Devpit shows all three as in use. ### Do I lose data if I close the app? Save your work first, as you would before closing any program. The update replaces the program files, not your documents. ## Related - [Update all your Windows apps and dev tools at once](https://devpit.zubyr.dev/docs/features/update-everything): Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. - [winget error 0x80073D28: needs administrator rights](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x80073d28): What winget error 0x80073D28 means when an upgrade fails, why some apps need administrator rights, and how to update them. - [winget 0x8A15002B: no applicable update found](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a15002b): Winget error 0x8A15002B means there is no applicable update for the package. It is not a failure. Learn what it means and how Devpit reports it as up to date. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a150101 # The term 'winget' is not recognized Fix "The term 'winget' is not recognized" in PowerShell: check App Installer, the App execution alias and PATH, then register or reset the package. ```text winget : The term 'winget' is not recognized as the name of a cmdlet, function, script file, or operable program. ``` In Command Prompt the same problem reads `'winget' is not recognized as an internal or external command, operable program or batch file.` It means your shell cannot find `winget.exe`. ## What it means Winget comes inside a Microsoft Store component called **App Installer**. The command `winget` is an alias that App Installer adds to a folder in your `PATH`. If any part is missing, the shell says the term is not recognized. ## Why it happens Microsoft's troubleshooting page lists these common reasons: 1. The App Installer is too old or does not contain the Windows Package Manager. Its version should be greater than 1.11.11451. 2. The **App execution alias** for winget is turned off. 3. The App Installer did not add its folder to `PATH`. The folder is `%userprofile%\AppData\Local\Microsoft\WindowsApps`. 4. App Installer was installed for a different Windows user account. 5. The App Installer package is in a broken state. It can also be a new account: winget is not available until you have signed in once as that user. ## How Devpit fixes or avoids it Devpit does not install winget. [Update Everything](https://devpit.zubyr.dev/docs/features/update-everything) looks for winget, Scoop, npm and Chocolatey on your `PATH`, and only uses the ones it finds. If none is found, it says so: no package manager was found, so there is nothing to update. [Install Developer Apps](https://devpit.zubyr.dev/docs/features/install-developer-apps) installs through Scoop, winget or Chocolatey in the same way. ## The manual fix Try these in order. 1. Check that App Installer exists and see its version (PowerShell): ```powershell Get-AppxPackage microsoft.desktopappinstaller ``` 2. Turn the alias on: open Windows Settings, search for **App execution aliases**, and turn on the entry for the Windows Package Manager (**winget**). 3. Test the full path. If this works but plain `winget` does not, your `PATH` is missing the folder: ```powershell & "$env:LOCALAPPDATA\Microsoft\WindowsApps\winget" ``` Add `%userprofile%\AppData\Local\Microsoft\WindowsApps` to your user `PATH` and open a new terminal. 4. If you just signed in to a new account, ask Windows to register winget: ```powershell Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe ``` 5. If App Installer is missing, get it from the Microsoft Store (search for **App Installer**). 6. If the package is broken, on Windows 11 reset it: ```powershell Get-AppxPackage Microsoft.DesktopAppInstaller | Reset-AppxPackage ``` Then check with `winget --info`. ## Sources - [winget-cli: Troubleshooting (common issues, not recognized)](https://github.com/microsoft/winget-cli/tree/master/doc/troubleshooting) - [Microsoft: Use the winget tool to install and manage applications](https://learn.microsoft.com/windows/package-manager/winget/) - [Devpit source: internal/ui/screens/update/update.go](https://github.com/zubairbinshaukat/devpit/blob/main/internal/ui/screens/update/update.go) ## Common questions ### Which Windows versions have winget? Microsoft says winget is available on Windows 11, modern versions of Windows 10 and Windows Server 2025, as part of the App Installer. It is only supported on Windows 10 version 1809 (build 17763) or later. ### I just created a new Windows user and winget is missing. Why? Microsoft says winget is not available until you have logged into Windows as a user for the first time, because the Microsoft Store registers it in the background. You can request the registration from PowerShell with Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe. ### Do I need winget to use Devpit? No. Devpit works with the package managers it finds: winget, Scoop, Chocolatey and npm. If winget is missing it is simply not used. ## Related - [Update all your Windows apps and dev tools at once](https://devpit.zubyr.dev/docs/features/update-everything): Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. - [Install developer apps on Windows with Devpit](https://devpit.zubyr.dev/docs/features/install-developer-apps): Pick developer tools from a short list and let Devpit install them through Scoop, winget or Chocolatey, one at a time, with live progress. - [winget upgrade --all does not upgrade some apps](https://devpit.zubyr.dev/docs/troubleshooting/winget-upgrade-all-not-upgrading): Why winget upgrade --all skips apps: unknown versions, pins and packages that need explicit targeting. Winget's own messages, flags, and Devpit's view. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/winget-term-not-recognized # winget upgrade --all does not upgrade some apps Why winget upgrade --all skips apps: unknown versions, pins and packages that need explicit targeting. Winget's own messages, flags, and Devpit's view. `winget upgrade --all` upgrades only what winget can safely and clearly upgrade. Some apps are skipped on purpose, and winget tells you why. ## What it means Winget's documentation says `upgrade --all` upgrades "all installed applications that have an available update". Two notes explain most surprises: - Some applications do not provide a version. Winget cannot know if a newer one exists, so they are not upgraded unless you add `--include-unknown`. - Applications that you pinned are not upgraded when you use `--all`, unless you add `--include-pinned`. That works for non-blocking pins only. ## Why it happens Look at the lines winget prints under the table. These are its exact texts: | Winget says | What it means | | --- | --- | | `N package(s) have version numbers that cannot be determined. Use --include-unknown to see all results.` | Unknown versions. They are left out. | | `N package(s) have pins that prevent upgrade. Use the 'winget pin' command to view and edit pins. Using the '--include-pinned' argument may show more results.` | Pinned packages are left out. | | `The following packages have an upgrade available, but require explicit targeting for upgrade:` | An upgrade exists, but it will not run with `--all`. Name the package. | Other apps fail during the upgrade and show an error code instead. The two most common are [0x80073D28](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x80073d28) (needs administrator rights) and [0x8A150101](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a150101) (the app is running). ## How Devpit fixes or avoids it In [Update Everything](https://devpit.zubyr.dev/docs/features/update-everything), Devpit reads the winget table and the footer lines and shows you what happened: - Apps with an unknown version are not listed, and a note under winget says how many "apps with an unknown version aren't shown". - Pinned apps are left alone, and a note says how many ("pinned apps are left alone"). Pinned Chocolatey apps and held Scoop apps appear in the list as **pinned** or **held** and are not ticked. - Packages that winget says need explicit targeting are listed as **needs explicit upgrade** and are not ticked. - For every app you tick, Devpit runs `winget upgrade` with that app's exact ID (`--id` and `-e`), silent, with the agreement flags, so the upgrade never waits for a prompt nobody can see. Devpit never adds `--include-unknown` or `--include-pinned` for you. Pins are your decision. ## The manual fix 1. See what winget offers. Run this and read the lines under the table: ```powershell winget upgrade ``` 2. To include apps with an unknown version: ```powershell winget upgrade --all --include-unknown ``` 3. To include apps with a normal (non-blocking) pin: ```powershell winget upgrade --all --include-pinned ``` 4. To see your pins and remove one you no longer want: ```powershell winget pin list winget pin remove --id Publisher.PackageName ``` 5. To upgrade one package by exact ID: ```powershell winget upgrade --id Publisher.PackageName -e ``` Use `--include-unknown` with care. Winget cannot read the current version of those apps, so it cannot tell whether an upgrade is needed. ## Sources - [Microsoft: winget upgrade command (--all, --include-unknown, --include-pinned)](https://learn.microsoft.com/windows/package-manager/winget/upgrade) - [Microsoft: winget pin command (pin types, pin list, pin remove)](https://learn.microsoft.com/windows/package-manager/winget/pinning) - [winget-cli: user-facing strings (winget.resw)](https://github.com/microsoft/winget-cli/blob/master/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw) - [Devpit source: internal/tools/managers/winget.go](https://github.com/zubairbinshaukat/devpit/blob/main/internal/tools/managers/winget.go) ## Common questions ### What does --include-unknown do? Microsoft's documentation says it upgrades packages even if their current version cannot be determined. Some apps do not report a version, so winget cannot tell if a newer one exists. Without this flag, winget upgrade --all skips them. ### What is the difference between a pin and a blocking pin? A normal pin excludes the package from winget upgrade --all but still allows winget upgrade for that package, and --include-pinned lets --all include it. A blocking pin blocks both, so you have to remove the pin, or use --force. ### Does Devpit run winget upgrade --include-unknown? No. Devpit does not upgrade apps whose version is unknown. It tells you how many were left out, and it does not touch pinned apps. ## Related - [Update all your Windows apps and dev tools at once](https://devpit.zubyr.dev/docs/features/update-everything): Update your apps and developer tools through winget, Scoop, Chocolatey and npm in one pass, choose what to skip, and see plain reasons when one fails. - [winget 0x8A15002B: no applicable update found](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x8a15002b): Winget error 0x8A15002B means there is no applicable update for the package. It is not a failure. Learn what it means and how Devpit reports it as up to date. - [winget error 0x80073D28: needs administrator rights](https://devpit.zubyr.dev/docs/troubleshooting/winget-0x80073d28): What winget error 0x80073D28 means when an upgrade fails, why some apps need administrator rights, and how to update them. - [The term 'winget' is not recognized](https://devpit.zubyr.dev/docs/troubleshooting/winget-term-not-recognized): Fix "The term 'winget' is not recognized" in PowerShell: check App Installer, the App execution alias and PATH, then register or reset the package. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/winget-upgrade-all-not-upgrading # You do not have permission to access \\PC. Contact your network administrator to request access Fix 'You do not have permission to access \\PC' and system error 5 'Access is denied' on a Windows shared folder: set share and folder permissions safely. File Explorer says: "You do not have permission to access \\\\PC. Contact your network administrator to request access." With `net use` the same problem is **System error 5 has occurred. Access is denied.** The other PC was found and you signed in, but the account you used may not open that folder. On a home network, "network administrator" means you. ## What it means Error 5 is `ERROR_ACCESS_DENIED`. It is a permission problem, not a network problem. A shared folder on Windows has **two** sets of permissions: 1. **Share permissions**, set in **Advanced Sharing**, **Permissions**. They apply only to people who come in over the network. 2. **Folder (NTFS) permissions**, set on the **Security** tab. They apply to everyone, on the PC and over the network. Microsoft says Windows looks at both and applies the more restrictive one. So both must allow at least Read for your account. ## Why it happens - The share permissions do not list your account, or list it with **Deny**. - The share allows you, but the **Security** tab does not. A folder inside another user's profile (for example `C:\Users\Anna\Videos`) does not let other accounts read it. - You signed in with a different account than you think. Windows keeps one sign-in per PC, so an older connection can still be in use. See [system error 1219](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1219-multiple-connections). - You were let in as a guest, and guests have no rights on that folder. ## How Devpit fixes or avoids it [Share Files](https://devpit.zubyr.dev/docs/features/share-files) sets both permissions for you, and only as much as needed. It creates a temporary login for the share, shares the folder with **Read** for that login only, and gives that login read access to the folder and everything inside it. Then it reads back the share's access list and stops if anyone other than that login has access. When you stop sharing it removes the share, the folder permission and the login. If Windows still says access is denied on the receiving PC, Devpit shows "Access denied" and tells you to start the share again on the sharing PC. ## The manual fix Do this on the PC that **shares** the folder. ### 1. Check the share permissions 1. Right-click the folder, choose **Properties**, then the **Sharing** tab. 2. Click **Advanced Sharing**. Make sure **Share this folder** is ticked. 3. Click **Permissions**. 4. Click **Add**, type the user name the other PC signs in with, and click **OK**. 5. Select that user and tick **Allow** for **Read**. Tick **Change** too only if the other PC must write files. 6. Click **OK** twice. ### 2. Check the folder permissions 1. In the same **Properties** window, open the **Security** tab and click **Edit**. 2. Click **Add**, type the same user name, and click **OK**. 3. Tick **Allow** for **Read & execute** (this also ticks **List folder contents** and **Read**). 4. Click **OK** twice. Microsoft's File Explorer guide shows the same two places with **Everyone** and **Full Control**. That works, but it lets anyone who can sign in change and delete the files. Giving Read to one account is enough to copy files. ### 3. Sign in again on the other PC 1. On the PC that receives, run `net use * /delete` in Command Prompt to drop old connections. 2. Open the share again and sign in with that user name and password. 3. If it now says the password is wrong, see [system error 1326](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1326-user-name-or-password-incorrect). If the message talks about **unauthenticated guest access** instead, see [guest access blocked](https://devpit.zubyr.dev/docs/troubleshooting/guest-access-blocked-windows-11-24h2). ## Sources - [Microsoft: Can't access shared folders from File Explorer ("You do not have permission to access")](https://learn.microsoft.com/troubleshoot/windows-client/networking/cannot-access-shared-folder-file-explorer) - [Microsoft: Managing permissions for shared folders (the more restrictive permission applies)](https://learn.microsoft.com/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753731(v=ws.10)) - [Microsoft: System error codes 0 to 499 (ERROR_ACCESS_DENIED, 5)](https://learn.microsoft.com/windows/win32/debug/system-error-codes--0-499-) - [Microsoft: New-SmbShare (ReadAccess)](https://learn.microsoft.com/powershell/module/smbshare/new-smbshare) - [Microsoft: icacls](https://learn.microsoft.com/windows-server/administration/windows-commands/icacls) ## Common questions ### I shared the folder with Everyone. Why is access still denied? A shared folder has two sets of permissions: the share permissions and the folder's own security permissions on the Security tab. Windows applies the more restrictive of the two. Sharing with Everyone opens only the first one, so check the Security tab too. ### Is error 5 a wrong password? No. With a wrong password you get system error 1326. Error 5, Access is denied, means you signed in, but that account may not open the folder. ### Do I need Full Control for Everyone? No. To copy files from a share, Read is enough. Give Read to the one account that needs it. Full Control lets that account change permissions and take ownership, so give it only when you mean to. ## Related - [Copy big folders between two PCs on your network](https://devpit.zubyr.dev/docs/features/share-files): Move large folders such as a game between two Windows PCs on the same Wi-Fi or office network, with live progress, automatic retry and resume. - [Share a folder on Windows 11 with another PC](https://devpit.zubyr.dev/docs/blog/share-a-folder-on-windows-11): Share a folder between two PCs on the same network in Windows 11, step by step: Private network, sharing settings, a real account, permissions and 24H2. - [Windows cannot access \\PC: error 0x80004005 Unspecified error](https://devpit.zubyr.dev/docs/troubleshooting/windows-cannot-access-0x80004005): Fix 'Windows cannot access \\PC' with error 0x80004005 on a shared folder: get the real error number with net use, then apply the right fix. - [System error 1326: user name or password is incorrect](https://devpit.zubyr.dev/docs/troubleshooting/system-error-1326-user-name-or-password-incorrect): Fix Windows system error 1326, 'The user name or password is incorrect', when you open a shared folder: check the account on the sharing PC and sign in again. --- Canonical page: https://devpit.zubyr.dev/docs/troubleshooting/you-do-not-have-permission-to-access