SpyBara
Go Premium Account
2026
26 Apr 2026, 04:08
12 May 2026, 16:02 12 May 2026, 14:59 12 May 2026, 01:59 12 May 2026, 00:01 11 May 2026, 23:00 11 May 2026, 21:57 11 May 2026, 20:02 11 May 2026, 18:59 11 May 2026, 18:00 11 May 2026, 15:00 10 May 2026, 23:03 10 May 2026, 17:00 10 May 2026, 04:02 9 May 2026, 04:57 9 May 2026, 04:01 9 May 2026, 03:01 8 May 2026, 22:00 8 May 2026, 19:00 8 May 2026, 18:00 8 May 2026, 16:57 8 May 2026, 07:02 8 May 2026, 06:02 8 May 2026, 03:01 8 May 2026, 02:03 8 May 2026, 01:02 8 May 2026, 00:02 7 May 2026, 22:59 7 May 2026, 21:57 7 May 2026, 17:08 5 May 2026, 23:00 5 May 2026, 21:00 5 May 2026, 17:00 5 May 2026, 15:59 5 May 2026, 14:57 5 May 2026, 00:02 4 May 2026, 22:58 4 May 2026, 22:01 4 May 2026, 18:58 4 May 2026, 15:35 4 May 2026, 06:55 4 May 2026, 04:18 2 May 2026, 18:14 2 May 2026, 04:05 2 May 2026, 00:19 1 May 2026, 18:19 1 May 2026, 04:22 1 May 2026, 00:20 29 Apr 2026, 21:21 29 Apr 2026, 15:36 29 Apr 2026, 09:39 29 Apr 2026, 04:11 29 Apr 2026, 00:20 28 Apr 2026, 21:21 28 Apr 2026, 18:28 28 Apr 2026, 15:45 28 Apr 2026, 06:49 27 Apr 2026, 21:20 27 Apr 2026, 18:23 26 Apr 2026, 04:08 25 Apr 2026, 21:10 24 Apr 2026, 18:11 24 Apr 2026, 06:34 24 Apr 2026, 00:17 23 Apr 2026, 18:19 23 Apr 2026, 04:04 23 Apr 2026, 00:17 22 Apr 2026, 21:15 22 Apr 2026, 04:00 22 Apr 2026, 00:13 21 Apr 2026, 21:14 21 Apr 2026, 09:30 21 Apr 2026, 04:01 20 Apr 2026, 21:14 20 Apr 2026, 18:16 18 Apr 2026, 18:09 18 Apr 2026, 00:13 17 Apr 2026, 21:13 17 Apr 2026, 18:14 17 Apr 2026, 00:15 16 Apr 2026, 21:13 16 Apr 2026, 18:21 16 Apr 2026, 15:30 16 Apr 2026, 04:02 16 Apr 2026, 00:16 15 Apr 2026, 18:20 15 Apr 2026, 15:24 15 Apr 2026, 09:29 15 Apr 2026, 04:00 14 Apr 2026, 21:14 14 Apr 2026, 18:21 14 Apr 2026, 06:32 14 Apr 2026, 04:00 14 Apr 2026, 00:16 13 Apr 2026, 21:14 13 Apr 2026, 18:21 11 Apr 2026, 00:11 10 Apr 2026, 21:09 10 Apr 2026, 18:13 10 Apr 2026, 06:32 10 Apr 2026, 00:12 9 Apr 2026, 21:14 9 Apr 2026, 18:17 9 Apr 2026, 15:29 9 Apr 2026, 03:55 9 Apr 2026, 00:09 8 Apr 2026, 21:13 8 Apr 2026, 18:21 8 Apr 2026, 15:27 8 Apr 2026, 00:12 7 Apr 2026, 21:14 4 Apr 2026, 18:05 4 Apr 2026, 03:46 4 Apr 2026, 00:09 3 Apr 2026, 21:07 3 Apr 2026, 18:08 3 Apr 2026, 03:54 3 Apr 2026, 00:11 2 Apr 2026, 21:08 2 Apr 2026, 18:12 2 Apr 2026, 09:19 2 Apr 2026, 06:21 2 Apr 2026, 03:53 1 Apr 2026, 21:12 1 Apr 2026, 18:13 1 Apr 2026, 04:00 1 Apr 2026, 00:11 31 Mar 2026, 21:09 31 Mar 2026, 06:24 31 Mar 2026, 03:56 31 Mar 2026, 00:11 30 Mar 2026, 21:13 30 Mar 2026, 18:15 28 Mar 2026, 18:04 28 Mar 2026, 15:06 27 Mar 2026, 21:09 27 Mar 2026, 18:14 27 Mar 2026, 15:15 27 Mar 2026, 06:21 27 Mar 2026, 03:56 27 Mar 2026, 00:10 26 Mar 2026, 21:07 26 Mar 2026, 18:16 26 Mar 2026, 15:25 26 Mar 2026, 06:21 26 Mar 2026, 03:55 26 Mar 2026, 00:10 25 Mar 2026, 21:08 25 Mar 2026, 18:15 25 Mar 2026, 06:18 25 Mar 2026, 03:47 25 Mar 2026, 00:08 24 Mar 2026, 18:15 24 Mar 2026, 00:07 23 Mar 2026, 21:08 23 Mar 2026, 18:13 23 Mar 2026, 00:09 22 Mar 2026, 18:04 22 Mar 2026, 00:07 21 Mar 2026, 18:03 21 Mar 2026, 00:07 20 Mar 2026, 21:05 20 Mar 2026, 18:08 20 Mar 2026, 15:13 20 Mar 2026, 03:45 20 Mar 2026, 00:08 19 Mar 2026, 06:17 19 Mar 2026, 00:08 18 Mar 2026, 18:16 18 Mar 2026, 12:11 18 Mar 2026, 09:15 18 Mar 2026, 03:50 18 Mar 2026, 00:09 17 Mar 2026, 21:10 17 Mar 2026, 18:15 17 Mar 2026, 03:46 17 Mar 2026, 00:08 16 Mar 2026, 21:10 16 Mar 2026, 18:15 14 Mar 2026, 03:44 14 Mar 2026, 00:08 13 Mar 2026, 21:07 13 Mar 2026, 18:07 13 Mar 2026, 06:12 12 Mar 2026, 21:07 12 Mar 2026, 18:12 12 Mar 2026, 00:07 11 Mar 2026, 03:43 11 Mar 2026, 00:05 10 Mar 2026, 03:43 10 Mar 2026, 00:05 9 Mar 2026, 21:06 7 Mar 2026, 03:37 7 Mar 2026, 00:07 6 Mar 2026, 06:10 6 Mar 2026, 03:44 6 Mar 2026, 00:12 5 Mar 2026, 06:12 5 Mar 2026, 03:45 5 Mar 2026, 00:07 4 Mar 2026, 21:06 4 Mar 2026, 18:09 4 Mar 2026, 09:09 1 Mar 2026, 06:10 1 Mar 2026, 03:49 28 Feb 2026, 21:01 28 Feb 2026, 00:05 27 Feb 2026, 21:05 27 Feb 2026, 18:07 27 Feb 2026, 09:11 27 Feb 2026, 06:13 27 Feb 2026, 00:08 26 Feb 2026, 21:08 26 Feb 2026, 18:12 26 Feb 2026, 09:14 26 Feb 2026, 06:17 26 Feb 2026, 00:07 25 Feb 2026, 03:47 25 Feb 2026, 00:09 24 Feb 2026, 21:08 24 Feb 2026, 18:15 23 Feb 2026, 21:13 21 Feb 2026, 18:03 21 Feb 2026, 06:08 20 Feb 2026, 21:03 20 Feb 2026, 06:14 20 Feb 2026, 00:07 19 Feb 2026, 21:06 19 Feb 2026, 03:48 19 Feb 2026, 00:08 18 Feb 2026, 03:48 17 Feb 2026, 21:08 17 Feb 2026, 00:08 16 Feb 2026, 21:05 14 Feb 2026, 03:44 13 Feb 2026, 21:09 12 Feb 2026, 00:06 11 Feb 2026, 21:10 11 Feb 2026, 00:11 10 Feb 2026, 21:13 10 Feb 2026, 03:56 10 Feb 2026, 00:11 9 Feb 2026, 15:17 9 Feb 2026, 00:08 7 Feb 2026, 21:05 7 Feb 2026, 18:03 7 Feb 2026, 03:43 6 Feb 2026, 21:06 6 Feb 2026, 00:05 5 Feb 2026, 21:06 5 Feb 2026, 18:13 5 Feb 2026, 03:46 5 Feb 2026, 00:07 4 Feb 2026, 21:07 4 Feb 2026, 18:11 4 Feb 2026, 03:45 4 Feb 2026, 00:06 3 Feb 2026, 21:08 3 Feb 2026, 18:14 3 Feb 2026, 09:10 3 Feb 2026, 03:46 1 Feb 2026, 21:03 1 Feb 2026, 18:02 31 Jan 2026, 03:42 31 Jan 2026, 00:06 30 Jan 2026, 18:07 30 Jan 2026, 00:06 29 Jan 2026, 21:03 28 Jan 2026, 15:06 28 Jan 2026, 03:30 28 Jan 2026, 00:05 27 Jan 2026, 21:01 27 Jan 2026, 18:03 27 Jan 2026, 06:02 26 Jan 2026, 21:03 25 Jan 2026, 03:34 24 Jan 2026, 03:29 23 Jan 2026, 21:01 23 Jan 2026, 18:02 23 Jan 2026, 00:05 22 Jan 2026, 21:03 22 Jan 2026, 15:05 22 Jan 2026, 03:31 22 Jan 2026, 00:05 21 Jan 2026, 21:05 21 Jan 2026, 06:02 21 Jan 2026, 03:30 21 Jan 2026, 00:05 20 Jan 2026, 21:03 20 Jan 2026, 18:03 20 Jan 2026, 15:05 20 Jan 2026, 03:30 19 Jan 2026, 21:01 19 Jan 2026, 00:05 16 Jan 2026, 21:01 16 Jan 2026, 18:02 16 Jan 2026, 15:02 16 Jan 2026, 00:05 14 Jan 2026, 06:02 14 Jan 2026, 00:05 12 Jan 2026, 21:02 12 Jan 2026, 18:02 12 Jan 2026, 00:05 11 Jan 2026, 18:02 11 Jan 2026, 03:31 11 Jan 2026, 00:06 10 Jan 2026, 21:01 10 Jan 2026, 03:29 10 Jan 2026, 00:04 9 Jan 2026, 21:01 9 Jan 2026, 00:04 8 Jan 2026, 21:02 8 Jan 2026, 06:02 8 Jan 2026, 03:29 8 Jan 2026, 00:05 7 Jan 2026, 21:01 7 Jan 2026, 18:02 7 Jan 2026, 09:05 7 Jan 2026, 06:02 7 Jan 2026, 03:30 7 Jan 2026, 00:04 6 Jan 2026, 21:01 6 Jan 2026, 03:29 6 Jan 2026, 00:05 3 Jan 2026, 18:02 27 Dec 2025, 06:02 27 Dec 2025, 03:28 23 Dec 2025, 18:02 20 Dec 2025, 00:04 19 Dec 2025, 21:01 19 Dec 2025, 18:02 19 Dec 2025, 00:05 18 Dec 2025, 21:01 18 Dec 2025, 18:02 18 Dec 2025, 15:02 17 Dec 2025, 15:02 17 Dec 2025, 03:27 16 Dec 2025, 21:01 16 Dec 2025, 18:02 16 Dec 2025, 00:05 15 Dec 2025, 21:01 15 Dec 2025, 18:02 13 Dec 2025, 06:02 12 Dec 2025, 21:01 12 Dec 2025, 00:05 11 Dec 2025, 21:02 11 Dec 2025, 18:01 11 Dec 2025, 06:02 10 Dec 2025, 09:03 9 Dec 2025, 18:01 9 Dec 2025, 06:02 9 Dec 2025, 03:25 8 Dec 2025, 21:01 8 Dec 2025, 06:02 8 Dec 2025, 00:05 6 Dec 2025, 18:02 5 Dec 2025, 00:04 4 Dec 2025, 21:02 4 Dec 2025, 18:02 4 Dec 2025, 06:02 4 Dec 2025, 03:26 3 Dec 2025, 00:04 2 Dec 2025, 21:01 2 Dec 2025, 00:04 1 Dec 2025, 03:31 27 Nov 2025, 06:02 27 Nov 2025, 03:20 26 Nov 2025, 00:04 25 Nov 2025, 03:22 24 Nov 2025, 21:01 21 Nov 2025, 00:04 20 Nov 2025, 18:02 20 Nov 2025, 06:02 20 Nov 2025, 03:20 19 Nov 2025, 03:21 19 Nov 2025, 00:05 18 Nov 2025, 18:02 18 Nov 2025, 09:02 18 Nov 2025, 03:21 17 Nov 2025, 03:24 17 Nov 2025, 00:04 16 Nov 2025, 00:04 14 Nov 2025, 21:26 6 Nov 2025, 18:02 6 Nov 2025, 15:02 6 Nov 2025, 12:02 6 Nov 2025, 06:01 6 Nov 2025, 03:22 4 Nov 2025, 18:02 4 Nov 2025, 03:19 4 Nov 2025, 00:04 3 Nov 2025, 21:01 3 Nov 2025, 12:03 3 Nov 2025, 09:02 3 Nov 2025, 06:02 3 Nov 2025, 03:24 3 Nov 2025, 00:04 2 Nov 2025, 18:01 2 Nov 2025, 12:02 2 Nov 2025, 09:01 1 Nov 2025, 21:01 31 Oct 2025, 00:04 30 Oct 2025, 18:02 29 Oct 2025, 21:02 28 Oct 2025, 18:02 27 Oct 2025, 18:02 24 Oct 2025, 21:01 23 Oct 2025, 21:02 23 Oct 2025, 09:02 23 Oct 2025, 06:02 23 Oct 2025, 00:04 21 Oct 2025, 00:04 20 Oct 2025, 21:02 20 Oct 2025, 15:12 20 Oct 2025, 00:05 17 Oct 2025, 18:01 17 Oct 2025, 12:03 16 Oct 2025, 18:02 16 Oct 2025, 00:05 15 Oct 2025, 18:02 13 Oct 2025, 21:01 12 Oct 2025, 18:01
2 May 2026, 04:05
12 May 2026, 16:02 12 May 2026, 14:59 12 May 2026, 01:59 12 May 2026, 00:01 11 May 2026, 23:00 11 May 2026, 21:57 11 May 2026, 20:02 11 May 2026, 18:59 11 May 2026, 18:00 11 May 2026, 15:00 10 May 2026, 23:03 10 May 2026, 17:00 10 May 2026, 04:02 9 May 2026, 04:57 9 May 2026, 04:01 9 May 2026, 03:01 8 May 2026, 22:00 8 May 2026, 19:00 8 May 2026, 18:00 8 May 2026, 16:57 8 May 2026, 07:02 8 May 2026, 06:02 8 May 2026, 03:01 8 May 2026, 02:03 8 May 2026, 01:02 8 May 2026, 00:02 7 May 2026, 22:59 7 May 2026, 21:57 7 May 2026, 17:08 5 May 2026, 23:00 5 May 2026, 21:00 5 May 2026, 17:00 5 May 2026, 15:59 5 May 2026, 14:57 5 May 2026, 00:02 4 May 2026, 22:58 4 May 2026, 22:01 4 May 2026, 18:58 4 May 2026, 15:35 4 May 2026, 06:55 4 May 2026, 04:18 2 May 2026, 18:14 2 May 2026, 04:05 2 May 2026, 00:19 1 May 2026, 18:19 1 May 2026, 04:22 1 May 2026, 00:20 29 Apr 2026, 21:21 29 Apr 2026, 15:36 29 Apr 2026, 09:39 29 Apr 2026, 04:11 29 Apr 2026, 00:20 28 Apr 2026, 21:21 28 Apr 2026, 18:28 28 Apr 2026, 15:45 28 Apr 2026, 06:49 27 Apr 2026, 21:20 27 Apr 2026, 18:23 26 Apr 2026, 04:08 25 Apr 2026, 21:10 24 Apr 2026, 18:11 24 Apr 2026, 06:34 24 Apr 2026, 00:17 23 Apr 2026, 18:19 23 Apr 2026, 04:04 23 Apr 2026, 00:17 22 Apr 2026, 21:15 22 Apr 2026, 04:00 22 Apr 2026, 00:13 21 Apr 2026, 21:14 21 Apr 2026, 09:30 21 Apr 2026, 04:01 20 Apr 2026, 21:14 20 Apr 2026, 18:16 18 Apr 2026, 18:09 18 Apr 2026, 00:13 17 Apr 2026, 21:13 17 Apr 2026, 18:14 17 Apr 2026, 00:15 16 Apr 2026, 21:13 16 Apr 2026, 18:21 16 Apr 2026, 15:30 16 Apr 2026, 04:02 16 Apr 2026, 00:16 15 Apr 2026, 18:20 15 Apr 2026, 15:24 15 Apr 2026, 09:29 15 Apr 2026, 04:00 14 Apr 2026, 21:14 14 Apr 2026, 18:21 14 Apr 2026, 06:32 14 Apr 2026, 04:00 14 Apr 2026, 00:16 13 Apr 2026, 21:14 13 Apr 2026, 18:21 11 Apr 2026, 00:11 10 Apr 2026, 21:09 10 Apr 2026, 18:13 10 Apr 2026, 06:32 10 Apr 2026, 00:12 9 Apr 2026, 21:14 9 Apr 2026, 18:17 9 Apr 2026, 15:29 9 Apr 2026, 03:55 9 Apr 2026, 00:09 8 Apr 2026, 21:13 8 Apr 2026, 18:21 8 Apr 2026, 15:27 8 Apr 2026, 00:12 7 Apr 2026, 21:14 4 Apr 2026, 18:05 4 Apr 2026, 03:46 4 Apr 2026, 00:09 3 Apr 2026, 21:07 3 Apr 2026, 18:08 3 Apr 2026, 03:54 3 Apr 2026, 00:11 2 Apr 2026, 21:08 2 Apr 2026, 18:12 2 Apr 2026, 09:19 2 Apr 2026, 06:21 2 Apr 2026, 03:53 1 Apr 2026, 21:12 1 Apr 2026, 18:13 1 Apr 2026, 04:00 1 Apr 2026, 00:11 31 Mar 2026, 21:09 31 Mar 2026, 06:24 31 Mar 2026, 03:56 31 Mar 2026, 00:11 30 Mar 2026, 21:13 30 Mar 2026, 18:15 28 Mar 2026, 18:04 28 Mar 2026, 15:06 27 Mar 2026, 21:09 27 Mar 2026, 18:14 27 Mar 2026, 15:15 27 Mar 2026, 06:21 27 Mar 2026, 03:56 27 Mar 2026, 00:10 26 Mar 2026, 21:07 26 Mar 2026, 18:16 26 Mar 2026, 15:25 26 Mar 2026, 06:21 26 Mar 2026, 03:55 26 Mar 2026, 00:10 25 Mar 2026, 21:08 25 Mar 2026, 18:15 25 Mar 2026, 06:18 25 Mar 2026, 03:47 25 Mar 2026, 00:08 24 Mar 2026, 18:15 24 Mar 2026, 00:07 23 Mar 2026, 21:08 23 Mar 2026, 18:13 23 Mar 2026, 00:09 22 Mar 2026, 18:04 22 Mar 2026, 00:07 21 Mar 2026, 18:03 21 Mar 2026, 00:07 20 Mar 2026, 21:05 20 Mar 2026, 18:08 20 Mar 2026, 15:13 20 Mar 2026, 03:45 20 Mar 2026, 00:08 19 Mar 2026, 06:17 19 Mar 2026, 00:08 18 Mar 2026, 18:16 18 Mar 2026, 12:11 18 Mar 2026, 09:15 18 Mar 2026, 03:50 18 Mar 2026, 00:09 17 Mar 2026, 21:10 17 Mar 2026, 18:15 17 Mar 2026, 03:46 17 Mar 2026, 00:08 16 Mar 2026, 21:10 16 Mar 2026, 18:15 14 Mar 2026, 03:44 14 Mar 2026, 00:08 13 Mar 2026, 21:07 13 Mar 2026, 18:07 13 Mar 2026, 06:12 12 Mar 2026, 21:07 12 Mar 2026, 18:12 12 Mar 2026, 00:07 11 Mar 2026, 03:43 11 Mar 2026, 00:05 10 Mar 2026, 03:43 10 Mar 2026, 00:05 9 Mar 2026, 21:06 7 Mar 2026, 03:37 7 Mar 2026, 00:07 6 Mar 2026, 06:10 6 Mar 2026, 03:44 6 Mar 2026, 00:12 5 Mar 2026, 06:12 5 Mar 2026, 03:45 5 Mar 2026, 00:07 4 Mar 2026, 21:06 4 Mar 2026, 18:09 4 Mar 2026, 09:09 1 Mar 2026, 06:10 1 Mar 2026, 03:49 28 Feb 2026, 21:01 28 Feb 2026, 00:05 27 Feb 2026, 21:05 27 Feb 2026, 18:07 27 Feb 2026, 09:11 27 Feb 2026, 06:13 27 Feb 2026, 00:08 26 Feb 2026, 21:08 26 Feb 2026, 18:12 26 Feb 2026, 09:14 26 Feb 2026, 06:17 26 Feb 2026, 00:07 25 Feb 2026, 03:47 25 Feb 2026, 00:09 24 Feb 2026, 21:08 24 Feb 2026, 18:15 23 Feb 2026, 21:13 21 Feb 2026, 18:03 21 Feb 2026, 06:08 20 Feb 2026, 21:03 20 Feb 2026, 06:14 20 Feb 2026, 00:07 19 Feb 2026, 21:06 19 Feb 2026, 03:48 19 Feb 2026, 00:08 18 Feb 2026, 03:48 17 Feb 2026, 21:08 17 Feb 2026, 00:08 16 Feb 2026, 21:05 14 Feb 2026, 03:44 13 Feb 2026, 21:09 12 Feb 2026, 00:06 11 Feb 2026, 21:10 11 Feb 2026, 00:11 10 Feb 2026, 21:13 10 Feb 2026, 03:56 10 Feb 2026, 00:11 9 Feb 2026, 15:17 9 Feb 2026, 00:08 7 Feb 2026, 21:05 7 Feb 2026, 18:03 7 Feb 2026, 03:43 6 Feb 2026, 21:06 6 Feb 2026, 00:05 5 Feb 2026, 21:06 5 Feb 2026, 18:13 5 Feb 2026, 03:46 5 Feb 2026, 00:07 4 Feb 2026, 21:07 4 Feb 2026, 18:11 4 Feb 2026, 03:45 4 Feb 2026, 00:06 3 Feb 2026, 21:08 3 Feb 2026, 18:14 3 Feb 2026, 09:10 3 Feb 2026, 03:46 1 Feb 2026, 21:03 1 Feb 2026, 18:02 31 Jan 2026, 03:42 31 Jan 2026, 00:06 30 Jan 2026, 18:07 30 Jan 2026, 00:06 29 Jan 2026, 21:03 28 Jan 2026, 15:06 28 Jan 2026, 03:30 28 Jan 2026, 00:05 27 Jan 2026, 21:01 27 Jan 2026, 18:03 27 Jan 2026, 06:02 26 Jan 2026, 21:03 25 Jan 2026, 03:34 24 Jan 2026, 03:29 23 Jan 2026, 21:01 23 Jan 2026, 18:02 23 Jan 2026, 00:05 22 Jan 2026, 21:03 22 Jan 2026, 15:05 22 Jan 2026, 03:31 22 Jan 2026, 00:05 21 Jan 2026, 21:05 21 Jan 2026, 06:02 21 Jan 2026, 03:30 21 Jan 2026, 00:05 20 Jan 2026, 21:03 20 Jan 2026, 18:03 20 Jan 2026, 15:05 20 Jan 2026, 03:30 19 Jan 2026, 21:01 19 Jan 2026, 00:05 16 Jan 2026, 21:01 16 Jan 2026, 18:02 16 Jan 2026, 15:02 16 Jan 2026, 00:05 14 Jan 2026, 06:02 14 Jan 2026, 00:05 12 Jan 2026, 21:02 12 Jan 2026, 18:02 12 Jan 2026, 00:05 11 Jan 2026, 18:02 11 Jan 2026, 03:31 11 Jan 2026, 00:06 10 Jan 2026, 21:01 10 Jan 2026, 03:29 10 Jan 2026, 00:04 9 Jan 2026, 21:01 9 Jan 2026, 00:04 8 Jan 2026, 21:02 8 Jan 2026, 06:02 8 Jan 2026, 03:29 8 Jan 2026, 00:05 7 Jan 2026, 21:01 7 Jan 2026, 18:02 7 Jan 2026, 09:05 7 Jan 2026, 06:02 7 Jan 2026, 03:30 7 Jan 2026, 00:04 6 Jan 2026, 21:01 6 Jan 2026, 03:29 6 Jan 2026, 00:05 3 Jan 2026, 18:02 27 Dec 2025, 06:02 27 Dec 2025, 03:28 23 Dec 2025, 18:02 20 Dec 2025, 00:04 19 Dec 2025, 21:01 19 Dec 2025, 18:02 19 Dec 2025, 00:05 18 Dec 2025, 21:01 18 Dec 2025, 18:02 18 Dec 2025, 15:02 17 Dec 2025, 15:02 17 Dec 2025, 03:27 16 Dec 2025, 21:01 16 Dec 2025, 18:02 16 Dec 2025, 00:05 15 Dec 2025, 21:01 15 Dec 2025, 18:02 13 Dec 2025, 06:02 12 Dec 2025, 21:01 12 Dec 2025, 00:05 11 Dec 2025, 21:02 11 Dec 2025, 18:01 11 Dec 2025, 06:02 10 Dec 2025, 09:03 9 Dec 2025, 18:01 9 Dec 2025, 06:02 9 Dec 2025, 03:25 8 Dec 2025, 21:01 8 Dec 2025, 06:02 8 Dec 2025, 00:05 6 Dec 2025, 18:02 5 Dec 2025, 00:04 4 Dec 2025, 21:02 4 Dec 2025, 18:02 4 Dec 2025, 06:02 4 Dec 2025, 03:26 3 Dec 2025, 00:04 2 Dec 2025, 21:01 2 Dec 2025, 00:04 1 Dec 2025, 03:31 27 Nov 2025, 06:02 27 Nov 2025, 03:20 26 Nov 2025, 00:04 25 Nov 2025, 03:22 24 Nov 2025, 21:01 21 Nov 2025, 00:04 20 Nov 2025, 18:02 20 Nov 2025, 06:02 20 Nov 2025, 03:20 19 Nov 2025, 03:21 19 Nov 2025, 00:05 18 Nov 2025, 18:02 18 Nov 2025, 09:02 18 Nov 2025, 03:21 17 Nov 2025, 03:24 17 Nov 2025, 00:04 16 Nov 2025, 00:04 14 Nov 2025, 21:26 6 Nov 2025, 18:02 6 Nov 2025, 15:02 6 Nov 2025, 12:02 6 Nov 2025, 06:01 6 Nov 2025, 03:22 4 Nov 2025, 18:02 4 Nov 2025, 03:19 4 Nov 2025, 00:04 3 Nov 2025, 21:01 3 Nov 2025, 12:03 3 Nov 2025, 09:02 3 Nov 2025, 06:02 3 Nov 2025, 03:24 3 Nov 2025, 00:04 2 Nov 2025, 18:01 2 Nov 2025, 12:02 2 Nov 2025, 09:01 1 Nov 2025, 21:01 31 Oct 2025, 00:04 30 Oct 2025, 18:02 29 Oct 2025, 21:02 28 Oct 2025, 18:02 27 Oct 2025, 18:02 24 Oct 2025, 21:01 23 Oct 2025, 21:02 23 Oct 2025, 09:02 23 Oct 2025, 06:02 23 Oct 2025, 00:04 21 Oct 2025, 00:04 20 Oct 2025, 21:02 20 Oct 2025, 15:12 20 Oct 2025, 00:05 17 Oct 2025, 18:01 17 Oct 2025, 12:03 16 Oct 2025, 18:02 16 Oct 2025, 00:05 15 Oct 2025, 18:02 13 Oct 2025, 21:01 12 Oct 2025, 18:01
Fri 1 00:20 Fri 1 04:22 Fri 1 18:19 Sat 2 00:19 Sat 2 04:05 Sat 2 18:14 Mon 4 04:18 Mon 4 06:55 Mon 4 15:35 Mon 4 18:58 Mon 4 22:01 Mon 4 22:58 Tue 5 00:02 Tue 5 14:57 Tue 5 15:59 Tue 5 17:00 Tue 5 21:00 Tue 5 23:00 Thu 7 17:08 Thu 7 21:57 Thu 7 22:59 Fri 8 00:02 Fri 8 01:02 Fri 8 02:03 Fri 8 03:01 Fri 8 06:02 Fri 8 07:02 Fri 8 16:57 Fri 8 18:00 Fri 8 19:00 Fri 8 22:00 Sat 9 03:01 Sat 9 04:01 Sat 9 04:57 Sun 10 04:02 Sun 10 17:00 Sun 10 23:03 Mon 11 15:00 Mon 11 18:00 Mon 11 18:59 Mon 11 20:02 Mon 11 21:57 Mon 11 23:00 Tue 12 00:01 Tue 12 01:59 Tue 12 14:59 Tue 12 16:02

admin-setup.md +1 −1

Details

114* [Common workflows](/en/common-workflows): patterns for everyday tasks like code review, refactoring, and debugging114* [Common workflows](/en/common-workflows): patterns for everyday tasks like code review, refactoring, and debugging

115* [Claude 101](https://anthropic.skilljar.com/claude-101) and [Claude Code in Action](https://anthropic.skilljar.com/claude-code-in-action): self-paced Anthropic Academy courses115* [Claude 101](https://anthropic.skilljar.com/claude-101) and [Claude Code in Action](https://anthropic.skilljar.com/claude-code-in-action): self-paced Anthropic Academy courses

116 116 

117For login issues, point developers to [authentication troubleshooting](/en/troubleshooting#authentication-issues). The most common fixes are:117For login issues, point developers to [authentication troubleshooting](/en/troubleshoot-install#login-and-authentication). The most common fixes are:

118 118 

119* Run `/logout` then `/login` to switch accounts119* Run `/logout` then `/login` to switch accounts

120* Run `claude update` if the enterprise auth option is missing120* Run `claude update` if the enterprise auth option is missing

Details

236Your callback returns an object with two categories of fields:236Your callback returns an object with two categories of fields:

237 237 

238* **Top-level fields** control the conversation: `systemMessage` injects a message into the conversation visible to the model, and `continue` (`continue_` in Python) determines whether the agent keeps running after this hook.238* **Top-level fields** control the conversation: `systemMessage` injects a message into the conversation visible to the model, and `continue` (`continue_` in Python) determines whether the agent keeps running after this hook.

239* **`hookSpecificOutput`** controls the current operation. The fields inside depend on the hook event type. For `PreToolUse` hooks, this is where you set `permissionDecision` (`"allow"`, `"deny"`, or `"ask"`), `permissionDecisionReason`, and `updatedInput`. In the TypeScript SDK, `permissionDecision` also accepts `"defer"` to end the query and [resume later](/en/hooks#defer-a-tool-call-for-later); this value is not available in the Python SDK. For `PostToolUse` hooks, you can set `additionalContext` to append information to the tool result.239* **`hookSpecificOutput`** controls the current operation. The fields inside depend on the hook event type. For `PreToolUse` hooks, this is where you set `permissionDecision` (`"allow"`, `"deny"`, or `"ask"`), `permissionDecisionReason`, and `updatedInput`. In the TypeScript SDK, `permissionDecision` also accepts `"defer"` to end the query and [resume later](/en/hooks#defer-a-tool-call-for-later); this value is not available in the Python SDK. For `PostToolUse` hooks, you can set `additionalContext` to append information to the tool result, or `updatedToolOutput` to replace the tool's output entirely before Claude sees it.

240 240 

241Return `{}` to allow the operation without changes. SDK callback hooks use the same JSON output format as [Claude Code shell command hooks](/en/hooks#json-output), which documents every field and event-specific option. For the SDK type definitions, see the [TypeScript](/en/agent-sdk/typescript#sync-hook-json-output) and [Python](/en/agent-sdk/python#sync-hook-json-output) SDK references.241Return `{}` to allow the operation without changes. SDK callback hooks use the same JSON output format as [Claude Code shell command hooks](/en/hooks#json-output), which documents every field and event-specific option. For the SDK type definitions, see the [TypeScript](/en/agent-sdk/typescript#sync-hook-json-output) and [Python](/en/agent-sdk/python#sync-hook-json-output) SDK references.

242 242 

Details

534 534 

535 Many teams use both: CLI for daily development, SDK for production. Workflows translate directly between them.535 Many teams use both: CLI for daily development, SDK for production. Workflows translate directly between them.

536 </Tab>536 </Tab>

537 

538 <Tab title="Agent SDK vs Managed Agents">

539 [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) is a hosted REST API: Anthropic runs the agent and the sandbox, and your application sends events and streams back results. The **Agent SDK** is a library that runs the agent loop inside your own process.

540 

541 | | Agent SDK | Managed Agents |

542 | ------------------ | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |

543 | **Runs in** | Your process, your infrastructure | Anthropic-managed infrastructure |

544 | **Interface** | Python or TypeScript library | REST API |

545 | **Agent works on** | Files on your infrastructure | A managed sandbox per session |

546 | **Session state** | JSONL on your filesystem | Anthropic-hosted event log |

547 | **Custom tools** | In-process Python or TypeScript functions | Claude triggers the tool; you execute and return results |

548 | **Best for** | Local prototyping, agents that work directly on your filesystem and services | Production agents without operating sandbox or session infrastructure, long-running and asynchronous sessions |

549 

550 A common path is to prototype with the Agent SDK locally, then move to Managed Agents for production.

551 </Tab>

537</Tabs>552</Tabs>

538 553 

539## Changelog554## Changelog

Details

25 25 

26## Loading plugins26## Loading plugins

27 27 

28Load plugins by providing their local file system paths in your options configuration. The SDK supports loading multiple plugins from different locations.28Load plugins by providing their local file system paths in your options configuration. The `type` field must be `"local"`, the only value the SDK accepts. To use a plugin distributed through a [marketplace](/en/plugin-marketplaces) or remote repository, download it first and provide the local directory path. The SDK supports loading multiple plugins from different locations.

29 29 

30<CodeGroup>30<CodeGroup>

31 ```typescript TypeScript theme={null}31 ```typescript TypeScript theme={null}

Details

3118| `ignoreViolations` | [`SandboxIgnoreViolations`](#sandbox-ignore-violations) | `None` | Configure which sandbox violations to ignore |3118| `ignoreViolations` | [`SandboxIgnoreViolations`](#sandbox-ignore-violations) | `None` | Configure which sandbox violations to ignore |

3119| `enableWeakerNestedSandbox` | `bool` | `False` | Enable a weaker nested sandbox for compatibility |3119| `enableWeakerNestedSandbox` | `bool` | `False` | Enable a weaker nested sandbox for compatibility |

3120 3120 

3121<Note>

3122 **Filesystem and network access restrictions** are NOT configured via sandbox settings. Instead, they are derived from [permission rules](/en/settings#permission-settings):

3123 

3124 * **Filesystem read restrictions**: Read deny rules

3125 * **Filesystem write restrictions**: Edit allow/deny rules

3126 * **Network restrictions**: WebFetch allow/deny rules

3127 

3128 Use sandbox settings for command execution sandboxing, and permission rules for filesystem and network access control.

3129</Note>

3130 

3131#### Example usage3121#### Example usage

3132 3122 

3133```python theme={null}3123```python theme={null}


3156 3146 

3157```python theme={null}3147```python theme={null}

3158class SandboxNetworkConfig(TypedDict, total=False):3148class SandboxNetworkConfig(TypedDict, total=False):

3159 allowLocalBinding: bool3149 allowedDomains: list[str]

3150 deniedDomains: list[str]

3151 allowManagedDomainsOnly: bool

3160 allowUnixSockets: list[str]3152 allowUnixSockets: list[str]

3161 allowAllUnixSockets: bool3153 allowAllUnixSockets: bool

3154 allowLocalBinding: bool

3155 allowMachLookup: list[str]

3162 httpProxyPort: int3156 httpProxyPort: int

3163 socksProxyPort: int3157 socksProxyPort: int

3164```3158```

3165 3159 

3166| Property | Type | Default | Description |3160| Property | Type | Default | Description |

3167| :-------------------- | :---------- | :------ | :---------------------------------------------------------------- |3161| :------------------------ | :---------- | :------ | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

3168| `allowLocalBinding` | `bool` | `False` | Allow processes to bind to local ports (e.g., for dev servers) |3162| `allowedDomains` | `list[str]` | `[]` | Domain names that sandboxed processes can access |

3163| `deniedDomains` | `list[str]` | `[]` | Domain names that sandboxed processes cannot access. Takes precedence over `allowedDomains` |

3164| `allowManagedDomainsOnly` | `bool` | `False` | Managed-settings only: when set in managed settings, ignore `allowedDomains` from non-managed settings sources. Has no effect when set via SDK options |

3169| `allowUnixSockets` | `list[str]` | `[]` | Unix socket paths that processes can access (e.g., Docker socket) |3165| `allowUnixSockets` | `list[str]` | `[]` | Unix socket paths that processes can access (e.g., Docker socket) |

3170| `allowAllUnixSockets` | `bool` | `False` | Allow access to all Unix sockets |3166| `allowAllUnixSockets` | `bool` | `False` | Allow access to all Unix sockets |

3167| `allowLocalBinding` | `bool` | `False` | Allow processes to bind to local ports (e.g., for dev servers) |

3168| `allowMachLookup` | `list[str]` | `[]` | macOS only: XPC/Mach service names to allow. Supports a trailing wildcard |

3171| `httpProxyPort` | `int` | `None` | HTTP proxy port for network requests |3169| `httpProxyPort` | `int` | `None` | HTTP proxy port for network requests |

3172| `socksProxyPort` | `int` | `None` | SOCKS proxy port for network requests |3170| `socksProxyPort` | `int` | `None` | SOCKS proxy port for network requests |

3173 3171 

3172<Note>

3173 The built-in sandbox proxy enforces the network allowlist based on the requested hostname and does not terminate or inspect TLS traffic, so techniques such as [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) can potentially bypass it. See [Sandboxing security limitations](/en/sandboxing#security-limitations) for details and [Secure deployment](/en/agent-sdk/secure-deployment#traffic-forwarding) for configuring a TLS-terminating proxy.

3174</Note>

3175 

3174### `SandboxIgnoreViolations`3176### `SandboxIgnoreViolations`

3175 3177 

3176Configuration for ignoring specific sandbox violations.3178Configuration for ignoring specific sandbox violations.

Details

100 100 

1011. **Same-host kernel**: Unlike VMs, sandboxed processes share the host kernel. A kernel vulnerability could theoretically enable escape. For some threat models this is acceptable, but if you need kernel-level isolation, use gVisor or a separate VM.1011. **Same-host kernel**: Unlike VMs, sandboxed processes share the host kernel. A kernel vulnerability could theoretically enable escape. For some threat models this is acceptable, but if you need kernel-level isolation, use gVisor or a separate VM.

102 102 

1032. **No TLS inspection**: The proxy allowlists domains but doesn't inspect encrypted traffic. If the agent has permissive credentials for an allowed domain, ensure it isn't possible to use that domain to trigger other network requests or to exfiltrate data.1032. **No TLS inspection**: The proxy allowlists domains based on the client-supplied hostname and does not terminate or inspect encrypted traffic. Code running inside the sandbox can potentially use [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) or similar techniques to reach hosts outside the allowlist. If your threat model requires stronger guarantees, configure a [TLS-terminating proxy](#traffic-forwarding). See the [sandboxing security limitations](/en/sandboxing#security-limitations) for more detail. Separately, if the agent has permissive credentials for an allowed domain, ensure it cannot use that domain to trigger other network requests or to exfiltrate data.

104 104 

105For many single-developer and CI/CD use cases, sandbox-runtime raises the bar significantly with minimal setup. The sections below cover containers and VMs for deployments requiring stronger isolation.105For many single-developer and CI/CD use cases, sandbox-runtime raises the bar significantly with minimal setup. The sections below cover containers and VMs for deployments requiring stronger isolation.

106 106 

Details

835 835 

836The `message` field is a [`BetaMessage`](https://platform.claude.com/docs/en/api/messages/create) from the Anthropic SDK. It includes fields like `id`, `content`, `model`, `stop_reason`, and `usage`.836The `message` field is a [`BetaMessage`](https://platform.claude.com/docs/en/api/messages/create) from the Anthropic SDK. It includes fields like `id`, `content`, `model`, `stop_reason`, and `usage`.

837 837 

838`SDKAssistantMessageError` is one of: `'authentication_failed'`, `'billing_error'`, `'rate_limit'`, `'invalid_request'`, `'server_error'`, `'max_output_tokens'`, or `'unknown'`.838`SDKAssistantMessageError` is one of: `'authentication_failed'`, `'oauth_org_not_allowed'`, `'billing_error'`, `'rate_limit'`, `'invalid_request'`, `'server_error'`, `'max_output_tokens'`, or `'unknown'`.

839 839 

840### `SDKUserMessage`840### `SDKUserMessage`

841 841 


851 isSynthetic?: boolean;851 isSynthetic?: boolean;

852 shouldQuery?: boolean;852 shouldQuery?: boolean;

853 tool_use_result?: unknown;853 tool_use_result?: unknown;

854 origin?: SDKMessageOrigin;

854};855};

855```856```

856 857 


869 parent_tool_use_id: string | null;870 parent_tool_use_id: string | null;

870 isSynthetic?: boolean;871 isSynthetic?: boolean;

871 tool_use_result?: unknown;872 tool_use_result?: unknown;

873 origin?: SDKMessageOrigin;

872 isReplay: true;874 isReplay: true;

873};875};

874```876```


896 permission_denials: SDKPermissionDenial[];898 permission_denials: SDKPermissionDenial[];

897 structured_output?: unknown;899 structured_output?: unknown;

898 deferred_tool_use?: { id: string; name: string; input: Record<string, unknown> };900 deferred_tool_use?: { id: string; name: string; input: Record<string, unknown> };

901 origin?: SDKMessageOrigin;

899 }902 }

900 | {903 | {

901 type: "result";904 type: "result";


916 modelUsage: { [modelName: string]: ModelUsage };919 modelUsage: { [modelName: string]: ModelUsage };

917 permission_denials: SDKPermissionDenial[];920 permission_denials: SDKPermissionDenial[];

918 errors: string[];921 errors: string[];

922 origin?: SDKMessageOrigin;

919 };923 };

920```924```

921 925 

926The `origin` field forwards the [`SDKMessageOrigin`](#sdkmessageorigin) of the user message that triggered this result. When a background task finishes and the SDK injects a synthetic follow-up turn, the resulting `SDKResultMessage` carries `origin: { kind: "task-notification" }`. Check this field to distinguish results that answer your prompt from results emitted for background-task follow-ups, so you can route or suppress the latter. The field is absent for results emitted before any user turn, such as startup errors.

927 

922When a `PreToolUse` hook returns `permissionDecision: "defer"`, the result has `stop_reason: "tool_deferred"` and `deferred_tool_use` carries the pending tool's `id`, `name`, and `input`. Read this field to surface the request in your own UI, then resume with the same `session_id` to continue. See [Defer a tool call for later](/en/hooks#defer-a-tool-call-for-later) for the full round trip.928When a `PreToolUse` hook returns `permissionDecision: "defer"`, the result has `stop_reason: "tool_deferred"` and `deferred_tool_use` carries the pending tool's `id`, `name`, and `input`. Read this field to surface the request in your own UI, then resume with the same `session_id` to continue. See [Defer a tool call for later](/en/hooks#defer-a-tool-call-for-later) for the full round trip.

923 929 

924### `SDKSystemMessage`930### `SDKSystemMessage`


1009};1015};

1010```1016```

1011 1017 

1018### `SDKMessageOrigin`

1019 

1020Provenance of a user-role message. This appears as `origin` on [`SDKUserMessage`](#sdkusermessage) and is forwarded onto the corresponding [`SDKResultMessage`](#sdkresultmessage) so you can tell what triggered a given turn.

1021 

1022```typescript theme={null}

1023type SDKMessageOrigin =

1024 | { kind: "human" }

1025 | { kind: "channel"; server: string }

1026 | { kind: "peer"; from: string; name?: string }

1027 | { kind: "task-notification" }

1028 | { kind: "coordinator" };

1029```

1030 

1031| `kind` | Meaning |

1032| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |

1033| `human` | Direct input from the end user. On user messages, an absent `origin` also means human input. |

1034| `channel` | Message arriving on a [channel](/en/channels). `server` is the source MCP server name. |

1035| `peer` | Message from another agent session via `SendMessage`. `from` is the sender address; `name` is the sender's display name when available. |

1036| `task-notification` | Synthetic turn injected after a background task finished. See [`SDKTaskNotificationMessage`](#sdktasknotificationmessage). |

1037| `coordinator` | Message from a team coordinator in an [agent team](/en/agent-teams). |

1038 

1012## Hook Types1039## Hook Types

1013 1040 

1014For a comprehensive guide on using hooks with examples and common patterns, see the [Hooks guide](/en/agent-sdk/hooks).1041For a comprehensive guide on using hooks with examples and common patterns, see the [Hooks guide](/en/agent-sdk/hooks).


1375 | {1402 | {

1376 hookEventName: "PostToolUse";1403 hookEventName: "PostToolUse";

1377 additionalContext?: string;1404 additionalContext?: string;

1405 updatedToolOutput?: unknown;

1406 /** @deprecated Use `updatedToolOutput`, which works for all tools. */

1378 updatedMCPToolOutput?: unknown;1407 updatedMCPToolOutput?: unknown;

1379 }1408 }

1380 | {1409 | {


2860| `httpProxyPort` | `number` | `undefined` | HTTP proxy port for network requests |2889| `httpProxyPort` | `number` | `undefined` | HTTP proxy port for network requests |

2861| `socksProxyPort` | `number` | `undefined` | SOCKS proxy port for network requests |2890| `socksProxyPort` | `number` | `undefined` | SOCKS proxy port for network requests |

2862 2891 

2892<Note>

2893 The built-in sandbox proxy enforces `allowedDomains` based on the requested hostname and does not terminate or inspect TLS traffic, so techniques such as [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) can potentially bypass it. See [Sandboxing security limitations](/en/sandboxing#security-limitations) for details and [Secure deployment](/en/agent-sdk/secure-deployment#traffic-forwarding) for configuring a TLS-terminating proxy.

2894</Note>

2895 

2863### `SandboxFilesystemConfig`2896### `SandboxFilesystemConfig`

2864 2897 

2865Filesystem-specific configuration for sandbox mode.2898Filesystem-specific configuration for sandbox mode.

Details

239 "Action": [239 "Action": [

240 "bedrock:InvokeModel",240 "bedrock:InvokeModel",

241 "bedrock:InvokeModelWithResponseStream",241 "bedrock:InvokeModelWithResponseStream",

242 "bedrock:ListInferenceProfiles"242 "bedrock:ListInferenceProfiles",

243 "bedrock:GetInferenceProfile"

243 ],244 ],

244 "Resource": [245 "Resource": [

245 "arn:aws:bedrock:*:*:inference-profile/*",246 "arn:aws:bedrock:*:*:inference-profile/*",


267 268 

268For more restrictive permissions, you can limit the Resource to specific inference profile ARNs.269For more restrictive permissions, you can limit the Resource to specific inference profile ARNs.

269 270 

271`bedrock:GetInferenceProfile` lets Claude Code resolve an [application inference profile ARN](#map-each-model-version-to-an-inference-profile) to its backing foundation model, which is used to select the correct request shape for that model.

272 

273If the token is missing this permission, Claude Code recovers automatically by retrying once with the alternate shape, so requests still succeed but each new model adds an extra round-trip. Granting the permission avoids the retry. This applies most often to `AWS_BEARER_TOKEN_BEDROCK` deployments, where the token's policy is typically narrower than a full IAM role.

274 

270For details, see [Bedrock IAM documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam.html).275For details, see [Bedrock IAM documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam.html).

271 276 

272<Note>277<Note>


279 284 

280The [setup wizard](#sign-in-with-bedrock) offers a 1M context option when it pins models. To enable it for a manually pinned model instead, append `[1m]` to the model ID. See [Pin models for third-party deployments](/en/model-config#pin-models-for-third-party-deployments) for details.285The [setup wizard](#sign-in-with-bedrock) offers a 1M context option when it pins models. To enable it for a manually pinned model instead, append `[1m]` to the model ID. See [Pin models for third-party deployments](/en/model-config#pin-models-for-third-party-deployments) for details.

281 286 

287## Service tiers

288 

289[Amazon Bedrock service tiers](https://docs.aws.amazon.com/bedrock/latest/userguide/service-tiers-inference.html) let you trade off cost against latency. Set `ANTHROPIC_BEDROCK_SERVICE_TIER` to `default`, `flex`, or `priority`:

290 

291```bash theme={null}

292export ANTHROPIC_BEDROCK_SERVICE_TIER=priority

293```

294 

295Claude Code sends this as the `X-Amzn-Bedrock-Service-Tier` header on each request. Tier availability varies by model and region. Reserved capacity uses a [provisioned throughput](https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html) ARN as the model ID instead of this setting.

296 

282## AWS Guardrails297## AWS Guardrails

283 298 

284[Amazon Bedrock Guardrails](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html) let you implement content filtering for Claude Code. Create a Guardrail in the [Amazon Bedrock console](https://console.aws.amazon.com/bedrock/), publish a version, then add the Guardrail headers to your [settings file](/en/settings). Enable Cross-Region inference on your Guardrail if you're using cross-region inference profiles.299[Amazon Bedrock Guardrails](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html) let you implement content filtering for Claude Code. Create a Guardrail in the [Amazon Bedrock console](https://console.aws.amazon.com/bedrock/), publish a version, then add the Guardrail headers to your [settings file](/en/settings). Enable Cross-Region inference on your Guardrail if you're using cross-region inference profiles.

analytics.md +2 −0

Details

24* **Leaderboard**: top contributors ranked by Claude Code usage24* **Leaderboard**: top contributors ranked by Claude Code usage

25* **Data export**: download contribution data as CSV for custom reporting25* **Data export**: download contribution data as CSV for custom reporting

26 26 

27For per-user token counts and cost estimates, configure [OpenTelemetry export](/en/monitoring-usage).

28 

27### Enable contribution metrics29### Enable contribution metrics

28 30 

29<Note>31<Note>

Details

14 14 

15If the browser doesn't open automatically, press `c` to copy the login URL to your clipboard, then paste it into your browser.15If the browser doesn't open automatically, press `c` to copy the login URL to your clipboard, then paste it into your browser.

16 16 

17If your browser shows a login code instead of redirecting back after you sign in, paste it into the terminal at the `Paste code here if prompted` prompt.17If your browser shows a login code instead of redirecting back after you sign in, paste it into the terminal at the `Paste code here if prompted` prompt. This happens when the browser can't reach Claude Code's local callback server, which is common in WSL2, SSH sessions, and containers.

18 18 

19You can authenticate with any of these account types:19You can authenticate with any of these account types:

20 20 


25 25 

26To log out and re-authenticate, type `/logout` at the Claude Code prompt.26To log out and re-authenticate, type `/logout` at the Claude Code prompt.

27 27 

28If you're having trouble logging in, see [authentication troubleshooting](/en/troubleshooting#authentication-issues).28If you're having trouble logging in, see [authentication troubleshooting](/en/troubleshoot-install#login-and-authentication).

29 29 

30## Set up team authentication30## Set up team authentication

31 31 

Details

8 8 

9[Auto mode](/en/permission-modes#eliminate-prompts-with-auto-mode) lets Claude Code run without permission prompts by routing each tool call through a classifier that blocks anything irreversible, destructive, or aimed outside your environment. Use the `autoMode` settings block to tell that classifier which repos, buckets, and domains your organization trusts, so it stops blocking routine internal operations.9[Auto mode](/en/permission-modes#eliminate-prompts-with-auto-mode) lets Claude Code run without permission prompts by routing each tool call through a classifier that blocks anything irreversible, destructive, or aimed outside your environment. Use the `autoMode` settings block to tell that classifier which repos, buckets, and domains your organization trusts, so it stops blocking routine internal operations.

10 10 

11<Note>

12 Auto mode is available on Max, Team, Enterprise, and API plans through the Anthropic API. It is not available on Pro or on Bedrock, Vertex, or Foundry. If Claude Code reports auto mode as unavailable for your account, check the [full requirements](/en/permission-modes#eliminate-prompts-with-auto-mode), which also cover the supported models and admin enablement on Team and Enterprise plans.

13</Note>

14 

11Out of the box, the classifier trusts only the working directory and the current repo's configured remotes. Actions like pushing to your company's source-control org or writing to a team cloud bucket are blocked until you add them to `autoMode.environment`.15Out of the box, the classifier trusts only the working directory and the current repo's configured remotes. Actions like pushing to your company's source-control org or writing to a team cloud bucket are blocked until you add them to `autoMode.environment`.

12 16 

13For how to enable auto mode and what it blocks by default, see [Permission modes](/en/permission-modes#eliminate-prompts-with-auto-mode). This page is the configuration reference.17For how to enable auto mode and what it blocks by default, see [Permission modes](/en/permission-modes#eliminate-prompts-with-auto-mode). This page is the configuration reference.

champion-kit.md +195 −0 added

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Champion kit

6 

7> A playbook for engineers advocating Claude Code internally: what to share, how to answer questions, and how to grow adoption on your team.

8 

9This page is for individual engineers who are already using Claude Code and want to help their team adopt it. It covers what to share, how to answer the questions you will get, a thirty-day playbook, and responses to common concerns.

10 

11Adoption of a developer tool rarely happens because of a rollout announcement. It happens because someone on the team begins using the tool well, talks about it openly, and makes it easy for others to follow. The work you do as a champion has a disproportionate effect: every example you share shortens the learning curve for the engineers who come after you, and every question you answer in public turns one person's experience into something the whole team can build on. You are acting as a multiplier for your team, not a help desk, and this guide is structured to keep the role sustainable on those terms.

12 

13## The champion role

14 

15The role consists of three behaviors that reinforce one another.

16 

17| Behavior | What it looks like in practice | Why it matters |

18| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

19| Share what you discover | Post the prompts, screenshots, and small wins from your own work in the places your team already reads, such as an engineering channel, a standup thread, or a pull-request description. | Examples drawn from your own codebase are more persuasive than any external documentation, because colleagues can see exactly how the tool applies to the problems they share with you. |

20| Be the person people ask | When a colleague asks how you accomplished something, respond with the actual prompt you used so they can apply it directly to their own task. | A concrete, runnable example removes the gap between curiosity and a first successful use, which is where most adoption efforts stall. |

21| Grow the circle | Establish a small number of lightweight, recurring habits, such as a dedicated channel or a weekly thread, so that momentum continues even when your attention is elsewhere. | Adoption that depends on a single person is fragile. Adoption that is carried by shared habits continues to compound on its own. |

22 

23Most of this fits naturally inside the work you are already doing. The difference is a small amount of additional intention about where your discoveries are posted and how your answers travel.

24 

25### What this should cost you

26 

27Set expectations with yourself and with your lead. The activities below are intended to fit inside a normal working week, and the role should remain a multiplier on your existing work rather than an additional support responsibility.

28 

29| Activity | Time per week | Guidance |

30| --------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------ |

31| Posting wins and prompts | About 15 minutes | Capture these in the moment with a screenshot and one or two sentences; avoid turning them into formal write-ups. |

32| Answering questions in a shared channel | About 20 minutes | Answer publicly once, then link back to that answer when the question recurs. |

33| Hosting a weekly show-and-tell thread | About 5 minutes | You post the opening prompt; the team supplies the content. |

34| Optional pairing or walkthroughs | 0 to 30 minutes | Reserve this for colleagues who are genuinely blocked, and offer the [Quickstart](/en/quickstart) link before scheduling time. |

35 

36## Share what you discover

37 

38Your own experience is the most persuasive material your colleagues will encounter, because it is specific to the codebase, workflows, and problems you all share. Documentation tells people what is possible; your posts show them what is actually working in your environment.

39 

40### What is worth sharing

41 

42The most useful posts describe a technique a colleague can reuse tomorrow rather than an outcome that is already complete. Techniques compound as they spread through a team; status updates do not.

43 

44Examples of reusable techniques:

45 

46* "I learned that @-mentioning a directory works. Pointing it at `@src/components/` and asking which were missing tests surfaced two I had overlooked."

47* "Plan mode (`Shift+Tab`) shows exactly which files will be touched before any edit is made, which is why I am comfortable using it on shared code."

48* "I configured a Stop hook so I receive a desktop notification when a long task completes. Configuration is in the thread."

49* "Running `/init` generates a `CLAUDE.md` from the repository so the assistant stops re-asking about our conventions."

50 

51### Where to share it

52 

53Post wherever your team already reads. The goal is to place examples in the path of normal work rather than to create a destination.

54 

55| Location | Best suited for | Recommended format |

56| ----------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |

57| A `#claude-code` or general engineering channel | Discoveries, prompts, and "today I learned" moments | A screenshot accompanied by one or two sentences of context |

58| Pull-request descriptions | Demonstrating the approach on real code that reviewers are already reading | A single line such as "Claude and I did this refactor; happy to walk through the approach." |

59| Standups or weekly written updates | Normalizing usage with leads and skip-level managers | One sentence describing one concrete outcome |

60| Team wiki or internal documentation | Durable patterns, custom skills, and `CLAUDE.md` examples | A short page, linked from the channel topic so it remains discoverable |

61 

62### The format that works

63 

64A screenshot accompanied by a single line of context, or a brief before-and-after description, is generally the right level of detail. Keep each post short enough that someone scrolling past still absorbs the point. A long write-up tends to be saved for later and forgotten, whereas a short post with a screenshot tends to be copied and tried.

65 

66The example posts below illustrate tone and length; adapt them rather than copying verbatim.

67 

68```text theme={null}

69Learned today that @-mentioning a directory works. I pointed it at

70@src/components/ and asked which components were missing tests, and it

71surfaced two I had forgotten about.

72```

73 

74```text theme={null}

75I configured a Stop hook so I receive a desktop notification when a long

76task completes. I started a refactor, stepped away, and was notified when

77it finished. Configuration is in the thread.

78```

79 

80```text theme={null}

81Plan mode is the reason I am comfortable using this on code that matters.

82Press Shift+Tab until you see "plan"; it lays out exactly which files it

83intends to touch before changing anything.

84```

85 

86## Be the person people ask

87 

88Once you have shared a few examples, questions will follow. This is where the champion role has the greatest leverage, because a good answer to one person frequently unblocks several others who are watching the same channel.

89 

90### Answer with a prompt rather than an explanation

91 

92When a colleague asks how you accomplished something, the most useful response is the prompt you actually used. They will learn more from running that prompt against their own problem than from any description you could write, and it gives them something they can act on immediately.

93 

94```text theme={null}

95Colleague: How did you get it to find that race condition?

96 

97Champion: I asked, "The test in @tests/scheduler.test.ts is flaky, figure

98out why," and it traced two unjoined promises in the scheduler. Try the

99same phrasing on your test.

100```

101 

102### Point at the feature rather than the documentation

103 

104A response such as "Try plan mode, press `Shift+Tab` until you see it" is more useful in the moment than a link to the documentation. If the person needs more depth later they will find it on their own; right now they need the single thing that unblocks them.

105 

106### Questions you are likely to hear

107 

108| Question | Suggested response | Follow-up resource |

109| -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |

110| "What should I try it on first?" | Recommend a real but contained task, ideally a bug or chore the person has been postponing because it is tedious rather than difficult. | [Common workflows](/en/common-workflows) |

111| "How do I trust it with my code?" | Introduce plan mode: pressing `Shift+Tab` cycles into it, Claude proposes exactly what it intends to change, and nothing is modified until the user approves. | [Permissions](/en/permissions) |

112| "Is the setup worth the effort?" | Installation takes roughly two minutes, runs in the terminal, and requires no IDE extension. Running `/init` once is sufficient to begin working. | [Quickstart](/en/quickstart) |

113| "It produced an incorrect result." | Encourage them to provide the failure back to Claude. Pasting the error message or failing test is far more effective than rephrasing the original request. | [Common workflows](/en/common-workflows) |

114| "It does not understand our codebase conventions." | Suggest running `/init` to generate a `CLAUDE.md` file, then adding the team's conventions, test commands, and any directories that should be avoided. | [Memory](/en/memory) |

115| "Is this just autocomplete?" | Offer a brief demonstration in which Claude explains an unfamiliar file, traces a bug across services, or drafts a migration plan. These tasks require reasoning across the repository rather than completing a single line. | A two-minute live demonstration |

116| "What about security and data handling?" | Refer this question to your administrator. Your organization's deployment and data-handling policy is already configured, and champions should not improvise this answer. | [Security](/en/security) · [Data usage](/en/data-usage) |

117 

118## Grow the circle

119 

120The objective is not to build a program or to own a rollout. It is to establish a small number of lightweight habits that allow momentum to continue after you have stopped actively driving it. When questions in the channel are being answered by people other than you, the role has done its job.

121 

122### Patterns that tend to work

123 

124| Pattern | How to run it | Effort required |

125| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |

126| A dedicated channel | Create a `#claude-code` channel (or a recurring thread in an existing one), pin the [Quickstart](/en/quickstart) link and one strong example, and answer questions publicly so each answer benefits everyone watching. | About five minutes to set up, then ambient |

127| A weekly show-and-tell thread | Each Friday, post "What did Claude help you with this week?" No preparation, slides, or meeting are required; screenshots and short descriptions are sufficient. | About two minutes per week |

128| Share a custom skill | Post your most useful `.claude/skills/<name>/SKILL.md` file, for example a `/ship` skill that runs tests and lint before committing, with a one-line description. Because skills are plain Markdown, colleagues can adopt them immediately. | About five minutes per skill |

129| Generate a setup guide from your own usage | Run `/team-onboarding` in a project you have spent real time in. Claude scans your recent sessions, commands, and MCP servers, then produces a guide a new teammate can paste as their first message to replay your setup. Pin it in the channel. | About two minutes |

130| Pair on a first task | Offer a single fifteen-minute pairing session to anyone getting started. One successful outcome on their own code is more persuasive than any presentation. | About fifteen minutes per person |

131| Identify the next champion | The colleague who asks you the most questions is usually ready to take on this role. Forward them this page and divide the channel responsibilities between you. | Negligible |

132 

133### Thirty-day playbook

134 

135If a loose plan is helpful, the sequence below reflects what tends to work across most teams. Adjust freely to fit your context.

136 

137<Steps>

138 <Step title="Week 1: Seed the channel">

139 Create the channel, pin the [Quickstart](/en/quickstart), and post two or three of your own examples with the prompts included.

140 

141 **Signal that it is working:** a few colleagues react or reply, and at least one question is asked in the channel.

142 </Step>

143 

144 <Step title="Week 2: Start the rhythm">

145 Start the weekly show-and-tell thread, answer every question publicly, and share one custom skill or `CLAUDE.md` snippet.

146 

147 **Signal that it is working:** someone other than you posts an example of their own.

148 </Step>

149 

150 <Step title="Week 3: Pair and consolidate">

151 Offer two or three short pairing sessions and consolidate the most common questions and answers into a pinned FAQ message.

152 

153 **Signal that it is working:** you see repeat usage, with the same colleagues returning rather than trying once and stopping.

154 </Step>

155 

156 <Step title="Week 4: Hand off">

157 Identify a second champion and share a brief summary of what is working and what is not with your lead or administrator.

158 

159 **Signal that it is working:** questions in the channel are being answered by people other than you.

160 </Step>

161</Steps>

162 

163### When someone wants to go deeper

164 

165You are the warm introduction rather than the onboarding program. When a colleague moves past "should I try this" into "how do I become effective with it," point them to the [Quickstart](/en/quickstart) and [Common workflows](/en/common-workflows) pages. They contain short sections covering the features that are genuinely useful but difficult to discover on your own.

166 

167## Respond to common concerns

168 

169Healthy skepticism is expected; engineers should be cautious about tools that touch their code. The most effective response is rarely to argue the general case. Instead, acknowledge the concern, offer a brief reframe, and propose one concrete demonstration on the person's own code. Most concerns are resolved by a single successful experience.

170 

171| Concern | Suggested response | Evidence to offer |

172| --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |

173| "I am faster without it." | That is likely true for code the person writes routinely. Suggest trying it on the work they tend to avoid: legacy files, unfamiliar services, or test scaffolding, where the leverage is highest. | Time one tedious task both ways and compare. |

174| "I do not trust AI to touch production code." | Agree that no change should land unread. Plan mode combined with normal diff review means nothing is applied that the engineer has not inspected, the same standard as any pull request. | Demonstrate plan mode on a real file. |

175| "It will make junior engineers weaker." | Used well, it is an effective explainer. Encourage junior engineers to ask Claude to explain a file and its call sites before asking it to change anything. | Run "Explain @file and where it is called from" together. |

176| "I tried it once and it hallucinated." | This is usually a context problem rather than a model problem. @-mentioning the relevant files, running `/init`, and providing the actual error output typically resolves it. | Re-run their original prompt with proper `@`-context. |

177| "We do not have time to learn another tool." | Claude Code is a terminal command rather than a platform. If it does not return value within the first session, it is reasonable to set it aside. | A two-minute install followed by one real bug. |

178 

179## Quick-reference sheet

180 

181The techniques below are the ones that most reliably move someone from a first trial to daily use. Pin this table in a channel or share it on its own.

182 

183| Technique | How to apply it |

184| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |

185| Provide the right context | Use `@file` or `@directory/` references, or paste the error or log output directly. Supplying relevant context is more effective than elaborate prompting. |

186| Review the plan before the edit | Press `Shift+Tab` to enter plan mode. Claude will describe the intended changes for your approval before executing them. |

187| Teach it your repository | Run `/init` to generate a `CLAUDE.md` file, then add your conventions, test commands, and any directories that should not be modified. See [Memory](/en/memory). |

188| Reuse a workflow | Save a `SKILL.md` file in `.claude/skills/<name>/` to create a `/name` skill that the entire team can use. See [Skills](/en/skills). |

189| Stay informed during long tasks | Configure a Stop hook to receive a desktop notification when a long-running task completes. See [Hooks](/en/hooks-guide). |

190| Recover from an incorrect result | Rather than rephrasing the request, paste the failing test or stack trace back to Claude and ask it to address that specific failure. |

191| Keep edits surgical | Ask for a diff, or specify "only change X." Claude respects scope when scope is stated. |

192 

193<Tip>

194 Claude Code is updated frequently. Verify version-specific details against the [documentation home page](/en/overview) before distributing this material internally.

195</Tip>

Details

787* **Rate limits**: Claude Code on the web shares rate limits with all other Claude and Claude Code usage within your account. Running multiple tasks in parallel consumes more rate limits proportionately. There is no separate compute charge for the cloud VM.787* **Rate limits**: Claude Code on the web shares rate limits with all other Claude and Claude Code usage within your account. Running multiple tasks in parallel consumes more rate limits proportionately. There is no separate compute charge for the cloud VM.

788* **Repository authentication**: you can only move sessions from web to local when you are authenticated to the same account788* **Repository authentication**: you can only move sessions from web to local when you are authenticated to the same account

789* **Platform restrictions**: repository cloning and pull request creation require GitHub. Self-hosted [GitHub Enterprise Server](/en/github-enterprise-server) instances are supported for Team and Enterprise plans. GitLab, Bitbucket, and other non-GitHub repositories can be sent to cloud sessions as a [local bundle](#send-local-repositories-without-github), but the session can't push results back to the remote789* **Platform restrictions**: repository cloning and pull request creation require GitHub. Self-hosted [GitHub Enterprise Server](/en/github-enterprise-server) instances are supported for Team and Enterprise plans. GitLab, Bitbucket, and other non-GitHub repositories can be sent to cloud sessions as a [local bundle](#send-local-repositories-without-github), but the session can't push results back to the remote

790* **Organization IP allowlist**: cloud sessions call the Anthropic API from Anthropic-managed infrastructure, not your network. If your organization has [IP allowlisting](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting) enabled, every cloud session fails with an authentication error. The same applies to [Code Review](/en/code-review) and [Routines](/en/routines). Contact [Anthropic support](https://support.claude.com/) to exempt Anthropic-hosted services from your organization's IP allowlist.

790 791 

791## Related resources792## Related resources

792 793 

Details

128 128 

129### Clear local data129### Clear local data

130 130 

131You can delete any of the application-data paths above at any time. New sessions are unaffected. The table below shows what you lose for past sessions.131Run `claude project purge` to delete the state Claude Code holds for one project:

132 

133* Transcripts and auto memory under `projects/`

134* Per-session `tasks/`, `debug/`, and `file-history/` entries

135* Matching prompt lines in `history.jsonl`

136* The project's entry in `~/.claude.json`

137 

138The command prints the full deletion plan and asks for confirmation before removing anything.

139 

140Preview the plan without deleting anything:

141 

142```bash theme={null}

143claude project purge ~/work/my-repo --dry-run

144```

145 

146Delete with a single confirmation prompt:

147 

148```bash theme={null}

149claude project purge ~/work/my-repo

150```

151 

152Omit the path to pick a project from an interactive list.

153 

154Skip the confirmation prompt for use in scripts:

155 

156```bash theme={null}

157claude project purge ~/work/my-repo --yes

158```

159 

160Pass `--all` instead of a path to purge state for every project at once, which deletes `history.jsonl` outright rather than filtering it. Pass `-i` to step through the deletion plan one item at a time.

161 

162The command leaves `shell-snapshots/` and `backups/` alone because those are not project-scoped, and warns about them in the plan output. It exits with status 1 if no state matches the given path.

163 

164You can also delete any of the application-data paths above by hand. New sessions are unaffected. The table below shows what you lose for past sessions.

132 165 

133| Delete | You lose |166| Delete | You lose |

134| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |167| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |

Details

11You can start sessions, pipe content, resume conversations, and manage updates with these commands:11You can start sessions, pipe content, resume conversations, and manage updates with these commands:

12 12 

13| Command | Description | Example |13| Command | Description | Example |

14| :------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------- |14| :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- |

15| `claude` | Start interactive session | `claude` |15| `claude` | Start interactive session | `claude` |

16| `claude "query"` | Start interactive session with initial prompt | `claude "explain this project"` |16| `claude "query"` | Start interactive session with initial prompt | `claude "explain this project"` |

17| `claude -p "query"` | Query via SDK, then exit | `claude -p "explain this function"` |17| `claude -p "query"` | Query via SDK, then exit | `claude -p "explain this function"` |


28| `claude auto-mode defaults` | Print the built-in [auto mode](/en/permission-modes#eliminate-prompts-with-auto-mode) classifier rules as JSON. Use `claude auto-mode config` to see your effective config with settings applied | `claude auto-mode defaults > rules.json` |28| `claude auto-mode defaults` | Print the built-in [auto mode](/en/permission-modes#eliminate-prompts-with-auto-mode) classifier rules as JSON. Use `claude auto-mode config` to see your effective config with settings applied | `claude auto-mode defaults > rules.json` |

29| `claude mcp` | Configure Model Context Protocol (MCP) servers | See the [Claude Code MCP documentation](/en/mcp). |29| `claude mcp` | Configure Model Context Protocol (MCP) servers | See the [Claude Code MCP documentation](/en/mcp). |

30| `claude plugin` | Manage Claude Code [plugins](/en/plugins). Alias: `claude plugins`. See [plugin reference](/en/plugins-reference#cli-commands-reference) for subcommands | `claude plugin install code-review@claude-plugins-official` |30| `claude plugin` | Manage Claude Code [plugins](/en/plugins). Alias: `claude plugins`. See [plugin reference](/en/plugins-reference#cli-commands-reference) for subcommands | `claude plugin install code-review@claude-plugins-official` |

31| `claude project purge [path]` | Delete all local Claude Code state for a project: transcripts, task lists, debug logs, file-edit history, prompt history lines, and the project's entry in `~/.claude.json`. Omit `[path]` to pick from an interactive list. Flags: `--dry-run` to preview, `-y`/`--yes` to skip confirmation, `-i`/`--interactive` to confirm each item, `--all` for every project. See [Clear local data](/en/claude-directory#clear-local-data) | `claude project purge ~/work/repo --dry-run` |

31| `claude remote-control` | Start a [Remote Control](/en/remote-control) server to control Claude Code from Claude.ai or the Claude app. Runs in server mode (no local interactive session). See [Server mode flags](/en/remote-control#start-a-remote-control-session) | `claude remote-control --name "My Project"` |32| `claude remote-control` | Start a [Remote Control](/en/remote-control) server to control Claude Code from Claude.ai or the Claude app. Runs in server mode (no local interactive session). See [Server mode flags](/en/remote-control#start-a-remote-control-session) | `claude remote-control --name "My Project"` |

32| `claude setup-token` | Generate a long-lived OAuth token for CI and scripts. Prints the token to the terminal without saving it. Requires a Claude subscription. See [Generate a long-lived token](/en/authentication#generate-a-long-lived-token) | `claude setup-token` |33| `claude setup-token` | Generate a long-lived OAuth token for CI and scripts. Prints the token to the terminal without saving it. Requires a Claude subscription. See [Generate a long-lived token](/en/authentication#generate-a-long-lived-token) | `claude setup-token` |

34| `claude ultrareview [target]` | Run [ultrareview](/en/ultrareview#run-ultrareview-non-interactively) non-interactively. Prints findings to stdout and exits 0 on success or 1 on failure. Use `--json` for the raw payload and `--timeout <minutes>` to override the 30-minute default | `claude ultrareview 1234 --json` |

33 35 

34If you mistype a subcommand, Claude Code suggests the closest match and exits without starting a session. For example, `claude udpate` prints `Did you mean claude update?`.36If you mistype a subcommand, Claude Code suggests the closest match and exits without starting a session. For example, `claude udpate` prints `Did you mean claude update?`.

35 37 


64| `--fork-session` | When resuming, create a new session ID instead of reusing the original (use with `--resume` or `--continue`) | `claude --resume abc123 --fork-session` |66| `--fork-session` | When resuming, create a new session ID instead of reusing the original (use with `--resume` or `--continue`) | `claude --resume abc123 --fork-session` |

65| `--from-pr` | Resume sessions linked to a specific pull request. Accepts a PR number, a GitHub or GitHub Enterprise PR URL, a GitLab merge request URL, or a Bitbucket pull request URL. Sessions are linked automatically when Claude creates the pull request | `claude --from-pr 123` |67| `--from-pr` | Resume sessions linked to a specific pull request. Accepts a PR number, a GitHub or GitHub Enterprise PR URL, a GitLab merge request URL, or a Bitbucket pull request URL. Sessions are linked automatically when Claude creates the pull request | `claude --from-pr 123` |

66| `--ide` | Automatically connect to IDE on startup if exactly one valid IDE is available | `claude --ide` |68| `--ide` | Automatically connect to IDE on startup if exactly one valid IDE is available | `claude --ide` |

67| `--init` | Run initialization hooks and start interactive mode | `claude --init` |69| `--init` | Run [Setup hooks](/en/hooks#setup) with the `init` matcher before the session (print mode only) | `claude -p --init "query"` |

68| `--init-only` | Run initialization hooks and exit (no interactive session) | `claude --init-only` |70| `--init-only` | Run [Setup](/en/hooks#setup) and `SessionStart` hooks, then exit without starting a conversation | `claude --init-only` |

69| `--include-hook-events` | Include all hook lifecycle events in the output stream. Requires `--output-format stream-json` | `claude -p --output-format stream-json --include-hook-events "query"` |71| `--include-hook-events` | Include all hook lifecycle events in the output stream. Requires `--output-format stream-json` | `claude -p --output-format stream-json --include-hook-events "query"` |

70| `--include-partial-messages` | Include partial streaming events in output. Requires `--print` and `--output-format stream-json` | `claude -p --output-format stream-json --include-partial-messages "query"` |72| `--include-partial-messages` | Include partial streaming events in output. Requires `--print` and `--output-format stream-json` | `claude -p --output-format stream-json --include-partial-messages "query"` |

71| `--input-format` | Specify input format for print mode (options: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |73| `--input-format` | Specify input format for print mode (options: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |

72| `--json-schema` | Get validated JSON output matching a JSON Schema after agent completes its workflow (print mode only, see [structured outputs](/en/agent-sdk/structured-outputs)) | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |74| `--json-schema` | Get validated JSON output matching a JSON Schema after agent completes its workflow (print mode only, see [structured outputs](/en/agent-sdk/structured-outputs)) | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |

73| `--maintenance` | Run maintenance hooks and start interactive mode | `claude --maintenance` |75| `--maintenance` | Run [Setup hooks](/en/hooks#setup) with the `maintenance` matcher before the session (print mode only) | `claude -p --maintenance "query"` |

74| `--max-budget-usd` | Maximum dollar amount to spend on API calls before stopping (print mode only) | `claude -p --max-budget-usd 5.00 "query"` |76| `--max-budget-usd` | Maximum dollar amount to spend on API calls before stopping (print mode only) | `claude -p --max-budget-usd 5.00 "query"` |

75| `--max-turns` | Limit the number of agentic turns (print mode only). Exits with an error when the limit is reached. No limit by default | `claude -p --max-turns 3 "query"` |77| `--max-turns` | Limit the number of agentic turns (print mode only). Exits with an error when the limit is reached. No limit by default | `claude -p --max-turns 3 "query"` |

76| `--mcp-config` | Load MCP servers from JSON files or strings (space-separated) | `claude --mcp-config ./mcp.json` |78| `--mcp-config` | Load MCP servers from JSON files or strings (space-separated) | `claude --mcp-config ./mcp.json` |

commands.md +3 −1

Details

10 10 

11Type `/` to see every command available to you, or type `/` followed by letters to filter.11Type `/` to see every command available to you, or type `/` followed by letters to filter.

12 12 

13A command is only recognized at the start of your message. Text that follows the command name is passed to it as arguments.

14 

13The table below lists all the commands included in Claude Code. Entries marked **[Skill](/en/skills#bundled-skills)** are bundled skills. They use the same mechanism as skills you write yourself: a prompt handed to Claude, which Claude can also invoke automatically when relevant. Everything else is a built-in command whose behavior is coded into the CLI. To add your own commands, see [skills](/en/skills).15The table below lists all the commands included in Claude Code. Entries marked **[Skill](/en/skills#bundled-skills)** are bundled skills. They use the same mechanism as skills you write yourself: a prompt handed to Claude, which Claude can also invoke automatically when relevant. Everything else is a built-in command whose behavior is coded into the CLI. To add your own commands, see [skills](/en/skills).

14 16 

15Not every command appears for every user. Availability depends on your platform, plan, and environment. For example, `/desktop` only shows on macOS and Windows, and `/upgrade` only shows on Pro and Max plans.17Not every command appears for every user. Availability depends on your platform, plan, and environment. For example, `/desktop` only shows on macOS and Windows, and `/upgrade` only shows on Pro and Max plans.


45| `/feedback [report]` | Submit feedback about Claude Code. Alias: `/bug` |47| `/feedback [report]` | Submit feedback about Claude Code. Alias: `/bug` |

46| `/fewer-permission-prompts` | **[Skill](/en/skills#bundled-skills).** Scan your transcripts for common read-only Bash and MCP tool calls, then add a prioritized allowlist to project `.claude/settings.json` to reduce permission prompts |48| `/fewer-permission-prompts` | **[Skill](/en/skills#bundled-skills).** Scan your transcripts for common read-only Bash and MCP tool calls, then add a prioritized allowlist to project `.claude/settings.json` to reduce permission prompts |

47| `/focus` | Toggle the focus view, which shows only your last prompt, a one-line tool-call summary with edit diffstats, and the final response. The selection persists across sessions. Only available in [fullscreen rendering](/en/fullscreen) |49| `/focus` | Toggle the focus view, which shows only your last prompt, a one-line tool-call summary with edit diffstats, and the final response. The selection persists across sessions. Only available in [fullscreen rendering](/en/fullscreen) |

48| `/heapdump` | Write a JavaScript heap snapshot and a memory breakdown to `~/Desktop` for diagnosing high memory usage. See [troubleshooting](/en/troubleshooting#high-cpu-or-memory-usage) |50| `/heapdump` | Write a JavaScript heap snapshot and a memory breakdown to `~/Desktop`, or your home directory on Linux without a Desktop folder, for diagnosing high memory usage. See [troubleshooting](/en/troubleshooting#high-cpu-or-memory-usage) |

49| `/help` | Show help and available commands |51| `/help` | Show help and available commands |

50| `/hooks` | View [hook](/en/hooks) configurations for tool events |52| `/hooks` | View [hook](/en/hooks) configurations for tool events |

51| `/ide` | Manage IDE integrations and show status |53| `/ide` | Manage IDE integrations and show status |

Details

357 </Step>357 </Step>

358</Steps>358</Steps>

359 359 

360When you create a PR using `gh pr create`, the session is automatically linked to that PR. You can resume it later with `claude --from-pr <number>`.360When you create a PR using `gh pr create`, the session is automatically linked to that PR. To return to it later, run `claude --from-pr <number>` or paste the PR URL into the [`/resume` picker](#use-the-session-picker) search.

361 361 

362<Tip>362<Tip>

363 Review Claude's generated PR before submitting and ask Claude to highlight potential risks or considerations.363 Review Claude's generated PR before submitting and ask Claude to highlight potential risks or considerations.


619**Keyboard shortcuts in the picker:**619**Keyboard shortcuts in the picker:**

620 620 

621| Shortcut | Action |621| Shortcut | Action |

622| :------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------- |622| :------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |

623| `↑` / `↓` | Navigate between sessions |623| `↑` / `↓` | Navigate between sessions |

624| `→` / `←` | Expand or collapse grouped sessions |624| `→` / `←` | Expand or collapse grouped sessions |

625| `Enter` | Select and resume the highlighted session |625| `Enter` | Select and resume the highlighted session |

626| `Space` | Preview the session content. `Ctrl+V` also works on terminals that do not capture it as paste |626| `Space` | Preview the session content. `Ctrl+V` also works on terminals that do not capture it as paste |

627| `Ctrl+R` | Rename the highlighted session |627| `Ctrl+R` | Rename the highlighted session |

628| `/` or any printable character other than `Space` | Enter search mode and filter sessions |628| `/` or any printable character other than `Space` | Enter search mode and filter sessions. Paste a GitHub, GitHub Enterprise, GitLab, or Bitbucket pull or merge request URL to find the session that created it |

629| `Ctrl+A` | Show sessions from all projects on this machine. Press again to restore the current repository |629| `Ctrl+A` | Show sessions from all projects on this machine. Press again to restore the current repository |

630| `Ctrl+W` | Show sessions from all worktrees of the current repository. Press again to restore the current worktree. Only shown in multi-worktree repositories |630| `Ctrl+W` | Show sessions from all worktrees of the current repository. Press again to restore the current worktree. Only shown in multi-worktree repositories |

631| `Ctrl+B` | Filter to sessions from your current git branch. Press again to show sessions from all branches |631| `Ctrl+B` | Filter to sessions from your current git branch. Press again to show sessions from all branches |


843 By default the hook fires on all notification types. To fire only for specific events, set the `matcher` field to one of these values:843 By default the hook fires on all notification types. To fire only for specific events, set the `matcher` field to one of these values:

844 844 

845 | Matcher | Fires when |845 | Matcher | Fires when |

846 | :------------------- | :---------------------------------------------- |846 | :--------------------- | :----------------------------------------------------- |

847 | `permission_prompt` | Claude needs you to approve a tool use |847 | `permission_prompt` | Claude needs you to approve a tool use |

848 | `idle_prompt` | Claude is done and waiting for your next prompt |848 | `idle_prompt` | Claude is done and waiting for your next prompt |

849 | `auth_success` | Authentication completes |849 | `auth_success` | Authentication completes |

850 | `elicitation_dialog` | Claude is asking you a question |850 | `elicitation_dialog` | An MCP server opens an elicitation form |

851 | `elicitation_complete` | An MCP elicitation form is submitted or dismissed |

852 | `elicitation_response` | An MCP elicitation response is sent back to the server |

851 </Step>853 </Step>

852 854 

853 <Step title="Verify the hook">855 <Step title="Verify the hook">

communications-kit.md +525 −0 added

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Communications kit

6 

7> Launch announcements, drip-campaign messages, and FAQ responses for rolling Claude Code out to your engineering organization.

8 

9This page is for administrators and engineering leads rolling Claude Code out to a team. It provides copy-ready launch announcements, a tips-and-tricks drip campaign, and one-line FAQ responses for the questions you will be asked most.

10 

11<Note>

12 Treat everything here as draft copy, not finished copy. Rewrite each message in your organization's voice, swap the example tasks for real bugs and modules from your own codebase, and replace the `[bracketed placeholders]` before sending. The announcements that drive adoption are the ones that read like someone at your company wrote them.

13</Note>

14 

15## Launch communications

16 

17One announcement in two formats, plus two optional variants. Pick whichever fits your rollout and rewrite it from there.

18 

19### Before you send

20 

21Work through this checklist before the announcement goes out. Each item closes a gap that otherwise turns into a launch-day support thread.

22 

23| Item | Why it matters |

24| ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- |

25| `#claude-code` channel created and linked in the message | Gives questions one place to land |

26| Install command tested on at least one machine in your environment | Catches proxy or firewall issues before everyone hits them at once |

27| Security and data-handling link ready ([Data usage](/en/data-usage) or your internal equivalent) | "Where does my code go?" will be the first reply |

28| One concrete first task chosen, a real bug or file in your codebase | Generic examples don't convert; "fix the flaky test in `auth_test.go`" does |

29| A named owner for the channel for the first 48 hours | Unanswered launch-day questions kill momentum |

30| A C-suite sponsor lined up to send or co-sign the announcement | Exec-sent launches consistently see higher first-week adoption than admin-sent ones |

31 

32### The announcement

33 

34Use this as your standard org-wide rollout message. It covers what Claude Code is, gives a two-minute install path, hands readers one concrete task to try, and answers "where does my code go?" before anyone has to ask.

35 

36<Tabs>

37 <Tab title="Email">

38 ```text theme={null}

39 Subject: Claude Code is live for [Engineering / your team]

40 

41 Team,

42 

43 As of today you have access to Claude Code, an AI coding agent that runs in

44 your terminal, reads your actual codebase, and works through real tasks end

45 to end: debugging, refactors, tests, PRs. It is not autocomplete and it is

46 not a chat window. It edits files, runs your commands, and asks permission

47 before anything risky.

48 

49 Get running in two minutes:

50 

51 curl -fsSL https://claude.ai/install.sh | bash

52 cd <your-repo>

53 claude

54 

55 Then run /init once. Claude reads your project and writes a CLAUDE.md with

56 your build commands and conventions, so you stop re-explaining the basics.

57 

58 Then try one of these on the repo you are already in:

59 

60 - "The test in [file] is flaky. Figure out why and fix it"

61 - "Walk me through how [module] handles [X]"

62 - "Look at my working diff and tell me what's risky before I push"

63 

64 Where your code goes: Claude Code runs in your terminal and talks directly

65 to Anthropic's API, with no third-party servers in the loop. It asks before

66 editing files or running commands. Under our Enterprise agreement, Anthropic

67 does not use your code or prompts to train its models.

68 Details: https://code.claude.com/docs/en/data-usage

69 https://code.claude.com/docs/en/security

70 

71 Where to go with questions: #claude-code. [Owner name] is watching it

72 this week.

73 

74 - [Name]

75 

76 P.S. Prefer your editor? There is a VS Code extension and a JetBrains

77 plugin. Same agent, no terminal required.

78 ```

79 </Tab>

80 

81 <Tab title="Slack or Teams">

82 ```markdown theme={null}

83 🚀 *Claude Code is live for [team]*

84 

85 AI coding agent, runs in your terminal, reads your repo, does real work:

86 bugs, refactors, tests, PRs. Asks before it touches anything.

87 

88 `curl -fsSL https://claude.ai/install.sh | bash` → `cd your-repo` → `claude`

89 

90 *First thing to try* → run `/init`, then: "the test in [file] is flaky,

91 figure out why and fix it."

92 

93 🔒 Runs in your terminal, talks only to Anthropic's API. Under our

94 Enterprise plan your code and prompts are not used to train models.

95 Data usage → https://code.claude.com/docs/en/data-usage

96 

97 📚 Quickstart · VS Code · Free 1-hr course

98 https://code.claude.com/docs/en/quickstart

99 https://code.claude.com/docs/en/vs-code

100 https://anthropic.skilljar.com/claude-code-in-action

101 

102 Questions → this thread. [Owner] is on point.

103 ```

104 </Tab>

105</Tabs>

106 

107### Executive sponsor variant

108 

109Send this from your sponsoring executive, such as the CTO, CIO, or SVP Engineering, under their name and from their account. Launches that go out under an exec's name consistently see higher open rates and faster first-week activation than the same message from an admin or tooling team. It signals a company priority rather than an optional experiment.

110 

111This version is deliberately stripped to one ask: install it and run it on one real task. The exec's job is to make the ask land; the standard announcement and `#claude-code` handle the how.

112 

113<Tabs>

114 <Tab title="Email">

115 ```text theme={null}

116 Subject: One thing I'd like every engineer to try this week

117 

118 Team,

119 

120 We have turned on Claude Code for all of engineering. It is an AI agent

121 that works directly in your terminal, on your actual codebase, and the

122 early results from teams already using it are strong enough that I want

123 everyone on it this week.

124 

125 I am asking for ten minutes:

126 

127 curl -fsSL https://claude.ai/install.sh | bash

128 cd <your-repo>

129 claude

130 

131 Then hand it one real task: the bug you have been putting off, or "walk me

132 through how [module] works."

133 

134 That is the whole ask. [Owner name] and team are in #claude-code for

135 anything you hit along the way.

136 

137 - [Exec Name]

138 [Title]

139 ```

140 </Tab>

141 

142 <Tab title="Slack or Teams">

143 ```markdown theme={null}

144 📣 *From [Exec Name]: one thing to try this week*

145 

146 We have turned on *Claude Code* for all of engineering. Early results are

147 strong enough that I am asking everyone to give it ten minutes on real

148 work this week.

149 

150 `curl -fsSL https://claude.ai/install.sh | bash` → `cd your-repo` →

151 `claude` → hand it one real task.

152 

153 That's it. Questions → #claude-code.

154 ```

155 </Tab>

156</Tabs>

157 

158### Pilot group variant

159 

160Use for a phased rollout. Send to the pilot cohort only.

161 

162```text theme={null}

163Subject: You're in the Claude Code pilot

164 

165[Name / team],

166 

167You are in the first wave of Claude Code at [company]. We picked this group

168because you will put it on real problems and tell us the truth about it.

169 

170The ask: use it on at least one real task this week, then drop a note in

171#claude-code-pilot covering what worked, what was annoying, and what

172surprised you. That feedback decides how we roll it out to everyone else.

173 

174[Continue with "Get running in two minutes" from the standard announcement]

175 

176One extra thing for pilots: on your first multi-file change, press Shift+Tab

177until you see "plan". Claude will lay out exactly what it intends to do

178before it touches a file. It is the fastest way to calibrate how much to

179trust it.

180```

181 

182### Champion recruitment DM

183 

184After launch, DM the two or three people who are most active in `#claude-code`.

185 

186```text theme={null}

187Hey [name], your #claude-code posts are doing more for adoption than my

188announcement did. A couple of people told me your [thread / screenshot]

189was why they actually tried it.

190 

191Want to make that semi-official? Low lift: mostly keep posting what you

192are posting, plus first crack at new features and a direct line to the

193Anthropic team. I can share a short playbook if you're in.

194```

195 

196## Tips and tricks campaign

197 

198Ready-to-paste Slack or Teams messages designed to drive feature activation after launch. Each follows the same pattern: a hook, the payoff, a "try it now" prompt, and a docs link. Drip them one or two a week in `#claude-code`, or pick the handful that match your team's gaps. They stand alone with no required order.

199 

200Copy the message body from each block directly into Slack or Teams. Replace `[bracketed placeholders]` before sending.

201 

202### Get started

203 

204**Choosing the right model**

205 

206```markdown theme={null}

207🎯 *Tip: Match the model to the moment*

208 

209Using Opus to fix a typo burns compute. Using Haiku for a 12-file refactor

210is asking for a re-do.

211 

212Claude Code runs on the same models as the Claude app, and you can switch

213mid-session. *Sonnet* is the workhorse default for everyday feature work,

214bugs, tests, and reviews. Reach for *Opus* on large refactors, gnarly

215debugging, or anything high-stakes. Drop to *Haiku* for quick questions,

216formatting, and mechanical edits where speed wins.

217 

218*Try it now:* type `/model` and pick Sonnet if you haven't already. It is

219the right default for most tasks.

220 

221📖 Model configuration → https://code.claude.com/docs/en/model-config

222```

223 

224| Model | Best for |

225| ------ | ----------------------------------------------------------------------------------------- |

226| Opus | Large-scale refactors, complex debugging, architecture decisions, high-stakes changes |

227| Sonnet | Everyday feature work, bug fixes, tests, documentation, code review. Recommended default. |

228| Haiku | Quick questions, formatting, mechanical edits, rapid iteration |

229 

230**Quick wins to try first**

231 

232```markdown theme={null}

233🚀 *Tip: Three things to try in your first 10 minutes*

234 

235Installed Claude Code but not sure what to actually ask it? Start with the

236stuff that has been bugging you all week.

237 

238 - Fix something annoying: "the test in [file] is flaky, figure out why"

239 - Get oriented in code you didn't write: "walk me through how [module] works"

240 - Sanity-check before you push: "look at my working diff and tell me what

241 looks risky"

242 

243None of these need setup. Just `cd` into your repo and run `claude`.

244 

245*Try it now:* pick the bug you have been avoiding and paste the error

246message in.

247 

248📖 Quickstart → https://code.claude.com/docs/en/quickstart

249```

250 

251### Project memory

252 

253**`/init` and CLAUDE.md**

254 

255```markdown theme={null}

256📁 *Tip: Stop re-explaining your repo every session*

257 

258Telling Claude "we use pnpm, not npm" for the fifth time? There is a

259one-time fix.

260 

261Run `/init` once per repo. Claude reads your project structure and writes a

262CLAUDE.md file with your build commands, architecture, and conventions.

263Every future session in that repo starts from this file automatically. Keep

264it under two screens. It is a cheat sheet, not documentation.

265 

266*Try it now:* open your main repo, run `claude`, type `/init`. Thirty

267seconds, pays off every session after.

268 

269📖 CLAUDE.md and project memory → https://code.claude.com/docs/en/memory

270```

271 

272**@-references**

273 

274```markdown theme={null}

275📎 *Tip: Stop pasting file contents into the chat*

276 

277Copying 200 lines of a component into your prompt so Claude can "see" it?

278You don't have to.

279 

280Type `@` then a file path. Claude pulls the file directly into context.

281Works for whole directories too.

282 

283> the styles in @src/components/Button.tsx look off, check against

284> @docs/design-system.md

285 

286*Try it now:* type `@` then Tab. Autocomplete shows you every file in reach.

287 

288📖 Referencing files → https://code.claude.com/docs/en/common-workflows

289```

290 

291### Control and safety

292 

293**Permission modes**

294 

295```markdown theme={null}

296🛡️ *Tip: One keystroke between "look but don't touch" and "just do it"*

297 

298Sometimes you want Claude to ask before every edit. Sometimes you just want

299it to ship. You shouldn't have to pick one forever.

300 

301*Shift+Tab* cycles through how much leash Claude gets: *default* asks before

302risky stuff, *acceptEdits* lets file edits and common filesystem commands

303flow through while still checking before other shell commands, and *plan*

304proposes changes for your approval before anything is touched. Plan mode is

305the trust-builder, so start there for anything touching multiple files.

306 

307*Try it now:* on your next refactor, hit Shift+Tab until you see "plan",

308then describe the change. You'll get a full proposal before a single file

309moves.

310 

311📖 Permission modes → https://code.claude.com/docs/en/permissions

312```

313 

314**Checkpointing and `/rewind`**

315 

316```markdown theme={null}

317⏪ *Tip: There is an undo button for the whole conversation*

318 

319Claude went down the wrong path three turns ago and now you're untangling

320it? You don't have to fix forward.

321 

322`/rewind` rolls back to an earlier point in the conversation, including the

323file changes Claude made along the way. Checkpointing is automatic; you

324don't set anything up.

325 

326*Try it now:* press *Esc* twice to open the rewind menu, or type `/rewind`.

327Pick the point before things went sideways.

328 

329📖 Checkpointing → https://code.claude.com/docs/en/checkpointing

330```

331 

332### Connect your tools

333 

334**MCP connectors**

335 

336```markdown theme={null}

337🔌 *Tip: Let Claude read your issue tracker so you don't have to paste tickets*

338 

339Copy-pasting Jira tickets into the terminal feels like a step backward.

340It is.

341 

342One config file (`.mcp.json` at your project root) wires Claude into GitHub,

343Jira, Linear, or whatever tracker you use. Then "what's the top-priority

344issue assigned to me?" and "go ahead and fix it" happen in the same

345conversation.

346 

347*Try it now:* ask Claude "set up an MCP connector for [GitHub/Jira/Linear]

348in this repo". It will write the config for you.

349 

350📖 MCP connectors → https://code.claude.com/docs/en/mcp

351```

352 

353### Automate your workflows

354 

355**Skills**

356 

357```markdown theme={null}

358⚡ *Tip: Turn that prompt you keep retyping into a command*

359 

360Typed "summarize what I worked on today from git log, format it for standup"

361three times this week? That's a slash command waiting to happen.

362 

363A SKILL.md file in `.claude/skills/<name>/` becomes a reusable prompt; type

364`/name` to run it. Make one the second time you type a multi-step prompt

365you've typed before. Easiest path: ask Claude to make it for you.

366 

367*Try it now:* type "make me a /standup skill that summarizes what I worked

368on today from git log", then run `/standup` tomorrow morning.

369 

370📖 Skills → https://code.claude.com/docs/en/skills

371```

372 

373**Hooks**

374 

375```markdown theme={null}

376🔔 *Tip: Get pinged when your refactor finishes*

377 

378Sitting at your desk watching Claude work through a long task? You've got

379better things to do for those eight minutes.

380 

381Hooks are shell commands that fire on Claude Code events. A Stop hook that

382sends a desktop notification means you can kick off a long refactor, walk

383away, and get pinged the moment it's done.

384 

385*Try it now:* ask Claude "add a Stop hook that sends a desktop notification

386when you finish". It will write the script and wire it up.

387 

388📖 Hooks guide → https://code.claude.com/docs/en/hooks-guide

389```

390 

391### Day-to-day development

392 

393**Screenshots and images**

394 

395```markdown theme={null}

396📸 *Tip: Stop describing the error dialog. Just show it.*

397 

398Typing out "there's a red box that says something about a null reference

399and it's pointing at line 47-ish"? Screenshot it.

400 

401Drag a screenshot straight into the terminal and Claude sees it: error

402dialogs, UI mockups, whiteboard photos, Figma exports. *Ctrl+V* pastes from

403clipboard (use Ctrl+V on macOS too, not Cmd+V).

404 

405*Try it now:* next time something visual breaks, screenshot it and paste it

406right into the prompt. Then just type "what's wrong here?"

407 

408📖 Working with images → https://code.claude.com/docs/en/common-workflows

409```

410 

411**Git workflows**

412 

413```markdown theme={null}

414🌿 *Tip: Hand off the whole git ceremony*

415 

416The fix took 5 minutes. The commit message, branch, and PR description

417took 15. That ratio is wrong.

418 

419Claude handles the full git flow: commits with conventional messages,

420branches, PRs with proper summaries. One ask: "fix the off-by-one, commit

421with a conventional commit message, and open a PR." Reviewing someone

422else's work? Paste the PR URL and ask Claude to walk you through the diff.

423 

424*Try it now:* after your next fix, instead of switching to your git client,

425just type "commit this with a good message and open a PR".

426 

427📖 Creating pull requests → https://code.claude.com/docs/en/common-workflows

428```

429 

430### Share and scale

431 

432**Plugins**

433 

434```markdown theme={null}

435📦 *Tip: Someone probably already built that skill*

436 

437About to spend an hour building a `/deploy` command? Check if it

438already exists.

439 

440Skills get bundled and shared as plugins. `/plugin` browses what's

441available and installs in one step. Five minutes of browsing can save an

442hour of building.

443 

444*Try it now:* type `/plugin` and scroll through. You'll find at least one

445thing you didn't know you wanted.

446 

447📖 Plugins → https://code.claude.com/docs/en/plugins

448```

449 

450### Security and admin

451 

452**Security architecture**

453 

454```markdown theme={null}

455🔐 *Tip: The answer to "is this safe?" for the next time you're asked*

456 

457Someone on your team is going to ask "wait, where does my code go?"

458Here's the short version you can paste.

459 

460Permission-first by design. Every file edit, shell command, and external

461call is gated by your approval. The CLI runs in your terminal and talks

462directly to Anthropic's API, with no third-party servers, and supports

463optional OS-level sandboxing for shell commands. Under our Enterprise plan,

464Anthropic does not use your code or prompts to train its models.

465 

466*Try it now:* save these two links for the next time the question comes up.

467They answer most security-review questions.

468 

469📖 https://code.claude.com/docs/en/security

470📖 https://code.claude.com/docs/en/data-usage

471```

472 

473**Best practices**

474 

475```markdown theme={null}

476✅ *Tip: The 4 habits that separate "tried it once" from "use it daily"*

477 

478Most people who bounce off Claude Code skipped one of these. Most people

479who stick did all four in week one.

480 

481 - Start in plan mode for anything touching multiple files

482 - Run /init early; context compounds

483 - Review diffs before committing; Claude can be confidently wrong

484 - Verify changes that touch critical paths; treat it like a sharp

485 junior, not an oracle

486 

487*Try it now:* if you've only done one or two of these, pick the one you're

488missing and do it on your next task. Post what changed in #claude-code.

489 

490📖 Best practices → https://code.claude.com/docs/en/best-practices

491```

492 

493## Quick reference

494 

495### FAQ responses

496 

497One-line replies for the questions you will be asked most.

498 

499| Question | Response |

500| ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

501| "Does it work in VS Code?" | Yes. There is a VS Code extension and a JetBrains plugin with the same features, embedded in your editor. [VS Code →](/en/vs-code) |

502| "Do I have to configure anything first?" | No. Install, then run `claude` in any repo. Run `/init` once and you're set. [Quickstart →](/en/quickstart) |

503| "Where does my code go?" | The CLI runs in your terminal and sends context to Anthropic's API for inference, with no third-party servers. Under your Enterprise plan, your code and prompts are not used to train models. [Data usage →](/en/data-usage) |

504| "Can it see my whole repo?" | It reads what you give it access to. File reads inside your working directory don't prompt; permission prompts gate edits, shell commands, and anything outside that directory. [Permissions →](/en/permissions) |

505| "How is this different from Copilot?" | Copilot autocompletes lines. Claude Code is an agent that reads files, runs commands, and makes multi-file edits. [Overview →](/en/overview) |

506| "What should I try first?" | A bug you've been putting off because it's tedious. "The test in \[file] is flaky, figure out why." [Quickstart →](/en/quickstart) |

507 

508### Prompt templates

509 

510Share these starter prompts with engineers who have installed but aren't sure what to ask. Each one is phrased the way it would be typed into a real session; replace the bracketed pieces with files from your own repo.

511 

512| Task | Prompt |

513| -------------------- | ---------------------------------------------------------------------------- |

514| Fix a bug | "the tests in \[file] are failing, figure out why and fix it" |

515| Understand code | "walk me through how \[module] works, then tell me where the entry point is" |

516| Safe refactor | "refactor \[module] to \[goal], use plan mode so I can review first" |

517| Write tests | "write tests for \[file] that cover the edge cases around \[scenario]" |

518| Review before commit | "look at my working diff and tell me what looks risky" |

519| Open a PR | "fix \[issue], write a conventional commit, and open a PR with a summary" |

520| Make a skill | "make me a /ship skill that runs tests and lint before commit" |

521| Debug a stack trace | "here's the stack trace, find the root cause, don't just paper over it" |

522 

523<Tip>

524 Claude Code ships frequently. Verify version-specific details against the [documentation home page](/en/overview) before distributing internally.

525</Tip>

data-usage.md +11 −1

Details

25 25 

26### Session quality surveys26### Session quality surveys

27 27 

28When you see the "How is Claude doing this session?" prompt in Claude Code, responding to this survey (including selecting "Dismiss"), only your numeric rating (1, 2, 3, or dismiss) is recorded. We do not collect or store any conversation transcripts, inputs, outputs, or other session data as part of this survey. Unlike thumbs up/down feedback or `/feedback` reports, this session quality survey is a simple product satisfaction metric. Your responses to this survey do not impact your data training preferences and cannot be used to train our AI models.28When you see the "How is Claude doing this session?" prompt in Claude Code, responding to this survey, including selecting "Dismiss", records only your rating. We do not collect or store any conversation transcripts, inputs, outputs, or other session data as part of the rating prompt itself. Unlike thumbs up/down feedback or `/feedback` reports, this session quality survey is a simple product satisfaction metric.

29 

30After the rating prompt, you may see a separate follow-up asking "Can Anthropic look at your session transcript to help us improve Claude Code?". This is an optional second step distinct from the rating:

31 

32* **Yes**: uploads your conversation transcript, any subagent transcripts, and the raw session log file from disk to Anthropic. Known API key and token patterns are redacted before upload. Source code, file contents, and other conversation content are uploaded as-is. Shared transcripts are retained for up to 6 months.

33* **No**: declines without sending anything

34* **Don't ask again**: declines and stops this follow-up from appearing in future sessions

35 

36Nothing is uploaded unless you explicitly select **Yes**. Organizations with [zero data retention](/en/zero-data-retention), or where product feedback is disabled by organization policy, never see this follow-up. Your responses to this survey, including session transcripts submitted after the rating prompt, do not impact your data training preferences and cannot be used to train our AI models.

29 37 

30To disable these surveys, set `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1`. The survey is also disabled when `DISABLE_TELEMETRY` or `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` is set. To control frequency instead of disabling, set [`feedbackSurveyRate`](/en/settings#available-settings) in your settings file to a probability between `0` and `1`.38To disable these surveys, set `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1`. The survey is also disabled when `DISABLE_TELEMETRY` or `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` is set. To control frequency instead of disabling, set [`feedbackSurveyRate`](/en/settings#available-settings) in your settings file to a probability between `0` and `1`.

31 39 


107 115 

108All environment variables can be checked into `settings.json` (see [settings reference](/en/settings)).116All environment variables can be checked into `settings.json` (see [settings reference](/en/settings)).

109 117 

118As of v2.1.126, when a host platform sets `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`, Statsig metrics default to on for Vertex, Bedrock, and Foundry, and follow the standard `DISABLE_TELEMETRY` opt-out. Sentry error reporting and `/feedback` reports remain off by default on those providers.

119 

110### WebFetch domain safety check120### WebFetch domain safety check

111 121 

112Before fetching a URL, the WebFetch tool sends the requested hostname to `api.anthropic.com` to check it against a safety blocklist maintained by Anthropic. Only the hostname is sent, not the full URL, path, or page contents. Results are cached per hostname for five minutes.122Before fetching a URL, the WebFetch tool sends the requested hostname to `api.anthropic.com` to check it against a safety blocklist maintained by Anthropic. Only the hostname is sent, not the full URL, path, or page contents. Results are cached per hostname for five minutes.

Details

8 8 

9When Claude ignores an instruction or a feature you configured doesn't appear, the cause is usually that the file didn't load, it loaded from a different location than you expected, or another file overrode it. This guide shows how to inspect what Claude Code actually loaded so you can narrow down which applies.9When Claude ignores an instruction or a feature you configured doesn't appear, the cause is usually that the file didn't load, it loaded from a different location than you expected, or another file overrode it. This guide shows how to inspect what Claude Code actually loaded so you can narrow down which applies.

10 10 

11For installation, authentication, and connectivity problems, see [Troubleshooting](/en/troubleshooting) instead.11For installation, authentication, and connectivity problems, see [Troubleshoot installation and login](/en/troubleshoot-install) instead.

12 12 

13## See what loaded into context13## See what loaded into context

14 14 


78| Skill appears in `/skills` but Claude never invokes it | Skill has `disable-model-invocation: true` in its frontmatter, or its description doesn't match how you phrase the request | Check the badge in `/skills`: a "user-only" label means Claude won't trigger it on its own. See [skill invocation](/en/skills). |78| Skill appears in `/skills` but Claude never invokes it | Skill has `disable-model-invocation: true` in its frontmatter, or its description doesn't match how you phrase the request | Check the badge in `/skills`: a "user-only" label means Claude won't trigger it on its own. See [skill invocation](/en/skills). |

79| Subdirectory `CLAUDE.md` instructions seem ignored | Subdirectory files load on demand, not at session start | They load when Claude reads a file in that directory with the Read tool, not at launch and not when writing or creating files there. See [how CLAUDE.md files load](/en/memory#how-claude-md-files-load). |79| Subdirectory `CLAUDE.md` instructions seem ignored | Subdirectory files load on demand, not at session start | They load when Claude reads a file in that directory with the Read tool, not at launch and not when writing or creating files there. See [how CLAUDE.md files load](/en/memory#how-claude-md-files-load). |

80| Subagent ignores `CLAUDE.md` instructions | Subagents don't always inherit project memory | Put critical rules in the agent file body, which becomes the subagent's system prompt. See [subagent configuration](/en/sub-agents). |80| Subagent ignores `CLAUDE.md` instructions | Subagents don't always inherit project memory | Put critical rules in the agent file body, which becomes the subagent's system prompt. See [subagent configuration](/en/sub-agents). |

81| Cleanup logic never runs at session end | No `SessionEnd` hook configured | `SessionStart` and `SessionEnd` both exist. See the [hook events list](/en/hooks#hook-events). |81| Cleanup logic never runs at session end | No `SessionEnd` hook configured | Add a `SessionEnd` hook in `settings.json`. See the [hook events list](/en/hooks#hook-events). |

82| MCP servers in `.mcp.json` never load | File is under `.claude/` or uses Claude Desktop's config format | Project MCP config goes at the repository root as `.mcp.json`, not inside `.claude/`. See [MCP configuration](/en/mcp). |82| MCP servers in `.mcp.json` never load | File is under `.claude/` or uses Claude Desktop's config format | Project MCP config goes at the repository root as `.mcp.json`, not inside `.claude/`. See [MCP configuration](/en/mcp). |

83| Project MCP server added but doesn't appear | The one-time approval prompt was dismissed | Project-scoped servers require approval. Run `/mcp` to see status and approve. |83| Project MCP server added but doesn't appear | The one-time approval prompt was dismissed | Project-scoped servers require approval. Run `/mcp` to see status and approve. |

84| MCP server fails to start from some directories | `command` or `args` uses a relative file path | Use absolute paths for local scripts. Executables on your `PATH` like `npx` or `uvx` work as-is. |84| MCP server fails to start from some directories | `command` or `args` uses a relative file path | Use absolute paths for local scripts. Executables on your `PATH` like `npx` or `uvx` work as-is. |


93* **[Settings](/en/settings)**: precedence order and the full key list93* **[Settings](/en/settings)**: precedence order and the full key list

94* **[Hooks reference](/en/hooks)**: event names, payloads, and `--debug hooks` output format94* **[Hooks reference](/en/hooks)**: event names, payloads, and `--debug hooks` output format

95* **[MCP](/en/mcp)**: server configuration, approval, and `/mcp` output95* **[MCP](/en/mcp)**: server configuration, approval, and `/mcp` output

96* **[Troubleshooting](/en/troubleshooting)**: `claude doctor`, platform issues, and installation problems96* **[Troubleshoot installation and login](/en/troubleshoot-install)**: `command not found`, PATH, and authentication problems

97* **[Troubleshooting](/en/troubleshooting)**: performance, hangs, and search issues

desktop.md +2 −2

Details

18 </Card>18 </Card>

19</CardGroup>19</CardGroup>

20 20 

21For Windows ARM64, download the [ARM64 installer](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs). Linux is not supported.21For Windows ARM64, download the [ARM64 installer](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs). The desktop app is not available on Linux; use the [CLI](/en/quickstart) instead.

22 22 

23After installing, launch Claude, sign in, and click the **Code** tab. The first time you open it on Windows, you need [Git for Windows](https://git-scm.com/downloads/win) installed; restart the app after installing it. For a walkthrough of your first session, see the [Get started guide](/en/desktop-quickstart).23After installing, launch Claude, sign in, and click the **Code** tab. The first time you open it on Windows, you need [Git for Windows](https://git-scm.com/downloads/win) installed; restart the app after installing it. For a walkthrough of your first session, see the [Get started guide](/en/desktop-quickstart).

24 24 


682The following features are only available in the CLI or VS Code extension:682The following features are only available in the CLI or VS Code extension:

683 683 

684* **Third-party providers**: Desktop connects to Anthropic's API by default. Enterprise deployments can configure Vertex AI and gateway providers via [managed settings](https://support.claude.com/en/articles/12622667-enterprise-configuration). For Bedrock or Foundry, use the [CLI](/en/quickstart).684* **Third-party providers**: Desktop connects to Anthropic's API by default. Enterprise deployments can configure Vertex AI and gateway providers via [managed settings](https://support.claude.com/en/articles/12622667-enterprise-configuration). For Bedrock or Foundry, use the [CLI](/en/quickstart).

685* **Linux**: the desktop app is available on macOS and Windows only.685* **Linux**: the desktop app is available on macOS and Windows only. On Linux, use the [CLI](/en/quickstart).

686* **Inline code suggestions**: Desktop does not provide autocomplete-style suggestions. It works through conversational prompts and explicit code changes.686* **Inline code suggestions**: Desktop does not provide autocomplete-style suggestions. It works through conversational prompts and explicit code changes.

687* **Agent teams**: multi-agent orchestration is available via the [CLI](/en/agent-teams) and [Agent SDK](/en/headless), not in Desktop.687* **Agent teams**: multi-agent orchestration is available via the [CLI](/en/agent-teams) and [Agent SDK](/en/headless), not in Desktop.

688 688 

Details

18 </Card>18 </Card>

19</CardGroup>19</CardGroup>

20 20 

21For Windows ARM64, download the [ARM64 installer](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs). Linux is not supported.21For Windows ARM64, download the [ARM64 installer](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs). The desktop app is not available on Linux; use the [CLI](/en/quickstart) instead.

22 22 

23<Note>23<Note>

24 Claude Code requires a [Pro, Max, Team, or Enterprise subscription](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=desktop_quickstart_pricing).24 Claude Code requires a [Pro, Max, Team, or Enterprise subscription](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=desktop_quickstart_pricing).

devcontainer.md +160 −49

Details

4 4 

5# Development containers5# Development containers

6 6 

7> Learn about the Claude Code development container for teams that need consistent, secure environments.7> Run Claude Code inside a dev container for consistent, isolated environments across your team.

8 8 

9The reference [devcontainer setup](https://github.com/anthropics/claude-code/tree/main/.devcontainer) and associated [Dockerfile](https://github.com/anthropics/claude-code/blob/main/.devcontainer/Dockerfile) offer a preconfigured development container that you can use as is, or customize for your needs. This devcontainer works with the Visual Studio Code [Dev Containers extension](https://code.visualstudio.com/docs/devcontainers/containers) and similar tools.9A [development container](https://containers.dev/), or dev container, lets you define an identical, isolated environment that every engineer on your team can run. With Claude Code installed in that container, commands Claude runs execute inside it rather than on the host machine, while edits to your project files appear in your local repository as you work.

10 10 

11The container's enhanced security measures (isolation and firewall rules) allow you to run `claude --dangerously-skip-permissions` to bypass permission prompts for unattended operation.11This page covers [installing Claude Code in a dev container](#add-claude-code-to-your-dev-container) and the configuration topics that follow. Each topic is self-contained, so jump to the ones that match what you need to set up:

12 

13* [Persist authentication and settings across rebuilds](#persist-authentication-and-settings-across-rebuilds)

14* [Enforce organization policy](#enforce-organization-policy)

15* [Restrict network egress](#restrict-network-egress)

16* [Run without permission prompts](#run-without-permission-prompts)

12 17 

13<Warning>18<Warning>

14 While the devcontainer provides substantial protections, no system is completely immune to all attacks.19 While the dev container provides substantial protections, no system is completely immune to all attacks.

15 When executed with `--dangerously-skip-permissions`, devcontainers don't prevent a malicious project from exfiltrating anything accessible in the devcontainer including Claude Code credentials.20 When executed with `--dangerously-skip-permissions`, dev containers do not prevent a malicious project from exfiltrating anything accessible inside the container, including the Claude Code credentials stored in [`~/.claude`](/en/claude-directory).

16 We recommend only using devcontainers when developing with trusted repositories.21 Only use dev containers when developing with trusted repositories, and monitor Claude's activities.

17 Always maintain good security practices and monitor Claude's activities.22 Avoid mounting host secrets such as `~/.ssh` or cloud credential files into the container; prefer repository-scoped or short-lived tokens.

18</Warning>23</Warning>

19 24 

20## Key features25<Accordion title="How dev containers work with your editor">

26 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=9017b1d16a446c6cc37ba562f35b9aae" className="dark:hidden" alt="Diagram showing an editor on the host connecting to a Docker dev container. Claude Code, the terminal, and build tools run inside the container. The host repository is bind-mounted into the container as the workspace." width="640" height="300" data-path="images/devcontainer-architecture.svg" />

27 

28 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture-dark.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=ef00c8e25b1ea7a3a152895f1488831b" className="hidden dark:block" alt="Diagram showing an editor on the host connecting to a Docker dev container. Claude Code, the terminal, and build tools run inside the container. The host repository is bind-mounted into the container as the workspace." width="640" height="300" data-path="images/devcontainer-architecture-dark.svg" />

29 

30 A dev container runs as a Docker container, either on your machine or on a cloud host such as GitHub Codespaces. An editor that supports the Dev Containers spec, such as VS Code, GitHub Codespaces, a JetBrains IDE, or Cursor, connects to that container: you browse and edit files in the editor as usual, but the integrated terminal, language servers, and build tools all run inside the container rather than on your host. Editors without dev container support, such as plain Vim, are not part of this workflow.

31 

32 Claude Code runs inside the container, so it sees the same files, dependencies, and tools as the rest of your project's toolchain. In VS Code you can use either the [Claude Code extension panel](/en/vs-code) or run `claude` in the integrated terminal; both run inside the container and share the same `~/.claude` configuration.

33</Accordion>

34 

35## Add Claude Code to your dev container

36 

37Claude Code installs into any dev container through the [Claude Code Dev Container Feature](https://github.com/anthropics/devcontainer-features/tree/main/src/claude-code).

38 

39The settings work with any tool that supports the Dev Containers spec, such as VS Code, GitHub Codespaces, or JetBrains IDEs. The steps below use VS Code as an example.

40 

41When you open the container in VS Code or Codespaces, the feature also adds the Claude Code VS Code extension; other editors ignore that part.

42 

43<Tip>

44 New to dev containers? The [VS Code Dev Containers tutorial](https://code.visualstudio.com/docs/devcontainers/tutorial) walks through installing Docker, the extension, and opening your first container. For a fuller hardened example with a firewall and persistent volumes, see [Try the reference container](#try-the-reference-container).

45</Tip>

46 

47<Steps>

48 <Step title="Create or update devcontainer.json">

49 Save the following as `.devcontainer/devcontainer.json` in your repository, or add the `features` block to your existing file.

50 

51 The version tag at the end, such as `:1.0`, pins the feature's install script, not the Claude Code release. The feature installs the latest Claude Code, and Claude Code auto-updates itself inside the container by default.

52 

53 To pin the CLI version or disable auto-update, see [Enforce organization policy](#enforce-organization-policy).

54 

55 ```json .devcontainer/devcontainer.json theme={null}

56 {

57 "image": "mcr.microsoft.com/devcontainers/base:ubuntu",

58 "features": {

59 "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}

60 }

61 }

62 ```

63 

64 Replace the `image` line with your project's base image or remove it if your existing file uses a Dockerfile.

65 </Step>

66 

67 <Step title="Rebuild the container">

68 Open the VS Code Command Palette with `Cmd+Shift+P` on Mac or `Ctrl+Shift+P` on Windows and Linux, and run **Dev Containers: Rebuild Container**.

69 

70 For other tools, follow that tool's rebuild action: see [rebuilding in GitHub Codespaces](https://docs.github.com/en/codespaces/developing-in-a-codespace/rebuilding-the-container-in-a-codespace), the [Dev Containers CLI](https://github.com/devcontainers/cli), or your IDE's dev container documentation.

71 </Step>

72 

73 <Step title="Sign in to Claude Code">

74 Open a terminal in the rebuilt container and run `claude`, then follow the authentication prompt.

75 </Step>

76</Steps>

77 

78What you see at the authentication prompt depends on your provider:

79 

80* **Anthropic**: sign in through a browser with your Claude or Anthropic Console account

81* **[Amazon Bedrock, Google Vertex AI, or Microsoft Foundry](/en/third-party-integrations)**: Claude Code uses your cloud provider credentials, with no browser prompt

82 

83For cloud providers, pass credentials into the container as environment variables through `containerEnv`, a Codespaces secret, or your cloud's workload identity rather than mounting credential files from the host. See [Amazon Bedrock](/en/amazon-bedrock), [Google Vertex AI](/en/google-vertex-ai), or [Microsoft Foundry](/en/microsoft-foundry) for the credential chain Claude Code reads.

84 

85See [Choose your API provider](/en/admin-setup#choose-your-api-provider) to decide which path fits your organization.

86 

87<Note>

88 If the browser sign-in completes but the callback never reaches the container, copy the code shown in the browser and paste it at the `Paste code here if prompted` prompt in the terminal. This can happen when the editor's port forwarding doesn't route the localhost callback.

89</Note>

90 

91## Persist authentication and settings across rebuilds

92 

93By default, the container's home directory is discarded on rebuild, so engineers must sign in again each time. Claude Code stores its authentication token, user settings, and session history under [`~/.claude`](/en/claude-directory). Mount a named volume at that path to keep this state across rebuilds.

94 

95The following example mounts a volume at the home directory of the `node` user:

96 

97```json devcontainer.json theme={null}

98"mounts": [

99 "source=claude-code-config,target=/home/node/.claude,type=volume"

100]

101```

102 

103Replace `/home/node` with the home directory of your container's `remoteUser`. If you mount the volume somewhere other than `~/.claude`, set [`CLAUDE_CONFIG_DIR`](/en/env-vars) to the mount path so Claude Code reads and writes there.

104 

105To isolate state per project rather than sharing one volume across all repositories, include the `${devcontainerId}` variable in the source name. The [reference configuration](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) uses `source=claude-code-config-${devcontainerId}` for this purpose.

106 

107In GitHub Codespaces, `~/.claude` persists across stopping and starting a codespace, but is still cleared when you rebuild the container, so the volume mount above applies there too. To carry authentication across codespaces, store `ANTHROPIC_API_KEY` or a `CLAUDE_CODE_OAUTH_TOKEN` from [`claude setup-token`](/en/authentication#generate-a-long-lived-token) as a [Codespaces secret](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces); Codespaces makes secrets available as environment variables inside the container automatically.

108 

109## Enforce organization policy

110 

111A dev container is a convenient place to apply organization policy, because the same image and configuration run on every engineer's machine.

112 

113Claude Code reads `/etc/claude-code/managed-settings.json` on Linux and applies it at the highest precedence in the [settings hierarchy](/en/settings#how-scopes-interact), so values there override anything an engineer sets in `~/.claude` or the project's `.claude/` directory. Copy the file into place from your Dockerfile:

114 

115```dockerfile Dockerfile theme={null}

116RUN mkdir -p /etc/claude-code

117COPY managed-settings.json /etc/claude-code/managed-settings.json

118```

119 

120Because the Dockerfile lives in the repository, anyone with write access can change or remove this step. For policy that engineers cannot bypass by editing repository files, deliver managed settings through [server-managed settings](/en/server-managed-settings) or your MDM instead. See [managed settings files](/en/settings#settings-files) for the available keys and the other delivery paths.

121 

122To set [environment variables](/en/env-vars) that apply to every Claude Code session in the container, add them to `containerEnv` in your `devcontainer.json`. The following example opts out of telemetry and error reporting and prevents Claude Code from auto-updating after install:

123 

124```json devcontainer.json theme={null}

125"containerEnv": {

126 "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",

127 "DISABLE_AUTOUPDATER": "1"

128}

129```

21 130 

22* **Production-ready Node.js**: Built on Node.js 20 with essential development dependencies131The Dev Container Feature always installs the latest Claude Code release. To pin a specific Claude Code version for reproducible builds, install it from your Dockerfile with `npm install -g @anthropic-ai/claude-code@X.Y.Z` instead of using the feature, and set `DISABLE_AUTOUPDATER` as shown above.

23* **Security by design**: Custom firewall restricting network access to only necessary services

24* **Developer-friendly tools**: Includes git, ZSH with productivity enhancements, fzf, and more

25* **Seamless VS Code integration**: Pre-configured extensions and optimized settings

26* **Session persistence**: Preserves command history and configurations between container restarts

27* **Works everywhere**: Compatible with macOS, Windows, and Linux development environments

28 132 

29## Getting started in 4 steps133For the full list of policy controls including permission rules, tool restrictions, and MCP server allowlists, see [Set up Claude Code for your organization](/en/admin-setup).

30 134 

311. Install VS Code and the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)135To make [MCP servers](/en/mcp) available inside the container, define them at [project scope](/en/mcp#mcp-installation-scopes) in a `.mcp.json` file at the repository root so they are checked in alongside your dev container configuration. Install any binaries that local stdio servers depend on in your Dockerfile, and add remote server domains to your network allowlist.

322. Clone the [Claude Code reference implementation](https://github.com/anthropics/claude-code/tree/main/.devcontainer) repository

333. Open the repository in VS Code

344. When prompted, click "Reopen in Container" (or use Command Palette: Cmd+Shift+P → "Dev Containers: Reopen in Container")

35 136 

36Once the container finishes building, open a terminal in VS Code with `` Ctrl+` `` and run `claude` to authenticate and start your first session. The container has Claude Code preinstalled, so you can begin working immediately. Your project files are mounted into the container, and any code Claude writes appears in your local repository.137## Restrict network egress

37 138 

38## Configuration breakdown139You can limit the container's outbound traffic to only the domains Claude Code needs. See [Network access requirements](/en/network-config#network-access-requirements) for the inference and authentication domains, and [Telemetry services](/en/data-usage#telemetry-services) for the optional telemetry and error reporting connections and how to disable them.

39 140 

40The devcontainer setup consists of three primary components:141The reference container includes an [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) script that blocks all outbound traffic except the domains Claude Code and your development tools need. Running a firewall inside a container requires extra permissions, so the reference adds the `NET_ADMIN` and `NET_RAW` capabilities through `runArgs`. The firewall script and these capabilities are not required for Claude Code itself: you can leave them out and rely on your own network controls instead.

41 142 

42* [**devcontainer.json**](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json): Controls container settings, extensions, and volume mounts143## Run without permission prompts

43* [**Dockerfile**](https://github.com/anthropics/claude-code/blob/main/.devcontainer/Dockerfile): Defines the container image and installed tools

44* [**init-firewall.sh**](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh): Establishes network security rules

45 144 

46## Security features145Because the container runs Claude Code as a non-root user and confines command execution to the container, you can pass `--dangerously-skip-permissions` for unattended operation. The CLI rejects this flag when launched as root, so confirm `remoteUser` is set to a non-root account.

47 146 

48The container implements a multi-layered security approach with its firewall configuration:147Skipping permission prompts removes your opportunity to review tool calls before they run. Claude can still modify any file in the bind-mounted workspace, which appears directly on your host, and reach anything the container's network policy allows. Pair this flag with the [network egress restrictions](#restrict-network-egress) above to limit what a bypassed session can reach.

49 148 

50* **Precise access control**: Restricts outbound connections to whitelisted domains only (npm registry, GitHub, Claude API, etc.)149If you want fewer prompts without disabling safety checks, consider [auto mode](/en/permission-modes#eliminate-prompts-with-auto-mode) instead, which has a classifier review actions before they run. To prevent engineers from using `--dangerously-skip-permissions` at all, set `permissions.disableBypassPermissionsMode` to `"disable"` in [managed settings](/en/settings#permission-settings).

51* **Allowed outbound connections**: The firewall permits outbound DNS and SSH connections

52* **Default-deny policy**: Blocks all other external network access

53* **Startup verification**: Validates firewall rules when the container initializes

54* **Isolation**: Creates a secure development environment separated from your main system

55 150 

56## Customization options151## Try the reference container

57 152 

58The devcontainer configuration is designed to be adaptable to your needs:153The [`anthropics/claude-code`](https://github.com/anthropics/claude-code/tree/main/.devcontainer) repository includes an example dev container that combines the CLI, the egress firewall, persistent volumes, and a Zsh-based shell. It is provided as a working example rather than a maintained base image; use it to see how the pieces fit together before applying them to your own configuration.

59 154 

60* Add or remove VS Code extensions based on your workflow155<Steps>

61* Modify resource allocations for different hardware environments156 <Step title="Install prerequisites">

62* Adjust network access permissions157 Install VS Code and the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).

63* Customize shell configurations and developer tooling158 </Step>

64 159 

65## Example use cases160 <Step title="Clone the reference">

161 Clone the [Claude Code repository](https://github.com/anthropics/claude-code) and open it in VS Code.

162 </Step>

66 163 

67### Secure client work164 <Step title="Reopen in container">

165 When prompted, click **Reopen in Container**, or run **Dev Containers: Reopen in Container** from the Command Palette.

166 </Step>

68 167 

69Use devcontainers to isolate different client projects, ensuring code and credentials never mix between environments.168 <Step title="Start Claude Code">

169 Once the container finishes building, open a terminal with `` Ctrl+` `` and run `claude` to sign in and start your first session.

170 </Step>

171</Steps>

70 172 

71### Team onboarding173To use this configuration with your own project, copy the `.devcontainer/` directory into your repository and adjust the Dockerfile for your toolchain, or return to [Add Claude Code to your dev container](#add-claude-code-to-your-dev-container) to add only the feature to a setup you already have.

72 174 

73New team members can get a fully configured development environment in minutes, with all necessary tools and settings pre-installed.175The reference configuration consists of three files. None of them are required when you add Claude Code to your own dev container through the feature, but they show one way to combine the pieces.

74 176 

75### Consistent CI/CD environments177| File | Purpose |

178| ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |

179| [`devcontainer.json`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) | Volume mounts, `runArgs` capabilities, VS Code extensions, and `containerEnv` |

180| [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/Dockerfile) | Base image, development tools, and the Claude Code install |

181| [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) | Blocks all outbound network traffic except the allowed domains |

76 182 

77Mirror your devcontainer configuration in CI/CD pipelines to ensure development and production environments match.183## Next steps

78 184 

79## Related resources185Once Claude Code is running in your dev container, the pages below cover the rest of an organization rollout: choosing an authentication path, delivering managed policy outside the repository, monitoring usage, and understanding what Claude Code stores and sends.

80 186 

81* [VS Code devcontainers documentation](https://code.visualstudio.com/docs/devcontainers/containers)187* [Set up Claude Code for your organization](/en/admin-setup): choose an authentication provider, decide how policy reaches devices, and plan the rollout

82* [Claude Code security best practices](/en/security)188* [Server-managed settings](/en/server-managed-settings): deliver managed policy from the Claude.ai admin console so engineers cannot bypass it by editing repository files

83* [Enterprise network configuration](/en/network-config)189* [Monitor usage and audit activity](/en/monitoring-usage): export OpenTelemetry metrics and review what your team is running

190* [Network access requirements](/en/network-config#network-access-requirements): the full domain allowlist for proxies and firewalls

191* [Telemetry services and opt-out](/en/data-usage#telemetry-services): what Claude Code sends by default and the environment variables that disable it

192* [Explore the `.claude` directory](/en/claude-directory): what the volume mount holds, including credentials, settings, and session history

193* [Security model](/en/security): how Claude Code's permission system, sandboxing, and prompt-injection protections fit together

194* [Permission modes](/en/permission-modes): the full range from plan mode to auto mode to bypass, and when to use each

env-vars.md +14 −6

Details

15| `ANTHROPIC_BASE_URL` | Override the API endpoint to route requests through a proxy or gateway. When set to a non-first-party host, [MCP tool search](/en/mcp#scale-with-mcp-tool-search) is disabled by default. Set `ENABLE_TOOL_SEARCH=true` if your proxy forwards `tool_reference` blocks |15| `ANTHROPIC_BASE_URL` | Override the API endpoint to route requests through a proxy or gateway. When set to a non-first-party host, [MCP tool search](/en/mcp#scale-with-mcp-tool-search) is disabled by default. Set `ENABLE_TOOL_SEARCH=true` if your proxy forwards `tool_reference` blocks |

16| `ANTHROPIC_BEDROCK_BASE_URL` | Override the Bedrock endpoint URL. Use for custom Bedrock endpoints or when routing through an [LLM gateway](/en/llm-gateway). See [Amazon Bedrock](/en/amazon-bedrock) |16| `ANTHROPIC_BEDROCK_BASE_URL` | Override the Bedrock endpoint URL. Use for custom Bedrock endpoints or when routing through an [LLM gateway](/en/llm-gateway). See [Amazon Bedrock](/en/amazon-bedrock) |

17| `ANTHROPIC_BEDROCK_MANTLE_BASE_URL` | Override the Bedrock Mantle endpoint URL. See [Mantle endpoint](/en/amazon-bedrock#use-the-mantle-endpoint) |17| `ANTHROPIC_BEDROCK_MANTLE_BASE_URL` | Override the Bedrock Mantle endpoint URL. See [Mantle endpoint](/en/amazon-bedrock#use-the-mantle-endpoint) |

18| `ANTHROPIC_BEDROCK_SERVICE_TIER` | Bedrock [service tier](https://docs.aws.amazon.com/bedrock/latest/userguide/service-tiers-inference.html) (`default`, `flex`, or `priority`). Sent as the `X-Amzn-Bedrock-Service-Tier` header. See [Amazon Bedrock](/en/amazon-bedrock#service-tiers) |

18| `ANTHROPIC_BETAS` | Comma-separated list of additional `anthropic-beta` header values to include in API requests. Claude Code already sends the beta headers it needs; use this to opt into an [Anthropic API beta](https://platform.claude.com/docs/en/api/beta-headers) before Claude Code adds native support. Unlike the [`--betas` flag](/en/cli-reference#cli-flags), which requires API key authentication, this variable works with all auth methods including Claude.ai subscription |19| `ANTHROPIC_BETAS` | Comma-separated list of additional `anthropic-beta` header values to include in API requests. Claude Code already sends the beta headers it needs; use this to opt into an [Anthropic API beta](https://platform.claude.com/docs/en/api/beta-headers) before Claude Code adds native support. Unlike the [`--betas` flag](/en/cli-reference#cli-flags), which requires API key authentication, this variable works with all auth methods including Claude.ai subscription |

19| `ANTHROPIC_CUSTOM_HEADERS` | Custom headers to add to requests (`Name: Value` format, newline-separated for multiple headers) |20| `ANTHROPIC_CUSTOM_HEADERS` | Custom headers to add to requests (`Name: Value` format, newline-separated for multiple headers) |

20| `ANTHROPIC_CUSTOM_MODEL_OPTION` | Model ID to add as a custom entry in the `/model` picker. Use this to make a non-standard or gateway-specific model selectable without replacing built-in aliases. See [Model configuration](/en/model-config#add-a-custom-model-option) |21| `ANTHROPIC_CUSTOM_MODEL_OPTION` | Model ID to add as a custom entry in the `/model` picker. Use this to make a non-standard or gateway-specific model selectable without replacing built-in aliases. See [Model configuration](/en/model-config#add-a-custom-model-option) |


56| `CLAUDE_CODE_ACCESSIBILITY` | Set to `1` to keep the native terminal cursor visible and disable the inverted-text cursor indicator. Allows screen magnifiers like macOS Zoom to track cursor position |57| `CLAUDE_CODE_ACCESSIBILITY` | Set to `1` to keep the native terminal cursor visible and disable the inverted-text cursor indicator. Allows screen magnifiers like macOS Zoom to track cursor position |

57| `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD` | Set to `1` to load memory files from directories specified with `--add-dir`. Loads `CLAUDE.md`, `.claude/CLAUDE.md`, `.claude/rules/*.md`, and `CLAUDE.local.md`. By default, additional directories do not load memory files |58| `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD` | Set to `1` to load memory files from directories specified with `--add-dir`. Loads `CLAUDE.md`, `.claude/CLAUDE.md`, `.claude/rules/*.md`, and `CLAUDE.local.md`. By default, additional directories do not load memory files |

58| `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` | Interval in milliseconds at which credentials should be refreshed (when using [`apiKeyHelper`](/en/settings#available-settings)) |59| `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` | Interval in milliseconds at which credentials should be refreshed (when using [`apiKeyHelper`](/en/settings#available-settings)) |

60| `CLAUDE_CODE_ATTRIBUTION_HEADER` | Set to `0` to omit the attribution block (client version and prompt fingerprint) from the start of the system prompt. Disabling it improves prompt-cache hit rates when routing through an [LLM gateway](/en/llm-gateway). Anthropic API caching is unaffected |

59| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | Set the context capacity in tokens used for auto-compaction calculations. Defaults to the model's context window: 200K for standard models or 1M for [extended context](/en/model-config#extended-context) models. Use a lower value like `500000` on a 1M model to treat the window as 500K for compaction purposes. The value is capped at the model's actual context window. `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` is applied as a percentage of this value. Setting this variable decouples the compaction threshold from the status line's `used_percentage`, which always uses the model's full context window |61| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | Set the context capacity in tokens used for auto-compaction calculations. Defaults to the model's context window: 200K for standard models or 1M for [extended context](/en/model-config#extended-context) models. Use a lower value like `500000` on a 1M model to treat the window as 500K for compaction purposes. The value is capped at the model's actual context window. `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` is applied as a percentage of this value. Setting this variable decouples the compaction threshold from the status line's `used_percentage`, which always uses the model's full context window |

60| `CLAUDE_CODE_AUTO_CONNECT_IDE` | Override automatic [IDE connection](/en/vs-code). By default, Claude Code connects automatically when launched inside a supported IDE's integrated terminal. Set to `false` to prevent this. Set to `true` to force a connection attempt when auto-detection fails, such as when tmux obscures the parent terminal |62| `CLAUDE_CODE_AUTO_CONNECT_IDE` | Override automatic [IDE connection](/en/vs-code). By default, Claude Code connects automatically when launched inside a supported IDE's integrated terminal. Set to `false` to prevent this. Set to `true` to force a connection attempt when auto-detection fails, such as when tmux obscures the parent terminal |

61| `CLAUDE_CODE_CERT_STORE` | Comma-separated list of CA certificate sources for TLS connections. `bundled` is the Mozilla CA set shipped with Claude Code. `system` is the operating system trust store. Default is `bundled,system`. The native binary distribution is required for system store integration. On the Node.js runtime, only the bundled set is used regardless of this value |63| `CLAUDE_CODE_CERT_STORE` | Comma-separated list of CA certificate sources for TLS connections. `bundled` is the Mozilla CA set shipped with Claude Code. `system` is the operating system trust store. Default is `bundled,system`. The native binary distribution is required for system store integration. On the Node.js runtime, only the bundled set is used regardless of this value |


81| `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | Equivalent of setting `DISABLE_AUTOUPDATER`, `DISABLE_FEEDBACK_COMMAND`, `DISABLE_ERROR_REPORTING`, and `DISABLE_TELEMETRY` |83| `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | Equivalent of setting `DISABLE_AUTOUPDATER`, `DISABLE_FEEDBACK_COMMAND`, `DISABLE_ERROR_REPORTING`, and `DISABLE_TELEMETRY` |

82| `CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK` | Set to `1` to disable the non-streaming fallback when a streaming request fails mid-stream. Streaming errors propagate to the retry layer instead. Useful when a proxy or gateway causes the fallback to produce duplicate tool execution |84| `CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK` | Set to `1` to disable the non-streaming fallback when a streaming request fails mid-stream. Streaming errors propagate to the retry layer instead. Useful when a proxy or gateway causes the fallback to produce duplicate tool execution |

83| `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` | Set to `1` to skip automatic addition of the official plugin marketplace on first run |85| `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` | Set to `1` to skip automatic addition of the official plugin marketplace on first run |

86| `CLAUDE_CODE_DISABLE_POLICY_SKILLS` | Set to `1` to skip loading skills from the system-wide managed skills directory. Useful for container or CI sessions that should not load operator-provisioned skills |

84| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Set to `1` to disable automatic terminal title updates based on conversation context |87| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Set to `1` to disable automatic terminal title updates based on conversation context |

85| `CLAUDE_CODE_DISABLE_THINKING` | Set to `1` to force-disable [extended thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) regardless of model support or other settings. More direct than `MAX_THINKING_TOKENS=0` |88| `CLAUDE_CODE_DISABLE_THINKING` | Set to `1` to force-disable [extended thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) regardless of model support or other settings. More direct than `MAX_THINKING_TOKENS=0` |

86| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Set to `1` to disable virtual scrolling in [fullscreen rendering](/en/fullscreen) and render every message in the transcript. Use this if scrolling in fullscreen mode shows blank regions where messages should appear |89| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Set to `1` to disable virtual scrolling in [fullscreen rendering](/en/fullscreen) and render every message in the transcript. Use this if scrolling in fullscreen mode shows blank regions where messages should appear |


93| `CLAUDE_CODE_ENABLE_TELEMETRY` | Set to `1` to enable OpenTelemetry data collection for metrics and logging. Required before configuring OTel exporters. See [Monitoring](/en/monitoring-usage) |96| `CLAUDE_CODE_ENABLE_TELEMETRY` | Set to `1` to enable OpenTelemetry data collection for metrics and logging. Required before configuring OTel exporters. See [Monitoring](/en/monitoring-usage) |

94| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Time in milliseconds to wait after the query loop becomes idle before automatically exiting. Useful for automated workflows and scripts using SDK mode |97| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Time in milliseconds to wait after the query loop becomes idle before automatically exiting. Useful for automated workflows and scripts using SDK mode |

95| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Set to `1` to enable [agent teams](/en/agent-teams). Agent teams are experimental and disabled by default |98| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Set to `1` to enable [agent teams](/en/agent-teams). Agent teams are experimental and disabled by default |

99| `CLAUDE_CODE_EXTRA_BODY` | JSON object to merge into the top level of every API request body. Useful for passing provider-specific parameters that Claude Code does not expose directly |

96| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Override the default token limit for file reads. Useful when you need to read larger files in full |100| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Override the default token limit for file reads. Useful when you need to read larger files in full |

97| `CLAUDE_CODE_FORK_SUBAGENT` | Set to `1` to enable [forked subagents](/en/sub-agents#fork-the-current-conversation). A forked subagent inherits the full conversation context from the main session instead of starting fresh. When enabled, `/fork` spawns a forked subagent rather than acting as an alias for [`/branch`](/en/commands), and all subagent spawns run in the background. Interactive mode only |101| `CLAUDE_CODE_FORK_SUBAGENT` | Set to `1` to enable [forked subagents](/en/sub-agents#fork-the-current-conversation). A forked subagent inherits the full conversation context from the main session instead of starting fresh. When enabled, `/fork` spawns a forked subagent rather than acting as an alias for [`/branch`](/en/commands), and all subagent spawns run in the background. Works in interactive mode and via the SDK or `claude -p` |

98| `CLAUDE_CODE_GIT_BASH_PATH` | Windows only: path to the Git Bash executable (`bash.exe`). Use when Git Bash is installed but not in your PATH. See [Windows setup](/en/setup#set-up-on-windows) |102| `CLAUDE_CODE_GIT_BASH_PATH` | Windows only: path to the Git Bash executable (`bash.exe`). Use when Git Bash is installed but not in your PATH. See [Windows setup](/en/setup#set-up-on-windows) |

99| `CLAUDE_CODE_GLOB_HIDDEN` | Set to `false` to exclude dotfiles from results when Claude invokes the [Glob tool](/en/tools-reference). Included by default. Does not affect `@` file autocomplete, `ls`, Grep, or Read |103| `CLAUDE_CODE_GLOB_HIDDEN` | Set to `false` to exclude dotfiles from results when Claude invokes the [Glob tool](/en/tools-reference). Included by default. Does not affect `@` file autocomplete, `ls`, Grep, or Read |

100| `CLAUDE_CODE_GLOB_NO_IGNORE` | Set to `false` to make the [Glob tool](/en/tools-reference) respect `.gitignore` patterns. By default, Glob returns all matching files including gitignored ones. Does not affect `@` file autocomplete, which has its own [`respectGitignore` setting](/en/settings#available-settings) |104| `CLAUDE_CODE_GLOB_NO_IGNORE` | Set to `false` to make the [Glob tool](/en/tools-reference) respect `.gitignore` patterns. By default, Glob returns all matching files including gitignored ones. Does not affect `@` file autocomplete, which has its own [`respectGitignore` setting](/en/settings#available-settings) |


107| `CLAUDE_CODE_MAX_OUTPUT_TOKENS` | Set the maximum number of output tokens for most requests. Defaults and caps vary by model; see [max output tokens](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison). Increasing this value reduces the effective context window available before [auto-compaction](/en/costs#reduce-token-usage) triggers. |111| `CLAUDE_CODE_MAX_OUTPUT_TOKENS` | Set the maximum number of output tokens for most requests. Defaults and caps vary by model; see [max output tokens](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison). Increasing this value reduces the effective context window available before [auto-compaction](/en/costs#reduce-token-usage) triggers. |

108| `CLAUDE_CODE_MAX_RETRIES` | Override the number of times to retry failed API requests (default: 10) |112| `CLAUDE_CODE_MAX_RETRIES` | Override the number of times to retry failed API requests (default: 10) |

109| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | Maximum number of read-only tools and subagents that can execute in parallel (default: 10). Higher values increase parallelism but consume more resources |113| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | Maximum number of read-only tools and subagents that can execute in parallel (default: 10). Higher values increase parallelism but consume more resources |

114| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Set to `1` to spawn stdio MCP servers with only a safe baseline environment plus the server's configured `env`, instead of inheriting your shell environment |

110| `CLAUDE_CODE_NEW_INIT` | Set to `1` to make `/init` run an interactive setup flow. The flow asks which files to generate, including CLAUDE.md, skills, and hooks, before exploring the codebase and writing them. Without this variable, `/init` generates a CLAUDE.md automatically without prompting. |115| `CLAUDE_CODE_NEW_INIT` | Set to `1` to make `/init` run an interactive setup flow. The flow asks which files to generate, including CLAUDE.md, skills, and hooks, before exploring the codebase and writing them. Without this variable, `/init` generates a CLAUDE.md automatically without prompting. |

111| `CLAUDE_CODE_NO_FLICKER` | Set to `1` to enable [fullscreen rendering](/en/fullscreen), a research preview that reduces flicker and keeps memory flat in long conversations. Equivalent to the [`tui`](/en/settings#available-settings) setting; you can also switch with `/tui fullscreen` |116| `CLAUDE_CODE_NO_FLICKER` | Set to `1` to enable [fullscreen rendering](/en/fullscreen), a research preview that reduces flicker and keeps memory flat in long conversations. Equivalent to the [`tui`](/en/settings#available-settings) setting; you can also switch with `/tui fullscreen` |

112| `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` | OAuth refresh token for Claude.ai authentication. When set, `claude auth login` exchanges this token directly instead of opening a browser. Requires `CLAUDE_CODE_OAUTH_SCOPES`. Useful for provisioning authentication in automated environments |117| `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` | OAuth refresh token for Claude.ai authentication. When set, `claude auth login` exchanges this token directly instead of opening a browser. Requires `CLAUDE_CODE_OAUTH_SCOPES`. Useful for provisioning authentication in automated environments |


120| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Timeout in milliseconds for git operations when installing or updating plugins (default: 120000). Increase this value for large repositories or slow network connections. See [Git operations time out](/en/plugin-marketplaces#git-operations-time-out) |125| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Timeout in milliseconds for git operations when installing or updating plugins (default: 120000). Increase this value for large repositories or slow network connections. See [Git operations time out](/en/plugin-marketplaces#git-operations-time-out) |

121| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Set to `1` to keep the existing marketplace cache when a `git pull` fails instead of wiping and re-cloning. Useful in offline or airgapped environments where re-cloning would fail the same way. See [Marketplace updates fail in offline environments](/en/plugin-marketplaces#marketplace-updates-fail-in-offline-environments) |126| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Set to `1` to keep the existing marketplace cache when a `git pull` fails instead of wiping and re-cloning. Useful in offline or airgapped environments where re-cloning would fail the same way. See [Marketplace updates fail in offline environments](/en/plugin-marketplaces#marketplace-updates-fail-in-offline-environments) |

122| `CLAUDE_CODE_PLUGIN_SEED_DIR` | Path to one or more read-only plugin seed directories, separated by `:` on Unix or `;` on Windows. Use this to bundle a pre-populated plugins directory into a container image. Claude Code registers marketplaces from these directories at startup and uses pre-cached plugins without re-cloning. See [Pre-populate plugins for containers](/en/plugin-marketplaces#pre-populate-plugins-for-containers) |127| `CLAUDE_CODE_PLUGIN_SEED_DIR` | Path to one or more read-only plugin seed directories, separated by `:` on Unix or `;` on Windows. Use this to bundle a pre-populated plugins directory into a container image. Claude Code registers marketplaces from these directories at startup and uses pre-cached plugins without re-cloning. See [Pre-populate plugins for containers](/en/plugin-marketplaces#pre-populate-plugins-for-containers) |

128| `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST` | Set by host platforms that embed Claude Code and manage model provider routing on its behalf. When set, provider-selection, endpoint, and authentication variables such as `CLAUDE_CODE_USE_BEDROCK`, `ANTHROPIC_BASE_URL`, and `ANTHROPIC_API_KEY` in settings files are ignored so user settings cannot override the host's routing. The automatic telemetry opt-out for Bedrock, Vertex, and Foundry is also skipped, so telemetry follows the standard `DISABLE_TELEMETRY` opt-out. See [Default behaviors by API provider](/en/data-usage#default-behaviors-by-api-provider) |

123| `CLAUDE_CODE_PROXY_RESOLVES_HOSTS` | Set to `1` to allow the proxy to perform DNS resolution instead of the caller. Opt-in for environments where the proxy should handle hostname resolution |129| `CLAUDE_CODE_PROXY_RESOLVES_HOSTS` | Set to `1` to allow the proxy to perform DNS resolution instead of the caller. Opt-in for environments where the proxy should handle hostname resolution |

124| `CLAUDE_CODE_REMOTE` | Set automatically to `true` when Claude Code is running as a [cloud session](/en/claude-code-on-the-web). Read this from a hook or setup script to detect whether you are in a cloud environment |130| `CLAUDE_CODE_REMOTE` | Set automatically to `true` when Claude Code is running as a [cloud session](/en/claude-code-on-the-web). Read this from a hook or setup script to detect whether you are in a cloud environment |

125| `CLAUDE_CODE_REMOTE_SESSION_ID` | Set automatically in [cloud sessions](/en/claude-code-on-the-web) to the current session's ID. Read this to construct a link back to the session transcript. See [Link artifacts back to the session](/en/claude-code-on-the-web#link-artifacts-back-to-the-session) |131| `CLAUDE_CODE_REMOTE_SESSION_ID` | Set automatically in [cloud sessions](/en/claude-code-on-the-web) to the current session's ID. Read this to construct a link back to the session transcript. See [Link artifacts back to the session](/en/claude-code-on-the-web#link-artifacts-back-to-the-session) |


128| `CLAUDE_CODE_SCROLL_SPEED` | Set the mouse wheel scroll multiplier in [fullscreen rendering](/en/fullscreen#mouse-wheel-scrolling). Accepts values from 1 to 20. Set to `3` to match `vim` if your terminal sends one wheel event per notch without amplification |134| `CLAUDE_CODE_SCROLL_SPEED` | Set the mouse wheel scroll multiplier in [fullscreen rendering](/en/fullscreen#mouse-wheel-scrolling). Accepts values from 1 to 20. Set to `3` to match `vim` if your terminal sends one wheel event per notch without amplification |

129| `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` | Override the time budget in milliseconds for [SessionEnd](/en/hooks#sessionend) hooks. Applies to session exit, `/clear`, and switching sessions via interactive `/resume`. By default the budget is 1.5 seconds, automatically raised to the highest per-hook `timeout` configured in settings files, up to 60 seconds. Timeouts on plugin-provided hooks do not raise the budget |135| `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` | Override the time budget in milliseconds for [SessionEnd](/en/hooks#sessionend) hooks. Applies to session exit, `/clear`, and switching sessions via interactive `/resume`. By default the budget is 1.5 seconds, automatically raised to the highest per-hook `timeout` configured in settings files, up to 60 seconds. Timeouts on plugin-provided hooks do not raise the budget |

130| `CLAUDE_CODE_SHELL` | Override automatic shell detection. Useful when your login shell differs from your preferred working shell (for example, `bash` vs `zsh`) |136| `CLAUDE_CODE_SHELL` | Override automatic shell detection. Useful when your login shell differs from your preferred working shell (for example, `bash` vs `zsh`) |

131| `CLAUDE_CODE_SHELL_PREFIX` | Command prefix to wrap all bash commands (for example, for logging or auditing). Example: `/path/to/logger.sh` will execute `/path/to/logger.sh <command>` |137| `CLAUDE_CODE_SHELL_PREFIX` | Command prefix that wraps shell commands Claude Code spawns: Bash tool calls, [hook](/en/hooks) commands, and stdio [MCP server](/en/mcp) startup commands. Useful for logging or auditing. Example: setting `/path/to/logger.sh` runs each command as `/path/to/logger.sh <command>` |

132| `CLAUDE_CODE_SIMPLE` | Set to `1` to run with a minimal system prompt and only the Bash, file read, and file edit tools. MCP tools from `--mcp-config` are still available. Disables auto-discovery of hooks, skills, plugins, MCP servers, auto memory, and CLAUDE.md. The [`--bare`](/en/headless#start-faster-with-bare-mode) CLI flag sets this |138| `CLAUDE_CODE_SIMPLE` | Set to `1` to run with a minimal system prompt and only the Bash, file read, and file edit tools. MCP tools from `--mcp-config` are still available. Disables auto-discovery of hooks, skills, plugins, MCP servers, auto memory, and CLAUDE.md. The [`--bare`](/en/headless#start-faster-with-bare-mode) CLI flag sets this |

133| `CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT` | Set to `1` to use the minimal system prompt and collapsed tool descriptions from `CLAUDE_CODE_SIMPLE` without the other simple-mode changes. The full tool set, hooks, MCP servers, and CLAUDE.md discovery remain enabled |139| `CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT` | Set to `1` to use a shorter system prompt and abbreviated tool descriptions on Opus 4.7. Has no effect on other models. The full tool set, hooks, MCP servers, and CLAUDE.md discovery remain enabled |

134| `CLAUDE_CODE_SKIP_BEDROCK_AUTH` | Skip AWS authentication for Bedrock (for example, when using an LLM gateway) |140| `CLAUDE_CODE_SKIP_BEDROCK_AUTH` | Skip AWS authentication for Bedrock (for example, when using an LLM gateway) |

135| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Skip Azure authentication for Microsoft Foundry (for example, when using an LLM gateway) |141| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Skip Azure authentication for Microsoft Foundry (for example, when using an LLM gateway) |

136| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Skip AWS authentication for Bedrock Mantle (for example, when using an LLM gateway) |142| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Skip AWS authentication for Bedrock Mantle (for example, when using an LLM gateway) |


148| `CLAUDE_CODE_USE_BEDROCK` | Use [Bedrock](/en/amazon-bedrock) |154| `CLAUDE_CODE_USE_BEDROCK` | Use [Bedrock](/en/amazon-bedrock) |

149| `CLAUDE_CODE_USE_FOUNDRY` | Use [Microsoft Foundry](/en/microsoft-foundry) |155| `CLAUDE_CODE_USE_FOUNDRY` | Use [Microsoft Foundry](/en/microsoft-foundry) |

150| `CLAUDE_CODE_USE_MANTLE` | Use the Bedrock [Mantle endpoint](/en/amazon-bedrock#use-the-mantle-endpoint) |156| `CLAUDE_CODE_USE_MANTLE` | Use the Bedrock [Mantle endpoint](/en/amazon-bedrock#use-the-mantle-endpoint) |

151| `CLAUDE_CODE_USE_POWERSHELL_TOOL` | Controls the PowerShell tool. On Windows, the tool is rolling out progressively: set to `1` to opt in or `0` to opt out. On Linux, macOS, and WSL, set to `1` to enable it, which requires `pwsh` on your `PATH`. When enabled on Windows, Claude can run PowerShell commands natively instead of routing through Git Bash. See [PowerShell tool](/en/tools-reference#powershell-tool) |157| `CLAUDE_CODE_USE_NATIVE_FILE_SEARCH` | Set to `1` to discover custom commands, subagents, and output styles using Node.js file APIs instead of ripgrep. Set this if the bundled ripgrep binary is unavailable or blocked in your environment. Does not affect the Grep or file search tools |

158| `CLAUDE_CODE_USE_POWERSHELL_TOOL` | Controls the PowerShell tool. On Windows without Git Bash, the tool is enabled automatically; set to `0` to disable it. On Windows with Git Bash installed, the tool is rolling out progressively: set to `1` to opt in or `0` to opt out. On Linux, macOS, and WSL, set to `1` to enable it, which requires `pwsh` on your `PATH`. When enabled on Windows, Claude can run PowerShell commands natively instead of routing through Git Bash. See [PowerShell tool](/en/tools-reference#powershell-tool) |

152| `CLAUDE_CODE_USE_VERTEX` | Use [Vertex](/en/google-vertex-ai) |159| `CLAUDE_CODE_USE_VERTEX` | Use [Vertex](/en/google-vertex-ai) |

153| `CLAUDE_CONFIG_DIR` | Override the configuration directory (default: `~/.claude`). All settings, credentials, session history, and plugins are stored under this path. Useful for running multiple accounts side by side: for example, `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'` |160| `CLAUDE_CONFIG_DIR` | Override the configuration directory (default: `~/.claude`). All settings, credentials, session history, and plugins are stored under this path. Useful for running multiple accounts side by side: for example, `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'` |

154| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Set to `1` to force-enable the byte-level streaming idle watchdog, or set to `0` to force-disable it. When unset, the watchdog is enabled by default for Anthropic API connections. The byte watchdog aborts a connection when no bytes arrive on the wire for the duration set by `CLAUDE_STREAM_IDLE_TIMEOUT_MS`, with a minimum of 5 minutes, independent of the event-level watchdog |161| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Set to `1` to force-enable the byte-level streaming idle watchdog, or set to `0` to force-disable it. When unset, the watchdog is enabled by default for Anthropic API connections. The byte watchdog aborts a connection when no bytes arrive on the wire for the duration set by `CLAUDE_STREAM_IDLE_TIMEOUT_MS`, with a minimum of 5 minutes, independent of the event-level watchdog |

155| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Set to `1` to enable the event-level streaming idle watchdog. Off by default. For Bedrock, Vertex, and Foundry, this is the only idle watchdog available. Configure the timeout with `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |162| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Set to `1` to enable the event-level streaming idle watchdog. Off by default. For Bedrock, Vertex, and Foundry, this is the only idle watchdog available. Configure the timeout with `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |

156| `CLAUDE_ENV_FILE` | Path to a shell script whose contents Claude Code runs before each Bash command in the same shell process, so exports in the file are visible to the command. Use to persist virtualenv or conda activation across commands. Also populated dynamically by [SessionStart](/en/hooks#persist-environment-variables), [CwdChanged](/en/hooks#cwdchanged), and [FileChanged](/en/hooks#filechanged) hooks |163| `CLAUDE_ENV_FILE` | Path to a shell script whose contents Claude Code runs before each Bash command in the same shell process, so exports in the file are visible to the command. Use to persist virtualenv or conda activation across commands. Also populated dynamically by [SessionStart](/en/hooks#persist-environment-variables), [Setup](/en/hooks#setup), [CwdChanged](/en/hooks#cwdchanged), and [FileChanged](/en/hooks#filechanged) hooks |

157| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | Prefix for auto-generated [Remote Control](/en/remote-control) session names when no explicit name is provided. Defaults to your machine's hostname, producing names like `myhost-graceful-unicorn`. The `--remote-control-session-name-prefix` CLI flag sets the same value for a single invocation |164| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | Prefix for auto-generated [Remote Control](/en/remote-control) session names when no explicit name is provided. Defaults to your machine's hostname, producing names like `myhost-graceful-unicorn`. The `--remote-control-session-name-prefix` CLI flag sets the same value for a single invocation |

158| `CLAUDE_STREAM_IDLE_TIMEOUT_MS` | Timeout in milliseconds before the streaming idle watchdog closes a stalled connection. For the byte-level watchdog on the Anthropic API: default and minimum `300000` (5 minutes); lower values are silently clamped to absorb extended thinking pauses and proxy buffering. For the event-level watchdog: default `90000` (90 seconds), no minimum. For third-party providers, requires `CLAUDE_ENABLE_STREAM_WATCHDOG=1` |165| `CLAUDE_STREAM_IDLE_TIMEOUT_MS` | Timeout in milliseconds before the streaming idle watchdog closes a stalled connection. Default and minimum `300000` (5 minutes) for both the byte-level and event-level watchdogs; lower values are silently clamped to absorb extended thinking pauses and proxy buffering. For third-party providers, requires `CLAUDE_ENABLE_STREAM_WATCHDOG=1` |

159| `DISABLE_AUTOUPDATER` | Set to `1` to disable automatic background updates. Manual `claude update` still works. Use `DISABLE_UPDATES` to block both |166| `DISABLE_AUTOUPDATER` | Set to `1` to disable automatic background updates. Manual `claude update` still works. Use `DISABLE_UPDATES` to block both |

160| `DISABLE_AUTO_COMPACT` | Set to `1` to disable automatic compaction when approaching the context limit. The manual `/compact` command remains available. Use when you want explicit control over when compaction occurs |167| `DISABLE_AUTO_COMPACT` | Set to `1` to disable automatic compaction when approaching the context limit. The manual `/compact` command remains available. Use when you want explicit control over when compaction occurs |

161| `DISABLE_COMPACT` | Set to `1` to disable all compaction: both automatic compaction and the manual `/compact` command |168| `DISABLE_COMPACT` | Set to `1` to disable all compaction: both automatic compaction and the manual `/compact` command |


164| `DISABLE_ERROR_REPORTING` | Set to `1` to opt out of Sentry error reporting |171| `DISABLE_ERROR_REPORTING` | Set to `1` to opt out of Sentry error reporting |

165| `DISABLE_EXTRA_USAGE_COMMAND` | Set to `1` to hide the `/extra-usage` command that lets users purchase additional usage beyond rate limits |172| `DISABLE_EXTRA_USAGE_COMMAND` | Set to `1` to hide the `/extra-usage` command that lets users purchase additional usage beyond rate limits |

166| `DISABLE_FEEDBACK_COMMAND` | Set to `1` to disable the `/feedback` command. The older name `DISABLE_BUG_COMMAND` is also accepted |173| `DISABLE_FEEDBACK_COMMAND` | Set to `1` to disable the `/feedback` command. The older name `DISABLE_BUG_COMMAND` is also accepted |

174| `DISABLE_GROWTHBOOK` | Set to `1` to disable GrowthBook feature-flag fetching and use code defaults for every flag. Telemetry event logging stays on unless `DISABLE_TELEMETRY` is also set |

167| `DISABLE_INSTALLATION_CHECKS` | Set to `1` to disable installation warnings. Use only when manually managing the installation location, as this can mask issues with standard installations |175| `DISABLE_INSTALLATION_CHECKS` | Set to `1` to disable installation warnings. Use only when manually managing the installation location, as this can mask issues with standard installations |

168| `DISABLE_INSTALL_GITHUB_APP_COMMAND` | Set to `1` to hide the `/install-github-app` command. Already hidden when using third-party providers (Bedrock, Vertex, or Foundry) |176| `DISABLE_INSTALL_GITHUB_APP_COMMAND` | Set to `1` to hide the `/install-github-app` command. Already hidden when using third-party providers (Bedrock, Vertex, or Foundry) |

169| `DISABLE_INTERLEAVED_THINKING` | Set to `1` to prevent sending the interleaved-thinking beta header. Useful when your LLM gateway or provider does not support [interleaved thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking#interleaved-thinking) |177| `DISABLE_INTERLEAVED_THINKING` | Set to `1` to prevent sending the interleaved-thinking beta header. Useful when your LLM gateway or provider does not support [interleaved thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking#interleaved-thinking) |

errors.md +7 −6

Details

6 6 

7> Look up Claude Code runtime error messages with what each one means and how to fix it.7> Look up Claude Code runtime error messages with what each one means and how to fix it.

8 8 

9This page lists runtime errors Claude Code displays and how to recover from each one, plus what to check when responses seem off without an error. For installation errors such as `command not found` or TLS failures during setup, see [Troubleshooting](/en/troubleshooting).9This page lists runtime errors Claude Code displays and how to recover from each one, plus what to check when responses seem off without an error. For installation errors such as `command not found` or TLS failures during setup, see [Troubleshoot installation and login](/en/troubleshoot-install).

10 10 

11These errors and recovery commands apply across the CLI, the [Desktop app](/en/desktop), and [Claude Code on the web](/en/claude-code-on-the-web), since all three wrap the same Claude Code CLI. For surface-specific issues, see the troubleshooting section on that surface's page.11These errors and recovery commands apply across the CLI, the [Desktop app](/en/desktop), and [Claude Code on the web](/en/claude-code-on-the-web), since all three wrap the same Claude Code CLI. For surface-specific issues, see the troubleshooting section on that surface's page.

12 12 


216* For CI or automation where interactive login is not possible, configure an [`apiKeyHelper`](/en/settings#available-settings) script that fetches a key at startup216* For CI or automation where interactive login is not possible, configure an [`apiKeyHelper`](/en/settings#available-settings) script that fetches a key at startup

217* See [Authentication precedence](/en/authentication#authentication-precedence) to understand which credential wins when several are present217* See [Authentication precedence](/en/authentication#authentication-precedence) to understand which credential wins when several are present

218 218 

219If you are prompted to log in repeatedly, see [Not logged in or token expired](/en/troubleshooting#not-logged-in-or-token-expired) for system clock and macOS Keychain fixes.219If you are prompted to log in repeatedly, see [Not logged in or token expired](/en/troubleshoot-install#not-logged-in-or-token-expired) for system clock and macOS Keychain fixes.

220 220 

221### Invalid API key221### Invalid API key

222 222 


265 265 

266* Run `/login` to sign in again266* Run `/login` to sign in again

267* If the error returns within the same session after re-authenticating, run `/logout` first to fully clear the stored token, then `/login`267* If the error returns within the same session after re-authenticating, run `/logout` first to fully clear the stored token, then `/login`

268* For repeated prompts to log in across launches, see the system clock and macOS Keychain checks in [Troubleshooting](/en/troubleshooting#not-logged-in-or-token-expired)268* For repeated prompts to log in across launches, see the system clock and macOS Keychain checks in [Troubleshooting](/en/troubleshoot-install#not-logged-in-or-token-expired)

269* For other failures including `403 Forbidden` and OAuth browser issues, see [Permissions and authentication](/en/troubleshooting#permissions-and-authentication)269* For other failures including `403 Forbidden` and OAuth browser issues, see [Login and authentication](/en/troubleshoot-install#login-and-authentication)

270 270 

271### OAuth scope requirement271### OAuth scope requirement

272 272 


443 443 

444* Run `/model` to pick from models available to your account444* Run `/model` to pick from models available to your account

445* Use an alias such as `sonnet` or `opus` instead of a full versioned ID. Aliases track the latest release so they do not go stale. See [Model configuration](/en/model-config).445* Use an alias such as `sonnet` or `opus` instead of a full versioned ID. Aliases track the latest release so they do not go stale. See [Model configuration](/en/model-config).

446* See [Model not found](/en/troubleshooting#model-not-found-or-not-accessible) to locate where a stale ID is set across `--model`, `ANTHROPIC_MODEL`, and settings files446* If the wrong model keeps coming back, a stale ID is set somewhere. Check in [priority order](/en/model-config#setting-your-model): the `--model` flag, the `ANTHROPIC_MODEL` environment variable, then the `model` field in `.claude/settings.local.json`, your project's `.claude/settings.json`, and `~/.claude/settings.json`. Remove the stale value and Claude Code falls back to your account default.

447* For Vertex AI deployments, see [Vertex AI troubleshooting](/en/google-vertex-ai#troubleshooting).

447 448 

448### Claude Opus is not available with the Claude Pro plan449### Claude Opus is not available with the Claude Pro plan

449 450 


525 526 

526* MCP server failed to connect or authenticate: [MCP](/en/mcp)527* MCP server failed to connect or authenticate: [MCP](/en/mcp)

527* Hook script failed or blocked a tool: [Debug hooks](/en/hooks#debug-hooks)528* Hook script failed or blocked a tool: [Debug hooks](/en/hooks#debug-hooks)

528* Permission denied or filesystem errors during install: [Troubleshooting](/en/troubleshooting)529* Permission denied or filesystem errors during install: [Troubleshoot installation and login](/en/troubleshoot-install)

529 530 

530If an error is not listed here or the suggested fix does not help:531If an error is not listed here or the suggested fix does not help:

531 532 

fullscreen.md +8 −2

Details

116 116 

117Press `Esc` or `q` to return to the prompt.117Press `Esc` or `q` to return to the prompt.

118 118 

119## Clear the conversation

120 

121Press `Ctrl+L` twice within two seconds to run `/clear` and start a new conversation. The first press redraws the screen and shows a hint; the second press clears the conversation. On macOS, double-pressing `Cmd+K` also runs `/clear`.

122 

119## Use with tmux123## Use with tmux

120 124 

121Fullscreen rendering works inside tmux, with two caveats.125Fullscreen rendering works inside tmux, with two caveats.


134 138 

135Mouse capture is the most common friction point, especially over SSH or inside tmux. When Claude Code captures mouse events, your terminal's native copy-on-select stops working. The selection you make with click-and-drag exists inside Claude Code, not in your terminal's selection buffer, so tmux copy mode, Kitty hints, and similar tools don't see it.139Mouse capture is the most common friction point, especially over SSH or inside tmux. When Claude Code captures mouse events, your terminal's native copy-on-select stops working. The selection you make with click-and-drag exists inside Claude Code, not in your terminal's selection buffer, so tmux copy mode, Kitty hints, and similar tools don't see it.

136 140 

137Claude Code tries to write the selection to your clipboard, but the path it uses depends on your setup. Inside tmux it writes to the tmux paste buffer. Over SSH it falls back to OSC 52 escape sequences, which some terminals block by default. Claude Code prints a toast after each copy telling you which path it used.141Claude Code tries to write the selection to your clipboard, but the path it uses depends on your setup. Inside tmux it writes to the tmux paste buffer. Over SSH it falls back to OSC 52 escape sequences, which some terminals block by default. iTerm2 blocks them until you turn on Settings → General → Selection → Applications in terminal may access clipboard. Running [`/terminal-setup`](/en/terminal-config) in iTerm2 enables this for you. Claude Code prints a toast after each copy telling you which path it used.

142 

143For a one-off native selection, hold your terminal's bypass modifier while you click and drag: `Option` in iTerm2, or `Shift` in most Linux and Windows terminals. The modifier tells your terminal to handle the selection itself instead of forwarding mouse events to Claude Code, so `Cmd+C` and your terminal's other copy shortcuts work on it.

138 144 

139If you rely on your terminal's native selection, set `CLAUDE_CODE_DISABLE_MOUSE=1` to opt out of mouse capture while keeping the flicker-free rendering and flat memory:145If you rely on native selection all the time, set `CLAUDE_CODE_DISABLE_MOUSE=1` to opt out of mouse capture while keeping the flicker-free rendering and flat memory:

140 146 

141```bash theme={null}147```bash theme={null}

142CLAUDE_CODE_NO_FLICKER=1 CLAUDE_CODE_DISABLE_MOUSE=1 claude148CLAUDE_CODE_NO_FLICKER=1 CLAUDE_CODE_DISABLE_MOUSE=1 claude

glossary.md +307 −0 added

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Glossary

6 

7> Definitions for Claude Code terminology. Learn what agentic loop, compaction, CLAUDE.md, hooks, subagents, MCP, and other core concepts mean.

8 

9This glossary defines Claude Code terminology. Each entry links to the page where the concept is covered in depth. For model-level concepts like tokens, temperature, and RAG, see the [platform glossary](https://platform.claude.com/docs/en/about-claude/glossary).

10 

11## A

12 

13### Agent teams

14 

15Multiple independent Claude Code sessions coordinated by a team lead, with a shared task list and peer-to-peer messaging. Unlike [subagents](#subagent), which run within a single session and report only to the parent, teammates each have their own context window and you can interact with any of them directly. Agent teams are experimental and must be enabled by setting `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`.

16 

17Learn more: [Run agent teams](/en/agent-teams)

18 

19### Agentic coding

20 

21A workflow where the AI can read files, run commands, and make changes autonomously while you watch, redirect, or step away, as opposed to chat-based assistants that only respond with text you must apply yourself. Claude Code is agentic because it has [tools](#tool) that let it act, not just advise.

22 

23Learn more: [How Claude Code works](/en/how-claude-code-works)

24 

25### Agentic harness

26 

27The tools, context management, and execution environment that turn a language model into a capable coding agent. Claude Code is the harness; Claude is the model inside it. The harness supplies file access, shell execution, permission gating, memory loading, and the loop that chains actions together.

28 

29Learn more: [How Claude Code works](/en/how-claude-code-works)

30 

31### Agentic loop

32 

33The cycle Claude works through for every task: gather context, take action, verify results, and repeat until done. Each tool use returns information that informs the next step. You can interrupt the loop at any point to redirect. Most extension points, including [hooks](#hook), [skills](#skill), and [MCP](#mcp-model-context-protocol), plug into specific phases of this loop.

34 

35Learn more: [How Claude Code works](/en/how-claude-code-works#the-agentic-loop)

36 

37### Auto memory

38 

39Notes Claude writes for itself based on your corrections and preferences, stored per git repository under `~/.claude/projects/`. All worktrees of the same repository share one auto memory directory. The first 200 lines or 25 KB of the `MEMORY.md` index loads at the start of every session. Auto memory is the Claude-written counterpart to [CLAUDE.md](#claude-md), which you write.

40 

41Learn more: [Auto memory](/en/memory#auto-memory)

42 

43### Auto mode

44 

45A [permission mode](#permission-mode) where a separate classifier model reviews each action in the background instead of showing you approval prompts. The classifier blocks scope escalation, untrusted infrastructure, and [prompt injection](#prompt-injection). It never sees tool results, so injected instructions cannot influence its decisions. Auto mode is a research preview available on Max, Team, Enterprise, and API plans.

46 

47Learn more: [Eliminate prompts with auto mode](/en/permission-modes#eliminate-prompts-with-auto-mode)

48 

49## B

50 

51### Bare mode

52 

53A startup flag, `--bare`, that skips auto-discovery of hooks, skills, plugins, MCP servers, auto memory, and CLAUDE.md. Only flags you pass explicitly take effect. Recommended for CI and scripted calls where you need identical behavior across machines regardless of local configuration.

54 

55Learn more: [Start faster with bare mode](/en/headless#start-faster-with-bare-mode)

56 

57### Bundled skills

58 

59Prompt-based playbooks included with Claude Code, such as `/batch`, `/simplify`, `/debug`, and `/loop`. Unlike built-in commands, which execute fixed logic, bundled skills give Claude a detailed prompt and let it orchestrate the work, so they can spawn agents, read files, and adapt to your codebase.

60 

61Learn more: [Bundled skills](/en/skills#bundled-skills)

62 

63## C

64 

65### Channel

66 

67An [MCP server](#mcp-model-context-protocol) that pushes events into your running session so Claude can react to things that happen while you're away from the terminal. Channels can be two-way: Claude reads an inbound event and replies back through the same channel. Telegram, Discord, and iMessage are included in the research preview.

68 

69Learn more: [Channels](/en/channels)

70 

71### Checkpoint

72 

73An automatic snapshot of your code captured before each edit Claude makes. Press `Esc` twice or run `/rewind` to restore code, conversation, or both to an earlier point. Checkpoints are local to the session, separate from git, and don't track changes made through the Bash tool.

74 

75Learn more: [Checkpointing](/en/checkpointing)

76 

77### `.claude` directory

78 

79The directory where Claude Code reads project-scoped configuration: settings, hooks, skills, subagents, rules, and auto memory. A project has `.claude/` at its root; your user-level defaults are at `~/.claude/`.

80 

81Learn more: [The `.claude` directory](/en/claude-directory)

82 

83### CLAUDE.md

84 

85A markdown file of persistent instructions you write for Claude, loaded at the start of every session as a user message after the system prompt. Put project conventions, architecture notes, and "always do X" rules here. CLAUDE.md survives [compaction](#compaction) and is re-read fresh from disk afterward.

86 

87You can place CLAUDE.md at project scope in `./CLAUDE.md` or `./.claude/CLAUDE.md`, at user scope in `~/.claude/CLAUDE.md`, or as [managed policy](#managed-settings) for your organization. More specific locations take precedence.

88 

89Learn more: [CLAUDE.md files](/en/memory#claude-md-files)

90 

91### Command

92 

93A reusable instruction you invoke by typing `/name` in the prompt. Built-in commands such as `/clear`, `/model`, and `/compact` control the session. You can define your own commands as files in `.claude/commands/`, or install them from a [plugin](#plugin). [Skills](#skill) are the recommended way to package multi-step commands.

94 

95Learn more: [Commands](/en/commands) · [Skills](/en/skills)

96 

97### Compaction

98 

99Automatic summarization of your conversation when the [context window](#context-window) approaches its limit. Older tool outputs are cleared first, then the conversation is summarized. Project-root CLAUDE.md and auto memory survive compaction and reload from disk; instructions given only in conversation may be lost. Run `/compact` to trigger manually, optionally with a focus like `/compact focus on the API changes`.

100 

101Learn more: [What survives compaction](/en/context-window#what-survives-compaction) · [When context fills up](/en/how-claude-code-works#when-context-fills-up)

102 

103### Context window

104 

105The working memory for a session, holding conversation history, file contents, command outputs, CLAUDE.md, auto memory, loaded skills, and system instructions. As you work, context fills up until [compaction](#compaction) summarizes it. Run `/context` to see what's using space. For the underlying model concept, see the [platform glossary](https://platform.claude.com/docs/en/about-claude/glossary#context-window).

106 

107Learn more: [Explore the context window](/en/context-window)

108 

109## D

110 

111### Dispatch

112 

113A phone-initiated task router that spawns a Claude Code session in the Desktop app when you send a coding task from the Claude mobile app. Your prompt routes to the right tool automatically. Available on Pro and Max plans.

114 

115Learn more: [Sessions from Dispatch](/en/desktop#sessions-from-dispatch)

116 

117## E

118 

119### Effort level

120 

121A setting that controls how much of the adaptive-reasoning thinking budget Claude uses on each turn. Higher effort means more thinking tokens and deeper reasoning; lower effort is faster and cheaper. Effort is supported on Opus 4.7, Opus 4.6, and Sonnet 4.6.

122 

123Learn more: [Adjust effort level](/en/model-config#adjust-effort-level)

124 

125### Extended thinking

126 

127Visible step-by-step reasoning the model performs before responding. You can cap thinking tokens with `MAX_THINKING_TOKENS` or adjust the [effort level](#effort-level). Thinking appears in gray italic text in the terminal.

128 

129Learn more: [Use extended thinking](/en/common-workflows#use-extended-thinking-thinking-mode)

130 

131## H

132 

133### Hook

134 

135A user-defined handler that executes automatically at a specific point in Claude Code's lifecycle, such as before a tool runs, after a file edit, or at session start. Handlers can be a shell command, HTTP endpoint, MCP tool, LLM prompt, or subagent. Hooks are deterministic: they fire at fixed lifecycle points rather than at the model's discretion.

136 

137A hook configuration has three levels:

138 

139* **Hook event**: the lifecycle point

140* **Matcher**: filters which events fire it

141* **Hook handler**: what runs

142 

143Learn more: [Get started with hooks](/en/hooks-guide) · [Hooks reference](/en/hooks)

144 

145## M

146 

147### Managed settings

148 

149A settings file enforced org-wide by IT or DevOps, placed at an OS-level path outside `~/.claude`. Users cannot override or exclude managed settings. Use this for security policies, compliance requirements, or standardized tooling across a fleet.

150 

151Learn more: [Server-managed settings](/en/server-managed-settings)

152 

153### MCP (Model Context Protocol)

154 

155An open standard for connecting AI tools to external data sources and services. MCP servers give Claude new tools for Slack, Jira, databases, browsers, and hundreds of other integrations. You connect servers via `/mcp` or by adding them to `.mcp.json`. For the protocol itself, see the [platform glossary](https://platform.claude.com/docs/en/about-claude/glossary#mcp-model-context-protocol).

156 

157Learn more: [Model Context Protocol](/en/mcp)

158 

159### MCP Tool Search

160 

161A context-saving mechanism that defers MCP tool schemas until needed. Only tool names load at startup; Claude fetches the full schema on demand when it decides to use a specific tool. This keeps idle MCP servers from consuming much context.

162 

163Learn more: [Scale with MCP Tool Search](/en/mcp#scale-with-mcp-tool-search)

164 

165## N

166 

167### Non-interactive mode

168 

169A mode that executes a single prompt and exits without a conversational session, invoked with `-p` or `--print`. Used for CI, scripts, and piping. The [Agent SDK](/en/agent-sdk/overview) is the Python and TypeScript equivalent. Formerly called headless mode.

170 

171Learn more: [Run Claude Code programmatically](/en/headless)

172 

173## O

174 

175### Output style

176 

177A configuration that modifies Claude's system prompt to change response behavior, tone, or format. Output styles turn off the software-engineering-specific parts of the default system prompt, unlike [CLAUDE.md](#claude-md) which is delivered as a user message following the system prompt. Built-in styles include Default, Explanatory, and Learning.

178 

179Learn more: [Output styles](/en/output-styles)

180 

181## P

182 

183### Permission mode

184 

185The baseline approval behavior for the session. Cycle with `Shift+Tab` in the CLI or use the mode selector in VS Code, Desktop, and claude.ai. Available modes are `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, and `bypassPermissions`.

186 

187Learn more: [Choose a permission mode](/en/permission-modes)

188 

189### Permission rule

190 

191A settings entry that allows, asks about, or denies a tool invocation based on the tool name and argument pattern. Rules are evaluated deny→ask→allow, first match wins. Permission rules are fine-grained controls layered on top of the broader [permission mode](#permission-mode).

192 

193Learn more: [Configure permissions](/en/permissions)

194 

195### Plan mode

196 

197A [permission mode](#permission-mode) where Claude researches and proposes changes without editing your source files. It can read, search, and run exploration commands, then presents a plan for approval before touching anything. Enter plan mode with `/plan` or by pressing `Shift+Tab`.

198 

199Learn more: [Analyze before you edit with plan mode](/en/permission-modes#analyze-before-you-edit-with-plan-mode)

200 

201### Plugin

202 

203A bundle of skills, hooks, subagents, and MCP servers packaged as a single installable unit. Plugin skills are namespaced as `plugin-name:skill-name` so multiple plugins coexist. Distribute plugins across teams via a [marketplace](/en/plugin-marketplaces).

204 

205Learn more: [Plugins](/en/plugins)

206 

207### Project trust

208 

209A one-time dialog accepting a directory before Claude Code loads its configuration. Trust gates auto-installation of marketplace plugins and execution of project-defined hooks. Trusting a directory means its `.claude/settings.json`, `.mcp.json`, and other config files take effect.

210 

211Learn more: [The `.claude` directory](/en/claude-directory)

212 

213### Prompt injection

214 

215Hostile instructions embedded in a file, web page, or tool result that attempt to redirect Claude toward actions you never asked for. Claude Code's defenses include the permission system, command blocklists, and trust verification. [Auto mode](#auto-mode) adds a server-side probe that scans tool results for suspicious content and a classifier that never sees tool results, so injected text cannot influence its approval decisions.

216 

217Learn more: [Protect against prompt injection](/en/security#protect-against-prompt-injection)

218 

219## R

220 

221### Remote Control

222 

223A way to continue a local Claude Code session from your phone or browser via claude.ai. Your code stays on your machine; only the UI is remote. Different from Claude Code on the web, which runs in a cloud sandbox.

224 

225Learn more: [Remote Control](/en/remote-control)

226 

227### Rules

228 

229Modular instruction files in `.claude/rules/` that load alongside CLAUDE.md. A rule can be path-scoped with YAML `paths:` frontmatter so it only loads when Claude reads a matching file, keeping context lean until it's relevant.

230 

231Learn more: [Organize rules with `.claude/rules/`](/en/memory#organize-rules-with-claude/rules/)

232 

233## S

234 

235### Sandboxing

236 

237OS-level filesystem and network isolation for the Bash tool. Commands run inside a boundary you define upfront, so Claude can work freely within it without per-command approval prompts. Sandboxing is a separate layer from [permission rules](#permission-rule).

238 

239Learn more: [Sandboxing](/en/sandboxing)

240 

241### Session

242 

243A conversation tied to your current directory, with its own independent [context window](#context-window). Sessions can be resumed with `claude -c`, forked with `--fork-session` to preserve history under a new session ID, or run in parallel across terminals. Running `/clear` starts a new session; the previous one stays stored and is available via `/resume`. Each session's transcript is stored under `~/.claude/projects/`.

244 

245Learn more: [Work with sessions](/en/how-claude-code-works#work-with-sessions)

246 

247### Settings layers

248 

249The hierarchy Claude Code reads configuration from, in precedence order from highest to lowest: [managed policy](#managed-settings), command-line arguments, local settings at `.claude/settings.local.json`, project settings at `.claude/settings.json`, then user settings at `~/.claude/settings.json`. Arrays merge across layers; scalars at a higher layer override lower ones.

250 

251Learn more: [Settings files](/en/settings#settings-files)

252 

253### Skill

254 

255A `SKILL.md` file containing instructions, knowledge, or a workflow that Claude adds to its toolkit. Claude loads a skill automatically when relevant, or you invoke it directly with `/skill-name`. Skills follow the Agent Skills open standard; Claude Code extends it with invocation control and subagent execution.

256 

257Skills are the recommended successor to custom commands. A file at `.claude/commands/deploy.md` and one at `.claude/skills/deploy/SKILL.md` both create `/deploy` and work the same way; existing command files continue to work.

258 

259Learn more: [Extend Claude with skills](/en/skills)

260 

261### Subagent

262 

263A specialized AI assistant that runs in its own context window with a custom system prompt, specific tool access, and independent permissions. It works on a delegated task and returns a summary to the main conversation. Use subagents to keep large explorations out of your primary context or to run parallel research. Different from [agent teams](#agent-teams), where each agent is a full independent session you can talk to directly.

264 

265Built-in subagents include Explore, Plan, and general-purpose.

266 

267Learn more: [Create custom subagents](/en/sub-agents)

268 

269### Surface

270 

271Any place you access Claude Code: the CLI, VS Code, JetBrains, Desktop, or claude.ai. All surfaces share the same engine, so your CLAUDE.md, settings, and skills work the same way across them. Slack and the Chrome extension are integrations that connect to a surface rather than surfaces themselves.

272 

273Learn more: [Platforms and integrations](/en/platforms)

274 

275## T

276 

277### Teleport

278 

279A command, `/teleport`, that pulls a cloud Claude Code session into your local terminal. Claude fetches the branch, loads the conversation history, and resumes from the web session's last state. The reverse direction is `--remote`, which sends a local task to run on the web.

280 

281Learn more: [From web to terminal](/en/claude-code-on-the-web#from-web-to-terminal)

282 

283### Tool

284 

285An action Claude can take: read a file, edit code, run a shell command, search the web, spawn a subagent. Tools are what make Claude Code agentic. Without them, Claude can only respond with text. Each tool use returns a result that informs Claude's next decision in the [agentic loop](#agentic-loop).

286 

287Learn more: [Tools available to Claude](/en/tools-reference)

288 

289## W

290 

291### Worktree isolation

292 

293An isolation mode that runs Claude in a separate git worktree under `.claude/worktrees/`, enabled with the `-w` flag or `isolation: worktree` in subagent config. Changes stay on a separate branch in a separate directory, so parallel agents don't overwrite each other's files.

294 

295Learn more: [Run parallel sessions with git worktrees](/en/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)

296 

297***

298 

299## Deprecated and renamed terms

300 

301These terms appear in older docs, blog posts, and community content. Use the current name when searching this site.

302 

303| Old term | Now called | Notes |

304| --------------- | --------------------------------------------- | ------------------------------------ |

305| Headless mode | [Non-interactive mode](#non-interactive-mode) | Same `-p` flag, same behavior |

306| Custom commands | [Skills](#skill) | `.claude/commands/` files still work |

307| Slash commands | Commands | "Slash" dropped from product copy |

Details

85 85 

86For more information, see [Google Cloud authentication documentation](https://cloud.google.com/docs/authentication).86For more information, see [Google Cloud authentication documentation](https://cloud.google.com/docs/authentication).

87 87 

88Claude Code v2.1.121 or later supports [X.509 certificate-based Workload Identity Federation](https://cloud.google.com/iam/docs/workload-identity-federation-with-x509-certificates) through the same Application Default Credentials chain. Set `GOOGLE_APPLICATION_CREDENTIALS` to the path of your credential configuration file.

89 

88<Note>90<Note>

89 When authenticating, Claude Code will automatically use the project ID from the `ANTHROPIC_VERTEX_PROJECT_ID` environment variable. To override this, set one of these environment variables: `GCLOUD_PROJECT`, `GOOGLE_CLOUD_PROJECT`, or `GOOGLE_APPLICATION_CREDENTIALS`.91 When authenticating, Claude Code will automatically use the project ID from the `ANTHROPIC_VERTEX_PROJECT_ID` environment variable. To override this, set one of these environment variables: `GCLOUD_PROJECT`, `GOOGLE_CLOUD_PROJECT`, or `GOOGLE_APPLICATION_CREDENTIALS`.

90</Note>92</Note>

headless.md +2 −2

Details

123When an API request fails with a retryable error, Claude Code emits a `system/api_retry` event before retrying. You can use this to surface retry progress or implement custom backoff logic.123When an API request fails with a retryable error, Claude Code emits a `system/api_retry` event before retrying. You can use this to surface retry progress or implement custom backoff logic.

124 124 

125| Field | Type | Description |125| Field | Type | Description |

126| ---------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |126| ---------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

127| `type` | `"system"` | message type |127| `type` | `"system"` | message type |

128| `subtype` | `"api_retry"` | identifies this as a retry event |128| `subtype` | `"api_retry"` | identifies this as a retry event |

129| `attempt` | integer | current attempt number, starting at 1 |129| `attempt` | integer | current attempt number, starting at 1 |

130| `max_retries` | integer | total retries permitted |130| `max_retries` | integer | total retries permitted |

131| `retry_delay_ms` | integer | milliseconds until the next attempt |131| `retry_delay_ms` | integer | milliseconds until the next attempt |

132| `error_status` | integer or null | HTTP status code, or `null` for connection errors with no HTTP response |132| `error_status` | integer or null | HTTP status code, or `null` for connection errors with no HTTP response |

133| `error` | string | error category: `authentication_failed`, `billing_error`, `rate_limit`, `invalid_request`, `server_error`, `max_output_tokens`, or `unknown` |133| `error` | string | error category: `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `rate_limit`, `invalid_request`, `server_error`, `max_output_tokens`, or `unknown` |

134| `uuid` | string | unique event identifier |134| `uuid` | string | unique event identifier |

135| `session_id` | string | session the event belongs to |135| `session_id` | string | session the event belongs to |

136 136 

hooks.md +132 −41

Details

18 18 

19<div style={{maxWidth: "500px", margin: "0 auto"}}>19<div style={{maxWidth: "500px", margin: "0 auto"}}>

20 <Frame>20 <Frame>

21 <img src="https://mintcdn.com/claude-code/_SQ1BnFTP0QUrae-/images/hooks-lifecycle.svg?fit=max&auto=format&n=_SQ1BnFTP0QUrae-&q=85&s=75bd3d4bdefd4f08a7d736167243fd78" alt="Hook lifecycle diagram showing SessionStart, then a per-turn loop containing UserPromptSubmit, UserPromptExpansion for slash commands, the nested agentic loop (PreToolUse, PermissionRequest, PostToolUse, PostToolUseFailure, PostToolBatch, SubagentStart/Stop, TaskCreated, TaskCompleted), and Stop or StopFailure, followed by TeammateIdle, PreCompact, PostCompact, and SessionEnd, with Elicitation and ElicitationResult nested inside MCP tool execution, PermissionDenied as a side branch from PermissionRequest for auto-mode denials, and WorktreeCreate, WorktreeRemove, Notification, ConfigChange, InstructionsLoaded, CwdChanged, and FileChanged as standalone async events" width="520" height="1228" data-path="images/hooks-lifecycle.svg" />21 <img src="https://mintcdn.com/claude-code/ZIW26Z9pnpsXLhbS/images/hooks-lifecycle.svg?fit=max&auto=format&n=ZIW26Z9pnpsXLhbS&q=85&s=ee23691324deb6501df09bfdae560b64" alt="Hook lifecycle diagram showing optional Setup feeding into SessionStart, then a per-turn loop containing UserPromptSubmit, UserPromptExpansion for slash commands, the nested agentic loop (PreToolUse, PermissionRequest, PostToolUse, PostToolUseFailure, PostToolBatch, SubagentStart/Stop, TaskCreated, TaskCompleted), and Stop or StopFailure, followed by TeammateIdle, PreCompact, PostCompact, and SessionEnd, with Elicitation and ElicitationResult nested inside MCP tool execution, PermissionDenied as a side branch from PermissionRequest for auto-mode denials, and WorktreeCreate, WorktreeRemove, Notification, ConfigChange, InstructionsLoaded, CwdChanged, and FileChanged as standalone async events" width="520" height="1228" data-path="images/hooks-lifecycle.svg" />

22 </Frame>22 </Frame>

23</div>23</div>

24 24 


27| Event | When it fires |27| Event | When it fires |

28| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |28| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

29| `SessionStart` | When a session begins or resumes |29| `SessionStart` | When a session begins or resumes |

30| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

30| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |31| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

31| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |32| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

32| `PreToolUse` | Before a tool call executes. Can block it |33| `PreToolUse` | Before a tool call executes. Can block it |


188Each event type matches on a different field:189Each event type matches on a different field:

189 190 

190| Event | What the matcher filters | Example matcher values |191| Event | What the matcher filters | Example matcher values |

191| :------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------ |192| :------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |

192| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | tool name | `Bash`, `Edit\|Write`, `mcp__.*` |193| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | tool name | `Bash`, `Edit\|Write`, `mcp__.*` |

193| `SessionStart` | how the session started | `startup`, `resume`, `clear`, `compact` |194| `SessionStart` | how the session started | `startup`, `resume`, `clear`, `compact` |

195| `Setup` | which CLI flag triggered setup | `init`, `maintenance` |

194| `SessionEnd` | why the session ended | `clear`, `resume`, `logout`, `prompt_input_exit`, `bypass_permissions_disabled`, `other` |196| `SessionEnd` | why the session ended | `clear`, `resume`, `logout`, `prompt_input_exit`, `bypass_permissions_disabled`, `other` |

195| `Notification` | notification type | `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog` |197| `Notification` | notification type | `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response` |

196| `SubagentStart` | agent type | `Bash`, `Explore`, `Plan`, or custom agent names |198| `SubagentStart` | agent type | `general-purpose`, `Explore`, `Plan`, or custom agent names |

197| `PreCompact`, `PostCompact` | what triggered compaction | `manual`, `auto` |199| `PreCompact`, `PostCompact` | what triggered compaction | `manual`, `auto` |

198| `SubagentStop` | agent type | same values as `SubagentStart` |200| `SubagentStop` | agent type | same values as `SubagentStart` |

199| `ConfigChange` | configuration source | `user_settings`, `project_settings`, `local_settings`, `policy_settings`, `skills` |201| `ConfigChange` | configuration source | `user_settings`, `project_settings`, `local_settings`, `policy_settings`, `skills` |

200| `CwdChanged` | no matcher support | always fires on every directory change |202| `CwdChanged` | no matcher support | always fires on every directory change |

201| `FileChanged` | literal filenames to watch (see [FileChanged](#filechanged)) | `.envrc\|.env` |203| `FileChanged` | literal filenames to watch (see [FileChanged](#filechanged)) | `.envrc\|.env` |

202| `StopFailure` | error type | `rate_limit`, `authentication_failed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, `unknown` |204| `StopFailure` | error type | `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, `unknown` |

203| `InstructionsLoaded` | load reason | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |205| `InstructionsLoaded` | load reason | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |

204| `UserPromptExpansion` | command name | your skill or command names |206| `UserPromptExpansion` | command name | your skill or command names |

205| `Elicitation` | MCP server name | your configured MCP server names |207| `Elicitation` | MCP server name | your configured MCP server names |


601| `Notification` | No | Shows stderr to user only |603| `Notification` | No | Shows stderr to user only |

602| `SubagentStart` | No | Shows stderr to user only |604| `SubagentStart` | No | Shows stderr to user only |

603| `SessionStart` | No | Shows stderr to user only |605| `SessionStart` | No | Shows stderr to user only |

606| `Setup` | No | Shows stderr to user only |

604| `SessionEnd` | No | Shows stderr to user only |607| `SessionEnd` | No | Shows stderr to user only |

605| `CwdChanged` | No | Shows stderr to user only |608| `CwdChanged` | No | Shows stderr to user only |

606| `FileChanged` | No | Shows stderr to user only |609| `FileChanged` | No | Shows stderr to user only |


655{ "continue": false, "stopReason": "Build failed, fix errors before continuing" }658{ "continue": false, "stopReason": "Build failed, fix errors before continuing" }

656```659```

657 660 

661#### Add context for Claude

662 

663The `additionalContext` field passes a string from your hook into Claude's context window. Claude Code wraps the string in a system reminder and inserts it into the conversation at the point where the hook fired. Claude reads the reminder on the next model request, but it does not appear as a chat message in the interface.

664 

665Return `additionalContext` inside `hookSpecificOutput` alongside the event name:

666 

667```json theme={null}

668{

669 "hookSpecificOutput": {

670 "hookEventName": "PostToolUse",

671 "additionalContext": "This file is generated. Edit src/schema.ts and run `bun generate` instead."

672 }

673}

674```

675 

676Where the reminder appears depends on the event:

677 

678* [SessionStart](#sessionstart), [Setup](#setup), and [SubagentStart](#subagentstart): at the start of the conversation, before the first prompt

679* [UserPromptSubmit](#userpromptsubmit) and [UserPromptExpansion](#userpromptexpansion): alongside the submitted prompt

680* [PreToolUse](#pretooluse), [PostToolUse](#posttooluse), [PostToolUseFailure](#posttoolusefailure), and [PostToolBatch](#posttoolbatch): next to the tool result

681 

682When several hooks return `additionalContext` for the same event, Claude receives all of the values. If a value exceeds 10,000 characters, Claude Code writes the full text to a file in the session directory and passes Claude the file path with a short preview instead.

683 

684Use `additionalContext` for information Claude should know about the current state of your environment or the operation that just ran:

685 

686* **Environment state**: the current branch, deployment target, or active feature flags

687* **Conditional project rules**: which test command applies to the file just edited, which directories are read-only in this worktree

688* **External data**: open issues assigned to you, recent CI results, content fetched from an internal service

689 

690For instructions that never change, prefer [CLAUDE.md](/en/memory). It loads without running a script and is the standard place for static project conventions.

691 

692Write the text as factual statements rather than imperative system instructions. Phrasing such as "The deployment target is production" or "This repo uses `bun test`" reads as project information. Text framed as out-of-band system commands can trigger Claude's prompt-injection defenses, which causes Claude to surface the text to you instead of treating it as context.

693 

694Once injected, the text is saved in the session transcript. For mid-session events like `PostToolUse` or `UserPromptSubmit`, resuming with `--continue` or `--resume` replays the saved text rather than re-running the hook for past turns, so values like timestamps or commit SHAs become stale on resume. `SessionStart` hooks run again on resume with `source` set to `"resume"`, so they can refresh their context.

695 

658#### Decision control696#### Decision control

659 697 

660Not every event supports blocking or controlling behavior through JSON. The events that do each use a different set of fields to express that decision. Use this table as a quick reference before writing a hook:698Not every event supports blocking or controlling behavior through JSON. The events that do each use a different set of fields to express that decision. Use this table as a quick reference before writing a hook:


759Any text your hook script prints to stdout is added as context for Claude. In addition to the [JSON output fields](#json-output) available to all hooks, you can return these event-specific fields:797Any text your hook script prints to stdout is added as context for Claude. In addition to the [JSON output fields](#json-output) available to all hooks, you can return these event-specific fields:

760 798 

761| Field | Description |799| Field | Description |

762| :------------------ | :------------------------------------------------------------------------ |800| :------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

763| `additionalContext` | String added to Claude's context. Multiple hooks' values are concatenated |801| `additionalContext` | String added to Claude's context at the start of the conversation, before the first prompt. See [Add context for Claude](#add-context-for-claude) for how the text is delivered and what to put in it |

764 802 

765```json theme={null}803```json theme={null}

766{804{

767 "hookSpecificOutput": {805 "hookSpecificOutput": {

768 "hookEventName": "SessionStart",806 "hookEventName": "SessionStart",

769 "additionalContext": "My additional context here"807 "additionalContext": "Current branch: feat/auth-refactor\nUncommitted changes: src/auth.ts, src/login.tsx\nActive issue: #4211 Migrate to OAuth2"

770 }808 }

771}809}

772```810```

773 811 

812Since plain stdout already reaches Claude for this event, a hook that only loads context can print to stdout directly without building JSON. Use the JSON form when you need to combine context with other fields such as `suppressOutput`.

813 

774#### Persist environment variables814#### Persist environment variables

775 815 

776SessionStart hooks have access to the `CLAUDE_ENV_FILE` environment variable, which provides a file path where you can persist environment variables for subsequent Bash commands.816SessionStart hooks have access to the `CLAUDE_ENV_FILE` environment variable, which provides a file path where you can persist environment variables for subsequent Bash commands.


811Any variables written to this file will be available in all subsequent Bash commands that Claude Code executes during the session.851Any variables written to this file will be available in all subsequent Bash commands that Claude Code executes during the session.

812 852 

813<Note>853<Note>

814 `CLAUDE_ENV_FILE` is available for SessionStart, [CwdChanged](#cwdchanged), and [FileChanged](#filechanged) hooks. Other hook types do not have access to this variable.854 `CLAUDE_ENV_FILE` is available for SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged), and [FileChanged](#filechanged) hooks. Other hook types do not have access to this variable.

815</Note>855</Note>

816 856 

857### Setup

858 

859Fires only when you launch Claude Code with `--init-only`, or with `--init` or `--maintenance` in print mode (`-p`). It does not fire on normal startup. Use it for one-time dependency installation or scheduled cleanup that you trigger explicitly from CI or scripts, separate from normal session startup. For per-session initialization, use [SessionStart](#sessionstart) instead.

860 

861The matcher value corresponds to the CLI flag that triggered the hook:

862 

863| Matcher | When it fires |

864| :------------ | :----------------------------------------- |

865| `init` | `claude --init-only` or `claude -p --init` |

866| `maintenance` | `claude -p --maintenance` |

867 

868`--init-only` runs Setup hooks and `SessionStart` hooks with the `startup` matcher, then exits without starting a conversation. `--init` and `--maintenance` fire Setup hooks only when combined with `-p` (print mode); in an interactive session those two flags do not currently fire Setup hooks.

869 

870Because Setup does not fire on every launch, a plugin that needs a dependency installed cannot rely on Setup alone. The practical pattern is to check for the dependency on first use and install on miss, for example a hook or skill that tests for `${CLAUDE_PLUGIN_DATA}/node_modules` and runs `npm install` if absent. See the [persistent data directory](/en/plugins-reference#persistent-data-directory) for where to store installed dependencies.

871 

872#### Setup input

873 

874In addition to the [common input fields](#common-input-fields), Setup hooks receive a `trigger` field set to either `"init"` or `"maintenance"`:

875 

876```json theme={null}

877{

878 "session_id": "abc123",

879 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

880 "cwd": "/Users/...",

881 "hook_event_name": "Setup",

882 "trigger": "init"

883}

884```

885 

886#### Setup decision control

887 

888Setup hooks cannot block. On exit code 2, stderr is shown to the user; on any other non-zero exit code, stderr appears only when you launch with `--verbose`. In both cases execution continues. To pass information into Claude's context, return `additionalContext` in JSON output; plain stdout is written to the debug log only. In addition to the [JSON output fields](#json-output) available to all hooks, you can return these event-specific fields:

889 

890| Field | Description |

891| :------------------ | :------------------------------------------------------------------------ |

892| `additionalContext` | String added to Claude's context. Multiple hooks' values are concatenated |

893 

894```json theme={null}

895{

896 "hookSpecificOutput": {

897 "hookEventName": "Setup",

898 "additionalContext": "Dependencies installed: node_modules, .venv"

899 }

900}

901```

902 

903Setup hooks have access to `CLAUDE_ENV_FILE`. Variables written to that file persist into subsequent Bash commands for the session, just as in [SessionStart hooks](#persist-environment-variables). Only `type: "command"` and `type: "mcp_tool"` hooks are supported.

904 

817### InstructionsLoaded905### InstructionsLoaded

818 906 

819Fires when a `CLAUDE.md` or `.claude/rules/*.md` file is loaded into context. This event fires at session start for eagerly-loaded files and again later when files are lazily loaded, for example when Claude accesses a subdirectory that contains a nested `CLAUDE.md` or when conditional rules with `paths:` frontmatter match. The hook does not support blocking or decision control. It runs asynchronously for observability purposes.907Fires when a `CLAUDE.md` or `.claude/rules/*.md` file is loaded into context. This event fires at session start for eagerly-loaded files and again later when files are lazily loaded, for example when Claude accesses a subdirectory that contains a nested `CLAUDE.md` or when conditional rules with `paths:` frontmatter match. The hook does not support blocking or decision control. It runs asynchronously for observability purposes.


884To block a prompt, return a JSON object with `decision` set to `"block"`:972To block a prompt, return a JSON object with `decision` set to `"block"`:

885 973 

886| Field | Description |974| Field | Description |

887| :------------------ | :----------------------------------------------------------------------------------------------------------------- |975| :------------------ | :--------------------------------------------------------------------------------------------------------------------- |

888| `decision` | `"block"` prevents the prompt from being processed and erases it from context. Omit to allow the prompt to proceed |976| `decision` | `"block"` prevents the prompt from being processed and erases it from context. Omit to allow the prompt to proceed |

889| `reason` | Shown to the user when `decision` is `"block"`. Not added to context |977| `reason` | Shown to the user when `decision` is `"block"`. Not added to context |

890| `additionalContext` | String added to Claude's context |978| `additionalContext` | String added to Claude's context alongside the submitted prompt. See [Add context for Claude](#add-context-for-claude) |

891| `sessionTitle` | Sets the session title, same effect as `/rename`. Use to name sessions automatically based on the prompt content |979| `sessionTitle` | Sets the session title, same effect as `/rename`. Use to name sessions automatically based on the prompt content |

892 980 

893```json theme={null}981```json theme={null}


939`UserPromptExpansion` hooks can block the expansion or add context. All [JSON output fields](#json-output) are available.1027`UserPromptExpansion` hooks can block the expansion or add context. All [JSON output fields](#json-output) are available.

940 1028 

941| Field | Description |1029| Field | Description |

942| :------------------ | :------------------------------------------------------------------------------- |1030| :------------------ | :-------------------------------------------------------------------------------------------------------------------- |

943| `decision` | `"block"` prevents the slash command from expanding. Omit to allow it to proceed |1031| `decision` | `"block"` prevents the slash command from expanding. Omit to allow it to proceed |

944| `reason` | Shown to the user when `decision` is `"block"` |1032| `reason` | Shown to the user when `decision` is `"block"` |

945| `additionalContext` | String added to Claude's context alongside the expanded prompt |1033| `additionalContext` | String added to Claude's context alongside the expanded prompt. See [Add context for Claude](#add-context-for-claude) |

946 1034 

947```json theme={null}1035```json theme={null}

948{1036{


1076| `permissionDecision` | `"allow"` skips the permission prompt. `"deny"` prevents the tool call. `"ask"` prompts the user to confirm. `"defer"` exits gracefully so the tool can be resumed later. [Deny and ask rules](/en/permissions#manage-permissions) are still evaluated regardless of what the hook returns |1164| `permissionDecision` | `"allow"` skips the permission prompt. `"deny"` prevents the tool call. `"ask"` prompts the user to confirm. `"defer"` exits gracefully so the tool can be resumed later. [Deny and ask rules](/en/permissions#manage-permissions) are still evaluated regardless of what the hook returns |

1077| `permissionDecisionReason` | For `"allow"` and `"ask"`, shown to the user but not Claude. For `"deny"`, shown to Claude. For `"defer"`, ignored |1165| `permissionDecisionReason` | For `"allow"` and `"ask"`, shown to the user but not Claude. For `"deny"`, shown to Claude. For `"defer"`, ignored |

1078| `updatedInput` | Modifies the tool's input parameters before execution. Replaces the entire input object, so include unchanged fields alongside modified ones. Combine with `"allow"` to auto-approve, or `"ask"` to show the modified input to the user. For `"defer"`, ignored |1166| `updatedInput` | Modifies the tool's input parameters before execution. Replaces the entire input object, so include unchanged fields alongside modified ones. Combine with `"allow"` to auto-approve, or `"ask"` to show the modified input to the user. For `"defer"`, ignored |

1079| `additionalContext` | String added to Claude's context before the tool executes. For `"defer"`, ignored |1167| `additionalContext` | String added to Claude's context alongside the tool result. Ignored when `permissionDecision` is `"defer"`. See [Add context for Claude](#add-context-for-claude) |

1080 1168 

1081When multiple PreToolUse hooks return different decisions, precedence is `deny` > `defer` > `ask` > `allow`.1169When multiple PreToolUse hooks return different decisions, precedence is `deny` > `defer` > `ask` > `allow`.

1082 1170 


1272`PostToolUse` hooks can provide feedback to Claude after tool execution. In addition to the [JSON output fields](#json-output) available to all hooks, your hook script can return these event-specific fields:1360`PostToolUse` hooks can provide feedback to Claude after tool execution. In addition to the [JSON output fields](#json-output) available to all hooks, your hook script can return these event-specific fields:

1273 1361 

1274| Field | Description |1362| Field | Description |

1275| :--------------------- | :----------------------------------------------------------------------------------------- |1363| :--------------------- | :--------------------------------------------------------------------------------------------------------------------------- |

1276| `decision` | `"block"` prompts Claude with the `reason`. Omit to allow the action to proceed |1364| `decision` | `"block"` prompts Claude with the `reason`. Omit to allow the action to proceed |

1277| `reason` | Explanation shown to Claude when `decision` is `"block"` |1365| `reason` | Explanation shown to Claude when `decision` is `"block"` |

1278| `additionalContext` | Additional context for Claude to consider |1366| `additionalContext` | String added to Claude's context alongside the tool result. See [Add context for Claude](#add-context-for-claude) |

1279| `updatedMCPToolOutput` | For [MCP tools](#match-mcp-tools) only: replaces the tool's output with the provided value |1367| `updatedToolOutput` | Replaces the tool's output with the provided value before it is sent to Claude. The value must match the tool's output shape |

1368| `updatedMCPToolOutput` | Replaces the output for [MCP tools](#match-mcp-tools) only. Prefer `updatedToolOutput`, which works for all tools |

1369 

1370The example below replaces the output of a `Bash` call. The replacement value matches the `Bash` tool's output shape:

1280 1371 

1281```json theme={null}1372```json theme={null}

1282{1373{

1283 "decision": "block",

1284 "reason": "Explanation for decision",

1285 "hookSpecificOutput": {1374 "hookSpecificOutput": {

1286 "hookEventName": "PostToolUse",1375 "hookEventName": "PostToolUse",

1287 "additionalContext": "Additional information for Claude"1376 "additionalContext": "Additional information for Claude",

1377 "updatedToolOutput": {

1378 "stdout": "[redacted]",

1379 "stderr": "",

1380 "interrupted": false,

1381 "isImage": false

1382 }

1288 }1383 }

1289}1384}

1290```1385```

1291 1386 

1387<Warning>

1388 `updatedToolOutput` only changes what Claude sees. The tool has already run by the time the hook fires, so any files written, commands executed, or network requests sent have already taken effect. Telemetry such as OpenTelemetry tool spans and analytics events also captures the original output before the hook runs. To prevent or modify a tool call before it runs, use a [PreToolUse](#pretooluse) hook instead.

1389 

1390 The replacement value must match the tool's output shape. Built-in tools return structured objects rather than plain strings. For example, `Bash` returns an object with `stdout`, `stderr`, `interrupted`, and `isImage` fields. For built-in tools, a value that does not match the tool's output schema is ignored and the original output is used. MCP tool output is passed through without schema validation. Stripping error details that Claude needs can cause it to proceed on a false assumption.

1391</Warning>

1392 

1292### PostToolUseFailure1393### PostToolUseFailure

1293 1394 

1294Runs when a tool execution fails. This event fires for tool calls that throw errors or return failure results. Use this to log failures, send alerts, or provide corrective feedback to Claude.1395Runs when a tool execution fails. This event fires for tool calls that throw errors or return failure results. Use this to log failures, send alerts, or provide corrective feedback to Claude.


1329`PostToolUseFailure` hooks can provide context to Claude after a tool failure. In addition to the [JSON output fields](#json-output) available to all hooks, your hook script can return these event-specific fields:1430`PostToolUseFailure` hooks can provide context to Claude after a tool failure. In addition to the [JSON output fields](#json-output) available to all hooks, your hook script can return these event-specific fields:

1330 1431 

1331| Field | Description |1432| Field | Description |

1332| :------------------ | :------------------------------------------------------------ |1433| :------------------ | :---------------------------------------------------------------------------------------------------------- |

1333| `additionalContext` | Additional context for Claude to consider alongside the error |1434| `additionalContext` | String added to Claude's context alongside the error. See [Add context for Claude](#add-context-for-claude) |

1334 1435 

1335```json theme={null}1436```json theme={null}

1336{1437{


1384`PostToolBatch` hooks can inject context for Claude. In addition to the [JSON output fields](#json-output) available to all hooks, your hook script can return these event-specific fields:1485`PostToolBatch` hooks can inject context for Claude. In addition to the [JSON output fields](#json-output) available to all hooks, your hook script can return these event-specific fields:

1385 1486 

1386| Field | Description |1487| Field | Description |

1387| :------------------ | :------------------------------------------------------ |1488| :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1388| `additionalContext` | Context string injected once before the next model call |1489| `additionalContext` | Context string injected once before the next model call. See [Add context for Claude](#add-context-for-claude) for delivery details, what to put in it, and how resumed sessions handle past values |

1389 1490 

1390```json theme={null}1491```json theme={null}

1391{1492{


1396}1497}

1397```1498```

1398 1499 

1399<Note>

1400 Injected `additionalContext` is persisted to the session transcript. On `--continue` or `--resume`, the saved text is replayed from disk and the hook does not re-run for past turns. Prefer static context such as conventions or file-type guidance over dynamic values like timestamps or the current commit SHA, since those become stale on resume.

1401 

1402 Frame the context as factual information rather than imperative system instructions. Text written as out-of-band system commands can trigger Claude's prompt-injection defenses, which surfaces the injection to the user instead of acting on it.

1403</Note>

1404 

1405Returning `decision: "block"` or `continue: false` stops the agentic loop before the next model call.1500Returning `decision: "block"` or `continue: false` stops the agentic loop before the next model call.

1406 1501 

1407### PermissionDenied1502### PermissionDenied


1452 1547 

1453### Notification1548### Notification

1454 1549 

1455Runs when Claude Code sends notifications. Matches on notification type: `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`. Omit the matcher to run hooks for all notification types.1550Runs when Claude Code sends notifications. Matches on notification type: `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response`. Omit the matcher to run hooks for all notification types.

1456 1551 

1457Use separate matchers to run different handlers depending on the notification type. This configuration triggers a permission-specific alert script when Claude needs permission approval and a different notification when Claude has been idle:1552Use separate matchers to run different handlers depending on the notification type. This configuration triggers a permission-specific alert script when Claude needs permission approval and a different notification when Claude has been idle:

1458 1553 


1499}1594}

1500```1595```

1501 1596 

1502Notification hooks cannot block or modify notifications. In addition to the [JSON output fields](#json-output) available to all hooks, you can return `additionalContext` to add context to the conversation:1597Notification hooks cannot block or modify notifications. They are intended for side effects such as forwarding the notification to an external service. The [common JSON output fields](#json-output) such as `systemMessage` apply.

1503 

1504| Field | Description |

1505| :------------------ | :------------------------------- |

1506| `additionalContext` | String added to Claude's context |

1507 1598 

1508### SubagentStart1599### SubagentStart

1509 1600 

1510Runs when a Claude Code subagent is spawned via the Agent tool. Supports matchers to filter by agent type name (built-in agents like `Bash`, `Explore`, `Plan`, or custom agent names from `.claude/agents/`).1601Runs when a Claude Code subagent is spawned via the Agent tool. Supports matchers to filter by agent type name (built-in agents like `general-purpose`, `Explore`, `Plan`, or custom agent names from `.claude/agents/`).

1511 1602 

1512#### SubagentStart input1603#### SubagentStart input

1513 1604 

1514In addition to the [common input fields](#common-input-fields), SubagentStart hooks receive `agent_id` with the unique identifier for the subagent and `agent_type` with the agent name (built-in agents like `"Bash"`, `"Explore"`, `"Plan"`, or custom agent names).1605In addition to the [common input fields](#common-input-fields), SubagentStart hooks receive `agent_id` with the unique identifier for the subagent and `agent_type` with the agent name (built-in agents like `"general-purpose"`, `"Explore"`, `"Plan"`, or custom agent names).

1515 1606 

1516```json theme={null}1607```json theme={null}

1517{1608{


1527SubagentStart hooks cannot block subagent creation, but they can inject context into the subagent. In addition to the [JSON output fields](#json-output) available to all hooks, you can return:1618SubagentStart hooks cannot block subagent creation, but they can inject context into the subagent. In addition to the [JSON output fields](#json-output) available to all hooks, you can return:

1528 1619 

1529| Field | Description |1620| Field | Description |

1530| :------------------ | :------------------------------------- |1621| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------ |

1531| `additionalContext` | String added to the subagent's context |1622| `additionalContext` | String added to the subagent's context at the start of its conversation, before its first prompt. See [Add context for Claude](#add-context-for-claude) |

1532 1623 

1533```json theme={null}1624```json theme={null}

1534{1625{


1723 1814 

1724| Field | Description |1815| Field | Description |

1725| :----------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1816| :----------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1726| `error` | Error type: `rate_limit`, `authentication_failed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, or `unknown` |1817| `error` | Error type: `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, or `unknown` |

1727| `error_details` | Additional details about the error, when available |1818| `error_details` | Additional details about the error, when available |

1728| `last_assistant_message` | The rendered error text shown in the conversation. Unlike `Stop` and `SubagentStop`, where this field holds Claude's conversational output, for `StopFailure` it contains the API error string itself, such as `"API Error: Rate limit reached"` |1819| `last_assistant_message` | The rendered error text shown in the conversation. Unlike `Stop` and `SubagentStop`, where this field holds Claude's conversational output, for `StopFailure` it contains the API error string itself, such as `"API Error: Rate limit reached"` |

1729 1820 

hooks-guide.md +11 −5

Details

428| Event | When it fires |428| Event | When it fires |

429| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |429| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

430| `SessionStart` | When a session begins or resumes |430| `SessionStart` | When a session begins or resumes |

431| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

431| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |432| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

432| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |433| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

433| `PreToolUse` | Before a tool call executes. Can block it |434| `PreToolUse` | Before a tool call executes. Can block it |


507The exit code determines what happens next:508The exit code determines what happens next:

508 509 

509* **Exit 0**: the action proceeds. For `UserPromptSubmit`, `UserPromptExpansion`, and `SessionStart` hooks, anything you write to stdout is added to Claude's context.510* **Exit 0**: the action proceeds. For `UserPromptSubmit`, `UserPromptExpansion`, and `SessionStart` hooks, anything you write to stdout is added to Claude's context.

510* **Exit 2**: the action is blocked. Write a reason to stderr, and Claude receives it as feedback so it can adjust.511* **Exit 2**: the action is blocked. Write a reason to stderr, and Claude receives it as feedback so it can adjust. Some events cannot be blocked: for `SessionStart`, `Setup`, `Notification`, and others, exit 2 shows stderr to the user and execution continues. See [exit code 2 behavior per event](/en/hooks#exit-code-2-behavior-per-event) for the full list.

511* **Any other exit code**: the action proceeds. The transcript shows a `<hook name> hook error` notice followed by the first line of stderr; the full stderr goes to the [debug log](/en/hooks#debug-hooks).512* **Any other exit code**: the action proceeds. The transcript shows a `<hook name> hook error` notice followed by the first line of stderr; the full stderr goes to the [debug log](/en/hooks#debug-hooks).

512 513 

513#### Structured JSON output514#### Structured JSON output


565 566 

566The `"Edit|Write"` matcher fires only when Claude uses the `Edit` or `Write` tool, not when it uses `Bash`, `Read`, or any other tool. See [Matcher patterns](/en/hooks#matcher-patterns) for how plain names and regular expressions are evaluated.567The `"Edit|Write"` matcher fires only when Claude uses the `Edit` or `Write` tool, not when it uses `Bash`, `Read`, or any other tool. See [Matcher patterns](/en/hooks#matcher-patterns) for how plain names and regular expressions are evaluated.

567 568 

569<Note>

570 Claude can also create or modify files by running shell commands through the `Bash` tool. If your hook must see every file change, such as for compliance scanning or audit logging, add a [`Stop`](/en/hooks#stop) hook that scans the working tree once per turn. For per-call coverage instead, also match `Bash` and have your script list modified and untracked files with `git status --porcelain`.

571</Note>

572 

568Each event type matches on a specific field:573Each event type matches on a specific field:

569 574 

570| Event | What the matcher filters | Example matcher values |575| Event | What the matcher filters | Example matcher values |

571| :-------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------ |576| :-------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |

572| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | tool name | `Bash`, `Edit\|Write`, `mcp__.*` |577| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | tool name | `Bash`, `Edit\|Write`, `mcp__.*` |

573| `SessionStart` | how the session started | `startup`, `resume`, `clear`, `compact` |578| `SessionStart` | how the session started | `startup`, `resume`, `clear`, `compact` |

579| `Setup` | which CLI flag triggered setup | `init`, `maintenance` |

574| `SessionEnd` | why the session ended | `clear`, `resume`, `logout`, `prompt_input_exit`, `bypass_permissions_disabled`, `other` |580| `SessionEnd` | why the session ended | `clear`, `resume`, `logout`, `prompt_input_exit`, `bypass_permissions_disabled`, `other` |

575| `Notification` | notification type | `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog` |581| `Notification` | notification type | `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response` |

576| `SubagentStart` | agent type | `Bash`, `Explore`, `Plan`, or custom agent names |582| `SubagentStart` | agent type | `general-purpose`, `Explore`, `Plan`, or custom agent names |

577| `PreCompact`, `PostCompact` | what triggered compaction | `manual`, `auto` |583| `PreCompact`, `PostCompact` | what triggered compaction | `manual`, `auto` |

578| `SubagentStop` | agent type | same values as `SubagentStart` |584| `SubagentStop` | agent type | same values as `SubagentStart` |

579| `ConfigChange` | configuration source | `user_settings`, `project_settings`, `local_settings`, `policy_settings`, `skills` |585| `ConfigChange` | configuration source | `user_settings`, `project_settings`, `local_settings`, `policy_settings`, `skills` |

580| `StopFailure` | error type | `rate_limit`, `authentication_failed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, `unknown` |586| `StopFailure` | error type | `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, `unknown` |

581| `InstructionsLoaded` | load reason | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |587| `InstructionsLoaded` | load reason | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |

582| `Elicitation` | MCP server name | your configured MCP server names |588| `Elicitation` | MCP server name | your configured MCP server names |

583| `ElicitationResult` | MCP server name | same values as `Elicitation` |589| `ElicitationResult` | MCP server name | same values as `Elicitation` |

Details

28| `Ctrl+X Ctrl+K` | Kill all background agents. Press twice within 3 seconds to confirm | Background agent control |28| `Ctrl+X Ctrl+K` | Kill all background agents. Press twice within 3 seconds to confirm | Background agent control |

29| `Ctrl+D` | Exit Claude Code session | EOF signal |29| `Ctrl+D` | Exit Claude Code session | EOF signal |

30| `Ctrl+G` or `Ctrl+X Ctrl+E` | Open in default text editor | Edit your prompt or custom response in your default text editor. `Ctrl+X Ctrl+E` is the readline-native binding. Turn on Show last response in external editor in `/config` to prepend Claude's previous reply as `#`-commented context above your prompt; the comment block is stripped when you save |30| `Ctrl+G` or `Ctrl+X Ctrl+E` | Open in default text editor | Edit your prompt or custom response in your default text editor. `Ctrl+X Ctrl+E` is the readline-native binding. Turn on Show last response in external editor in `/config` to prepend Claude's previous reply as `#`-commented context above your prompt; the comment block is stripped when you save |

31| `Ctrl+L` | Clear prompt input and redraw screen | Clears typed text and forces a full terminal redraw. Conversation history is kept. Use this to recover if the display becomes garbled or partially blank |31| `Ctrl+L` | Redraw screen | Forces a full terminal redraw. Input and conversation history are kept. Use this to recover if the display becomes garbled or partially blank |

32| `Ctrl+O` | Toggle transcript viewer | Shows detailed tool usage and execution. Also expands MCP calls, which collapse to a single line like "Called slack 3 times" by default |32| `Ctrl+O` | Toggle transcript viewer | Shows detailed tool usage and execution. Also expands MCP calls, which collapse to a single line like "Called slack 3 times" by default |

33| `Ctrl+R` | Reverse search command history | Search through previous commands interactively |33| `Ctrl+R` | Reverse search command history | Search through previous commands interactively |

34| `Ctrl+V` or `Cmd+V` (iTerm2) or `Alt+V` (Windows) | Paste image from clipboard | Inserts an `[Image #N]` chip at the cursor so you can reference it positionally in your prompt |34| `Ctrl+V` or `Cmd+V` (iTerm2) or `Alt+V` (Windows) | Paste image from clipboard | Inserts an `[Image #N]` chip at the cursor so you can reference it positionally in your prompt |


81| Shortcut | Description | Notes |81| Shortcut | Description | Notes |

82| :----------- | :---------------- | :------------------------------------------------------------ |82| :----------- | :---------------- | :------------------------------------------------------------ |

83| `/` at start | Command or skill | See [commands](#commands) and [skills](/en/skills) |83| `/` at start | Command or skill | See [commands](#commands) and [skills](/en/skills) |

84| `!` at start | Bash mode | Run commands directly and add execution output to the session |84| `!` at start | Shell mode | Run commands directly and add execution output to the session |

85| `@` | File path mention | Trigger file path autocomplete |85| `@` | File path mention | Trigger file path autocomplete |

86 86 

87### Transcript viewer87### Transcript viewer


2201. **Start search**: press `Ctrl+R` to activate reverse history search2201. **Start search**: press `Ctrl+R` to activate reverse history search

2212. **Type query**: enter text to search for in previous commands. The search term is highlighted in matching results2212. **Type query**: enter text to search for in previous commands. The search term is highlighted in matching results

2223. **Navigate matches**: press `Ctrl+R` again to cycle through older matches2223. **Navigate matches**: press `Ctrl+R` again to cycle through older matches

2234. **Accept match**:2234. **Change scope**: press `Ctrl+S` to cycle between this session, this project, and all projects

2245. **Accept match**:

224 * Press `Tab` or `Esc` to accept the current match and continue editing225 * Press `Tab` or `Esc` to accept the current match and continue editing

225 * Press `Enter` to accept and execute the command immediately226 * Press `Enter` to accept and execute the command immediately

2265. **Cancel search**:2276. **Cancel search**:

227 * Press `Ctrl+C` to cancel and restore your original input228 * Press `Ctrl+C` to cancel and restore your original input

228 * Press `Backspace` on empty search to cancel229 * Press `Backspace` on empty search to cancel

229 230 


259* Development servers260* Development servers

260* Long-running processes (docker, terraform)261* Long-running processes (docker, terraform)

261 262 

262### Bash mode with `!` prefix263### Shell mode with `!` prefix

263 264 

264Run bash commands directly without going through Claude by prefixing your input with `!`:265Run shell commands directly without going through Claude by prefixing your input with `!`:

265 266 

266```bash theme={null}267```bash theme={null}

267! npm test268! npm test


269! ls -la270! ls -la

270```271```

271 272 

272Bash mode:273Shell mode:

273 274 

274* Adds the command and its output to the conversation context275* Adds the command and its output to the conversation context

275* Shows real-time progress and output276* Shows real-time progress and output


277* Does not require Claude to interpret or approve the command278* Does not require Claude to interpret or approve the command

278* Supports history-based autocomplete: type a partial command and press **Tab** to complete from previous `!` commands in the current project279* Supports history-based autocomplete: type a partial command and press **Tab** to complete from previous `!` commands in the current project

279* Exit with `Escape`, `Backspace`, or `Ctrl+U` on an empty prompt280* Exit with `Escape`, `Backspace`, or `Ctrl+U` on an empty prompt

280* Pasting text that starts with `!` into an empty prompt enters bash mode automatically, matching typed `!` behavior281* Pasting text that starts with `!` into an empty prompt enters shell mode automatically, matching typed `!` behavior

281 282 

282This is useful for quick shell operations while maintaining conversation context.283This is useful for quick shell operations while maintaining conversation context.

283 284 

jetbrains.md +71 −34

Details

21 21 

22## Features22## Features

23 23 

24* **Quick launch**: Use `Cmd+Esc` (Mac) or `Ctrl+Esc` (Windows/Linux) to open Claude Code directly from your editor, or click the Claude Code button in the UI24* **Quick launch**: use `Cmd+Esc` (Mac) or `Ctrl+Esc` (Windows/Linux) to open Claude Code directly from your editor, or click the Claude Code button in the UI

25* **Diff viewing**: Code changes can be displayed directly in the IDE diff viewer instead of the terminal25* **Diff viewing**: code changes can be displayed directly in the IDE diff viewer instead of the terminal

26* **Selection context**: The current selection/tab in the IDE is automatically shared with Claude Code26* **Selection context**: the current selection or tab in the IDE is automatically shared with Claude Code

27* **File reference shortcuts**: Use `Cmd+Option+K` (Mac) or `Alt+Ctrl+K` (Linux/Windows) to insert file references (for example, @File#L1-99)27* **File reference shortcuts**: use `Cmd+Option+K` (Mac) or `Alt+Ctrl+K` (Linux/Windows) to insert file references such as `@src/auth.ts#L1-99`

28* **Diagnostic sharing**: Diagnostic errors (lint, syntax, etc.) from the IDE are automatically shared with Claude as you work28* **Diagnostic sharing**: diagnostic errors from the IDE, such as lint and syntax errors, are automatically shared with Claude as you work

29 29 

30## Installation30## Installation

31 31 

32### Marketplace Installation32### Marketplace installation

33 33 

34Find and install the [Claude Code plugin](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-) from the JetBrains marketplace and restart your IDE.34Find and install the [Claude Code plugin](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-) from the JetBrains marketplace and restart your IDE.

35 35 

36If you haven't installed Claude Code yet, see [our quickstart guide](/en/quickstart) for installation instructions.36If you haven't installed Claude Code yet, see the [quickstart guide](/en/quickstart) for installation instructions.

37 37 

38<Note>38<Note>

39 After installing the plugin, you may need to restart your IDE completely for it to take effect.39 After installing the plugin, you may need to restart your IDE completely for it to take effect.


41 41 

42## Usage42## Usage

43 43 

44### From Your IDE44### From your IDE

45 45 

46Run `claude` from your IDE's integrated terminal, and all integration features will be active.46Run `claude` from your IDE's integrated terminal, and all integration features will be active.

47 47 

48### From External Terminals48### From external terminals

49 49 

50Use the `/ide` command in any external terminal to connect Claude Code to your JetBrains IDE and activate all features:50Use the `/ide` command in any external terminal to connect Claude Code to your JetBrains IDE and activate all features:

51 51 


61 61 

62## Configuration62## Configuration

63 63 

64### Claude Code Settings64### Claude Code settings

65 65 

66Configure IDE integration through Claude Code's settings:66Configure IDE integration through Claude Code's settings:

67 67 


692. Enter the `/config` command692. Enter the `/config` command

703. Set the diff tool to `auto` to show diffs in the IDE, or `terminal` to keep them in the terminal703. Set the diff tool to `auto` to show diffs in the IDE, or `terminal` to keep them in the terminal

71 71 

72### Plugin Settings72### Plugin settings

73 73 

74Configure the Claude Code plugin by going to **Settings → Tools → Claude Code \[Beta]**:74Configure the Claude Code plugin by going to **Settings → Tools → Claude Code \[Beta]**:

75 75 

76#### General Settings76#### General settings

77 77 

78* **Claude command**: Specify a custom command to run Claude (for example, `claude`, `/usr/local/bin/claude`, or `npx @anthropic-ai/claude-code`)78* **Claude command**: specify a custom command to run Claude, for example `claude`, `/usr/local/bin/claude`, or `npx @anthropic-ai/claude-code`

79* **Suppress notification for Claude command not found**: Skip notifications about not finding the Claude command79* **Suppress notification for Claude command not found**: skip notifications about not finding the Claude command

80* **Enable using Option+Enter for multi-line prompts** (macOS only): When enabled, Option+Enter inserts new lines in Claude Code prompts. Disable if experiencing issues with the Option key being captured unexpectedly (requires terminal restart)80* **Enable using Option+Enter for multi-line prompts**: on macOS only. When enabled, Option+Enter inserts new lines in Claude Code prompts. Disable if the Option key is being captured unexpectedly. Requires a terminal restart.

81* **Enable automatic updates**: Automatically check for and install plugin updates (applied on restart)81* **Enable automatic updates**: automatically check for and install plugin updates, applied on restart

82 82 

83<Tip>83<Tip>

84 For WSL users: Set `wsl -d Ubuntu -- bash -lic "claude"` as your Claude command (replace `Ubuntu` with your WSL distribution name)84 For WSL users: Set `wsl -d Ubuntu -- bash -lic "claude"` as your Claude command (replace `Ubuntu` with your WSL distribution name)

85</Tip>85</Tip>

86 86 

87#### ESC Key Configuration87#### ESC key configuration

88 88 

89If the ESC key doesn't interrupt Claude Code operations in JetBrains terminals:89If the ESC key doesn't interrupt Claude Code operations in JetBrains terminals:

90 90 


96 96 

97This allows the ESC key to properly interrupt Claude Code operations.97This allows the ESC key to properly interrupt Claude Code operations.

98 98 

99## Special Configurations99## Special configurations

100 100 

101### Remote Development101### Remote development

102 102 

103<Warning>103<Warning>

104 When using JetBrains Remote Development, you must install the plugin in the remote host via **Settings → Plugin (Host)**.104 When using JetBrains Remote Development, you must install the plugin in the remote host via **Settings → Plugin (Host)**.


106 106 

107The plugin must be installed on the remote host, not on your local client machine.107The plugin must be installed on the remote host, not on your local client machine.

108 108 

109### WSL Configuration109### WSL configuration

110 110 

111<Warning>111If you're using Claude Code on WSL2 with a JetBrains IDE and see "No available IDEs detected", the cause is usually WSL2's NAT networking or Windows Firewall blocking the connection between WSL2 and the IDE running on the Windows host. WSL1 uses the host's network directly and isn't affected.

112 WSL users may need additional configuration for IDE detection to work properly. See our [WSL troubleshooting guide](/en/troubleshooting#jetbrains-ide-not-detected-on-wsl2) for detailed setup instructions.112 

113</Warning>113#### Allow WSL2 traffic through Windows Firewall

114 

115This is the recommended fix because it keeps your existing WSL2 networking mode.

116 

117<Steps>

118 <Step title="Find your WSL2 IP address">

119 From inside your WSL shell, run:

120 

121 ```bash theme={null}

122 hostname -I

123 ```

124 

125 Note the subnet, for example `172.21.123.45` is in `172.21.0.0/16`.

126 </Step>

127 

128 <Step title="Create a firewall rule">

129 Open PowerShell as Administrator and run the following, adjusting the IP range to match your subnet:

114 130 

115WSL configuration may require:131 ```powershell theme={null}

132 New-NetFirewallRule -DisplayName "Allow WSL2 Internal Traffic" -Direction Inbound -Protocol TCP -Action Allow -RemoteAddress 172.21.0.0/16 -LocalAddress 172.21.0.0/16

133 ```

134 </Step>

116 135 

117* Proper terminal configuration136 <Step title="Restart your IDE and Claude Code">

118* Networking mode adjustments137 Close and reopen both so the new rule takes effect.

119* Firewall settings updates138 </Step>

139</Steps>

140 

141#### Switch WSL2 to mirrored networking

142 

143Mirrored networking requires Windows 11 22H2 or later. If you're on Windows 10, use the firewall rule above instead.

144 

145Add this to `.wslconfig` in your Windows user directory:

146 

147```ini theme={null}

148[wsl2]

149networkingMode=mirrored

150```

151 

152Then restart WSL with `wsl --shutdown` from PowerShell.

120 153 

121## Troubleshooting154## Troubleshooting

122 155 

123### Plugin Not Working156### Plugin not working

157 

158If the plugin is installed but Claude Code features don't appear in your IDE:

124 159 

125* Ensure you're running Claude Code from the project root directory160* Ensure you're running Claude Code from the project root directory

126* Check that the JetBrains plugin is enabled in the IDE settings161* Check that the JetBrains plugin is enabled in the IDE settings

127* Completely restart the IDE (you may need to do this multiple times)162* Completely restart the IDE (you may need to do this multiple times)

128* For Remote Development, ensure the plugin is installed in the remote host163* For Remote Development, ensure the plugin is installed in the remote host

129 164 

130### IDE Not Detected165### IDE not detected

166 

167If running `claude` shows "No available IDEs detected":

131 168 

132* Verify the plugin is installed and enabled169* Verify the plugin is installed and enabled

133* Restart the IDE completely170* Restart the IDE completely

134* Check that you're running Claude Code from the integrated terminal171* Check that you're running Claude Code from the integrated terminal

135* For WSL users, see the [WSL troubleshooting guide](/en/troubleshooting#jetbrains-ide-not-detected-on-wsl2)172* For WSL users, see [WSL configuration](#wsl-configuration) above

136 173 

137### Command Not Found174### Command not found

138 175 

139If clicking the Claude icon shows "command not found":176If clicking the Claude icon shows "command not found":

140 177 

1411. Verify Claude Code is installed: `npm list -g @anthropic-ai/claude-code`1781. Verify Claude Code is installed by running `claude --version` in a terminal

1422. Configure the Claude command path in plugin settings1792. Configure the Claude command path in plugin settings

1433. For WSL users, use the WSL command format mentioned in the configuration section1803. For WSL users, use the WSL command format mentioned in the configuration section

144 181 

145## Security Considerations182## Security considerations

146 183 

147When Claude Code runs in a JetBrains IDE with auto-edit permissions enabled, it may be able to modify IDE configuration files that can be automatically executed by your IDE. This may increase the risk of running Claude Code in auto-edit mode and allow bypassing Claude Code's permission prompts for bash execution.184When Claude Code runs in a JetBrains IDE with auto-edit permissions enabled, it may be able to modify IDE configuration files that can be automatically executed by your IDE. This may increase the risk of running Claude Code in auto-edit mode and allow bypassing Claude Code's permission prompts for bash execution.

148 185 


152* Taking extra care to ensure Claude is only used with trusted prompts189* Taking extra care to ensure Claude is only used with trusted prompts

153* Being aware of which files Claude Code has access to modify190* Being aware of which files Claude Code has access to modify

154 191 

155For additional help, see our [troubleshooting guide](/en/troubleshooting).192For Claude Code installation or login problems outside the IDE, see [Troubleshoot installation and login](/en/troubleshoot-install).

keybindings.md +7 −4

Details

100Actions available in the `Chat` context:100Actions available in the `Chat` context:

101 101 

102| Action | Default | Description |102| Action | Default | Description |

103| :-------------------- | :------------------------ | :------------------------------------------------ |103| :-------------------- | :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------- |

104| `chat:cancel` | Escape | Cancel current input |104| `chat:cancel` | Escape | Cancel current input |

105| `chat:clearInput` | Ctrl+L | Clear prompt input and force a full screen redraw |105| `chat:clearInput` | Ctrl+L | Force a full screen redraw, preserving input. In [fullscreen rendering](/en/fullscreen#clear-the-conversation), press twice within two seconds to run `/clear` |

106| `chat:clearScreen` | Cmd+K | In [fullscreen rendering](/en/fullscreen#clear-the-conversation), press twice within two seconds to run `/clear` |

106| `chat:killAgents` | Ctrl+X Ctrl+K | Kill all background agents |107| `chat:killAgents` | Ctrl+X Ctrl+K | Kill all background agents |

107| `chat:cycleMode` | Shift+Tab\* | Cycle permission modes |108| `chat:cycleMode` | Shift+Tab\* | Cycle permission modes |

108| `chat:modelPicker` | Meta+P | Open model picker |109| `chat:modelPicker` | Meta+P | Open model picker |


166Actions available in the `HistorySearch` context:167Actions available in the `HistorySearch` context:

167 168 

168| Action | Default | Description |169| Action | Default | Description |

169| :---------------------- | :---------- | :----------------------- |170| :------------------------- | :---------- | :---------------------------------------- |

170| `historySearch:next` | Ctrl+R | Next match |171| `historySearch:next` | Ctrl+R | Next match |

171| `historySearch:accept` | Escape, Tab | Accept selection |172| `historySearch:accept` | Escape, Tab | Accept selection |

172| `historySearch:cancel` | Ctrl+C | Cancel search |173| `historySearch:cancel` | Ctrl+C | Cancel search |

173| `historySearch:execute` | Enter | Execute selected command |174| `historySearch:execute` | Enter | Execute selected command |

175| `historySearch:cycleScope` | Ctrl+S | Cycle scope: session, project, everywhere |

174 176 

175### Task actions177### Task actions

176 178 


422These shortcuts cannot be rebound:424These shortcuts cannot be rebound:

423 425 

424| Shortcut | Reason |426| Shortcut | Reason |

425| :------- | :--------------------------------------------- |427| :-------- | :--------------------------------------------- |

426| Ctrl+C | Hardcoded interrupt/cancel |428| Ctrl+C | Hardcoded interrupt/cancel |

427| Ctrl+D | Hardcoded exit |429| Ctrl+D | Hardcoded exit |

428| Ctrl+M | Identical to Enter in terminals (both send CR) |430| Ctrl+M | Identical to Enter in terminals (both send CR) |

431| Caps Lock | Not delivered to terminal applications |

429 432 

430## Terminal conflicts433## Terminal conflicts

431 434 

llm-gateway.md +10 −2

Details

45| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |45| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

46| `X-Claude-Code-Session-Id` | A unique identifier for the current Claude Code session. Proxies can use this to aggregate all API requests from a single session without parsing the request body. |46| `X-Claude-Code-Session-Id` | A unique identifier for the current Claude Code session. Proxies can use this to aggregate all API requests from a single session without parsing the request body. |

47 47 

48Claude Code also prepends a short attribution block to the system prompt containing the client version and a fingerprint derived from the conversation. The Anthropic API strips this block before processing, so it does not affect first-party prompt caching. If your gateway implements its own prompt cache keyed on the full request body, set [`CLAUDE_CODE_ATTRIBUTION_HEADER=0`](/en/env-vars) to omit it.

49 

48## Configuration50## Configuration

49 51 

50### Model selection52### Model selection

51 53 

52By default, Claude Code will use standard model names for the selected API format.54By default, Claude Code uses standard model names for the selected API format.

55 

56When `ANTHROPIC_BASE_URL` points at a gateway that exposes the Anthropic Messages format, Claude Code queries the gateway's `/v1/models` endpoint at startup and adds the returned models to the `/model` picker. Each discovered entry is labeled "From gateway" and uses the `display_name` field from the response when one is provided. This requires Claude Code v2.1.126 or later.

57 

58Discovery applies only to the Anthropic Messages format. It does not run for Bedrock or Vertex pass-through endpoints, and it does not run when `ANTHROPIC_BASE_URL` is unset or points at `api.anthropic.com`.

59 

60The discovery request authenticates the same way as inference requests: it sends `ANTHROPIC_AUTH_TOKEN` as a bearer token, or `ANTHROPIC_API_KEY` as the `x-api-key` header when no auth token is set, along with any headers from `ANTHROPIC_CUSTOM_HEADERS`. Only models whose ID begins with `claude` or `anthropic` are added to the picker. Results are cached to `~/.claude/cache/gateway-models.json` and refreshed on each startup. If the request fails or the gateway does not implement `/v1/models`, the picker falls back to the cached list from the previous startup or to the built-in model list.

53 61 

54If you have configured custom model names in your gateway, use the environment variables documented in [Model configuration](/en/model-config) to match your custom names.62If your gateway uses model names that do not match the discovery filter, use the environment variables documented in [Model configuration](/en/model-config) to add them manually.

55 63 

56## LiteLLM configuration64## LiteLLM configuration

57 65 

mcp.md +24 −0

Details

130 130 

131If an HTTP or SSE server disconnects mid-session, Claude Code automatically reconnects with exponential backoff: up to five attempts, starting at a one-second delay and doubling each time. The server appears as pending in `/mcp` while reconnection is in progress. After five failed attempts the server is marked as failed and you can retry manually from `/mcp`. Stdio servers are local processes and are not reconnected automatically.131If an HTTP or SSE server disconnects mid-session, Claude Code automatically reconnects with exponential backoff: up to five attempts, starting at a one-second delay and doubling each time. The server appears as pending in `/mcp` while reconnection is in progress. After five failed attempts the server is marked as failed and you can retry manually from `/mcp`. Stdio servers are local processes and are not reconnected automatically.

132 132 

133The same backoff applies when an HTTP or SSE server fails its initial connection at startup. As of v2.1.121, Claude Code retries the initial connection up to three times on transient errors such as a 5xx response, a connection refused, or a timeout, then marks the server as failed if it still cannot connect. Authentication and not-found errors are not retried because they require a configuration change to resolve.

134 

133### Push messages with channels135### Push messages with channels

134 136 

135An MCP server can also push messages directly into your session so Claude can react to external events like CI results, monitoring alerts, or chat messages. To enable this, your server declares the `claude/channel` capability and you opt it in with the `--channels` flag at startup. See [Channels](/en/channels) to use an officially supported channel, or [Channels reference](/en/channels-reference) to build your own.137An MCP server can also push messages directly into your session so Claude can react to external events like CI results, monitoring alerts, or chat messages. To enable this, your server declares the `claude/channel` capability and you opt it in with the `--channels` flag at startup. See [Channels](/en/channels) to use an officially supported channel, or [Channels reference](/en/channels-reference) to build your own.


737 </Step>739 </Step>

738</Steps>740</Steps>

739 741 

742A server you've added in Claude Code takes [precedence](#scope-hierarchy-and-precedence) over a claude.ai connector that points at the same URL. When this happens, `/mcp` lists the connector as hidden and shows how to remove the duplicate if you'd rather use the connector.

743 

740To disable claude.ai MCP servers in Claude Code, set the `ENABLE_CLAUDEAI_MCP_SERVERS` environment variable to `false`:744To disable claude.ai MCP servers in Claude Code, set the `ENABLE_CLAUDEAI_MCP_SERVERS` environment variable to `false`:

741 745 

742```bash theme={null}746```bash theme={null}


956}960}

957```961```

958 962 

963### Exempt a server from deferral

964 

965If a server's tools should always be visible to Claude without a search step, set `alwaysLoad` to `true` in that server's configuration. Every tool from that server then loads into context at session start regardless of the `ENABLE_TOOL_SEARCH` setting. Use this for a small number of tools that Claude needs on every turn, since each upfront tool consumes context that would otherwise be available for your conversation.

966 

967The following `.mcp.json` entry exempts one HTTP server while leaving other servers deferred:

968 

969```json theme={null}

970{

971 "mcpServers": {

972 "core-tools": {

973 "type": "http",

974 "url": "https://mcp.example.com/mcp",

975 "alwaysLoad": true

976 }

977 }

978}

979```

980 

981The `alwaysLoad` field is available on all server types and requires Claude Code v2.1.121 or later. An MCP server can also mark individual tools as always-loaded by including `"anthropic/alwaysLoad": true` in the tool's `_meta` object, which has the same effect for that tool only.

982 

959## Use MCP prompts as commands983## Use MCP prompts as commands

960 984 

961MCP servers can expose prompts that become available as commands in Claude Code.985MCP servers can expose prompts that become available as commands in Claude Code.

memory.md +1 −1

Details

136 136 

137Claude Code reads CLAUDE.md files by walking up the directory tree from your current working directory, checking each directory along the way for `CLAUDE.md` and `CLAUDE.local.md` files. This means if you run Claude Code in `foo/bar/`, it loads instructions from `foo/bar/CLAUDE.md`, `foo/CLAUDE.md`, and any `CLAUDE.local.md` files alongside them.137Claude Code reads CLAUDE.md files by walking up the directory tree from your current working directory, checking each directory along the way for `CLAUDE.md` and `CLAUDE.local.md` files. This means if you run Claude Code in `foo/bar/`, it loads instructions from `foo/bar/CLAUDE.md`, `foo/CLAUDE.md`, and any `CLAUDE.local.md` files alongside them.

138 138 

139All discovered files are concatenated into context rather than overriding each other. Within each directory, `CLAUDE.local.md` is appended after `CLAUDE.md`, so when instructions conflict, your personal notes are the last thing Claude reads at that level.139All discovered files are concatenated into context rather than overriding each other. Across the directory tree, content is ordered from the filesystem root down to your working directory. For the `foo/bar/` example, `foo/CLAUDE.md` appears in context before `foo/bar/CLAUDE.md`, so instructions closer to where you launched Claude are read last. Within each directory, `CLAUDE.local.md` is appended after `CLAUDE.md`, so your personal notes are the last thing Claude reads at that level.

140 140 

141Claude also discovers `CLAUDE.md` and `CLAUDE.local.md` files in subdirectories under your current working directory. Instead of loading them at launch, they are included when Claude reads files in those subdirectories.141Claude also discovers `CLAUDE.md` and `CLAUDE.local.md` files in subdirectories under your current working directory. Instead of loading them at launch, they are included when Claude reads files in those subdirectories.

142 142 

model-config.md +1 −1

Details

252 252 

253## Add a custom model option253## Add a custom model option

254 254 

255Use `ANTHROPIC_CUSTOM_MODEL_OPTION` to add a single custom entry to the `/model` picker without replacing the built-in aliases. This is useful for LLM gateway deployments or testing model IDs that Claude Code does not list by default.255Use `ANTHROPIC_CUSTOM_MODEL_OPTION` to add a single custom entry to the `/model` picker without replacing the built-in aliases. This is useful for testing model IDs that Claude Code does not list by default. For LLM gateway deployments, Claude Code populates the picker automatically from the gateway's `/v1/models` endpoint, so this variable is needed only when discovery does not return the model you want. See [LLM gateway model selection](/en/llm-gateway#model-selection).

256 256 

257This example sets all three variables to make a gateway-routed Opus deployment selectable:257This example sets all three variables to make a gateway-routed Opus deployment selectable:

258 258 

Details

155**`claude_code.llm_request`**155**`claude_code.llm_request`**

156 156 

157| Attribute | Description | Gated by |157| Attribute | Description | Gated by |

158| ------------------------ | -------------------------------------------------------------------------------- | -------- |158| -------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -------- |

159| `model` | Model identifier | |159| `model` | Model identifier | |

160| `gen_ai.system` | Always `anthropic`. OpenTelemetry GenAI semantic convention | |160| `gen_ai.system` | Always `anthropic`. OpenTelemetry GenAI semantic convention | |

161| `gen_ai.request.model` | Same value as `model`. OpenTelemetry GenAI semantic convention | |161| `gen_ai.request.model` | Same value as `model`. OpenTelemetry GenAI semantic convention | |


176| `status_code` | HTTP status code when the request failed | |176| `status_code` | HTTP status code when the request failed | |

177| `error` | Error message when the request failed | |177| `error` | Error message when the request failed | |

178| `response.has_tool_call` | `true` when the response contained tool-use blocks | |178| `response.has_tool_call` | `true` when the response contained tool-use blocks | |

179| `stop_reason` | API response `stop_reason`, such as `end_turn`, `tool_use`, `max_tokens`, `stop_sequence`, `pause_turn`, or `refusal` | |

180| `gen_ai.response.finish_reasons` | Same value as `stop_reason`, wrapped in a string array. OpenTelemetry GenAI semantic convention | |

179 181 

180Each retry attempt is also recorded as a `gen_ai.request.attempt` span event with `attempt` and `client_request_id` attributes.182Each retry attempt is also recorded as a `gen_ai.request.attempt` span event with `attempt` and `client_request_id` attributes.

181 183 


226| `num_cancelled` | Count of hooks cancelled before completion | |228| `num_cancelled` | Count of hooks cancelled before completion | |

227 229 

228<Note>230<Note>

229 Additional content-bearing attributes such as `new_context`, `system_prompt_preview`, `tool_input`, and `response.model_output` are emitted only when detailed beta tracing is active. They are not part of the stable span schema.231 Additional content-bearing attributes such as `new_context`, `system_prompt_preview`, `user_system_prompt`, `tool_input`, and `response.model_output` are emitted only when detailed beta tracing is active. They are not part of the stable span schema. `user_system_prompt` additionally requires `OTEL_LOG_USER_PROMPTS=1`. It carries only the system prompt text you provide via the `systemPrompt` SDK option or `--system-prompt` and `--append-system-prompt` flags, truncated at 60 KB, and is emitted once per session rather than per request.

230</Note>232</Note>

231 233 

232### Dynamic headers234### Dynamic headers


571* `event.sequence`: monotonically increasing counter for ordering events within a session573* `event.sequence`: monotonically increasing counter for ordering events within a session

572* `model`: Model used (for example, "claude-sonnet-4-6")574* `model`: Model used (for example, "claude-sonnet-4-6")

573* `error`: Error message575* `error`: Error message

574* `status_code`: HTTP status code as a string, or `"undefined"` for non-HTTP errors576* `status_code`: HTTP status code as a number. Absent for non-HTTP errors such as connection failures.

575* `duration_ms`: Request duration in milliseconds577* `duration_ms`: Request duration in milliseconds

576* `attempt`: Total number of attempts made, including the initial request (`1` means no retries occurred)578* `attempt`: Total number of attempts made, including the initial request (`1` means no retries occurred)

577* `request_id`: Anthropic API request ID from the response's `request-id` header, such as `"req_011..."`. Present only when the API returns one.579* `request_id`: Anthropic API request ID from the response's `request-id` header, such as `"req_011..."`. Present only when the API returns one.


724 726 

725#### Skill activated event727#### Skill activated event

726 728 

727Logged when a skill is invoked.729Logged when a skill is invoked, whether Claude calls it through the Skill tool or you run it as a `/` command.

728 730 

729**Event Name**: `claude_code.skill_activated`731**Event Name**: `claude_code.skill_activated`

730 732 


735* `event.timestamp`: ISO 8601 timestamp737* `event.timestamp`: ISO 8601 timestamp

736* `event.sequence`: monotonically increasing counter for ordering events within a session738* `event.sequence`: monotonically increasing counter for ordering events within a session

737* `skill.name`: Name of the skill. For user-defined and third-party plugin skills the value is the placeholder `"custom_skill"` unless `OTEL_LOG_TOOL_DETAILS=1`739* `skill.name`: Name of the skill. For user-defined and third-party plugin skills the value is the placeholder `"custom_skill"` unless `OTEL_LOG_TOOL_DETAILS=1`

740* `invocation_trigger`: How the skill was triggered (`"user-slash"`, `"claude-proactive"`, or `"nested-skill"`)

738* `skill.source`: Where the skill was loaded from (for example, `"bundled"`, `"userSettings"`, `"projectSettings"`, `"plugin"`)741* `skill.source`: Where the skill was loaded from (for example, `"bundled"`, `"userSettings"`, `"projectSettings"`, `"plugin"`)

739* `plugin.name` (when `OTEL_LOG_TOOL_DETAILS=1` or the plugin is from an official marketplace): Name of the owning plugin when the skill is provided by a plugin742* `plugin.name` (when `OTEL_LOG_TOOL_DETAILS=1` or the plugin is from an official marketplace): Name of the owning plugin when the skill is provided by a plugin

740* `marketplace.name` (when `OTEL_LOG_TOOL_DETAILS=1` or the plugin is from an official marketplace): Marketplace the owning plugin was installed from, when the skill is provided by a plugin743* `marketplace.name` (when `OTEL_LOG_TOOL_DETAILS=1` or the plugin is from an official marketplace): Marketplace the owning plugin was installed from, when the skill is provided by a plugin

741 744 

745#### At mention event

746 

747Logged when Claude Code resolves an `@`-mention in a prompt. Not every mention emits an event: early-exit paths such as permission denials, oversized files, PDF reference attachments, and directory listing failures return without logging.

748 

749**Event Name**: `claude_code.at_mention`

750 

751**Attributes**:

752 

753* All [standard attributes](#standard-attributes)

754* `event.name`: `"at_mention"`

755* `event.timestamp`: ISO 8601 timestamp

756* `event.sequence`: monotonically increasing counter for ordering events within a session

757* `mention_type`: Type of mention (`"file"`, `"directory"`, `"agent"`, `"mcp_resource"`)

758* `success`: Whether the mention resolved successfully (`"true"` or `"false"`)

759 

742#### API retries exhausted event760#### API retries exhausted event

743 761 

744Logged once when an API request fails after more than one attempt. Emitted alongside the final `api_error` event.762Logged once when an API request fails after more than one attempt. Emitted alongside the final `api_error` event.


753* `event.sequence`: monotonically increasing counter for ordering events within a session771* `event.sequence`: monotonically increasing counter for ordering events within a session

754* `model`: Model used772* `model`: Model used

755* `error`: Final error message773* `error`: Final error message

756* `status_code`: HTTP status code as a string774* `status_code`: HTTP status code as a number. Absent for non-HTTP errors.

757* `total_attempts`: Total number of attempts made775* `total_attempts`: Total number of attempts made

758* `total_retry_duration_ms`: Total wall-clock time across all attempts776* `total_retry_duration_ms`: Total wall-clock time across all attempts

759* `speed`: `"fast"` or `"normal"`777* `speed`: `"fast"` or `"normal"`


918 936 

919## Security and privacy937## Security and privacy

920 938 

921* Telemetry is opt-in and requires explicit configuration939* OpenTelemetry export to your backend is opt-in and requires explicit configuration. For Anthropic's separate operational telemetry and how to disable it, see [Data usage](/en/data-usage#telemetry-services)

922* Raw file contents and code snippets are not included in metrics or events. Trace spans are a separate data path: see the `OTEL_LOG_TOOL_CONTENT` bullet below940* Raw file contents and code snippets are not included in metrics or events. Trace spans are a separate data path: see the `OTEL_LOG_TOOL_CONTENT` bullet below

923* When authenticated via OAuth, `user.email` is included in telemetry attributes. If this is a concern for your organization, work with your telemetry backend to filter or redact this field941* When authenticated via OAuth, `user.email` is included in telemetry attributes. If this is a concern for your organization, work with your telemetry backend to filter or redact this field

924* User prompt content is not collected by default. Only prompt length is recorded. To include prompt content, set `OTEL_LOG_USER_PROMPTS=1`942* User prompt content is not collected by default. Only prompt length is recorded. To include prompt content, set `OTEL_LOG_USER_PROMPTS=1`

Details

117 117 

118If you install Claude Code through npm or manage your own binary distribution, end users may not need access to `downloads.claude.ai` or `storage.googleapis.com`.118If you install Claude Code through npm or manage your own binary distribution, end users may not need access to `downloads.claude.ai` or `storage.googleapis.com`.

119 119 

120Claude Code also sends optional operational telemetry by default, which you can disable with environment variables. See [Telemetry services](/en/data-usage#telemetry-services) for how to disable it before finalizing your allowlist.

121 

120When using [Amazon Bedrock](/en/amazon-bedrock), [Google Vertex AI](/en/google-vertex-ai), or [Microsoft Foundry](/en/microsoft-foundry), model traffic and authentication go to your provider instead of `api.anthropic.com`, `claude.ai`, or `platform.claude.com`. The WebFetch tool still calls `api.anthropic.com` for its [domain safety check](/en/data-usage#webfetch-domain-safety-check) unless you set `skipWebFetchPreflight: true` in [settings](/en/settings).122When using [Amazon Bedrock](/en/amazon-bedrock), [Google Vertex AI](/en/google-vertex-ai), or [Microsoft Foundry](/en/microsoft-foundry), model traffic and authentication go to your provider instead of `api.anthropic.com`, `claude.ai`, or `platform.claude.com`. The WebFetch tool still calls `api.anthropic.com` for its [domain safety check](/en/data-usage#webfetch-domain-safety-check) unless you set `skipWebFetchPreflight: true` in [settings](/en/settings).

121 123 

122[Claude Code on the web](/en/claude-code-on-the-web) and [Code Review](/en/code-review) connect to your repositories from Anthropic-managed infrastructure. If your GitHub Enterprise Cloud organization restricts access by IP address, enable [IP allow list inheritance for installed GitHub Apps](https://docs.github.com/en/enterprise-cloud@latest/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization#allowing-access-by-github-apps). The Claude GitHub App registers its IP ranges, so enabling this setting allows access without manual configuration. To [add the ranges to your allow list manually](https://docs.github.com/en/enterprise-cloud@latest/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization#adding-an-allowed-ip-address) instead, or to configure other firewalls, see the [Anthropic API IP addresses](https://platform.claude.com/docs/en/api/ip-addresses).124[Claude Code on the web](/en/claude-code-on-the-web) and [Code Review](/en/code-review) connect to your repositories from Anthropic-managed infrastructure. If your GitHub Enterprise Cloud organization restricts access by IP address, enable [IP allow list inheritance for installed GitHub Apps](https://docs.github.com/en/enterprise-cloud@latest/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization#allowing-access-by-github-apps). The Claude GitHub App registers its IP ranges, so enabling this setting allows access without manual configuration. To [add the ranges to your allow list manually](https://docs.github.com/en/enterprise-cloud@latest/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization#adding-an-allowed-ip-address) instead, or to configure other firewalls, see the [Anthropic API IP addresses](https://platform.claude.com/docs/en/api/ip-addresses).

overview.md +2 −2

Details

44 44 

45 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.45 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

46 46 

47 **Native Windows setups require [Git for Windows](https://git-scm.com/downloads/win).** Install it first if you don't have it. WSL setups do not need it.47 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

48 48 

49 <Info>49 <Info>

50 Native installations automatically update in the background to keep you on the latest version.50 Native installations automatically update in the background to keep you on the latest version.


86 You'll be prompted to log in on first use. That's it! [Continue with the Quickstart →](/en/quickstart)86 You'll be prompted to log in on first use. That's it! [Continue with the Quickstart →](/en/quickstart)

87 87 

88 <Tip>88 <Tip>

89 See [advanced setup](/en/setup) for installation options, manual updates, or uninstallation instructions. Visit [troubleshooting](/en/troubleshooting) if you hit issues.89 See [advanced setup](/en/setup) for installation options, manual updates, or uninstallation instructions. Visit [installation troubleshooting](/en/troubleshoot-install) if you hit issues.

90 </Tip>90 </Tip>

91 </Tab>91 </Tab>

92 92 

Details

19| [`plan`](#analyze-before-you-edit-with-plan-mode) | Reads only | Exploring a codebase before changing it |19| [`plan`](#analyze-before-you-edit-with-plan-mode) | Reads only | Exploring a codebase before changing it |

20| [`auto`](#eliminate-prompts-with-auto-mode) | Everything, with background safety checks | Long tasks, reducing prompt fatigue |20| [`auto`](#eliminate-prompts-with-auto-mode) | Everything, with background safety checks | Long tasks, reducing prompt fatigue |

21| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | Only pre-approved tools | Locked-down CI and scripts |21| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | Only pre-approved tools | Locked-down CI and scripts |

22| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | Everything except protected paths | Isolated containers and VMs only |22| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | Everything | Isolated containers and VMs only |

23 23 

24Regardless of mode, writes to [protected paths](#protected-paths) are never auto-approved, guarding repository state and Claude's own configuration against accidental corruption.24In every mode except `bypassPermissions`, writes to [protected paths](#protected-paths) are never auto-approved, guarding repository state and Claude's own configuration against accidental corruption.

25 25 

26Modes set the baseline. Layer [permission rules](/en/permissions#manage-permissions) on top to pre-approve or block specific tools in any mode except `bypassPermissions`, which skips the permission layer entirely.26Modes set the baseline. Layer [permission rules](/en/permissions#manage-permissions) on top to pre-approve or block specific tools in any mode except `bypassPermissions`, which skips the permission layer entirely.

27 27 


108 108 

109In addition to file edits, `acceptEdits` mode auto-approves common filesystem Bash commands: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp`, and `sed`. These commands are also auto-approved when prefixed with safe environment variables such as `LANG=C` or `NO_COLOR=1`, or process wrappers such as `timeout`, `nice`, or `nohup`. Like file edits, auto-approval applies only to paths inside your working directory or `additionalDirectories`. Paths outside that scope, writes to [protected paths](#protected-paths), and all other Bash commands still prompt.109In addition to file edits, `acceptEdits` mode auto-approves common filesystem Bash commands: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp`, and `sed`. These commands are also auto-approved when prefixed with safe environment variables such as `LANG=C` or `NO_COLOR=1`, or process wrappers such as `timeout`, `nice`, or `nohup`. Like file edits, auto-approval applies only to paths inside your working directory or `additionalDirectories`. Paths outside that scope, writes to [protected paths](#protected-paths), and all other Bash commands still prompt.

110 110 

111When the [PowerShell tool](/en/tools-reference#powershell-tool) is enabled, `acceptEdits` mode also auto-approves `Set-Content`, `Add-Content`, `Clear-Content`, and `Remove-Item` on in-scope paths, along with their common aliases. The same scope and protected-path rules apply.

112 

111Use `acceptEdits` when you want to review changes in your editor or via `git diff` after the fact rather than approving each edit inline. Press `Shift+Tab` once from default mode to enter it, or start with it directly:113Use `acceptEdits` when you want to review changes in your editor or via `git diff` after the fact rather than approving each edit inline. Press `Shift+Tab` once from default mode to enter it, or start with it directly:

112 114 

113```bash theme={null}115```bash theme={null}


244 246 

245## Skip all checks with bypassPermissions mode247## Skip all checks with bypassPermissions mode

246 248 

247`bypassPermissions` mode disables permission prompts and safety checks so tool calls execute immediately. Writes to [protected paths](#protected-paths) are the only actions that still prompt. Only use this mode in isolated environments like containers, VMs, or devcontainers without internet access, where Claude Code cannot damage your host system.249`bypassPermissions` mode disables permission prompts and safety checks so tool calls execute immediately. As of v2.1.126 this includes writes to [protected paths](#protected-paths), which earlier versions still prompted for. Removals targeting the filesystem root or home directory, such as `rm -rf /` and `rm -rf ~`, still prompt as a circuit breaker against model error. Only use this mode in isolated environments like containers, VMs, or dev containers without internet access, where Claude Code cannot damage your host system.

248 250 

249You cannot enter `bypassPermissions` from a session that was started without one of the enabling flags; restart with one to enable it:251You cannot enter `bypassPermissions` from a session that was started without one of the enabling flags; restart with one to enable it:

250 252 


260 262 

261## Protected paths263## Protected paths

262 264 

263Writes to a small set of paths are never auto-approved, in every mode. This prevents accidental corruption of repository state and Claude's own configuration. In `default`, `acceptEdits`, `plan`, and `bypassPermissions` these writes prompt; in `auto` they route to the classifier; in `dontAsk` they are denied.265Writes to a small set of paths are never auto-approved, in every mode except `bypassPermissions`. This prevents accidental corruption of repository state and Claude's own configuration. In `default`, `acceptEdits`, and `plan` these writes prompt; in `auto` they route to the classifier; in `dontAsk` they are denied; in `bypassPermissions` they are allowed.

264 266 

265Protected directories:267Protected directories:

266 268 

permissions.md +24 −2

Details

39| `plan` | Plan Mode: Claude can analyze but not modify files or execute commands |39| `plan` | Plan Mode: Claude can analyze but not modify files or execute commands |

40| `auto` | Auto-approves tool calls with background safety checks that verify actions align with your request. Currently a research preview |40| `auto` | Auto-approves tool calls with background safety checks that verify actions align with your request. Currently a research preview |

41| `dontAsk` | Auto-denies tools unless pre-approved via `/permissions` or `permissions.allow` rules |41| `dontAsk` | Auto-denies tools unless pre-approved via `/permissions` or `permissions.allow` rules |

42| `bypassPermissions` | Skips permission prompts except for writes to protected directories (see warning below) |42| `bypassPermissions` | Skips all permission prompts. Root and home directory removals such as `rm -rf /` still prompt as a circuit breaker |

43 43 

44<Warning>44<Warning>

45 `bypassPermissions` mode skips permission prompts. Writes to `.git`, `.claude`, `.vscode`, `.idea`, and `.husky` directories still prompt for confirmation to prevent accidental corruption of repository state, editor configuration, and git hooks. Writes to `.claude/commands`, `.claude/agents`, and `.claude/skills` are exempt and do not prompt, because Claude routinely writes there when creating skills, subagents, and commands. Only use this mode in isolated environments like containers or VMs where Claude Code cannot cause damage. Administrators can prevent this mode by setting `permissions.disableBypassPermissionsMode` to `"disable"` in [managed settings](#managed-settings).45 `bypassPermissions` mode skips all permission prompts, including writes to `.git`, `.claude`, `.vscode`, `.idea`, and `.husky`. Removals targeting the filesystem root or home directory, such as `rm -rf /` and `rm -rf ~`, still prompt as a circuit breaker against model error. Only use this mode in isolated environments like containers or VMs where Claude Code cannot cause damage. Administrators can prevent this mode by setting `permissions.disableBypassPermissionsMode` to `"disable"` in [managed settings](#managed-settings).

46</Warning>46</Warning>

47 47 

48To prevent `bypassPermissions` or `auto` mode from being used, set `permissions.disableBypassPermissionsMode` or `permissions.disableAutoMode` to `"disable"` in any [settings file](/en/settings#settings-files). These are most useful in [managed settings](#managed-settings) where they cannot be overridden.48To prevent `bypassPermissions` or `auto` mode from being used, set `permissions.disableBypassPermissionsMode` or `permissions.disableAutoMode` to `"disable"` in any [settings file](/en/settings#settings-files). These are most useful in [managed settings](#managed-settings) where they cannot be overridden.


158 Note that using WebFetch alone does not prevent network access. If Bash is allowed, Claude can still use `curl`, `wget`, or other tools to reach any URL.158 Note that using WebFetch alone does not prevent network access. If Bash is allowed, Claude can still use `curl`, `wget`, or other tools to reach any URL.

159</Warning>159</Warning>

160 160 

161### PowerShell

162 

163PowerShell permission rules use the same shape as Bash rules. Wildcards with `*` match at any position, the `:*` suffix is equivalent to a trailing ` *`, and a bare `PowerShell` or `PowerShell(*)` matches every command. This configuration allows `Get-ChildItem` and `git commit` commands while blocking `Remove-Item`:

164 

165```json theme={null}

166{

167 "permissions": {

168 "allow": [

169 "PowerShell(Get-ChildItem *)",

170 "PowerShell(git commit *)"

171 ],

172 "deny": [

173 "PowerShell(Remove-Item *)"

174 ]

175 }

176}

177```

178 

179Common aliases are canonicalized before matching. A rule written for the cmdlet name also matches its aliases, so `PowerShell(Get-ChildItem *)` matches `gci`, `ls`, and `dir` as well. Matching is case-insensitive.

180 

181Claude Code parses the PowerShell AST and checks each command in a compound command independently. Pipeline operators `|`, statement separators `;`, and on PowerShell 7+ the chain operators `&&` and `||` split a compound command into subcommands. A rule must match every subcommand for the compound command to be allowed.

182 

161### Read and Edit183### Read and Edit

162 184 

163`Edit` rules apply to all built-in tools that edit files. Claude makes a best-effort attempt to apply `Read` rules to all built-in tools that read files like Grep and Glob.185`Edit` rules apply to all built-in tools that edit files. Claude makes a best-effort attempt to apply `Read` rules to all built-in tools that read files like Grep and Glob.

Details

114 114 

115When you uninstall the last plugin that constrains a dependency, the dependency is no longer held and resumes tracking its marketplace entry on the next update.115When you uninstall the last plugin that constrains a dependency, the dependency is no longer held and resumes tracking its marketplace entry on the next update.

116 116 

117## Remove orphaned auto-installed dependencies

118 

119Auto-installed dependencies stay on disk after the plugins that installed them are uninstalled, in case you reinstall a dependent plugin or want to keep using the dependency directly. To clean them up, run `claude plugin prune` to list the auto-installed dependencies that no longer have any installed plugin requiring them and remove them after a confirmation prompt. This requires Claude Code v2.1.121 or later.

120 

121```bash theme={null}

122claude plugin prune

123```

124 

125By default, prune operates at user scope. Use `--scope project` or `--scope local` to target a different scope. Pass `--dry-run` to list what would be removed without changing anything. Pass `-y` to skip the confirmation prompt. When stdin or stdout is not a terminal, prune lists the orphans and exits without removing them unless `-y` is passed.

126 

127To prune as part of an uninstall, pass `--prune` to `claude plugin uninstall`. After removing the named plugin, Claude Code scans for and removes any auto-installed dependencies that are now orphaned. Plugins you installed yourself are never pruned, only those installed automatically through another plugin's `dependencies` array.

128 

129For example, to uninstall `deploy-kit` and clean up the dependencies it leaves behind:

130 

131```bash theme={null}

132claude plugin uninstall deploy-kit --prune

133```

134 

117## Resolve dependency errors135## Resolve dependency errors

118 136 

119Dependency problems surface in `claude plugin list`, in the `/plugin` interface, and in `/doctor`. The affected plugin is disabled until you resolve the error. The most common errors and their fixes are listed below.137Dependency problems surface in `claude plugin list`, in the `/plugin` interface, and in `/doctor`. The affected plugin is disabled until you resolve the error. The most common errors and their fixes are listed below.

Details

175 175 

176| Field | Type | Description |176| Field | Type | Description |

177| :------------------------------------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |177| :------------------------------------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

178| `metadata.description` | string | Brief marketplace description |178| `$schema` | string | JSON Schema URL for editor autocomplete and validation. Claude Code ignores this field at load time. |

179| `metadata.version` | string | Marketplace version |179| `description` | string | Brief marketplace description |

180| `version` | string | Marketplace manifest version |

180| `metadata.pluginRoot` | string | Base directory prepended to relative plugin source paths (for example, `"./plugins"` lets you write `"source": "formatter"` instead of `"source": "./plugins/formatter"`) |181| `metadata.pluginRoot` | string | Base directory prepended to relative plugin source paths (for example, `"./plugins"` lets you write `"source": "formatter"` instead of `"source": "./plugins/formatter"`) |

181| `allowCrossMarketplaceDependenciesOn` | array | Other marketplaces that plugins in this marketplace may depend on. Dependencies from a marketplace not listed here are blocked at install. See [Depend on a plugin from another marketplace](/en/plugin-dependencies#depend-on-a-plugin-from-another-marketplace). |182| `allowCrossMarketplaceDependenciesOn` | array | Other marketplaces that plugins in this marketplace may depend on. Dependencies from a marketplace not listed here are blocked at install. See [Depend on a plugin from another marketplace](/en/plugin-dependencies#depend-on-a-plugin-from-another-marketplace). |

182 183 

184`description` and `version` are also accepted under `metadata` for backward compatibility.

185 

183## Plugin entries186## Plugin entries

184 187 

185Each plugin entry in the `plugins` array describes a plugin and where to find it. You can include any field from the [plugin manifest schema](/en/plugins-reference#plugin-manifest-schema) (like `description`, `version`, `author`, `commands`, `hooks`, etc.), plus these marketplace-specific fields: `source`, `category`, `tags`, and `strict`.188Each plugin entry in the `plugins` array describes a plugin and where to find it. You can include any field from the [plugin manifest schema](/en/plugins-reference#plugin-manifest-schema) (like `description`, `version`, `author`, `commands`, `hooks`, etc.), plus these marketplace-specific fields: `source`, `category`, `tags`, and `strict`.


958**Warnings** (non-blocking):961**Warnings** (non-blocking):

959 962 

960* `Marketplace has no plugins defined`: add at least one plugin to the `plugins` array963* `Marketplace has no plugins defined`: add at least one plugin to the `plugins` array

961* `No marketplace description provided`: add `metadata.description` to help users understand your marketplace964* `No marketplace description provided`: add a top-level `description` to help users understand your marketplace

962* `Plugin name "x" is not kebab-case`: the plugin name contains uppercase letters, spaces, or special characters. Rename to lowercase letters, digits, and hyphens only (for example, `my-plugin`). Claude Code accepts other forms, but the Claude.ai marketplace sync rejects them.965* `Plugin name "x" is not kebab-case`: the plugin name contains uppercase letters, spaces, or special characters. Rename to lowercase letters, digits, and hyphens only (for example, `my-plugin`). Claude Code accepts other forms, but the Claude.ai marketplace sync rejects them.

963 966 

964### Plugin installation failures967### Plugin installation failures

plugins.md +1 −1

Details

3323. **Create or use a marketplace**: Distribute through [plugin marketplaces](/en/plugin-marketplaces) for installation3323. **Create or use a marketplace**: Distribute through [plugin marketplaces](/en/plugin-marketplaces) for installation

3334. **Test with others**: Have team members test the plugin before wider distribution3334. **Test with others**: Have team members test the plugin before wider distribution

334 334 

335Once your plugin is in a marketplace, others can install it using the instructions in [Discover and install plugins](/en/discover-plugins).335Once your plugin is in a marketplace, others can install it using the instructions in [Discover and install plugins](/en/discover-plugins). To keep a plugin internal to your team, host the marketplace in a [private repository](/en/plugin-marketplaces#private-repositories).

336 336 

337### Submit your plugin to the official marketplace337### Submit your plugin to the official marketplace

338 338 

Details

111| Event | When it fires |111| Event | When it fires |

112| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |112| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

113| `SessionStart` | When a session begins or resumes |113| `SessionStart` | When a session begins or resumes |

114| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

114| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |115| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

115| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |116| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

116| `PreToolUse` | Before a tool call executes. Can block it |117| `PreToolUse` | Before a tool call executes. Can block it |


379 "keywords": ["keyword1", "keyword2"],380 "keywords": ["keyword1", "keyword2"],

380 "skills": "./custom/skills/",381 "skills": "./custom/skills/",

381 "commands": ["./custom/commands/special.md"],382 "commands": ["./custom/commands/special.md"],

382 "agents": "./custom/agents/",383 "agents": ["./custom/agents/reviewer.md"],

383 "hooks": "./config/hooks.json",384 "hooks": "./config/hooks.json",

384 "mcpServers": "./mcp-config.json",385 "mcpServers": "./mcp-config.json",

385 "outputStyles": "./styles/",386 "outputStyles": "./styles/",


408### Metadata fields409### Metadata fields

409 410 

410| Field | Type | Description | Example |411| Field | Type | Description | Example |

411| :------------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------- |412| :------------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- |

413| `$schema` | string | JSON Schema URL for editor autocomplete and validation. Claude Code ignores this field at load time. | `"https://json.schemastore.org/claude-code-plugin-manifest.json"` |

412| `version` | string | Optional. Semantic version. Setting this pins the plugin to that version string, so users only receive updates when you bump it. If omitted, Claude Code falls back to the git commit SHA, so every commit is treated as a new version. If also set in the marketplace entry, `plugin.json` wins. See [Version management](#version-management). | `"2.1.0"` |414| `version` | string | Optional. Semantic version. Setting this pins the plugin to that version string, so users only receive updates when you bump it. If omitted, Claude Code falls back to the git commit SHA, so every commit is treated as a new version. If also set in the marketplace entry, `plugin.json` wins. See [Version management](#version-management). | `"2.1.0"` |

413| `description` | string | Brief explanation of plugin purpose | `"Deployment automation tools"` |415| `description` | string | Brief explanation of plugin purpose | `"Deployment automation tools"` |

414| `author` | object | Author information | `{"name": "Dev Team", "email": "dev@company.com"}` |416| `author` | object | Author information | `{"name": "Dev Team", "email": "dev@company.com"}` |


749**Options:**751**Options:**

750 752 

751| Option | Description | Default |753| Option | Description | Default |

752| :-------------------- | :---------------------------------------------------------------------------- | :------ |754| :-------------------- | :------------------------------------------------------------------------------------------------------- | :------ |

753| `-s, --scope <scope>` | Uninstall from scope: `user`, `project`, or `local` | `user` |755| `-s, --scope <scope>` | Uninstall from scope: `user`, `project`, or `local` | `user` |

754| `--keep-data` | Preserve the plugin's [persistent data directory](#persistent-data-directory) | |756| `--keep-data` | Preserve the plugin's [persistent data directory](#persistent-data-directory) | |

757| `--prune` | Also remove auto-installed dependencies that no other plugin requires. See [plugin prune](#plugin-prune) | |

758| `-y, --yes` | Skip the `--prune` confirmation prompt. Required when stdin is not a TTY | |

755| `-h, --help` | Display help for command | |759| `-h, --help` | Display help for command | |

756 760 

757**Aliases:** `remove`, `rm`761**Aliases:** `remove`, `rm`

758 762 

759By default, uninstalling from the last remaining scope also deletes the plugin's `${CLAUDE_PLUGIN_DATA}` directory. Use `--keep-data` to preserve it, for example when reinstalling after testing a new version.763By default, uninstalling from the last remaining scope also deletes the plugin's `${CLAUDE_PLUGIN_DATA}` directory. Use `--keep-data` to preserve it, for example when reinstalling after testing a new version.

760 764 

765### plugin prune

766 

767Remove auto-installed plugin dependencies that are no longer required by any installed plugin. Dependencies that Claude Code pulled in to satisfy another plugin's [`dependencies`](/en/plugin-dependencies) field are removed; plugins you installed directly are never touched.

768 

769```bash theme={null}

770claude plugin prune [options]

771```

772 

773**Options:**

774 

775| Option | Description | Default |

776| :-------------------- | :------------------------------------------------------------- | :------ |

777| `-s, --scope <scope>` | Prune at scope: `user`, `project`, or `local` | `user` |

778| `--dry-run` | List what would be removed without removing anything | |

779| `-y, --yes` | Skip the confirmation prompt. Required when stdin is not a TTY | |

780| `-h, --help` | Display help for command | |

781 

782**Aliases:** `autoremove`

783 

784The command lists orphaned dependencies and asks for confirmation before removing them. To remove a plugin and clean up its dependencies in one step, run `claude plugin uninstall <plugin> --prune`.

785 

786<Note>

787 `claude plugin prune` requires Claude Code v2.1.121 or later.

788</Note>

789 

761### plugin enable790### plugin enable

762 791 

763Enable a disabled plugin.792Enable a disabled plugin.

quickstart.md +1 −1

Details

50 50 

51 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.51 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

52 52 

53 **Native Windows setups require [Git for Windows](https://git-scm.com/downloads/win).** Install it first if you don't have it. WSL setups do not need it.53 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

54 54 

55 <Info>55 <Info>

56 Native installations automatically update in the background to keep you on the latest version.56 Native installations automatically update in the background to keep you on the latest version.

sandboxing.md +11 −3

Details

53* **Custom proxy support**: Advanced users can implement custom rules on outgoing traffic53* **Custom proxy support**: Advanced users can implement custom rules on outgoing traffic

54* **Comprehensive coverage**: Restrictions apply to all scripts, programs, and subprocesses spawned by commands54* **Comprehensive coverage**: Restrictions apply to all scripts, programs, and subprocesses spawned by commands

55 55 

56<Note>

57 The built-in proxy enforces the allowlist based on the requested hostname and does not terminate or inspect TLS traffic. See [Security limitations](#security-limitations) for the implications of this design, and [Custom proxy configuration](#custom-proxy-configuration) if your threat model requires TLS inspection.

58</Note>

59 

56### OS-level enforcement60### OS-level enforcement

57 61 

58The sandboxed bash tool leverages operating system security primitives:62The sandboxed bash tool leverages operating system security primitives:


87 </Tab>91 </Tab>

88</Tabs>92</Tabs>

89 93 

94WSL1 does not support sandboxing because it lacks the required Linux namespace primitives. If you see `Sandboxing requires WSL2`, upgrade your distribution to WSL2 or run Claude Code without sandboxing.

95 

96On WSL2, sandboxed commands cannot launch Windows binaries such as `cmd.exe`, `powershell.exe`, or anything under `/mnt/c/`. WSL hands these off to the Windows host over a Unix socket, which the sandbox blocks. If a command needs to invoke a Windows binary, add it to [`excludedCommands`](/en/settings#sandbox-settings) so it runs outside the sandbox.

97 

90### Enable sandboxing98### Enable sandboxing

91 99 

92You can enable sandboxing by running the `/sandbox` command:100You can enable sandboxing by running the `/sandbox` command:


225 233 

226## Security Limitations234## Security Limitations

227 235 

228* Network Sandboxing Limitations: The network filtering system operates by restricting the domains that processes are allowed to connect to. It does not otherwise inspect the traffic passing through the proxy and users are responsible for ensuring they only allow trusted domains in their policy.236* Network Sandboxing Limitations: The network filtering system operates by restricting the domains that processes are allowed to connect to. The built-in proxy does not terminate or perform TLS inspection on outbound traffic, so the contents of encrypted connections are not examined. You are responsible for ensuring that only trusted domains are allowed in your policy.

229 237 

230<Warning>238<Warning>

231 Users should be aware of potential risks that come from allowing broad domains like `github.com` that may allow for data exfiltration. Also, in some cases it may be possible to bypass the network filtering through [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting).239 Allowing broad domains such as `github.com` can create paths for data exfiltration. Because the proxy makes its allow decision from the client-supplied hostname without inspecting TLS, code running inside the sandbox can potentially use [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) or similar techniques to reach hosts outside the allowlist. If your threat model requires stronger guarantees, configure a [custom proxy](#custom-proxy-configuration) that terminates TLS and inspects traffic, and install its CA certificate inside the sandbox. Stronger TLS-aware network isolation is an active area of development.

232</Warning>240</Warning>

233 241 

234* Privilege Escalation via Unix Sockets: The `allowUnixSockets` configuration can inadvertently grant access to powerful system services that could lead to sandbox bypasses. For example, if it is used to allow access to `/var/run/docker.sock` this would effectively grant access to the host system through exploiting the docker socket. Users are encouraged to carefully consider any unix sockets that they allow through the sandbox.242* Privilege Escalation via Unix Sockets: The `allowUnixSockets` configuration can inadvertently grant access to powerful system services that could lead to sandbox bypasses. For example, if it is used to allow access to `/var/run/docker.sock` this would effectively grant access to the host system through exploiting the docker socket. Users are encouraged to carefully consider any unix sockets that they allow through the sandbox.


283The sandboxed bash tool works alongside:291The sandboxed bash tool works alongside:

284 292 

285* **Permission rules**: Combine with [permission settings](/en/permissions) for defense-in-depth293* **Permission rules**: Combine with [permission settings](/en/permissions) for defense-in-depth

286* **Development containers**: Use with [devcontainers](/en/devcontainer) for additional isolation294* **Development containers**: Use with [dev containers](/en/devcontainer) for additional isolation

287* **Enterprise policies**: Enforce sandbox configurations through [managed settings](/en/settings#settings-precedence)295* **Enterprise policies**: Enforce sandbox configurations through [managed settings](/en/settings#settings-precedence)

288 296 

289## Best practices297## Best practices

security.md +2 −2

Details

114 114 

115* Review all suggested changes before approval115* Review all suggested changes before approval

116* Use project-specific permission settings for sensitive repositories116* Use project-specific permission settings for sensitive repositories

117* Consider using [devcontainers](/en/devcontainer) for additional isolation117* Consider using [dev containers](/en/devcontainer) for additional isolation

118* Regularly audit your permission settings with `/permissions`118* Regularly audit your permission settings with `/permissions`

119 119 

120### Team security120### Team security


130If you discover a security vulnerability in Claude Code:130If you discover a security vulnerability in Claude Code:

131 131 

1321. Do not disclose it publicly1321. Do not disclose it publicly

1332. Report it through our [HackerOne program](https://hackerone.com/anthropic-vdp/reports/new?type=team\&report_type=vulnerability)1332. Report it through our [HackerOne program](https://hackerone.com/4f1f16ba-10d3-4d09-9ecc-c721aad90f24/embedded_submissions/new)

1343. Include detailed reproduction steps1343. Include detailed reproduction steps

1354. Allow time for us to address the issue before public disclosure1354. Allow time for us to address the issue before public disclosure

136 136 

Details

203Server-managed settings provide centralized policy enforcement, but they operate as a client-side control. On unmanaged devices, users with admin or sudo access can modify the Claude Code binary, filesystem, or network configuration.203Server-managed settings provide centralized policy enforcement, but they operate as a client-side control. On unmanaged devices, users with admin or sudo access can modify the Claude Code binary, filesystem, or network configuration.

204 204 

205| Scenario | Behavior |205| Scenario | Behavior |

206| :----------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |206| :--------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

207| User edits the cached settings file | Tampered file applies at startup, but correct settings restore on the next server fetch |207| User edits the cached settings file | Tampered file applies at startup, but correct settings restore on the next server fetch |

208| User deletes the cached settings file | First-launch behavior occurs: settings fetch asynchronously with a brief unenforced window |208| User deletes the cached settings file | First-launch behavior occurs: settings fetch asynchronously with a brief unenforced window |

209| API is unavailable | Cached settings apply if available, otherwise managed settings are not enforced until the next successful fetch. With `forceRemoteSettingsRefresh: true`, the CLI exits instead of continuing |209| API is unavailable | Cached settings apply if available, otherwise managed settings are not enforced until the next successful fetch. With `forceRemoteSettingsRefresh: true`, the CLI exits instead of continuing |

210| User authenticates with a different organization | Settings are not delivered for accounts outside the managed organization |210| User authenticates with a different organization | Settings are not delivered for accounts outside the managed organization |

211| User sets a non-default `ANTHROPIC_BASE_URL` | Server-managed settings are bypassed when using third-party API providers |211| User configures a [third-party model provider](#platform-availability) | Server-managed settings are bypassed. This includes setting `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_MANTLE`, `CLAUDE_CODE_USE_VERTEX`, `CLAUDE_CODE_USE_FOUNDRY`, or a non-default `ANTHROPIC_BASE_URL` |

212 212 

213To detect runtime configuration changes, use [`ConfigChange` hooks](/en/hooks#configchange) to log modifications or block unauthorized changes before they take effect.213To detect runtime configuration changes, use [`ConfigChange` hooks](/en/hooks#configchange) to log modifications or block unauthorized changes before they take effect.

214 214 

settings.md +2 −1

Details

211| `permissions` | See table below for structure of permissions. | |211| `permissions` | See table below for structure of permissions. | |

212| `plansDirectory` | Customize where plan files are stored. Path is relative to project root. Default: `~/.claude/plans` | `"./plans"` |212| `plansDirectory` | Customize where plan files are stored. Path is relative to project root. Default: `~/.claude/plans` | `"./plans"` |

213| `pluginTrustMessage` | (Managed settings only) Custom message appended to the plugin trust warning shown before installation. Use this to add organization-specific context, for example to confirm that plugins from your internal marketplace are vetted. | `"All plugins from our marketplace are approved by IT"` |213| `pluginTrustMessage` | (Managed settings only) Custom message appended to the plugin trust warning shown before installation. Use this to add organization-specific context, for example to confirm that plugins from your internal marketplace are vetted. | `"All plugins from our marketplace are approved by IT"` |

214| `preferredNotifChannel` | Method for task-complete and permission-prompt notifications: `"auto"`, `"terminal_bell"`, `"iterm2"`, `"iterm2_with_bell"`, `"kitty"`, `"ghostty"`, or `"notifications_disabled"`. Default: `"auto"`, which sends a desktop notification in iTerm2, Ghostty, and Kitty and does nothing in other terminals. Set `"terminal_bell"` to ring the bell character in any terminal. Appears in `/config` as **Notifications**. See [Get a terminal bell or notification](/en/terminal-config#get-a-terminal-bell-or-notification) | `"terminal_bell"` |

214| `prefersReducedMotion` | Reduce or disable UI animations (spinners, shimmer, flash effects) for accessibility | `true` |215| `prefersReducedMotion` | Reduce or disable UI animations (spinners, shimmer, flash effects) for accessibility | `true` |

215| `prUrlTemplate` | URL template for the PR badge shown in the footer and in tool-result summaries. Substitutes `{host}`, `{owner}`, `{repo}`, `{number}`, and `{url}` from the `gh`-reported PR URL. Use to point PR links at an internal code-review tool instead of `github.com`. Does not affect `#123` autolinks in Claude's prose | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |216| `prUrlTemplate` | URL template for the PR badge shown in the footer and in tool-result summaries. Substitutes `{host}`, `{owner}`, `{repo}`, `{number}`, and `{url}` from the `gh`-reported PR URL. Use to point PR links at an internal code-review tool instead of `github.com`. Does not affect `#123` autolinks in Claude's prose | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |

216| `respectGitignore` | Control whether the `@` file picker respects `.gitignore` patterns. When `true` (default), files matching `.gitignore` patterns are excluded from suggestions | `false` |217| `respectGitignore` | Control whether the `@` file picker respects `.gitignore` patterns. When `true` (default), files matching `.gitignore` patterns are excluded from suggestions | `false` |


913* [Permissions](/en/permissions): permission system, rule syntax, tool-specific patterns, and managed policies914* [Permissions](/en/permissions): permission system, rule syntax, tool-specific patterns, and managed policies

914* [Authentication](/en/authentication): set up user access to Claude Code915* [Authentication](/en/authentication): set up user access to Claude Code

915* [Debug your configuration](/en/debug-your-config): diagnose why a setting, hook, or MCP server isn't taking effect916* [Debug your configuration](/en/debug-your-config): diagnose why a setting, hook, or MCP server isn't taking effect

916* [Troubleshooting](/en/troubleshooting): installation, authentication, and platform issues917* [Troubleshoot installation and login](/en/troubleshoot-install): installation, authentication, and platform issues

setup.md +12 −10

Details

20 * Alpine Linux 3.19+20 * Alpine Linux 3.19+

21* **Hardware**: 4 GB+ RAM, x64 or ARM64 processor21* **Hardware**: 4 GB+ RAM, x64 or ARM64 processor

22* **Network**: internet connection required. See [network configuration](/en/network-config#network-access-requirements).22* **Network**: internet connection required. See [network configuration](/en/network-config#network-access-requirements).

23* **Shell**: Bash, Zsh, PowerShell, or CMD. Native Windows setups require [Git for Windows](https://git-scm.com/downloads/win). WSL setups do not.23* **Shell**: Bash, Zsh, PowerShell, or CMD. On native Windows, [Git for Windows](https://git-scm.com/downloads/win) is recommended; Claude Code falls back to PowerShell when Git Bash is absent. WSL setups do not require Git for Windows.

24* **Location**: [Anthropic supported countries](https://www.anthropic.com/supported-countries)24* **Location**: [Anthropic supported countries](https://www.anthropic.com/supported-countries)

25 25 

26### Additional dependencies26### Additional dependencies


59 59 

60 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.60 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

61 61 

62 **Native Windows setups require [Git for Windows](https://git-scm.com/downloads/win).** Install it first if you don't have it. WSL setups do not need it.62 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

63 63 

64 <Info>64 <Info>

65 Native installations automatically update in the background to keep you on the latest version.65 Native installations automatically update in the background to keep you on the latest version.


97claude97claude

98```98```

99 99 

100If you encounter any issues during installation, see the [troubleshooting guide](/en/troubleshooting).100If you encounter any issues during installation, see [Troubleshoot installation and login](/en/troubleshoot-install).

101 101 

102### Set up on Windows102### Set up on Windows

103 103 

104You can run Claude Code natively on Windows or inside WSL. Pick based on where your projects are located and which features you need:104You can run Claude Code natively on Windows or inside WSL. Pick based on where your projects are located and which features you need:

105 105 

106| Option | Requires | [Sandboxing](/en/sandboxing) | When to use |106| Option | Requires | [Sandboxing](/en/sandboxing) | When to use |

107| -------------- | ---------------------------------------------------- | ---------------------------- | ----------------------------------------------- |107| -------------- | ------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------- |

108| Native Windows | [Git for Windows](https://git-scm.com/downloads/win) | Not supported | Windows-native projects and tools |108| Native Windows | [Git for Windows](https://git-scm.com/downloads/win) recommended; PowerShell used if absent | Not supported | Windows-native projects and tools |

109| WSL 2 | WSL 2 enabled | Supported | Linux toolchains or sandboxed command execution |109| WSL 2 | WSL 2 enabled | Supported | Linux toolchains or sandboxed command execution |

110| WSL 1 | WSL 1 enabled | Not supported | If WSL 2 is unavailable |110| WSL 1 | WSL 1 enabled | Not supported | If WSL 2 is unavailable |

111 111 


115 115 

116Whether you install from PowerShell or CMD only affects which install command you run. Your prompt shows `PS C:\Users\YourName>` in PowerShell and `C:\Users\YourName>` without the `PS` in CMD. If you're new to the terminal, the [terminal guide](/en/terminal-guide#windows) walks through each step.116Whether you install from PowerShell or CMD only affects which install command you run. Your prompt shows `PS C:\Users\YourName>` in PowerShell and `C:\Users\YourName>` without the `PS` in CMD. If you're new to the terminal, the [terminal guide](/en/terminal-guide#windows) walks through each step.

117 117 

118After installation, launch `claude` from PowerShell, CMD, or Git Bash. Claude Code uses Git Bash internally to execute commands regardless of where you launched it. If Claude Code can't find your Git Bash installation, set the path in your [settings.json file](/en/settings):118After installation, launch `claude` from PowerShell, CMD, or Git Bash. When Git Bash is installed, Claude Code uses it internally to execute commands regardless of where you launched it. If Claude Code can't find your Git Bash installation, set the path in your [settings.json file](/en/settings):

119 119 

120```json theme={null}120```json theme={null}

121{121{


125}125}

126```126```

127 127 

128Claude Code can also run PowerShell natively on Windows. The PowerShell tool is rolling out progressively; set `CLAUDE_CODE_USE_POWERSHELL_TOOL=1` to opt in or `0` to opt out. See [PowerShell tool](/en/tools-reference#powershell-tool) for setup and limitations.128Claude Code can also run PowerShell natively on Windows. When Git Bash is installed, the PowerShell tool is rolling out progressively as an additional option: set `CLAUDE_CODE_USE_POWERSHELL_TOOL=1` to opt in or `0` to opt out. See [PowerShell tool](/en/tools-reference#powershell-tool) for setup and limitations.

129 129 

130**Option 2: WSL**130**Option 2: WSL**

131 131 


159claude --version159claude --version

160```160```

161 161 

162If this fails with `command not found` or another error, see [Troubleshoot installation and login](/en/troubleshoot-install).

163 

162For a more detailed check of your installation and configuration, run [`claude doctor`](/en/troubleshooting#get-more-help):164For a more detailed check of your installation and configuration, run [`claude doctor`](/en/troubleshooting#get-more-help):

163 165 

164```bash theme={null}166```bash theme={null}


390 392 

391The npm package installs the same native binary as the standalone installer. npm pulls the binary in through a per-platform optional dependency such as `@anthropic-ai/claude-code-darwin-arm64`, and a postinstall step links it into place. The installed `claude` binary does not itself invoke Node.393The npm package installs the same native binary as the standalone installer. npm pulls the binary in through a per-platform optional dependency such as `@anthropic-ai/claude-code-darwin-arm64`, and a postinstall step links it into place. The installed `claude` binary does not itself invoke Node.

392 394 

393Supported npm install platforms are `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64`, and `win32-arm64`. Your package manager must allow optional dependencies. See [troubleshooting](/en/troubleshooting#native-binary-not-found-after-npm-install) if the binary is missing after install.395Supported npm install platforms are `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64`, and `win32-arm64`. Your package manager must allow optional dependencies. See [troubleshooting](/en/troubleshoot-install#native-binary-not-found-after-npm-install) if the binary is missing after install.

394 396 

395<Warning>397<Warning>

396 Do NOT use `sudo npm install -g` as this can lead to permission issues and security risks. If you encounter permission errors, see [troubleshooting permission errors](/en/troubleshooting#permission-errors-during-installation).398 Do NOT use `sudo npm install -g` as this can lead to permission issues and security risks. If you encounter permission errors, see [troubleshooting permission errors](/en/troubleshoot-install#permission-errors-during-installation).

397</Warning>399</Warning>

398 400 

399### Binary integrity and code signing401### Binary integrity and code signing


487 489 

488## Uninstall Claude Code490## Uninstall Claude Code

489 491 

490To remove Claude Code, follow the instructions for your installation method.492To remove Claude Code, follow the instructions for your installation method. If `claude` still runs afterward, you likely have a second installation or a leftover shell alias from an older installer. See [Check for conflicting installations](/en/troubleshoot-install#check-for-conflicting-installations) to find and remove it.

491 493 

492### Native installation494### Native installation

493 495 

skills.md +2 −2

Details

40 </Step>40 </Step>

41 41 

42 <Step title="Write SKILL.md">42 <Step title="Write SKILL.md">

43 Every skill needs a `SKILL.md` file with two parts: YAML frontmatter (between `---` markers) that tells Claude when to use the skill, and markdown content with instructions Claude follows when the skill is invoked. The `name` field becomes the `/slash-command`, and the `description` helps Claude decide when to load it automatically.43 Every skill needs a `SKILL.md` file with two parts: YAML frontmatter (between `---` markers) that tells Claude when to use the skill, and markdown content with instructions Claude follows when the skill is invoked. The directory name becomes the `/slash-command`, and the `description` helps Claude decide when to load it automatically.

44 44 

45 Create `~/.claude/skills/explain-code/SKILL.md`:45 Create `~/.claude/skills/explain-code/SKILL.md`:

46 46 

47 ```yaml theme={null}47 ```yaml theme={null}

48 ---48 ---

49 name: explain-code

50 description: Explains code with visual diagrams and analogies. Use when explaining how code works, teaching about a codebase, or when the user asks "how does this work?"49 description: Explains code with visual diagrams and analogies. Use when explaining how code works, teaching about a codebase, or when the user asks "how does this work?"

51 ---50 ---

52 51 


215| `$N` | Shorthand for `$ARGUMENTS[N]`, such as `$0` for the first argument or `$1` for the second. |214| `$N` | Shorthand for `$ARGUMENTS[N]`, such as `$0` for the first argument or `$1` for the second. |

216| `$name` | Named argument declared in the [`arguments`](#frontmatter-reference) frontmatter list. Names map to positions in order, so with `arguments: [issue, branch]` the placeholder `$issue` expands to the first argument and `$branch` to the second. |215| `$name` | Named argument declared in the [`arguments`](#frontmatter-reference) frontmatter list. Names map to positions in order, so with `arguments: [issue, branch]` the placeholder `$issue` expands to the first argument and `$branch` to the second. |

217| `${CLAUDE_SESSION_ID}` | The current session ID. Useful for logging, creating session-specific files, or correlating skill output with sessions. |216| `${CLAUDE_SESSION_ID}` | The current session ID. Useful for logging, creating session-specific files, or correlating skill output with sessions. |

217| `${CLAUDE_EFFORT}` | The current effort level: `low`, `medium`, `high`, `xhigh`, or `max`. Use this to adapt skill instructions to the active effort setting. |

218| `${CLAUDE_SKILL_DIR}` | The directory containing the skill's `SKILL.md` file. For plugin skills, this is the skill's subdirectory within the plugin, not the plugin root. Use this in bash injection commands to reference scripts or files bundled with the skill, regardless of the current working directory. |218| `${CLAUDE_SKILL_DIR}` | The directory containing the skill's `SKILL.md` file. For plugin skills, this is the skill's subdirectory within the plugin, not the plugin root. Use this in bash injection commands to reference scripts or files bundled with the skill, regardless of the current working directory. |

219 219 

220Indexed arguments use shell-style quoting, so wrap multi-word values in quotes to pass them as a single argument. For example, `/my-skill "hello world" second` makes `$0` expand to `hello world` and `$1` to `second`. The `$ARGUMENTS` placeholder always expands to the full argument string as typed.220Indexed arguments use shell-style quoting, so wrap multi-word values in quotes to pass them as a single argument. For example, `/my-skill "hello world" second` makes `$0` expand to `hello world` and `$1` to `second`. The `$ARGUMENTS` placeholder always expands to the full argument string as typed.

statusline.md +4 −2

Details

64 64 

65The optional `refreshInterval` field re-runs your command every N seconds in addition to the [event-driven updates](#how-status-lines-work). The minimum is `1`. Set this when your status line shows time-based data such as a clock, or when background subagents change git state while the main session is idle. Leave it unset to run only on events.65The optional `refreshInterval` field re-runs your command every N seconds in addition to the [event-driven updates](#how-status-lines-work). The minimum is `1`. Set this when your status line shows time-based data such as a clock, or when background subagents change git state while the main session is idle. Leave it unset to run only on events.

66 66 

67The optional `hideVimModeIndicator` field suppresses the built-in `-- INSERT --` text below the prompt. Set this to `true` when your script renders [`vim.mode`](#available-data) itself, so the mode is not shown twice.

68 

67### Disable the status line69### Disable the status line

68 70 

69Run `/statusline` and ask it to remove or clear your status line (e.g., `/statusline delete`, `/statusline clear`, `/statusline remove it`). You can also manually delete the `statusLine` field from your settings.json.71Run `/statusline` and ask it to remove or clear your status line (e.g., `/statusline delete`, `/statusline clear`, `/statusline remove it`). You can also manually delete the `statusLine` field from your settings.json.


914 916 

915### Windows configuration917### Windows configuration

916 918 

917On Windows, Claude Code runs status line commands through Git Bash. You can invoke PowerShell from that shell:919On Windows, Claude Code runs status line commands through Git Bash when Git Bash is installed, or through PowerShell when Git Bash is absent. To run a PowerShell script as your status line, invoke it via `powershell`; this works from either shell:

918 920 

919<CodeGroup>921<CodeGroup>

920 ```json settings.json theme={null}922 ```json settings.json theme={null}


941 ```943 ```

942</CodeGroup>944</CodeGroup>

943 945 

944Or run a Bash script directly:946Or, when Git Bash is installed, run a Bash script directly:

945 947 

946<CodeGroup>948<CodeGroup>

947 ```json settings.json theme={null}949 ```json settings.json theme={null}

sub-agents.md +7 −7

Details

236The following fields can be used in the YAML frontmatter. Only `name` and `description` are required.236The following fields can be used in the YAML frontmatter. Only `name` and `description` are required.

237 237 

238| Field | Required | Description |238| Field | Required | Description |

239| :---------------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |239| :---------------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

240| `name` | Yes | Unique identifier using lowercase letters and hyphens |240| `name` | Yes | Unique identifier using lowercase letters and hyphens |

241| `description` | Yes | When Claude should delegate to this subagent |241| `description` | Yes | When Claude should delegate to this subagent |

242| `tools` | No | [Tools](#available-tools) the subagent can use. Inherits all tools if omitted |242| `tools` | No | [Tools](#available-tools) the subagent can use. Inherits all tools if omitted |

243| `disallowedTools` | No | Tools to deny, removed from inherited or specified list |243| `disallowedTools` | No | Tools to deny, removed from inherited or specified list |

244| `model` | No | [Model](#choose-a-model) to use: `sonnet`, `opus`, `haiku`, a full model ID (for example, `claude-opus-4-7`), or `inherit`. Defaults to `inherit` |244| `model` | No | [Model](#choose-a-model) to use: `sonnet`, `opus`, `haiku`, a full model ID (for example, `claude-opus-4-7`), or `inherit`. Defaults to `inherit` |

245| `permissionMode` | No | [Permission mode](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, or `plan` |245| `permissionMode` | No | [Permission mode](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, or `plan`. Ignored for [plugin subagents](#choose-the-subagent-scope) |

246| `maxTurns` | No | Maximum number of agentic turns before the subagent stops |246| `maxTurns` | No | Maximum number of agentic turns before the subagent stops |

247| `skills` | No | [Skills](/en/skills) to load into the subagent's context at startup. The full skill content is injected, not just made available for invocation. Subagents don't inherit skills from the parent conversation |247| `skills` | No | [Skills](/en/skills) to load into the subagent's context at startup. The full skill content is injected, not just made available for invocation. Subagents don't inherit skills from the parent conversation |

248| `mcpServers` | No | [MCP servers](/en/mcp) available to this subagent. Each entry is either a server name referencing an already-configured server (e.g., `"slack"`) or an inline definition with the server name as key and a full [MCP server config](/en/mcp#installing-mcp-servers) as value |248| `mcpServers` | No | [MCP servers](/en/mcp) available to this subagent. Each entry is either a server name referencing an already-configured server (e.g., `"slack"`) or an inline definition with the server name as key and a full [MCP server config](/en/mcp#installing-mcp-servers) as value. Ignored for [plugin subagents](#choose-the-subagent-scope) |

249| `hooks` | No | [Lifecycle hooks](#define-hooks-for-subagents) scoped to this subagent |249| `hooks` | No | [Lifecycle hooks](#define-hooks-for-subagents) scoped to this subagent. Ignored for [plugin subagents](#choose-the-subagent-scope) |

250| `memory` | No | [Persistent memory scope](#enable-persistent-memory): `user`, `project`, or `local`. Enables cross-session learning |250| `memory` | No | [Persistent memory scope](#enable-persistent-memory): `user`, `project`, or `local`. Enables cross-session learning |

251| `background` | No | Set to `true` to always run this subagent as a [background task](#run-subagents-in-foreground-or-background). Default: `false` |251| `background` | No | Set to `true` to always run this subagent as a [background task](#run-subagents-in-foreground-or-background). Default: `false` |

252| `effort` | No | Effort level when this subagent is active. Overrides the session effort level. Default: inherits from session. Options: `low`, `medium`, `high`, `xhigh`, `max`; available levels depend on the model |252| `effort` | No | Effort level when this subagent is active. Overrides the session effort level. Default: inherits from session. Options: `low`, `medium`, `high`, `xhigh`, `max`; available levels depend on the model |


374| `plan` | Plan mode (read-only exploration) |374| `plan` | Plan mode (read-only exploration) |

375 375 

376<Warning>376<Warning>

377 Use `bypassPermissions` with caution. It skips permission prompts, allowing the subagent to execute operations without approval. Writes to `.git`, `.claude`, `.vscode`, `.idea`, and `.husky` directories still prompt for confirmation, except for `.claude/commands`, `.claude/agents`, and `.claude/skills`. See [permission modes](/en/permission-modes#skip-all-checks-with-bypasspermissions-mode) for details.377 Use `bypassPermissions` with caution. It skips all permission prompts, allowing the subagent to execute operations without approval, including writes to `.git`, `.claude`, `.vscode`, `.idea`, and `.husky`. Root and home directory removals such as `rm -rf /` still prompt as a circuit breaker. See [permission modes](/en/permission-modes#skip-all-checks-with-bypasspermissions-mode) for details.

378</Warning>378</Warning>

379 379 

380If the parent uses `bypassPermissions` or `acceptEdits`, this takes precedence and cannot be overridden. If the parent uses [auto mode](/en/permission-modes#eliminate-prompts-with-auto-mode), the subagent inherits auto mode and any `permissionMode` in its frontmatter is ignored: the classifier evaluates the subagent's tool calls with the same block and allow rules as the parent session.380If the parent uses `bypassPermissions` or `acceptEdits`, this takes precedence and cannot be overridden. If the parent uses [auto mode](/en/permission-modes#eliminate-prompts-with-auto-mode), the subagent inherits auto mode and any `permissionMode` in its frontmatter is ignored: the classifier evaluates the subagent's tool calls with the same block and allow rules as the parent session.


766## Fork the current conversation766## Fork the current conversation

767 767 

768<Note>768<Note>

769 Forked subagents are experimental and require Claude Code v2.1.117 or later. Behavior and configuration may change in future releases. Enable them by setting the [`CLAUDE_CODE_FORK_SUBAGENT`](/en/env-vars) environment variable to `1`.769 Forked subagents are experimental and require Claude Code v2.1.117 or later. Behavior and configuration may change in future releases. Enable them by setting the [`CLAUDE_CODE_FORK_SUBAGENT`](/en/env-vars) environment variable to `1`. The variable is honored in interactive mode and via the SDK or `claude -p`.

770</Note>770</Note>

771 771 

772A fork is a subagent that inherits the entire conversation so far instead of starting fresh. This drops the input isolation that subagents otherwise provide: a fork sees the same system prompt, tools, model, and message history as the main session, so you can hand it a side task without re-explaining the situation. The fork's own tool calls still stay out of your conversation and only its final result comes back, so your main context window stays clean. Use a fork when a named subagent would need too much background to be useful, or when you want to try several approaches in parallel from the same starting point.772A fork is a subagent that inherits the entire conversation so far instead of starting fresh. This drops the input isolation that subagents otherwise provide: a fork sees the same system prompt, tools, model, and message history as the main session, so you can hand it a side task without re-explaining the situation. The fork's own tool calls still stay out of your conversation and only its final result comes back, so your main context window stays clean. Use a fork when a named subagent would need too much background to be useful, or when you want to try several approaches in parallel from the same starting point.


814 814 

815### Limitations815### Limitations

816 816 

817Fork mode works only in interactive sessions. It is disabled in [non-interactive mode](/en/headless), which includes the Agent SDK. A fork cannot spawn further forks.817Setting `CLAUDE_CODE_FORK_SUBAGENT=1` enables fork mode in interactive sessions, [non-interactive mode](/en/headless), and the Agent SDK. A fork cannot spawn further forks.

818 818 

819## Example subagents819## Example subagents

820 820 

Details

48 48 

49 <Tab title="iTerm2">49 <Tab title="iTerm2">

50 Open Settings → Profiles → Keys → General and set Left Option key and Right Option key to "Esc+".50 Open Settings → Profiles → Keys → General and set Left Option key and Right Option key to "Esc+".

51 

52 Running `/terminal-setup` in iTerm2 enables "Applications in terminal may access clipboard" under Settings → General → Selection so the `/copy` command can write to your system clipboard. The command detects iTerm2 even when run from inside tmux. Restart iTerm2 for the change to take effect.

51 </Tab>53 </Tab>

52 54 

53 <Tab title="VS Code">55 <Tab title="VS Code">


61 63 

62When Claude finishes a task or pauses for a permission prompt, it fires a notification event. Surfacing this as a terminal bell or desktop notification lets you switch to other work while a long task runs.64When Claude finishes a task or pauses for a permission prompt, it fires a notification event. Surfacing this as a terminal bell or desktop notification lets you switch to other work while a long task runs.

63 65 

64Claude Code sends a desktop notification only in Ghostty, Kitty, and iTerm2; every other terminal needs a [Notification hook](#play-a-sound-with-a-notification-hook) instead. The notification also reaches your local machine over SSH, so a remote session can still alert you. Ghostty and Kitty forward it to your OS notification center without further setup. iTerm2 requires you to enable forwarding:66By default Claude Code sends a desktop notification only in Ghostty, Kitty, and iTerm2. In other terminals, set [`preferredNotifChannel`](/en/settings#available-settings) to `"terminal_bell"` to ring the terminal bell instead, or configure a [Notification hook](#play-a-sound-with-a-notification-hook) for a custom sound or command.

67 

68The desktop notification reaches your local machine over SSH, so a remote session can still alert you. Ghostty and Kitty forward it to your OS notification center without further setup. iTerm2 requires you to enable forwarding:

65 69 

66<Steps>70<Steps>

67 <Step title="Open iTerm2 notification settings">71 <Step title="Open iTerm2 notification settings">


77 81 

78### Play a sound with a Notification hook82### Play a sound with a Notification hook

79 83 

80In any terminal you can configure a [Notification hook](/en/hooks-guide#get-notified-when-claude-needs-input) to play a sound or run a custom command when Claude needs your attention. Hooks run alongside the desktop notification rather than replacing it. Terminals such as Warp or Apple Terminal rely on a hook alone since Claude Code does not send them a desktop notification.84In any terminal you can configure a [Notification hook](/en/hooks-guide#get-notified-when-claude-needs-input) to play a sound or run a custom command when Claude needs your attention. Hooks run alongside the built-in notification rather than replacing it, so terminals that do not receive a desktop notification, such as Warp or the VS Code integrated terminal, can use a hook or set `preferredNotifChannel` to `"terminal_bell"` instead.

81 85 

82The example below plays a system sound on macOS. The linked guide has desktop notification commands for macOS, Linux, and Windows.86The example below plays a system sound on macOS. The linked guide has desktop notification commands for macOS, Linux, and Windows.

83 87 

Details

95 95 

96## PowerShell tool96## PowerShell tool

97 97 

98The PowerShell tool lets Claude run PowerShell commands natively. On Windows, this means commands run in PowerShell instead of routing through Git Bash. The tool is rolling out progressively on Windows and is opt-in on Linux, macOS, and WSL.98The PowerShell tool lets Claude run PowerShell commands natively. On Windows, this means commands run in PowerShell instead of routing through Git Bash. On Windows without Git Bash, the tool is enabled automatically. On Windows with Git Bash installed, the tool is rolling out progressively. On Linux, macOS, and WSL, the tool is opt-in.

99 99 

100### Enable the PowerShell tool100### Enable the PowerShell tool

101 101 


111 111 

112On Windows, set the variable to `0` to opt out of the rollout. On Linux, macOS, and WSL, the tool requires PowerShell 7 or later: install `pwsh` and ensure it is on your `PATH`.112On Windows, set the variable to `0` to opt out of the rollout. On Linux, macOS, and WSL, the tool requires PowerShell 7 or later: install `pwsh` and ensure it is on your `PATH`.

113 113 

114On Windows, Claude Code auto-detects `pwsh.exe` for PowerShell 7+ with a fallback to `powershell.exe` for PowerShell 5.1. The Bash tool remains registered alongside the PowerShell tool, so you may need to ask Claude to use PowerShell.114On Windows, Claude Code auto-detects `pwsh.exe` for PowerShell 7+ with a fallback to `powershell.exe` for PowerShell 5.1. When the tool is enabled, Claude treats PowerShell as the primary shell. The Bash tool remains available for POSIX scripts when Git Bash is installed.

115 115 

116### Shell selection in settings, hooks, and skills116### Shell selection in settings, hooks, and skills

117 117 


129 129 

130* PowerShell profiles are not loaded130* PowerShell profiles are not loaded

131* On Windows, sandboxing is not supported131* On Windows, sandboxing is not supported

132* On Windows, Git Bash is still required to start Claude Code

133 132 

134## Check which tools are available133## Check which tools are available

135 134 

troubleshoot-install.md +799 −0 added

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Troubleshoot installation and login

6 

7> Fix command not found, PATH, permission, network, and authentication errors when installing or signing in to Claude Code.

8 

9If installation fails or you can't sign in, find your error below. For runtime issues after Claude Code is working, see [Troubleshooting](/en/troubleshooting). For configuration problems such as settings not applying or hooks not firing, see [Debug your configuration](/en/debug-your-config).

10 

11## Find your error

12 

13Match the error message or symptom you're seeing to a fix:

14 

15| What you see | Solution |

16| :------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------- |

17| `command not found: claude` or `'claude' is not recognized` | [Fix your PATH](#command-not-found-claude-after-installation) |

18| `syntax error near unexpected token '<'` | [Install script returns HTML](#install-script-returns-html-instead-of-a-shell-script) |

19| `curl: (56) Failure writing output to destination` | [Check connectivity or use an alternative installer](#curl-56-failure-writing-output-to-destination) |

20| `Killed` during install on Linux | [Add swap space for low-memory servers](#install-killed-on-low-memory-linux-servers) |

21| `TLS connect error` or `SSL/TLS secure channel` | [Update CA certificates](#tls-or-ssl-connection-errors) |

22| `Failed to fetch version` or can't reach download server | [Check network and proxy settings](#check-network-connectivity) |

23| `irm is not recognized` or `&& is not valid` | [Use the right command for your shell](#wrong-install-command-on-windows) |

24| `'bash' is not recognized as the name of a cmdlet` | [Use the Windows installer command](#wrong-install-command-on-windows) |

25| `Claude Code on Windows requires either Git for Windows (for bash) or PowerShell` | [Install a shell](#claude-code-on-windows-requires-either-git-for-windows-for-bash-or-powershell) |

26| `Claude Code does not support 32-bit Windows` | [Open Windows PowerShell, not the x86 entry](#claude-code-does-not-support-32-bit-windows) |

27| `The process cannot access the file ... because it is being used by another process` | [Clear the downloads folder and retry](#the-process-cannot-access-the-file-during-windows-install) |

28| `Error loading shared library` | [Wrong binary variant for your system](#linux-musl-or-glibc-binary-mismatch) |

29| `Illegal instruction` | [Architecture or CPU instruction set mismatch](#illegal-instruction) |

30| `cannot execute binary file: Exec format error` in WSL | [WSL1 native-binary regression](#exec-format-error-on-wsl1) |

31| PowerShell installer completes but `claude` is not found or shows an old version | [Restart your terminal and verify PATH](#verify-your-path) |

32| `dyld: cannot load`, `dyld: Symbol not found`, or `Abort trap` on macOS | [Binary incompatibility](#dyld-cannot-load-on-macos) |

33| `Invoke-Expression: Missing argument in parameter list` | [Install script returns HTML](#install-script-returns-html-instead-of-a-shell-script) |

34| `App unavailable in region` | Claude Code is not available in your country. See [supported countries](https://www.anthropic.com/supported-countries). |

35| `unable to get local issuer certificate` | [Configure corporate CA certificates](#tls-or-ssl-connection-errors) |

36| `OAuth error` or `403 Forbidden` | [Fix authentication](#login-and-authentication) |

37| `Could not load the default credentials` or `Could not load credentials from any providers` | [Bedrock, Vertex, or Foundry credentials](#bedrock-vertex-or-foundry-credentials-not-loading) |

38| `ChainedTokenCredential authentication failed` or `CredentialUnavailableError` | [Bedrock, Vertex, or Foundry credentials](#bedrock-vertex-or-foundry-credentials-not-loading) |

39| `API Error: 500`, `529 Overloaded`, `429`, or other 4xx and 5xx errors not listed above | See the [Error reference](/en/errors) |

40 

41If your issue isn't listed, work through the diagnostic checks below to narrow down the cause.

42 

43<Tip>

44 If you'd rather skip the terminal entirely, the [Claude Code Desktop app](/en/desktop-quickstart) lets you install and use Claude Code through a graphical interface. Download it for [macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs) or [Windows](https://claude.com/download?utm_source=claude_code\&utm_medium=docs) and start coding without any command-line setup.

45</Tip>

46 

47## Run diagnostic checks

48 

49### Check network connectivity

50 

51The installer downloads from `downloads.claude.ai`. Verify you can reach it:

52 

53```bash theme={null}

54curl -sI https://downloads.claude.ai/claude-code-releases/latest

55```

56 

57An `HTTP/2 200` line means you reached the server. If you see no output, `Could not resolve host`, or a connection timeout, your network is blocking the connection. Common causes:

58 

59* Corporate firewalls or proxies blocking `downloads.claude.ai`

60* Regional network restrictions: try a VPN or alternative network

61* TLS/SSL issues: update your system's CA certificates, or check if `HTTPS_PROXY` is configured

62 

63If you're behind a corporate proxy, set `HTTPS_PROXY` and `HTTP_PROXY` to your proxy's address before installing. Ask your IT team for the proxy URL if you don't know it, or check your browser's proxy settings.

64 

65This example sets both proxy variables, then runs the installer through your proxy:

66 

67<Tabs>

68 <Tab title="macOS/Linux">

69 ```bash theme={null}

70 export HTTP_PROXY=http://proxy.example.com:8080

71 export HTTPS_PROXY=http://proxy.example.com:8080

72 curl -fsSL https://claude.ai/install.sh | bash

73 ```

74 </Tab>

75 

76 <Tab title="Windows PowerShell">

77 ```powershell theme={null}

78 $env:HTTP_PROXY = 'http://proxy.example.com:8080'

79 $env:HTTPS_PROXY = 'http://proxy.example.com:8080'

80 irm https://claude.ai/install.ps1 | iex

81 ```

82 </Tab>

83</Tabs>

84 

85### Verify your PATH

86 

87If installation succeeded but you get a `command not found` or `not recognized` error when running `claude`, the install directory isn't in your PATH. Your shell searches for programs in directories listed in PATH, and the installer places `claude` at `~/.local/bin/claude` on macOS/Linux or `%USERPROFILE%\.local\bin\claude.exe` on Windows.

88 

89Check if the install directory is in your PATH by listing your PATH entries and filtering for `local/bin`:

90 

91<Tabs>

92 <Tab title="macOS/Linux">

93 ```bash theme={null}

94 echo $PATH | tr ':' '\n' | grep -Fx "$HOME/.local/bin"

95 ```

96 

97 If this prints `/Users/you/.local/bin` or `/home/you/.local/bin`, the directory is in your PATH and you can skip to [Check for conflicting installations](#check-for-conflicting-installations). If there's no output, add it to your shell configuration.

98 

99 For Zsh, the default on macOS:

100 

101 ```bash theme={null}

102 echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

103 source ~/.zshrc

104 ```

105 

106 For Bash, the default on most Linux distributions:

107 

108 ```bash theme={null}

109 echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

110 source ~/.bashrc

111 ```

112 

113 Alternatively, close and reopen your terminal.

114 

115 For other shells such as fish or Nushell, add `~/.local/bin` to your PATH using your shell's own configuration syntax, then restart your terminal.

116 

117 Verify the fix worked:

118 

119 ```bash theme={null}

120 claude --version

121 ```

122 </Tab>

123 

124 <Tab title="Windows PowerShell">

125 ```powershell theme={null}

126 $env:PATH -split ';' | Select-String '\.local\\bin'

127 ```

128 

129 If there's no output, add the install directory to your User PATH:

130 

131 ```powershell theme={null}

132 $currentPath = [Environment]::GetEnvironmentVariable('PATH', 'User')

133 [Environment]::SetEnvironmentVariable('PATH', "$currentPath;$env:USERPROFILE\.local\bin", 'User')

134 ```

135 

136 Restart your terminal for the change to take effect.

137 

138 Verify the fix worked:

139 

140 ```powershell theme={null}

141 claude --version

142 ```

143 </Tab>

144 

145 <Tab title="Windows CMD">

146 ```batch theme={null}

147 echo %PATH% | findstr /i "local\bin"

148 ```

149 

150 If there's no output, open System Settings, go to Environment Variables, and add `%USERPROFILE%\.local\bin` to your User PATH variable. Restart your terminal.

151 

152 Verify the fix worked:

153 

154 ```batch theme={null}

155 claude --version

156 ```

157 </Tab>

158</Tabs>

159 

160### Check for conflicting installations

161 

162Multiple Claude Code installations can cause version mismatches or unexpected behavior. Check what's installed:

163 

164<Tabs>

165 <Tab title="macOS/Linux">

166 List all `claude` binaries found in your PATH:

167 

168 ```bash theme={null}

169 which -a claude

170 ```

171 

172 If this prints nothing, no `claude` is on your PATH yet. Go back to [Verify your PATH](#verify-your-path).

173 

174 Check the three locations a `claude` binary can come from. `~/.local/bin/claude` is the native installer, `~/.claude/local/` is a legacy local npm install created by older versions of Claude Code, and the npm global list shows a `-g` install:

175 

176 ```bash theme={null}

177 ls -la ~/.local/bin/claude

178 ```

179 

180 ```bash theme={null}

181 ls -la ~/.claude/local/

182 ```

183 

184 ```bash theme={null}

185 npm -g ls @anthropic-ai/claude-code 2>/dev/null

186 ```

187 </Tab>

188 

189 <Tab title="Windows PowerShell">

190 List all `claude` binaries found in your PATH:

191 

192 ```powershell theme={null}

193 where.exe claude

194 ```

195 

196 Check whether the native installer placed a binary:

197 

198 ```powershell theme={null}

199 Test-Path "$env:USERPROFILE\.local\bin\claude.exe"

200 ```

201 </Tab>

202</Tabs>

203 

204If you find multiple installations, keep only one. The native install at `~/.local/bin/claude` on macOS/Linux or `%USERPROFILE%\.local\bin\claude.exe` on Windows is recommended. Remove the extras:

205 

206Uninstall an npm global install:

207 

208```bash theme={null}

209npm uninstall -g @anthropic-ai/claude-code

210```

211 

212Remove the legacy local npm install:

213 

214```bash theme={null}

215rm -rf ~/.claude/local

216```

217 

218On Windows, use PowerShell:

219 

220```powershell theme={null}

221Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\local"

222```

223 

224Remove a Homebrew install on macOS. If you installed the `claude-code@latest` cask, substitute that name:

225 

226```bash theme={null}

227brew uninstall --cask claude-code

228```

229 

230Remove a WinGet install on Windows:

231 

232```powershell theme={null}

233winget uninstall Anthropic.ClaudeCode

234```

235 

236### Check directory permissions

237 

238The installer needs write access to `~/.local/bin/` and `~/.claude/` on macOS and Linux. On Windows the install location is under `%USERPROFILE%`, which is writable by your user by default, so this section rarely applies there.

239 

240Check whether the directories are writable:

241 

242```bash theme={null}

243test -w ~/.local/bin && echo "writable" || echo "not writable"

244test -w ~/.claude && echo "writable" || echo "not writable"

245```

246 

247If either directory isn't writable, create the install directory and set your user as the owner:

248 

249```bash theme={null}

250sudo mkdir -p ~/.local/bin

251sudo chown -R $(whoami) ~/.local

252```

253 

254### Verify the binary works

255 

256If `claude --version` prints a version but `claude` crashes or hangs on startup, run these checks to narrow down the cause. If `claude --version` says command not found, go to [Verify your PATH](#verify-your-path) first; the commands below assume `claude` is on your PATH.

257 

258Confirm the binary exists and is executable:

259 

260```bash theme={null}

261ls -la "$(command -v claude)"

262```

263 

264On Windows, use PowerShell:

265 

266```powershell theme={null}

267Get-Command claude | Select-Object Source

268```

269 

270On Linux, check for missing shared libraries. If `ldd` shows missing libraries, you may need to install system packages. On Alpine Linux and other musl-based distributions, see [Alpine Linux setup](/en/setup#alpine-linux-and-musl-based-distributions).

271 

272```bash theme={null}

273ldd "$(command -v claude)" | grep "not found"

274```

275 

276Confirm the binary can execute:

277 

278```bash theme={null}

279claude --version

280```

281 

282## Common installation issues

283 

284These are the most frequently encountered installation problems and their solutions.

285 

286### Install script returns HTML instead of a shell script

287 

288When running the install command, you may see one of these errors:

289 

290```text theme={null}

291bash: line 1: syntax error near unexpected token `<'

292bash: line 1: `<!DOCTYPE html>'

293```

294 

295On PowerShell, the same problem appears as:

296 

297```text theme={null}

298Invoke-Expression: Missing argument in parameter list.

299```

300 

301This means the install URL returned an HTML page instead of the install script. If the HTML page says "App unavailable in region," Claude Code is not available in your country. See [supported countries](https://www.anthropic.com/supported-countries).

302 

303Otherwise, this can happen due to network issues, regional routing, or a temporary service disruption.

304 

305**Solutions:**

306 

3071. **Use an alternative install method**:

308 

309 On macOS, install via Homebrew:

310 

311 ```bash theme={null}

312 brew install --cask claude-code

313 ```

314 

315 On Windows, install via WinGet:

316 

317 ```powershell theme={null}

318 winget install Anthropic.ClaudeCode

319 ```

320 

3212. **Retry after a few minutes**: the issue is often temporary. Wait and try the original command again.

322 

323### `command not found: claude` after installation

324 

325The install finished but `claude` doesn't work. The exact error varies by platform:

326 

327| Platform | Error message |

328| :---------- | :--------------------------------------------------------------------- |

329| macOS | `zsh: command not found: claude` |

330| Linux | `bash: claude: command not found` |

331| Windows CMD | `'claude' is not recognized as an internal or external command` |

332| PowerShell | `claude : The term 'claude' is not recognized as the name of a cmdlet` |

333 

334This means the install directory isn't in your shell's search path. See [Verify your PATH](#verify-your-path) for the fix on each platform.

335 

336### `curl: (56) Failure writing output to destination`

337 

338The `curl ... | bash` command downloads the script and pipes it to Bash for execution. This error means the connection broke before the script finished downloading. Common causes include network interruptions, the download being blocked mid-stream, or system resource limits.

339 

340**Solutions:**

341 

3421. **Check network stability**: Claude Code binaries are hosted at `downloads.claude.ai`. Test that you can reach it:

343 ```bash theme={null}

344 curl -sI https://downloads.claude.ai/claude-code-releases/latest

345 ```

346 An `HTTP/2 200` line means you reached the server and the original failure was likely intermittent; retry the install command. If you see `Could not resolve host` or a connection timeout, your network is blocking the download.

347 

3482. **Try an alternative install method**:

349 

350 On macOS:

351 

352 ```bash theme={null}

353 brew install --cask claude-code

354 ```

355 

356 On Windows:

357 

358 ```powershell theme={null}

359 winget install Anthropic.ClaudeCode

360 ```

361 

362### TLS or SSL connection errors

363 

364Errors like `curl: (35) TLS connect error`, `schannel: next InitializeSecurityContext failed`, or PowerShell's `Could not establish trust relationship for the SSL/TLS secure channel` indicate TLS handshake failures.

365 

366**Solutions:**

367 

3681. **Update your system CA certificates**:

369 

370 On Ubuntu/Debian:

371 

372 ```bash theme={null}

373 sudo apt-get update && sudo apt-get install ca-certificates

374 ```

375 

376 On macOS, the system curl uses the Keychain trust store; updating macOS itself updates the root certificates.

377 

3782. **On Windows, enable TLS 1.2** in PowerShell before running the installer:

379 ```powershell theme={null}

380 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

381 irm https://claude.ai/install.ps1 | iex

382 ```

383 

3843. **Check for proxy or firewall interference**: corporate proxies that perform TLS inspection can cause these errors, including `unable to get local issuer certificate` and `SELF_SIGNED_CERT_IN_CHAIN`. For the install step, point curl at your corporate CA bundle with `--cacert`:

385 ```bash theme={null}

386 curl --cacert /path/to/corporate-ca.pem -fsSL https://claude.ai/install.sh | bash

387 ```

388 For Claude Code itself once installed, set `NODE_EXTRA_CA_CERTS` so API requests trust the same bundle:

389 ```bash theme={null}

390 export NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.pem

391 ```

392 Ask your IT team for the certificate file if you don't have it. You can also try on a direct connection to confirm the proxy is the cause.

393 

3944. **On Windows, bypass certificate revocation checks** if you see `CRYPT_E_NO_REVOCATION_CHECK (0x80092012)` or `CRYPT_E_REVOCATION_OFFLINE (0x80092013)`. These mean curl reached the server but your network blocks the certificate revocation lookup, which is common behind corporate firewalls. Add `--ssl-revoke-best-effort` to the install command:

395 ```batch theme={null}

396 curl --ssl-revoke-best-effort -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

397 ```

398 Alternatively, install with `winget install Anthropic.ClaudeCode`, which avoids curl entirely.

399 

400### `Failed to fetch version from downloads.claude.ai`

401 

402The installer couldn't reach the download server. This typically means `downloads.claude.ai` is blocked on your network.

403 

404**Solutions:**

405 

4061. **Test connectivity directly**:

407 ```bash theme={null}

408 curl -sI https://downloads.claude.ai/claude-code-releases/latest

409 ```

410 

4112. **If behind a proxy**, set `HTTPS_PROXY` so the installer can route through it. See [proxy configuration](/en/network-config#proxy-configuration) for details.

412 ```bash theme={null}

413 export HTTPS_PROXY=http://proxy.example.com:8080

414 curl -fsSL https://claude.ai/install.sh | bash

415 ```

416 

4173. **If on a restricted network**, try a different network or VPN, or use an alternative install method:

418 

419 On macOS:

420 

421 ```bash theme={null}

422 brew install --cask claude-code

423 ```

424 

425 On Windows:

426 

427 ```powershell theme={null}

428 winget install Anthropic.ClaudeCode

429 ```

430 

431### Wrong install command on Windows

432 

433If you see `'irm' is not recognized`, `The token '&&' is not valid`, or `'bash' is not recognized as the name of a cmdlet`, you copied the install command for a different shell or operating system.

434 

435* **`irm` not recognized**: you're in CMD, not PowerShell. You have two options:

436 

437 Open PowerShell by searching for "PowerShell" in the Start menu, then run the original install command:

438 

439 ```powershell theme={null}

440 irm https://claude.ai/install.ps1 | iex

441 ```

442 

443 Or stay in CMD and use the CMD installer instead:

444 

445 ```batch theme={null}

446 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

447 ```

448 

449* **`&&` not valid**: you're in PowerShell but ran the CMD installer command. Use the PowerShell installer:

450 ```powershell theme={null}

451 irm https://claude.ai/install.ps1 | iex

452 ```

453 

454* **`bash` not recognized**: you ran the macOS/Linux installer on Windows. Use the PowerShell installer instead:

455 ```powershell theme={null}

456 irm https://claude.ai/install.ps1 | iex

457 ```

458 

459### `The process cannot access the file` during Windows install

460 

461If the PowerShell installer fails with `Failed to download binary: The process cannot access the file ... because it is being used by another process`, the installer couldn't write to `%USERPROFILE%\.claude\downloads`. This usually means a previous install attempt is still running, or antivirus software is scanning a partially downloaded binary in that folder.

462 

463Close any other PowerShell windows running the installer and wait for antivirus scans to release the file. Then delete the downloads folder and run the installer again:

464 

465```powershell theme={null}

466Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\downloads"

467irm https://claude.ai/install.ps1 | iex

468```

469 

470### Install killed on low-memory Linux servers

471 

472If you see `Killed` during installation on a VPS or cloud instance:

473 

474```text theme={null}

475Setting up Claude Code...

476Installing Claude Code native build latest...

477bash: line 142: 34803 Killed "$binary_path" install ${TARGET:+"$TARGET"}

478```

479 

480The Linux OOM killer terminated the process because the system ran out of memory. Claude Code requires at least 4 GB of available RAM.

481 

482**Solutions:**

483 

4841. **Add swap space** if your server has limited RAM. Swap uses disk space as overflow memory, letting the install complete even with low physical RAM.

485 

486 Create a 2 GB swap file and enable it:

487 

488 ```bash theme={null}

489 sudo fallocate -l 2G /swapfile

490 sudo chmod 600 /swapfile

491 sudo mkswap /swapfile

492 sudo swapon /swapfile

493 ```

494 

495 Then retry the installation:

496 

497 ```bash theme={null}

498 curl -fsSL https://claude.ai/install.sh | bash

499 ```

500 

5012. **Close other processes** to free memory before installing.

502 

5033. **Use a larger instance** if possible. Claude Code requires at least 4 GB of RAM.

504 

505### Install hangs in Docker

506 

507When installing Claude Code in a Docker container, installing as root into `/` can cause hangs.

508 

509**Solutions:**

510 

5111. **Set a working directory** before running the installer. When run from `/`, the installer scans the entire filesystem, which causes excessive memory usage. Setting `WORKDIR` limits the scan to a small directory:

512 ```dockerfile theme={null}

513 WORKDIR /tmp

514 RUN curl -fsSL https://claude.ai/install.sh | bash

515 ```

516 

5172. **Increase Docker memory limits** if using Docker Desktop:

518 ```bash theme={null}

519 docker build --memory=4g .

520 ```

521 

522### Claude Desktop overrides the `claude` command on Windows

523 

524If you installed an older version of Claude Desktop, it may register a `Claude.exe` in the `WindowsApps` directory that takes PATH priority over Claude Code CLI. Running `claude` opens the Desktop app instead of the CLI.

525 

526Update Claude Desktop to the latest version to fix this issue.

527 

528### Claude Code on Windows requires either Git for Windows (for bash) or PowerShell

529 

530Claude Code on native Windows needs at least one shell: either [Git for Windows](https://git-scm.com/downloads/win) for Bash, or PowerShell. When neither is found, this error appears at startup. If only PowerShell is found, Claude Code uses the PowerShell tool instead of Bash.

531 

532**If neither is installed**, install one:

533 

534* Git for Windows: download from [git-scm.com/downloads/win](https://git-scm.com/downloads/win). During setup, select "Add to PATH." Restart your terminal after installing.

535* PowerShell 7: download from [aka.ms/powershell](https://aka.ms/powershell).

536 

537**If Git is already installed** but Claude Code can't find it, set the path in your [settings.json file](/en/settings):

538 

539```json theme={null}

540{

541 "env": {

542 "CLAUDE_CODE_GIT_BASH_PATH": "C:\\Program Files\\Git\\bin\\bash.exe"

543 }

544}

545```

546 

547If your Git is installed somewhere else, find the path by running `where.exe git` in PowerShell and use the `bin\bash.exe` path from that directory.

548 

549### Claude Code does not support 32-bit Windows

550 

551Windows includes two PowerShell entries in the Start menu: `Windows PowerShell` and `Windows PowerShell (x86)`. The x86 entry runs as a 32-bit process and triggers this error even on a 64-bit machine. To check which case you're in, run this in the same window that produced the error:

552 

553```powershell theme={null}

554[Environment]::Is64BitOperatingSystem

555```

556 

557If this prints `True`, your operating system is fine. Close the window, open `Windows PowerShell` without the x86 suffix, and run the install command again.

558 

559If this prints `False`, you are on a 32-bit edition of Windows. Claude Code requires a 64-bit operating system. See the [system requirements](/en/setup#system-requirements).

560 

561### Linux musl or glibc binary mismatch

562 

563If you see errors about missing shared libraries like `libstdc++.so.6` or `libgcc_s.so.1` after installation, the installer may have downloaded the wrong binary variant for your system.

564 

565```text theme={null}

566Error loading shared library libstdc++.so.6: No such file or directory

567```

568 

569This can happen on glibc-based systems that have musl cross-compilation packages installed, causing the installer to misdetect the system as musl.

570 

571**Solutions:**

572 

5731. **Check which libc your system uses**:

574 ```bash theme={null}

575 ldd --version 2>&1 | head -1

576 ```

577 Output mentioning `GNU libc` or `GLIBC` means glibc. Output mentioning `musl` means musl.

578 

5792. **If you're on glibc but got the musl binary**, remove the installation and reinstall. You can also manually download the correct binary using the manifest at `https://downloads.claude.ai/claude-code-releases/{VERSION}/manifest.json`. File a [GitHub issue](https://github.com/anthropics/claude-code/issues) with the output of `ldd --version` and `ls /lib/libc.musl*`.

580 

5813. **If you're actually on musl**, such as Alpine Linux, install the required packages:

582 ```bash theme={null}

583 apk add libgcc libstdc++ ripgrep

584 ```

585 

586### `Illegal instruction`

587 

588If running `claude` or the installer prints `Illegal instruction`, the native binary uses CPU instructions your processor doesn't support. There are two distinct causes.

589 

590**Architecture mismatch.** The installer downloaded the wrong binary, for example x86 on an ARM server. Check with `uname -m` on macOS or Linux, or `$env:PROCESSOR_ARCHITECTURE` in PowerShell. If the result doesn't match the binary you received, [file a GitHub issue](https://github.com/anthropics/claude-code/issues) with the output.

591 

592**Missing instruction set on older CPUs.** If your architecture is correct but you still see `Illegal instruction`, your CPU likely lacks AVX or another instruction the binary requires. This affects roughly pre-2013 Intel and AMD processors. There is currently no native-binary workaround; track [issue #50384](https://github.com/anthropics/claude-code/issues/50384) for status, and include your CPU model from `cat /proc/cpuinfo | grep "model name" | head -1` on Linux or `sysctl -n machdep.cpu.brand_string` on macOS when reporting.

593 

594Alternative install methods download the same native binary and won't resolve either cause.

595 

596### `dyld: cannot load` on macOS

597 

598If you see `dyld: cannot load`, `dyld: Symbol not found`, or `Abort trap: 6` during installation, the binary is incompatible with your macOS version or hardware.

599 

600```text theme={null}

601dyld: cannot load 'claude-2.1.42-darwin-x64' (load command 0x80000034 is unknown)

602Abort trap: 6

603```

604 

605A `Symbol not found` error that references `libicucore` also indicates your macOS version is older than the binary supports:

606 

607```text theme={null}

608dyld: Symbol not found: _ubrk_clone

609 Referenced from: claude-darwin-x64 (which was built for Mac OS X 13.0)

610 Expected in: /usr/lib/libicucore.A.dylib

611```

612 

613**Solutions:**

614 

6151. **Check your macOS version**: Claude Code requires macOS 13.0 or later. Open the Apple menu and select About This Mac to check your version.

616 

6172. **Update macOS** if you're on an older version. The binary uses load commands and system libraries that older macOS versions don't support. Alternative install methods like Homebrew download the same binary and won't resolve this error.

618 

619### `Exec format error` on WSL1

620 

621If running `claude` in WSL prints `cannot execute binary file: Exec format error`, you're on WSL1 and hitting a known native-binary regression tracked in [issue #38788](https://github.com/anthropics/claude-code/issues/38788). The binary's program headers changed in a way WSL1's loader can't handle.

622 

623The cleanest fix is to convert your distribution to WSL2 from PowerShell:

624 

625```powershell theme={null}

626wsl --set-version <DistroName> 2

627```

628 

629If you need to stay on WSL1, invoke the binary through the dynamic linker. Add this function to `~/.bashrc` inside WSL, replacing the path if your home directory differs:

630 

631```bash theme={null}

632claude() {

633 /lib64/ld-linux-x86-64.so.2 "$(readlink -f "$HOME/.local/bin/claude")" "$@"

634}

635```

636 

637Then run `source ~/.bashrc` and retry `claude`.

638 

639### npm install errors in WSL

640 

641These issues apply if you installed Claude Code with `npm install -g` inside WSL. If you used the [native installer](/en/setup), skip this section.

642 

643**OS or platform detection issues.** If npm reports a platform mismatch during install, WSL is likely picking up the Windows `npm`. Run `npm config set os linux` first, then install with `npm install -g @anthropic-ai/claude-code --force`. Do not use `sudo`.

644 

645**`exec: node: not found` when running `claude`.** Your WSL environment is likely using the Windows installation of Node.js. Confirm with `which npm` and `which node`: paths starting with `/mnt/c/` are Windows binaries, while Linux paths start with `/usr/`. To fix this, install Node via your Linux distribution's package manager or via [`nvm`](https://github.com/nvm-sh/nvm).

646 

647**nvm version conflicts.** If you have nvm installed in both WSL and Windows, switching Node versions in WSL may break because WSL imports the Windows PATH by default and the Windows nvm takes priority. The most common cause is that nvm isn't loaded in your shell. Add the nvm loader to `~/.bashrc` or `~/.zshrc`:

648 

649```bash theme={null}

650export NVM_DIR="$HOME/.nvm"

651[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

652[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

653```

654 

655Or load it in your current session:

656 

657```bash theme={null}

658source ~/.nvm/nvm.sh

659```

660 

661If nvm is loaded but Windows paths still take priority, prepend your Linux Node path explicitly:

662 

663```bash theme={null}

664export PATH="$HOME/.nvm/versions/node/$(node -v)/bin:$PATH"

665```

666 

667<Warning>

668 Avoid disabling Windows PATH importing via `appendWindowsPath = false` as this breaks the ability to call Windows executables from WSL. Similarly, avoid uninstalling Node.js from Windows if you use it for Windows development.

669</Warning>

670 

671### Permission errors during installation

672 

673If the native installer fails with permission errors, the target directory may not be writable. See [Check directory permissions](#check-directory-permissions).

674 

675If you previously installed with npm and are hitting npm-specific permission errors, switch to the native installer:

676 

677```bash theme={null}

678curl -fsSL https://claude.ai/install.sh | bash

679```

680 

681### Native binary not found after npm install

682 

683The `@anthropic-ai/claude-code` npm package pulls in the native binary through a per-platform optional dependency such as `@anthropic-ai/claude-code-darwin-arm64`. If running `claude` after install prints `Could not find native binary package "@anthropic-ai/claude-code-<platform>"`, check the following causes:

684 

685* **Optional dependencies are disabled.** Remove `--omit=optional` from your npm install command, `--no-optional` from pnpm, or `--ignore-optional` from yarn, and check that `.npmrc` does not set `optional=false`. Then reinstall. The native binary is delivered only as an optional dependency, so there is no JavaScript fallback if it is skipped.

686* **Unsupported platform.** Prebuilt binaries are published for `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64`, and `win32-arm64`. Claude Code does not ship a binary for other platforms; see the [system requirements](/en/setup#system-requirements).

687* **Corporate npm mirror is missing the platform packages.** Ensure your registry mirrors all eight `@anthropic-ai/claude-code-*` platform packages in addition to the meta package.

688 

689Installing with `--ignore-scripts` does not trigger this error. The postinstall step that links the binary into place is skipped, so Claude Code falls back to a wrapper that locates and spawns the platform binary on each launch. This works but starts more slowly; reinstall with scripts enabled for direct execution.

690 

691## Login and authentication

692 

693These sections address login failures, OAuth errors, and token issues.

694 

695### Reset your login

696 

697When login fails and the cause isn't obvious, a clean re-authentication resolves most cases:

698 

6991. Run `/logout` to sign out completely

7002. Close Claude Code

7013. Restart with `claude` and complete the authentication process again

702 

703If the browser doesn't open automatically during login, press `c` to copy the OAuth URL to your clipboard, then paste it into a browser manually. This also works when the URL wraps across lines in a narrow or SSH terminal and can't be clicked directly.

704 

705### OAuth error: Invalid code

706 

707If you see `OAuth error: Invalid code. Please make sure the full code was copied`, the login code expired or was truncated during copy-paste.

708 

709**Solutions:**

710 

711* Press Enter to retry and complete the login quickly after the browser opens

712* Type `c` to copy the full URL if the browser doesn't open automatically

713* If using a remote/SSH session, the browser may open on the wrong machine. Copy the URL displayed in the terminal and open it in your local browser instead.

714 

715### 403 Forbidden after login

716 

717If you see `API Error: 403 {"error":{"type":"forbidden","message":"Request not allowed"}}` after logging in:

718 

719* **Claude Pro/Max users**: verify your subscription is active at [claude.ai/settings](https://claude.ai/settings)

720* **Anthropic Console users**: confirm your account has the "Claude Code" or "Developer" role. Admins assign this in the Anthropic Console under Settings → Members.

721* **Behind a proxy**: corporate proxies can interfere with API requests. See [network configuration](/en/network-config) for proxy setup.

722 

723### This organization has been disabled with an active subscription

724 

725If you see `API Error: 400 ... "This organization has been disabled"` despite having an active Claude subscription, an `ANTHROPIC_API_KEY` environment variable is overriding your subscription. This commonly happens when an old API key from a previous employer or project is still set in your shell profile.

726 

727When `ANTHROPIC_API_KEY` is present and you have approved it, Claude Code uses that key instead of your subscription's OAuth credentials. In non-interactive mode with the `-p` flag, the key is always used when present. See [authentication precedence](/en/authentication#authentication-precedence) for the full resolution order.

728 

729To use your subscription instead, unset the environment variable and remove it from your shell profile:

730 

731```bash theme={null}

732unset ANTHROPIC_API_KEY

733claude

734```

735 

736Check `~/.zshrc`, `~/.bashrc`, or `~/.profile` for `export ANTHROPIC_API_KEY=...` lines and remove them to make the change permanent. On Windows, check your PowerShell profile at `$PROFILE` and your User environment variables for `ANTHROPIC_API_KEY`. Run `/status` inside Claude Code to confirm which authentication method is active.

737 

738### OAuth login fails in WSL2, SSH, or containers

739 

740When Claude Code runs in WSL2, on a remote machine over SSH, or inside a container, the browser usually opens on a different host and its redirect can't reach Claude Code's local callback server. After you sign in, the browser shows a login code instead of redirecting back automatically. Paste that code into the terminal at the `Paste code here if prompted` prompt to complete login.

741 

742If the browser doesn't open at all from WSL2, set the `BROWSER` environment variable to your Windows browser path:

743 

744```bash theme={null}

745export BROWSER="/mnt/c/Program Files/Google/Chrome/Application/chrome.exe"

746claude

747```

748 

749Alternatively, press `c` at the interactive login prompt to copy the OAuth URL, or copy the URL that `claude auth login` prints, and open it in a browser on your local machine.

750 

751If pasting the code into the interactive prompt does nothing, your terminal's paste binding likely isn't reaching the input field. Try your terminal's alternate paste shortcut, often right-click or Shift+Insert in Windows Terminal, or use `claude auth login` instead, which reads the pasted code from standard input:

752 

753```bash theme={null}

754claude auth login

755```

756 

757This fallback also applies on native Windows or any terminal where pasting into the interactive prompt fails.

758 

759### Not logged in or token expired

760 

761If Claude Code prompts you to log in again after a session, your OAuth token may have expired.

762 

763Run `/login` to re-authenticate. If this happens frequently, check that your system clock is accurate, as token validation depends on correct timestamps.

764 

765On macOS, login can also fail when the Keychain is locked or its password is out of sync with your account password, which prevents Claude Code from saving credentials. Run `claude doctor` to check Keychain access. To unlock the Keychain manually, run `security unlock-keychain ~/Library/Keychains/login.keychain-db`. If unlocking doesn't help, open Keychain Access, select the `login` keychain, and choose Edit > Change Password for Keychain "login" to resync it with your account password.

766 

767### Bedrock, Vertex, or Foundry credentials not loading

768 

769If you configured Claude Code to use a cloud provider and see `Could not load credentials from any providers` on Bedrock, `Could not load the default credentials` on Vertex, or `ChainedTokenCredential authentication failed` on Foundry, your cloud provider CLI is likely not authenticated in the current shell.

770 

771For Bedrock, confirm your AWS credentials are valid:

772 

773```bash theme={null}

774aws sts get-caller-identity

775```

776 

777For Vertex AI, confirm `ANTHROPIC_VERTEX_PROJECT_ID` and `CLOUD_ML_REGION` are set in your shell, then set application default credentials:

778 

779```bash theme={null}

780gcloud auth application-default login

781```

782 

783For Microsoft Foundry, confirm `ANTHROPIC_FOUNDRY_API_KEY` is set, or sign in with the Azure CLI so the default credential chain can find your account:

784 

785```bash theme={null}

786az login

787```

788 

789If credentials work in your terminal but not in the VS Code or JetBrains extension, the IDE process likely didn't inherit your shell environment. Set the provider environment variables in the IDE's own settings, or launch the IDE from a terminal where they're already exported.

790 

791See [Amazon Bedrock](/en/amazon-bedrock), [Google Vertex AI](/en/google-vertex-ai), or [Microsoft Foundry](/en/microsoft-foundry) for full provider setup.

792 

793## Still stuck

794 

795If none of the above resolves your issue:

796 

7971. Check the [GitHub repository](https://github.com/anthropics/claude-code/issues) for known issues, or open a new one with your operating system, the install command you ran, and the full error output

7982. If `claude --version` works but something else is wrong, run `claude doctor` for an automated diagnostic report

7993. If you can start a session, use `/feedback` inside Claude Code to report the problem

troubleshooting.md +48 −917

Details

4 4 

5# Troubleshooting5# Troubleshooting

6 6 

7> Discover solutions to common issues with Claude Code installation and usage.7> Fix high CPU or memory usage, hangs, auto-compact thrashing, and search problems in Claude Code, and find the right page for other issues.

8 8 

9## Troubleshoot installation issues9This page covers performance, stability, and search problems once Claude Code is running. For other issues, start with the page that matches where you're stuck:

10 10 

11<Tip>11| Symptom | Go to |

12 If you'd rather skip the terminal entirely, the [Claude Code Desktop app](/en/desktop-quickstart) lets you install and use Claude Code through a graphical interface. Download it for [macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs) or [Windows](https://claude.com/download?utm_source=claude_code\&utm_medium=docs) and start coding without any command-line setup.12| :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------- |

13</Tip>13| `command not found`, install fails, PATH issues, `EACCES`, TLS errors | [Troubleshoot installation and login](/en/troubleshoot-install) |

14| Login loops, OAuth errors, `403 Forbidden`, "organization disabled", Bedrock/Vertex/Foundry credentials | [Troubleshoot installation and login](/en/troubleshoot-install#login-and-authentication) |

15| Settings not applying, hooks not firing, MCP servers not loading | [Debug your configuration](/en/debug-your-config) |

16| `API Error: 5xx`, `529 Overloaded`, `429`, request validation errors | [Error reference](/en/errors) |

17| `model not found` or `you may not have access to it` | [Error reference](/en/errors#theres-an-issue-with-the-selected-model) |

18| VS Code extension not connecting or detecting Claude | [VS Code integration](/en/vs-code#fix-common-issues) |

19| JetBrains plugin or IDE not detected | [JetBrains integration](/en/jetbrains#troubleshooting) |

20| High CPU or memory, slow responses, hangs, search not finding files | [Performance and stability](#performance-and-stability) below |

14 21 

15Find the error message or symptom you're seeing:22If you're not sure which applies, run `/doctor` inside Claude Code for an automated check of your installation, settings, MCP servers, and context usage. If `claude` won't start at all, run `claude doctor` from your shell instead.

16 

17| What you see | Solution |

18| :-------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------- |

19| `command not found: claude` or `'claude' is not recognized` | [Fix your PATH](#command-not-found-claude-after-installation) |

20| `syntax error near unexpected token '<'` | [Install script returns HTML](#install-script-returns-html-instead-of-a-shell-script) |

21| `curl: (56) Failure writing output to destination` | [Download script first, then run it](#curl-56-failure-writing-output-to-destination) |

22| `Killed` during install on Linux | [Add swap space for low-memory servers](#install-killed-on-low-memory-linux-servers) |

23| `TLS connect error` or `SSL/TLS secure channel` | [Update CA certificates](#tls-or-ssl-connection-errors) |

24| `Failed to fetch version` or can't reach download server | [Check network and proxy settings](#check-network-connectivity) |

25| `irm is not recognized` or `&& is not valid` | [Use the right command for your shell](#windows-wrong-install-command) |

26| `'bash' is not recognized as the name of a cmdlet` | [Use the Windows installer command](#windows-wrong-install-command) |

27| `Claude Code on Windows requires git-bash` | [Install or configure Git Bash](#windows-claude-code-on-windows-requires-git-bash) |

28| `Claude Code does not support 32-bit Windows` | [Open Windows PowerShell, not the x86 entry](#windows-claude-code-does-not-support-32-bit-windows) |

29| `Error loading shared library` | [Wrong binary variant for your system](#linux-wrong-binary-variant-installed-musl/glibc-mismatch) |

30| `Illegal instruction` on Linux | [Architecture mismatch](#illegal-instruction-on-linux) |

31| `dyld: cannot load`, `dyld: Symbol not found`, or `Abort trap` on macOS | [Binary incompatibility](#dyld-cannot-load-on-macos) |

32| `Invoke-Expression: Missing argument in parameter list` | [Install script returns HTML](#install-script-returns-html-instead-of-a-shell-script) |

33| `App unavailable in region` | Claude Code is not available in your country. See [supported countries](https://www.anthropic.com/supported-countries). |

34| `unable to get local issuer certificate` | [Configure corporate CA certificates](#tls-or-ssl-connection-errors) |

35| `OAuth error` or `403 Forbidden` | [Fix authentication](#authentication-issues) |

36| `API Error: 500`, `529 Overloaded`, `429`, or other 4xx and 5xx errors not listed above | See the [Error reference](/en/errors) |

37 

38If your issue isn't listed, work through these diagnostic steps.

39 

40## Debug installation problems

41 

42### Check network connectivity

43 

44The installer downloads from `downloads.claude.ai`. Verify you can reach it:

45 

46```bash theme={null}

47curl -sI https://downloads.claude.ai

48```

49 

50If this fails, your network may be blocking the connection. Common causes:

51 

52* Corporate firewalls or proxies blocking `downloads.claude.ai`

53* Regional network restrictions: try a VPN or alternative network

54* TLS/SSL issues: update your system's CA certificates, or check if `HTTPS_PROXY` is configured

55 

56If you're behind a corporate proxy, set `HTTPS_PROXY` and `HTTP_PROXY` to your proxy's address before installing. Ask your IT team for the proxy URL if you don't know it, or check your browser's proxy settings.

57 

58This example sets both proxy variables, then runs the installer through your proxy:

59 

60```bash theme={null}

61export HTTP_PROXY=http://proxy.example.com:8080

62export HTTPS_PROXY=http://proxy.example.com:8080

63curl -fsSL https://claude.ai/install.sh | bash

64```

65 

66### Verify your PATH

67 

68If installation succeeded but you get a `command not found` or `not recognized` error when running `claude`, the install directory isn't in your PATH. Your shell searches for programs in directories listed in PATH, and the installer places `claude` at `~/.local/bin/claude` on macOS/Linux or `%USERPROFILE%\.local\bin\claude.exe` on Windows.

69 

70Check if the install directory is in your PATH by listing your PATH entries and filtering for `local/bin`:

71 

72<Tabs>

73 <Tab title="macOS/Linux">

74 ```bash theme={null}

75 echo $PATH | tr ':' '\n' | grep local/bin

76 ```

77 

78 If there's no output, the directory is missing. Add it to your shell configuration:

79 

80 ```bash theme={null}

81 # Zsh (macOS default)

82 echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

83 source ~/.zshrc

84 

85 # Bash (Linux default)

86 echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

87 source ~/.bashrc

88 ```

89 

90 Alternatively, close and reopen your terminal.

91 

92 Verify the fix worked:

93 

94 ```bash theme={null}

95 claude --version

96 ```

97 </Tab>

98 

99 <Tab title="Windows PowerShell">

100 ```powershell theme={null}

101 $env:PATH -split ';' | Select-String 'local\\bin'

102 ```

103 

104 If there's no output, add the install directory to your User PATH:

105 

106 ```powershell theme={null}

107 $currentPath = [Environment]::GetEnvironmentVariable('PATH', 'User')

108 [Environment]::SetEnvironmentVariable('PATH', "$currentPath;$env:USERPROFILE\.local\bin", 'User')

109 ```

110 

111 Restart your terminal for the change to take effect.

112 

113 Verify the fix worked:

114 

115 ```powershell theme={null}

116 claude --version

117 ```

118 </Tab>

119 

120 <Tab title="Windows CMD">

121 ```batch theme={null}

122 echo %PATH% | findstr /i "local\bin"

123 ```

124 

125 If there's no output, open System Settings, go to Environment Variables, and add `%USERPROFILE%\.local\bin` to your User PATH variable. Restart your terminal.

126 

127 Verify the fix worked:

128 

129 ```batch theme={null}

130 claude --version

131 ```

132 </Tab>

133</Tabs>

134 

135### Check for conflicting installations

136 

137Multiple Claude Code installations can cause version mismatches or unexpected behavior. Check what's installed:

138 

139<Tabs>

140 <Tab title="macOS/Linux">

141 List all `claude` binaries found in your PATH:

142 

143 ```bash theme={null}

144 which -a claude

145 ```

146 

147 Check whether the native installer and npm versions are present:

148 

149 ```bash theme={null}

150 ls -la ~/.local/bin/claude

151 ```

152 

153 ```bash theme={null}

154 ls -la ~/.claude/local/

155 ```

156 

157 ```bash theme={null}

158 npm -g ls @anthropic-ai/claude-code 2>/dev/null

159 ```

160 </Tab>

161 

162 <Tab title="Windows PowerShell">

163 ```powershell theme={null}

164 where.exe claude

165 Test-Path "$env:LOCALAPPDATA\Claude Code\claude.exe"

166 ```

167 </Tab>

168</Tabs>

169 

170If you find multiple installations, keep only one. The native install at `~/.local/bin/claude` is recommended. Remove any extra installations:

171 

172Uninstall an npm global install:

173 

174```bash theme={null}

175npm uninstall -g @anthropic-ai/claude-code

176```

177 

178Remove a Homebrew install on macOS (use `claude-code@latest` if you installed that cask):

179 

180```bash theme={null}

181brew uninstall --cask claude-code

182```

183 

184### Check directory permissions

185 

186The installer needs write access to `~/.local/bin/` and `~/.claude/`. If installation fails with permission errors, check whether these directories are writable:

187 

188```bash theme={null}

189test -w ~/.local/bin && echo "writable" || echo "not writable"

190test -w ~/.claude && echo "writable" || echo "not writable"

191```

192 

193If either directory isn't writable, create the install directory and set your user as the owner:

194 

195```bash theme={null}

196sudo mkdir -p ~/.local/bin

197sudo chown -R $(whoami) ~/.local

198```

199 

200### Verify the binary works

201 

202If `claude` is installed but crashes or hangs on startup, run these checks to narrow down the cause.

203 

204Confirm the binary exists and is executable:

205 

206```bash theme={null}

207ls -la $(which claude)

208```

209 

210On Linux, check for missing shared libraries. If `ldd` shows missing libraries, you may need to install system packages. On Alpine Linux and other musl-based distributions, see [Alpine Linux setup](/en/setup#alpine-linux-and-musl-based-distributions).

211 

212```bash theme={null}

213ldd $(which claude) | grep "not found"

214```

215 

216Run a quick sanity check that the binary can execute:

217 

218```bash theme={null}

219claude --version

220```

221 

222## Common installation issues

223 

224These are the most frequently encountered installation problems and their solutions.

225 

226### Install script returns HTML instead of a shell script

227 

228When running the install command, you may see one of these errors:

229 

230```text theme={null}

231bash: line 1: syntax error near unexpected token `<'

232bash: line 1: `<!DOCTYPE html>'

233```

234 

235On PowerShell, the same problem appears as:

236 

237```text theme={null}

238Invoke-Expression: Missing argument in parameter list.

239```

240 

241This means the install URL returned an HTML page instead of the install script. If the HTML page says "App unavailable in region," Claude Code is not available in your country. See [supported countries](https://www.anthropic.com/supported-countries).

242 

243Otherwise, this can happen due to network issues, regional routing, or a temporary service disruption.

244 

245**Solutions:**

246 

2471. **Use an alternative install method**:

248 

249 On macOS or Linux, install via Homebrew:

250 

251 ```bash theme={null}

252 brew install --cask claude-code

253 ```

254 

255 On Windows, install via WinGet:

256 

257 ```powershell theme={null}

258 winget install Anthropic.ClaudeCode

259 ```

260 

2612. **Retry after a few minutes**: the issue is often temporary. Wait and try the original command again.

262 

263### `command not found: claude` after installation

264 

265The install finished but `claude` doesn't work. The exact error varies by platform:

266 

267| Platform | Error message |

268| :---------- | :--------------------------------------------------------------------- |

269| macOS | `zsh: command not found: claude` |

270| Linux | `bash: claude: command not found` |

271| Windows CMD | `'claude' is not recognized as an internal or external command` |

272| PowerShell | `claude : The term 'claude' is not recognized as the name of a cmdlet` |

273 

274This means the install directory isn't in your shell's search path. See [Verify your PATH](#verify-your-path) for the fix on each platform.

275 

276### `curl: (56) Failure writing output to destination`

277 

278The `curl ... | bash` command downloads the script and passes it directly to Bash for execution using a pipe (`|`). This error means the connection broke before the script finished downloading. Common causes include network interruptions, the download being blocked mid-stream, or system resource limits.

279 

280**Solutions:**

281 

2821. **Check network stability**: Claude Code binaries are hosted at `downloads.claude.ai`. Test that you can reach it:

283 ```bash theme={null}

284 curl -fsSL https://downloads.claude.ai -o /dev/null

285 ```

286 If the command completes silently, your connection is fine and the issue is likely intermittent. Retry the install command. If you see an error, your network may be blocking the download.

287 

2882. **Try an alternative install method**:

289 

290 On macOS or Linux:

291 

292 ```bash theme={null}

293 brew install --cask claude-code

294 ```

295 

296 On Windows:

297 

298 ```powershell theme={null}

299 winget install Anthropic.ClaudeCode

300 ```

301 

302### TLS or SSL connection errors

303 

304Errors like `curl: (35) TLS connect error`, `schannel: next InitializeSecurityContext failed`, or PowerShell's `Could not establish trust relationship for the SSL/TLS secure channel` indicate TLS handshake failures.

305 

306**Solutions:**

307 

3081. **Update your system CA certificates**:

309 

310 On Ubuntu/Debian:

311 

312 ```bash theme={null}

313 sudo apt-get update && sudo apt-get install ca-certificates

314 ```

315 

316 On macOS via Homebrew:

317 

318 ```bash theme={null}

319 brew install ca-certificates

320 ```

321 

3222. **On Windows, enable TLS 1.2** in PowerShell before running the installer:

323 ```powershell theme={null}

324 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

325 irm https://claude.ai/install.ps1 | iex

326 ```

327 

3283. **Check for proxy or firewall interference**: corporate proxies that perform TLS inspection can cause these errors, including `unable to get local issuer certificate`. Set `NODE_EXTRA_CA_CERTS` to your corporate CA certificate bundle:

329 ```bash theme={null}

330 export NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.pem

331 ```

332 Ask your IT team for the certificate file if you don't have it. You can also try on a direct connection to confirm the proxy is the cause.

333 

3344. **On Windows, bypass certificate revocation checks** if you see `CRYPT_E_NO_REVOCATION_CHECK (0x80092012)` or `CRYPT_E_REVOCATION_OFFLINE (0x80092013)`. These mean curl reached the server but your network blocks the certificate revocation lookup, which is common behind corporate firewalls. Add `--ssl-revoke-best-effort` to the install command:

335 ```bat theme={null}

336 curl --ssl-revoke-best-effort -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

337 ```

338 Alternatively, install with `winget install Anthropic.ClaudeCode`, which avoids curl entirely.

339 

340### `Failed to fetch version from downloads.claude.ai`

341 

342The installer couldn't reach the download server. This typically means `downloads.claude.ai` is blocked on your network.

343 

344**Solutions:**

345 

3461. **Test connectivity directly**:

347 ```bash theme={null}

348 curl -sI https://downloads.claude.ai

349 ```

350 

3512. **If behind a proxy**, set `HTTPS_PROXY` so the installer can route through it. See [proxy configuration](/en/network-config#proxy-configuration) for details.

352 ```bash theme={null}

353 export HTTPS_PROXY=http://proxy.example.com:8080

354 curl -fsSL https://claude.ai/install.sh | bash

355 ```

356 

3573. **If on a restricted network**, try a different network or VPN, or use an alternative install method:

358 

359 On macOS or Linux:

360 

361 ```bash theme={null}

362 brew install --cask claude-code

363 ```

364 

365 On Windows:

366 

367 ```powershell theme={null}

368 winget install Anthropic.ClaudeCode

369 ```

370 

371### Windows: wrong install command

372 

373If you see `'irm' is not recognized`, `The token '&&' is not valid`, or `'bash' is not recognized as the name of a cmdlet`, you copied the install command for a different shell or operating system.

374 

375* **`irm` not recognized**: you're in CMD, not PowerShell. You have two options:

376 

377 Open PowerShell by searching for "PowerShell" in the Start menu, then run the original install command:

378 

379 ```powershell theme={null}

380 irm https://claude.ai/install.ps1 | iex

381 ```

382 

383 Or stay in CMD and use the CMD installer instead:

384 

385 ```batch theme={null}

386 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

387 ```

388 

389* **`&&` not valid**: you're in PowerShell but ran the CMD installer command. Use the PowerShell installer:

390 ```powershell theme={null}

391 irm https://claude.ai/install.ps1 | iex

392 ```

393 

394* **`bash` not recognized**: you ran the macOS/Linux installer on Windows. Use the PowerShell installer instead:

395 ```powershell theme={null}

396 irm https://claude.ai/install.ps1 | iex

397 ```

398 

399### Install killed on low-memory Linux servers

400 

401If you see `Killed` during installation on a VPS or cloud instance:

402 

403```text theme={null}

404Setting up Claude Code...

405Installing Claude Code native build latest...

406bash: line 142: 34803 Killed "$binary_path" install ${TARGET:+"$TARGET"}

407```

408 

409The Linux OOM killer terminated the process because the system ran out of memory. Claude Code requires at least 4 GB of available RAM.

410 

411**Solutions:**

412 

4131. **Add swap space** if your server has limited RAM. Swap uses disk space as overflow memory, letting the install complete even with low physical RAM.

414 

415 Create a 2 GB swap file and enable it:

416 

417 ```bash theme={null}

418 sudo fallocate -l 2G /swapfile

419 sudo chmod 600 /swapfile

420 sudo mkswap /swapfile

421 sudo swapon /swapfile

422 ```

423 

424 Then retry the installation:

425 

426 ```bash theme={null}

427 curl -fsSL https://claude.ai/install.sh | bash

428 ```

429 

4302. **Close other processes** to free memory before installing.

431 

4323. **Use a larger instance** if possible. Claude Code requires at least 4 GB of RAM.

433 

434### Install hangs in Docker

435 

436When installing Claude Code in a Docker container, installing as root into `/` can cause hangs.

437 

438**Solutions:**

439 

4401. **Set a working directory** before running the installer. When run from `/`, the installer scans the entire filesystem, which causes excessive memory usage. Setting `WORKDIR` limits the scan to a small directory:

441 ```dockerfile theme={null}

442 WORKDIR /tmp

443 RUN curl -fsSL https://claude.ai/install.sh | bash

444 ```

445 

4462. **Increase Docker memory limits** if using Docker Desktop:

447 ```bash theme={null}

448 docker build --memory=4g .

449 ```

450 

451### Windows: Claude Desktop overrides `claude` CLI command

452 

453If you installed an older version of Claude Desktop, it may register a `Claude.exe` in the `WindowsApps` directory that takes PATH priority over Claude Code CLI. Running `claude` opens the Desktop app instead of the CLI.

454 

455Update Claude Desktop to the latest version to fix this issue.

456 

457### Windows: Claude Code on Windows requires git-bash

458 

459Claude Code on native Windows needs [Git for Windows](https://git-scm.com/downloads/win), which includes Git Bash.

460 

461**If Git is not installed**, download and install it from [git-scm.com/downloads/win](https://git-scm.com/downloads/win). During setup, select "Add to PATH." Restart your terminal after installing.

462 

463**If Git is already installed** but Claude Code still can't find it, set the path in your [settings.json file](/en/settings):

464 

465```json theme={null}

466{

467 "env": {

468 "CLAUDE_CODE_GIT_BASH_PATH": "C:\\Program Files\\Git\\bin\\bash.exe"

469 }

470}

471```

472 

473If your Git is installed somewhere else, find the path by running `where.exe git` in PowerShell and use the `bin\bash.exe` path from that directory.

474 

475### Windows: Claude Code does not support 32-bit Windows

476 

477Windows includes two PowerShell entries in the Start menu: `Windows PowerShell` and `Windows PowerShell (x86)`. The x86 entry runs as a 32-bit process and triggers this error even on a 64-bit machine. To check which case you're in, run this in the same window that produced the error:

478 

479```powershell theme={null}

480[Environment]::Is64BitOperatingSystem

481```

482 

483If this prints `True`, your operating system is fine. Close the window, open `Windows PowerShell` without the x86 suffix, and run the install command again.

484 

485If this prints `False`, you are on a 32-bit edition of Windows. Claude Code requires a 64-bit operating system. See the [system requirements](/en/setup#system-requirements).

486 

487### Linux: wrong binary variant installed (musl/glibc mismatch)

488 

489If you see errors about missing shared libraries like `libstdc++.so.6` or `libgcc_s.so.1` after installation, the installer may have downloaded the wrong binary variant for your system.

490 

491```text theme={null}

492Error loading shared library libstdc++.so.6: No such file or directory

493```

494 

495This can happen on glibc-based systems that have musl cross-compilation packages installed, causing the installer to misdetect the system as musl.

496 

497**Solutions:**

498 

4991. **Check which libc your system uses**:

500 ```bash theme={null}

501 ldd /bin/ls | head -1

502 ```

503 If it shows `linux-vdso.so` or references to `/lib/x86_64-linux-gnu/`, you're on glibc. If it shows `musl`, you're on musl.

504 

5052. **If you're on glibc but got the musl binary**, remove the installation and reinstall. You can also manually download the correct binary using the manifest at `https://downloads.claude.ai/claude-code-releases/{VERSION}/manifest.json`. File a [GitHub issue](https://github.com/anthropics/claude-code/issues) with the output of `ldd /bin/ls` and `ls /lib/libc.musl*`.

506 

5073. **If you're actually on musl** (Alpine Linux), install the required packages:

508 ```bash theme={null}

509 apk add libgcc libstdc++ ripgrep

510 ```

511 

512### `Illegal instruction` on Linux

513 

514If the installer prints `Illegal instruction` instead of the OOM `Killed` message, the downloaded binary doesn't match your CPU architecture. This commonly happens on ARM servers that receive an x86 binary, or on older CPUs that lack required instruction sets.

515 

516```text theme={null}

517bash: line 142: 2238232 Illegal instruction "$binary_path" install ${TARGET:+"$TARGET"}

518```

519 

520**Solutions:**

521 

5221. **Verify your architecture**:

523 ```bash theme={null}

524 uname -m

525 ```

526 `x86_64` means 64-bit Intel/AMD, `aarch64` means ARM64. If the binary doesn't match, [file a GitHub issue](https://github.com/anthropics/claude-code/issues) with the output.

527 

5282. **Try an alternative install method** while the architecture issue is resolved:

529 ```bash theme={null}

530 brew install --cask claude-code

531 ```

532 

533### `dyld: cannot load` on macOS

534 

535If you see `dyld: cannot load`, `dyld: Symbol not found`, or `Abort trap: 6` during installation, the binary is incompatible with your macOS version or hardware.

536 

537```text theme={null}

538dyld: cannot load 'claude-2.1.42-darwin-x64' (load command 0x80000034 is unknown)

539Abort trap: 6

540```

541 

542A `Symbol not found` error that references `libicucore` also indicates your macOS version is older than the binary supports:

543 

544```text theme={null}

545dyld: Symbol not found: _ubrk_clone

546 Referenced from: claude-darwin-x64 (which was built for Mac OS X 13.0)

547 Expected in: /usr/lib/libicucore.A.dylib

548```

549 

550**Solutions:**

551 

5521. **Check your macOS version**: Claude Code requires macOS 13.0 or later. Open the Apple menu and select About This Mac to check your version.

553 

5542. **Update macOS** if you're on an older version. The binary uses load commands that older macOS versions don't support.

555 

5563. **Try Homebrew** as an alternative install method:

557 ```bash theme={null}

558 brew install --cask claude-code

559 ```

560 

561### Windows installation issues: errors in WSL

562 

563You might encounter the following issues in WSL:

564 

565**OS/platform detection issues**: if you receive an error during installation, WSL may be using Windows `npm`. Try:

566 

567* Run `npm config set os linux` before installation

568* Install with `npm install -g @anthropic-ai/claude-code --force --no-os-check`. Do not use `sudo`.

569 

570**Node not found errors**: if you see `exec: node: not found` when running `claude`, your WSL environment may be using a Windows installation of Node.js. You can confirm this with `which npm` and `which node`, which should point to Linux paths starting with `/usr/` rather than `/mnt/c/`. To fix this, try installing Node via your Linux distribution's package manager or via [`nvm`](https://github.com/nvm-sh/nvm).

571 

572**nvm version conflicts**: if you have nvm installed in both WSL and Windows, you may experience version conflicts when switching Node versions in WSL. This happens because WSL imports the Windows PATH by default, causing Windows nvm/npm to take priority over the WSL installation.

573 

574You can identify this issue by:

575 

576* Running `which npm` and `which node` - if they point to Windows paths (starting with `/mnt/c/`), Windows versions are being used

577* Experiencing broken functionality after switching Node versions with nvm in WSL

578 

579To resolve this issue, fix your Linux PATH to ensure the Linux node/npm versions take priority:

580 

581**Primary solution: Ensure nvm is properly loaded in your shell**

582 

583The most common cause is that nvm isn't loaded in non-interactive shells. Add the following to your shell configuration file (`~/.bashrc`, `~/.zshrc`, etc.):

584 

585```bash theme={null}

586# Load nvm if it exists

587export NVM_DIR="$HOME/.nvm"

588[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

589[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

590```

591 

592Or run directly in your current session:

593 

594```bash theme={null}

595source ~/.nvm/nvm.sh

596```

597 

598**Alternative: Adjust PATH order**

599 

600If nvm is properly loaded but Windows paths still take priority, you can explicitly prepend your Linux paths to PATH in your shell configuration:

601 

602```bash theme={null}

603export PATH="$HOME/.nvm/versions/node/$(node -v)/bin:$PATH"

604```

605 

606<Warning>

607 Avoid disabling Windows PATH importing via `appendWindowsPath = false` as this breaks the ability to call Windows executables from WSL. Similarly, avoid uninstalling Node.js from Windows if you use it for Windows development.

608</Warning>

609 

610### WSL2 sandbox setup

611 

612[Sandboxing](/en/sandboxing) is supported on WSL2 but requires installing additional packages. If you see an error about missing `bubblewrap` or `socat` when running `/sandbox`, install the dependencies:

613 

614<Tabs>

615 <Tab title="Ubuntu/Debian">

616 ```bash theme={null}

617 sudo apt-get install bubblewrap socat

618 ```

619 </Tab>

620 

621 <Tab title="Fedora">

622 ```bash theme={null}

623 sudo dnf install bubblewrap socat

624 ```

625 </Tab>

626</Tabs>

627 

628WSL1 does not support sandboxing. If you see "Sandboxing requires WSL2", you need to upgrade to WSL2 or run Claude Code without sandboxing.

629 

630Sandboxed commands cannot launch Windows binaries such as `cmd.exe`, `powershell.exe`, or executables under `/mnt/c/`. WSL hands these off to the Windows host over a Unix socket, which the sandbox blocks. If a command needs to invoke a Windows binary, add it to [`excludedCommands`](/en/settings#sandbox-settings) so it runs outside the sandbox.

631 

632### Permission errors during installation

633 

634If the native installer fails with permission errors, the target directory may not be writable. See [Check directory permissions](#check-directory-permissions).

635 

636If you previously installed with npm and are hitting npm-specific permission errors, switch to the native installer:

637 

638```bash theme={null}

639curl -fsSL https://claude.ai/install.sh | bash

640```

641 

642### Native binary not found after npm install

643 

644The `@anthropic-ai/claude-code` npm package pulls in the native binary through a per-platform optional dependency such as `@anthropic-ai/claude-code-darwin-arm64`. If running `claude` after install prints `Could not find native binary package "@anthropic-ai/claude-code-<platform>"`, check the following causes:

645 

646* **Optional dependencies are disabled.** Remove `--omit=optional` from your npm install command, `--no-optional` from pnpm, or `--ignore-optional` from yarn, and check that `.npmrc` does not set `optional=false`. Then reinstall. The native binary is delivered only as an optional dependency, so there is no JavaScript fallback if it is skipped.

647* **Unsupported platform.** Prebuilt binaries are published for `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64`, and `win32-arm64`. Claude Code does not ship a binary for other platforms; see the [system requirements](/en/setup#system-requirements).

648* **Corporate npm mirror is missing the platform packages.** Ensure your registry mirrors all eight `@anthropic-ai/claude-code-*` platform packages in addition to the meta package.

649 

650Installing with `--ignore-scripts` does not trigger this error. The postinstall step that links the binary into place is skipped, so Claude Code falls back to a wrapper that locates and spawns the platform binary on each launch. This works but starts more slowly; reinstall with scripts enabled for direct execution.

651 

652## Permissions and authentication

653 

654These sections address login failures, token issues, and permission prompt behavior.

655 

656### Repeated permission prompts

657 

658If you find yourself repeatedly approving the same commands, you can allow specific tools

659to run without approval using the `/permissions` command. See [Permissions docs](/en/permissions#manage-permissions).

660 

661### Authentication issues

662 

663If you're experiencing authentication problems:

664 

6651. Run `/logout` to sign out completely

6662. Close Claude Code

6673. Restart with `claude` and complete the authentication process again

668 

669If the browser doesn't open automatically during login, press `c` to copy the OAuth URL to your clipboard, then paste it into your browser manually.

670 

671### OAuth error: Invalid code

672 

673If you see `OAuth error: Invalid code. Please make sure the full code was copied`, the login code expired or was truncated during copy-paste.

674 

675**Solutions:**

676 

677* Press Enter to retry and complete the login quickly after the browser opens

678* Type `c` to copy the full URL if the browser doesn't open automatically

679* If using a remote/SSH session, the browser may open on the wrong machine. Copy the URL displayed in the terminal and open it in your local browser instead.

680 

681### 403 Forbidden after login

682 

683If you see `API Error: 403 {"error":{"type":"forbidden","message":"Request not allowed"}}` after logging in:

684 

685* **Claude Pro/Max users**: verify your subscription is active at [claude.ai/settings](https://claude.ai/settings)

686* **Console users**: confirm your account has the "Claude Code" or "Developer" role assigned by your admin

687* **Behind a proxy**: corporate proxies can interfere with API requests. See [network configuration](/en/network-config) for proxy setup.

688 

689### Model not found or not accessible

690 

691If you see `There's an issue with the selected model (...). It may not exist or you may not have access to it`, the API rejected the configured model name.

692 

693Common causes:

694 

695* A typo in the model name passed to `--model`

696* A stale or deprecated model ID saved in your settings

697* An API key without access to that model on your current usage tier

698 

699Check where the model is set, in [priority order](/en/model-config#setting-your-model):

700 

701* The `--model` flag

702* The `ANTHROPIC_MODEL` environment variable

703* The `model` field in `.claude/settings.local.json`

704* The `model` field in your project's `.claude/settings.json`

705* The `model` field in `~/.claude/settings.json`

706 

707To clear a stale value, remove the `model` field from your settings or unset `ANTHROPIC_MODEL`, and Claude Code will fall back to the default model for your account.

708 

709To browse models available to your account, start `claude` interactively and run `/model` to open the picker. For Vertex AI deployments, see [the Vertex AI troubleshooting section](/en/google-vertex-ai#troubleshooting).

710 

711### This organization has been disabled with an active subscription

712 

713If you see `API Error: 400 ... "This organization has been disabled"` despite having an active Claude subscription, an `ANTHROPIC_API_KEY` environment variable is overriding your subscription. This commonly happens when an old API key from a previous employer or project is still set in your shell profile.

714 

715When `ANTHROPIC_API_KEY` is present and you have approved it, Claude Code uses that key instead of your subscription's OAuth credentials. In non-interactive mode (`-p`), the key is always used when present. See [authentication precedence](/en/authentication#authentication-precedence) for the full resolution order.

716 

717To use your subscription instead, unset the environment variable and remove it from your shell profile:

718 

719```bash theme={null}

720unset ANTHROPIC_API_KEY

721claude

722```

723 

724Check `~/.zshrc`, `~/.bashrc`, or `~/.profile` for `export ANTHROPIC_API_KEY=...` lines and remove them to make the change permanent. Run `/status` inside Claude Code to confirm which authentication method is active.

725 

726### OAuth login fails in WSL2

727 

728Browser-based login in WSL2 may fail if WSL can't open your Windows browser. Set the `BROWSER` environment variable:

729 

730```bash theme={null}

731export BROWSER="/mnt/c/Program Files/Google/Chrome/Application/chrome.exe"

732claude

733```

734 

735Or copy the URL manually: when the login prompt appears, press `c` to copy the OAuth URL, then paste it into your Windows browser.

736 

737### Not logged in or token expired

738 

739If Claude Code prompts you to log in again after a session, your OAuth token may have expired.

740 

741Run `/login` to re-authenticate. If this happens frequently, check that your system clock is accurate, as token validation depends on correct timestamps.

742 

743On macOS, login can also fail when the Keychain is locked or its password is out of sync with your account password, which prevents Claude Code from saving credentials. Run `claude doctor` to check Keychain access. To unlock the Keychain manually, run `security unlock-keychain ~/Library/Keychains/login.keychain-db`. If unlocking doesn't help, open Keychain Access, select the `login` keychain, and choose Edit > Change Password for Keychain "login" to resync it with your account password.

744 

745## Configuration file locations

746 

747Claude Code stores configuration in several locations:

748 

749| File | Purpose |

750| :---------------------------- | :----------------------------------------------------------------------------------------------------- |

751| `~/.claude/settings.json` | User settings (permissions, hooks, model overrides) |

752| `.claude/settings.json` | Project settings (checked into source control) |

753| `.claude/settings.local.json` | Local project settings (not committed) |

754| `~/.claude.json` | Global state (theme, OAuth, MCP servers) |

755| `.mcp.json` | Project MCP servers (checked into source control) |

756| `managed-mcp.json` | [Managed MCP servers](/en/mcp#managed-mcp-configuration) |

757| Managed settings | [Managed settings](/en/settings#settings-files) (server-managed, MDM/OS-level policies, or file-based) |

758 

759On Windows, `~` refers to your user home directory, such as `C:\Users\YourName`.

760 

761For details on configuring these files, see [Settings](/en/settings) and [MCP](/en/mcp).

762 

763### Resetting configuration

764 

765To reset Claude Code to default settings, you can remove the configuration files:

766 

767```bash theme={null}

768# Reset all user settings and state

769rm ~/.claude.json

770rm -rf ~/.claude/

771 

772# Reset project-specific settings

773rm -rf .claude/

774rm .mcp.json

775```

776 

777<Warning>

778 This will remove all your settings, MCP server configurations, and session history.

779</Warning>

780 23 

781## Performance and stability24## Performance and stability

782 25 


7902. Close and restart Claude Code between major tasks332. Close and restart Claude Code between major tasks

7913. Consider adding large build directories to your `.gitignore` file343. Consider adding large build directories to your `.gitignore` file

792 35 

793If memory usage stays high after these steps, run `/heapdump` to write a JavaScript heap snapshot and a memory breakdown to `~/Desktop`. The breakdown shows resident set size, JS heap, array buffers, and unaccounted native memory, which helps identify whether the growth is in JavaScript objects or in native code. Open the `.heapsnapshot` file in Chrome DevTools under Memory → Load to inspect retainers. Attach both files when reporting a memory issue on [GitHub](https://github.com/anthropics/claude-code/issues).36If memory usage stays high after these steps, run `/heapdump` to write a JavaScript heap snapshot and a memory breakdown to `~/Desktop`. On Linux without a Desktop folder, the files are written to your home directory.

37 

38The breakdown shows resident set size, JS heap, array buffers, and unaccounted native memory, which helps identify whether the growth is in JavaScript objects or in native code. To inspect retainers, open the `.heapsnapshot` file in Chrome DevTools under Memory → Load. Attach both files when reporting a memory issue on [GitHub](https://github.com/anthropics/claude-code/issues).

794 39 

795### Auto-compaction stops with a thrashing error40### Auto-compaction stops with a thrashing error

796 41 


8101. Press Ctrl+C to attempt to cancel the current operation551. Press Ctrl+C to attempt to cancel the current operation

8112. If unresponsive, you may need to close the terminal and restart562. If unresponsive, you may need to close the terminal and restart

812 57 

58Restarting doesn't lose your conversation. Run `claude --resume` in the same directory to pick the session back up.

59 

813### Search and discovery issues60### Search and discovery issues

814 61 

815If Search tool, `@file` mentions, custom agents, and custom skills aren't working, install system `ripgrep`:62If the Search tool, `@file` mentions, custom agents, or custom skills aren't finding files, the bundled `ripgrep` binary may not run on your system. Install your platform's `ripgrep` package and tell Claude Code to use it instead:

816 63 

817```bash theme={null}64<Tabs>

818# macOS (Homebrew) 65 <Tab title="macOS">

819brew install ripgrep66 ```bash theme={null}

67 brew install ripgrep

68 ```

69 </Tab>

820 70 

821# Windows (winget)71 <Tab title="Ubuntu/Debian">

822winget install BurntSushi.ripgrep.MSVC72 ```bash theme={null}

73 sudo apt install ripgrep

74 ```

75 </Tab>

823 76 

824# Ubuntu/Debian77 <Tab title="Alpine">

825sudo apt install ripgrep78 ```bash theme={null}

79 apk add ripgrep

80 ```

81 </Tab>

826 82 

827# Alpine Linux83 <Tab title="Arch">

828apk add ripgrep84 ```bash theme={null}

85 pacman -S ripgrep

86 ```

87 </Tab>

829 88 

830# Arch Linux89 <Tab title="Windows">

831pacman -S ripgrep90 ```powershell theme={null}

832```91 winget install BurntSushi.ripgrep.MSVC

92 ```

93 </Tab>

94</Tabs>

833 95 

834Then set `USE_BUILTIN_RIPGREP=0` in your [environment](/en/env-vars).96Then set `USE_BUILTIN_RIPGREP=0` in your [environment](/en/env-vars).

835 97 


849 111 

8503. **Use native Windows instead**: consider running Claude Code natively on Windows instead of through WSL, for better file system performance.1123. **Use native Windows instead**: consider running Claude Code natively on Windows instead of through WSL, for better file system performance.

851 113 

852## IDE integration issues

853 

854If Claude Code does not connect to your IDE or behaves unexpectedly within an IDE terminal, try the solutions below.

855 

856### JetBrains IDE not detected on WSL2

857 

858If you're using Claude Code on WSL2 with JetBrains IDEs and getting "No available IDEs detected" errors, this is likely due to WSL2's networking configuration or Windows Firewall blocking the connection.

859 

860#### WSL2 networking modes

861 

862WSL2 uses NAT networking by default, which can prevent IDE detection. You have two options:

863 

864**Option 1: Configure Windows Firewall** (recommended)

865 

8661. Find your WSL2 IP address:

867 ```bash theme={null}

868 wsl hostname -I

869 # Example output: 172.21.123.45

870 ```

871 

8722. Open PowerShell as Administrator and create a firewall rule:

873 ```powershell theme={null}

874 New-NetFirewallRule -DisplayName "Allow WSL2 Internal Traffic" -Direction Inbound -Protocol TCP -Action Allow -RemoteAddress 172.21.0.0/16 -LocalAddress 172.21.0.0/16

875 ```

876 Adjust the IP range based on your WSL2 subnet from step 1.

877 

8783. Restart both your IDE and Claude Code

879 

880**Option 2: Switch to mirrored networking**

881 

882Add to `.wslconfig` in your Windows user directory:

883 

884```ini theme={null}

885[wsl2]

886networkingMode=mirrored

887```

888 

889Then restart WSL with `wsl --shutdown` from PowerShell.

890 

891<Note>

892 These networking issues only affect WSL2. WSL1 uses the host's network directly and doesn't require these configurations.

893</Note>

894 

895For additional JetBrains configuration tips, see the [JetBrains IDE guide](/en/jetbrains#plugin-settings).

896 

897### Report Windows IDE integration issues

898 

899If you're experiencing IDE integration problems on Windows, [create an issue](https://github.com/anthropics/claude-code/issues) with the following information:

900 

901* Environment type: native Windows (Git Bash) or WSL1/WSL2

902* WSL networking mode, if applicable: NAT or mirrored

903* IDE name and version

904* Claude Code extension/plugin version

905* Shell type: Bash, Zsh, PowerShell, etc.

906 

907### Escape key not working in JetBrains IDE terminals

908 

909If you're using Claude Code in JetBrains terminals and the `Esc` key doesn't interrupt the agent as expected, this is likely due to a keybinding clash with JetBrains' default shortcuts.

910 

911To fix this issue:

912 

9131. Go to Settings → Tools → Terminal

9142. Either:

915 * Uncheck "Move focus to the editor with Escape", or

916 * Click "Configure terminal keybindings" and delete the "Switch focus to Editor" shortcut

9173. Apply the changes

918 

919This allows the `Esc` key to properly interrupt Claude Code operations.

920 

921## Markdown formatting issues

922 

923Claude Code sometimes generates markdown files with missing language tags on code fences, which can affect syntax highlighting and readability in GitHub, editors, and documentation tools.

924 

925### Missing language tags in code blocks

926 

927If you notice code blocks like this in generated markdown:

928 

929````markdown theme={null}

930```

931function example() {

932 return "hello";

933}

934```

935````

936 

937Instead of properly tagged blocks like:

938 

939````markdown theme={null}

940```javascript

941function example() {

942 return "hello";

943}

944```

945````

946 

947**Solutions:**

948 

9491. **Ask Claude to add language tags**: request "Add appropriate language tags to all code blocks in this markdown file."

950 

9512. **Use post-processing hooks**: set up automatic formatting hooks to detect and add missing language tags. See [Auto-format code after edits](/en/hooks-guide#auto-format-code-after-edits) for an example of a PostToolUse formatting hook.

952 

9533. **Manual verification**: after generating markdown files, review them for proper code block formatting and request corrections if needed.

954 

955### Inconsistent spacing and formatting

956 

957If generated markdown has excessive blank lines or inconsistent spacing:

958 

959**Solutions:**

960 

9611. **Request formatting corrections**: ask Claude to "Fix spacing and formatting issues in this markdown file."

962 

9632. **Use formatting tools**: set up hooks to run markdown formatters like `prettier` or custom formatting scripts on generated markdown files.

964 

9653. **Specify formatting preferences**: include formatting requirements in your prompts or project [memory](/en/memory) files.

966 

967### Reduce markdown formatting issues

968 

969To minimize formatting issues:

970 

971* **Be explicit in requests**: ask for "properly formatted markdown with language-tagged code blocks"

972* **Use project conventions**: document your preferred markdown style in [`CLAUDE.md`](/en/memory)

973* **Set up validation hooks**: use post-processing hooks to automatically verify and fix common formatting issues

974 

975## Get more help114## Get more help

976 115 

977If you're experiencing issues not covered here:116If you're experiencing issues not covered here:

978 117 

9791. See the [Error reference](/en/errors) for `API Error: 5xx`, `529 Overloaded`, `429`, and request validation errors that appear during a session1181. Run `/doctor` to check installation health, settings validity, MCP configuration, and context usage in one pass

9802. Use the `/feedback` command within Claude Code to report problems directly to Anthropic1192. Use the `/feedback` command within Claude Code to report problems directly to Anthropic

9813. Check the [GitHub repository](https://github.com/anthropics/claude-code) for known issues1203. Check the [GitHub repository](https://github.com/anthropics/claude-code) for known issues

9824. Run `/doctor` to diagnose issues. It checks:1214. Ask Claude directly about its capabilities and features. Claude has built-in access to its documentation.

983 * Installation type, version, and search functionality

984 * Auto-update status and available versions

985 * Invalid settings files (malformed JSON, incorrect types)

986 * MCP server configuration errors, including the same server name defined in multiple scopes with different endpoints

987 * Keybinding configuration problems

988 * Context usage warnings (large CLAUDE.md files, high MCP token usage, unreachable permission rules)

989 * Plugin and agent loading errors

9905. Ask Claude directly about its capabilities and features - Claude has built-in access to its documentation

ultrareview.md +24 −1

Details

54| Max | 3 free runs through May 5, 2026 | billed as [extra usage](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |54| Max | 3 free runs through May 5, 2026 | billed as [extra usage](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

55| Team and Enterprise | none | billed as [extra usage](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |55| Team and Enterprise | none | billed as [extra usage](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

56 56 

57Pro and Max subscribers receive three free ultrareview runs to try the feature. These three runs are a one-time allotment per account, do not refresh, and expire on May 5, 2026. After you use all three, or after the free run period ends, each review is billed to extra usage and typically costs \$5 to \$20 depending on the size of the change.57Pro and Max subscribers receive three free ultrareview runs to try the feature. These three runs are a one-time allotment per account, do not refresh, and expire on May 5, 2026. After you use all three, or after the free run period ends, each review is billed to extra usage and typically costs \$5 to \$20 depending on the size of the change. A run counts once the remote session starts, so a review that you stop early or that fails to complete still uses a free run. For a paid review, extra usage is billed only for the portion that ran.

58 58 

59Because ultrareview always bills as extra usage outside the free runs, your account or organization must have extra usage enabled before you can launch a paid review. If extra usage is not enabled, Claude Code blocks the launch and links you to the billing settings where you can turn it on. You can also run `/extra-usage` to check or change your current setting.59Because ultrareview always bills as extra usage outside the free runs, your account or organization must have extra usage enabled before you can launch a paid review. If extra usage is not enabled, Claude Code blocks the launch and links you to the billing settings where you can turn it on. You can also run `/extra-usage` to check or change your current setting.

60 60 


64 64 

65Use `/tasks` to see running and completed reviews, open the detail view for a review, or stop a review that is in progress. Stopping a review archives the cloud session, and partial findings are not returned. When the review finishes, the verified findings appear as a notification in your session. Each finding includes the file location and an explanation of the issue so you can ask Claude to fix it directly.65Use `/tasks` to see running and completed reviews, open the detail view for a review, or stop a review that is in progress. Stopping a review archives the cloud session, and partial findings are not returned. When the review finishes, the verified findings appear as a notification in your session. Each finding includes the file location and an explanation of the issue so you can ask Claude to fix it directly.

66 66 

67## Run ultrareview non-interactively

68 

69Use the `claude ultrareview` subcommand to start an ultrareview from CI or a script without an interactive session. The subcommand launches the same review as `/ultrareview`, blocks until the remote review finishes, prints the findings to stdout, and exits with code 0 on success or 1 on failure.

70 

71```bash theme={null}

72claude ultrareview

73claude ultrareview 1234

74claude ultrareview origin/main

75```

76 

77Without arguments, the subcommand reviews the diff between your current branch and the default branch. Pass a PR number to review a pull request, or pass a base branch to review the diff against that branch instead. Invoking the subcommand counts as consent for the billing and terms prompt that the interactive command shows.

78 

79Progress messages and the live session URL go to stderr so stdout stays parseable. Use these flags to control the output and timeout:

80 

81| Flag | Description |

82| --------------------- | ------------------------------------------------------------------- |

83| `--json` | Print the raw `bugs.json` payload instead of the formatted findings |

84| `--timeout <minutes>` | Maximum minutes to wait for the review to finish. Defaults to 30 |

85 

86Running `claude ultrareview` requires the same authentication and extra usage configuration as `/ultrareview`. The subcommand exits with code 0 when the review completes with or without findings, code 1 when the review fails to launch, the remote session errors, or the timeout elapses, and code 130 when interrupted with Ctrl-C. The remote review keeps running if you interrupt the subcommand; follow the session URL printed to stderr to watch it in the browser.

87 

88For automatic reviews on GitHub pull requests, [Code Review](/en/code-review) integrates with your repository directly and posts findings as inline PR comments without a CLI step.

89 

67## How ultrareview compares to /review90## How ultrareview compares to /review

68 91 

69Both commands review code, but they target different stages of your workflow.92Both commands review code, but they target different stages of your workflow.

Details

87 87 

88## Change the dictation language88## Change the dictation language

89 89 

90Voice dictation uses the same [`language` setting](/en/settings) that controls Claude's response language. If that setting is empty, dictation defaults to English.90Voice dictation uses the same [`language` setting](/en/settings) that controls Claude's response language. If that setting is empty, dictation defaults to English. In the VS Code extension, if `language` is empty, dictation uses VS Code's `accessibility.voice.speechLanguage` setting before defaulting to English.

91 91 

92<Accordion title="Supported dictation languages">92<Accordion title="Supported dictation languages">

93 | Language | Code |93 | Language | Code |

whats-new.md +16 −0

Details

8 8 

9The weekly dev digest highlights the features most likely to change how you work. Each entry includes runnable code, a short demo, and a link to the full docs. For every bug fix and minor improvement, see the [changelog](/en/changelog).9The weekly dev digest highlights the features most likely to change how you work. Each entry includes runnable code, a short demo, and a link to the full docs. For every bug fix and minor improvement, see the [changelog](/en/changelog).

10 10 

11<Update label="Week 17" description="April 20–24, 2026" tags={["v2.1.114–v2.1.119"]}>

12 **`/ultrareview`** opens as a public research preview: a fleet of bug-hunting agents runs in the cloud and findings land back in your CLI or Desktop automatically.

13 

14 Also this week: **session recap** shows you what happened while a terminal was unfocused; **custom themes** let you build and ship color palettes from `/theme` or a plugin; and **Claude Code on the web** gets a redesign with a new sessions sidebar and drag-and-drop layout.

15 

16 [Read the Week 17 digest →](/en/whats-new/2026-w17)

17</Update>

18 

19<Update label="Week 16" description="April 13–17, 2026" tags={["v2.1.105–v2.1.113"]}>

20 **Claude Opus 4.7** lands as the new default on Max and Team Premium, with a new `xhigh` effort level that's the recommended setting for most coding work and an interactive `/effort` slider to dial it in.

21 

22 Also this week: **Routines** on Claude Code on the web fire templated cloud agents from a schedule, GitHub event, or API call; `/ultrareview` runs parallel multi-agent code review in the cloud; `/usage` shows what's driving your limits; and the CLI moves to native binaries.

23 

24 [Read the Week 16 digest →](/en/whats-new/2026-w16)

25</Update>

26 

11<Update label="Week 15" description="April 6–10, 2026" tags={["v2.1.92–v2.1.101"]}>27<Update label="Week 15" description="April 6–10, 2026" tags={["v2.1.92–v2.1.101"]}>

12 **Ultraplan** enters early preview: draft a plan in the cloud from your CLI, review and comment on it in a web editor, then run it remotely or pull it back local. The first run now auto-creates a cloud environment for you.28 **Ultraplan** enters early preview: draft a plan in the cloud from your CLI, review and comment on it in a web editor, then run it remotely or pull it back local. The first run now auto-creates a cloud environment for you.

13 29 

whats-new/2026-w16.md +135 −0 added

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Week 16 · April 13–17, 2026

6 

7> Claude Opus 4.7 with the new xhigh effort level, Routines on Claude Code on the web, /ultrareview cloud code review, a /usage breakdown that shows what's driving your limits, and native binaries replacing the bundled JavaScript.

8 

9<div className="digest-meta">

10 <span>Releases <a href="/docs/en/changelog#2-1-105">v2.1.105 → v2.1.113</a></span>

11 <span>5 features · April 13–17</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">Claude Opus 4.7</span>

17 <span className="digest-feature-pill">new model</span>

18 </div>

19 

20 <p className="digest-feature-lede">Anthropic's strongest coding model yet is now the default on Max and Team Premium, and available everywhere else from <code>/model</code>. It adds a new <code>xhigh</code> effort level that sits between <code>high</code> and <code>max</code>: best results for most coding and agentic tasks, applied as the default the first time you switch to 4.7. <code>/effort</code> now opens an interactive arrow-key slider when you call it without arguments, so you can dial intelligence against speed without remembering the level names.</p>

21 

22 <p className="digest-feature-try">Switch model and effort in one go:</p>

23 

24 ```text Claude Code theme={null}

25 > /model opus

26 > /effort xhigh

27 ```

28 

29 <a className="digest-feature-link" href="/docs/en/model-config#adjust-effort-level">Model config: effort levels</a>

30</div>

31 

32<div className="digest-feature">

33 <div className="digest-feature-header">

34 <span className="digest-feature-title">Routines</span>

35 <span className="digest-feature-pill">web</span>

36 </div>

37 

38 <p className="digest-feature-lede">Templated cloud agents that fire on a schedule, a GitHub event, or an API call. Define a routine once on Claude Code on the web with a prompt, the repos it can touch, and the connectors it needs, then let PR-opened, release-published, or your own webhook trigger it without your machine running. The trigger picker now covers GitHub events with optional filters and gives every routine a tokened <code>/fire</code> endpoint for external systems.</p>

39 

40 <Frame>

41 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/routines.png?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=2ba818ea9280c549511cb48b9b4d1dc5" alt="Creating a routine on Claude Code on the web with schedule, GitHub event, and API triggers" width="1440" height="810" data-path="images/whats-new/routines.png" />

42 </Frame>

43 

44 <p className="digest-feature-try">Create one from the web UI, or scaffold from your terminal:</p>

45 

46 ```text Claude Code theme={null}

47 > /schedule daily PR review at 9am

48 ```

49 

50 <a className="digest-feature-link" href="/docs/en/routines">Routines guide</a>

51</div>

52 

53<div className="digest-feature">

54 <div className="digest-feature-header">

55 <span className="digest-feature-title">/usage breakdown</span>

56 <span className="digest-feature-pill">CLI</span>

57 </div>

58 

59 <p className="digest-feature-lede">More visibility into where your Claude Code usage goes. <code>/usage</code> now shows what's driving your limits: parallel sessions, subagents, cache misses, and long context, each with a percentage of your last 24 hours and a tip to optimize it. Press <code>d</code> or <code>w</code> to switch between day and week views.</p>

60 

61 <Frame>

62 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/usage.png?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=792a4b43cbef4e2931974831f076bca6" alt="The /usage command showing a breakdown of what's contributing to limits usage" width="1204" height="1182" data-path="images/whats-new/usage.png" />

63 </Frame>

64 

65 <p className="digest-feature-try">Run it any time:</p>

66 

67 ```text Claude Code theme={null}

68 > /usage

69 ```

70 

71 <a className="digest-feature-link" href="/docs/en/commands">Commands reference</a>

72</div>

73 

74<div className="digest-feature">

75 <div className="digest-feature-header">

76 <span className="digest-feature-title">/ultrareview</span>

77 <span className="digest-feature-pill">v2.1.111</span>

78 </div>

79 

80 <p className="digest-feature-lede">Comprehensive code review in the cloud. Ultrareview fans your branch out across parallel reviewers on Claude Code on the web, runs an adversarial critique pass over each finding, and returns a verified findings report while your terminal stays free. Call it with no arguments to review your current branch, or pass a PR number to fetch and review that PR. The launch dialog now shows a diffstat so you know what's going up before you confirm.</p>

81 

82 <p className="digest-feature-try">Review the branch you're on:</p>

83 

84 ```text Claude Code theme={null}

85 > /ultrareview

86 ```

87 

88 <p className="digest-feature-try">Or point it at a PR:</p>

89 

90 ```text Claude Code theme={null}

91 > /ultrareview 1234

92 ```

93 

94 <a className="digest-feature-link" href="/docs/en/ultrareview">Ultrareview guide</a>

95</div>

96 

97<div className="digest-feature">

98 <div className="digest-feature-header">

99 <span className="digest-feature-title">Native binaries</span>

100 <span className="digest-feature-pill">v2.1.113</span>

101 </div>

102 

103 <p className="digest-feature-lede">The <code>claude</code> CLI now spawns a native per-platform binary instead of bundled JavaScript, so the installed <code>claude</code> command no longer invokes Node. The npm package pulls the right binary in through an optional dependency such as <code>@anthropic-ai/claude-code-darwin-arm64</code>, so your install command doesn't change. The standalone installer already shipped this binary; npm now matches it.</p>

104 

105 <p className="digest-feature-try">Upgrade and check what you're running:</p>

106 

107 ```bash theme={null}

108 claude update

109 claude --version

110 ```

111 

112 <a className="digest-feature-link" href="/docs/en/setup">Setup guide</a>

113</div>

114 

115<div className="digest-wins">

116 <p className="digest-wins-title">Other wins</p>

117 

118 <div className="digest-wins-grid">

119 <div><a href="/docs/en/permission-modes#eliminate-prompts-with-auto-mode">Auto mode</a> is now available for Max subscribers on Opus 4.7, and the <code>--enable-auto-mode</code> flag is no longer required</div>

120 <div><a href="/docs/en/interactive-mode#session-recap">Session recap</a> shows a one-line summary of what happened while you were away; run <code>/recap</code> on demand or turn it off from <code>/config</code></div>

121 <div>New <code>/tui</code> command and <code>tui</code> setting switch between classic and flicker-free rendering mid-conversation; focus view moved from <code>Ctrl+O</code> to its own <code>/focus</code> command</div>

122 <div>Push notification tool: with <a href="/docs/en/remote-control">Remote Control</a> connected and "Push when Claude decides" enabled, Claude can ping your phone when it needs you</div>

123 <div>Plugins can ship background watchers via a top-level <code>monitors</code> manifest key that auto-arms at session start or on skill invoke</div>

124 <div>"Auto (match terminal)" option in <code>/theme</code> follows your terminal's dark/light mode</div>

125 <div><code>/fewer-permission-prompts</code> scans your transcripts for common read-only Bash and MCP calls and proposes an allowlist for <code>.claude/settings.json</code></div>

126 <div>Claude can now discover and run built-in commands like <code>/init</code>, <code>/review</code>, and <code>/security-review</code> via the Skill tool</div>

127 <div><code>PreCompact</code> hooks can block compaction by exiting with code 2 or returning <code>{"{"}"decision":"block"{"}"}</code></div>

128 <div><code>ENABLE\_PROMPT\_CACHING\_1H</code> opts API key, Bedrock, Vertex, and Foundry users into 1-hour prompt cache TTL</div>

129 <div><code>sandbox.network.deniedDomains</code> setting carves specific domains out of a broader <code>allowedDomains</code> wildcard</div>

130 <div><code>/undo</code> is now an alias for <code>/rewind</code>, and <code>/proactive</code> is an alias for <code>/loop</code></div>

131 <div>Hardened Bash permissions: deny rules now match through <code>env</code>/<code>sudo</code>/<code>watch</code> wrappers, and <code>Bash(find:\*)</code> allow rules no longer auto-approve <code>-exec</code> or <code>-delete</code></div>

132 </div>

133</div>

134 

135[Full changelog for v2.1.105–v2.1.113 →](/en/changelog#2-1-105)

whats-new/2026-w17.md +113 −0 added

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Week 17 · April 20–24, 2026

6 

7> /ultrareview opens as a research preview, automatic session recaps when you return to a terminal, custom color themes you can build and ship in plugins, and a redesigned Claude Code on the web.

8 

9<div className="digest-meta">

10 <span>Releases <a href="/docs/en/changelog#2-1-114">v2.1.114 → v2.1.119</a></span>

11 <span>4 features · April 20–24</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">/ultrareview</span>

17 <span className="digest-feature-pill">research preview</span>

18 </div>

19 

20 <p className="digest-feature-lede">Now in public research preview. Ultrareview runs a fleet of bug-hunting agents in the cloud against your branch or a PR, and findings land back in the CLI or Desktop automatically. Run it before merging critical changes such as auth or data migrations.</p>

21 

22 <Frame>

23 <video autoPlay muted loop playsInline className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/ultrareview.mp4?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=0fb1271365d38f414ad155aeb8edb08e" data-path="images/whats-new/ultrareview.mp4" />

24 </Frame>

25 

26 <p className="digest-feature-try">Review the branch you're on:</p>

27 

28 ```text Claude Code theme={null}

29 > /ultrareview

30 ```

31 

32 <p className="digest-feature-try">Or point it at a PR:</p>

33 

34 ```text Claude Code theme={null}

35 > /ultrareview 1234

36 ```

37 

38 <a className="digest-feature-link" href="/docs/en/ultrareview">Ultrareview guide</a>

39</div>

40 

41<div className="digest-feature">

42 <div className="digest-feature-header">

43 <span className="digest-feature-title">Session recap</span>

44 <span className="digest-feature-pill">CLI</span>

45 </div>

46 

47 <p className="digest-feature-lede">Switch focus away from a session and come back to a one-line recap of what happened while you were gone. Helpful for staying in flow while running several Claude sessions at once.</p>

48 

49 <Frame>

50 <video autoPlay muted loop playsInline className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/session-recap.mp4?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=0a8db1470bd0161a47efeb2f322af76f" data-path="images/whats-new/session-recap.mp4" />

51 </Frame>

52 

53 <p className="digest-feature-try">Generate a recap on demand, or turn the automatic one off from <code>/config</code>:</p>

54 

55 ```text Claude Code theme={null}

56 > /recap

57 ```

58 

59 <a className="digest-feature-link" href="/docs/en/interactive-mode#session-recap">Interactive mode: session recap</a>

60</div>

61 

62<div className="digest-feature">

63 <div className="digest-feature-header">

64 <span className="digest-feature-title">Custom themes</span>

65 <span className="digest-feature-pill">v2.1.118</span>

66 </div>

67 

68 <p className="digest-feature-lede">Build and switch between named color themes from <code>/theme</code>, or hand-edit JSON files in <code>\~/.claude/themes/</code>. Each theme picks a base preset and overrides only the tokens you care about. Plugins can ship themes too.</p>

69 

70 <p className="digest-feature-try">Open the theme picker and create a new one:</p>

71 

72 ```text Claude Code theme={null}

73 > /theme

74 ```

75 

76 <a className="digest-feature-link" href="/docs/en/terminal-config#create-a-custom-theme">Terminal config: create a custom theme</a>

77</div>

78 

79<div className="digest-feature">

80 <div className="digest-feature-header">

81 <span className="digest-feature-title">Claude Code on the web</span>

82 <span className="digest-feature-pill">web</span>

83 </div>

84 

85 <p className="digest-feature-lede">A new look for <a href="https://claude.ai/code">claude.ai/code</a> that matches the redesigned desktop app: sessions sidebar, drag-and-drop layout, and a refreshed routines view. Key parts were rebuilt for quicker responses and a more reliable experience.</p>

86 

87 <Frame>

88 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/web-redesign.jpeg?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=a2aca1b49e295b7337f5779038db8e2c" alt="Claude Code on the web redesign overview: new UI, speed and reliability, work across web, mobile, and CLI" width="1602" height="1610" data-path="images/whats-new/web-redesign.jpeg" />

89 </Frame>

90 

91 <a className="digest-feature-link" href="/docs/en/claude-code-on-the-web">Claude Code on the web</a>

92</div>

93 

94<div className="digest-wins">

95 <p className="digest-wins-title">Other wins</p>

96 

97 <div className="digest-wins-grid">

98 <div><a href="/docs/en/interactive-mode#vim-editor-mode">Vim visual mode</a>: press <code>v</code> for character selection or <code>V</code> for line selection in the prompt input, with operators and visual feedback</div>

99 <div>Hooks can now call MCP tools directly via <a href="/docs/en/hooks#mcp-tool-hook-fields"><code>type: "mcp\_tool"</code></a>, so a hook can hit an already-connected server without spawning a process</div>

100 <div><code>/cost</code> and <code>/stats</code> are merged into <a href="/docs/en/commands"><code>/usage</code></a>; the old names still work as typing shortcuts that open the relevant tab</div>

101 <div><code>/config</code> changes (theme, editor mode, verbose, and similar) now persist to <code>\~/.claude/settings.json</code> and follow the same project/local/policy precedence as other <a href="/docs/en/settings">settings</a></div>

102 <div><a href="/docs/en/sub-agents#fork-the-current-conversation">Forked subagents</a> can be enabled on external builds with <code>CLAUDE\_CODE\_FORK\_SUBAGENT=1</code>: a fork inherits your full conversation context instead of starting fresh</div>

103 <div>Default <a href="/docs/en/model-config#adjust-effort-level">effort level</a> for Pro and Max subscribers on Opus 4.6 and Sonnet 4.6 is now <code>high</code> (was <code>medium</code>)</div>

104 <div>Native macOS and Linux builds replace the <code>Glob</code> and <code>Grep</code> tools with embedded <code>bfs</code> and <code>ugrep</code> available through Bash, for faster searches without a separate tool round-trip</div>

105 <div><code>--from-pr</code> now accepts GitLab merge request, Bitbucket pull request, and GitHub Enterprise PR URLs in addition to github.com</div>

106 <div>Auto mode: include <code>"\$defaults"</code> in <a href="/docs/en/auto-mode-config"><code>autoMode.allow</code>, <code>soft\_deny</code>, or <code>environment</code></a> to add custom rules alongside the built-in list instead of replacing it</div>

107 <div>New <a href="/docs/en/plugin-dependencies#tag-plugin-releases-for-version-resolution"><code>claude plugin tag</code></a> command creates release git tags for plugins with version validation</div>

108 <div>Opus 4.7 sessions now compute against the model's native 1M context window, fixing inflated <code>/context</code> percentages and premature autocompaction</div>

109 <div><code>/resume</code> on large sessions is up to 67% faster and now offers to summarize stale, large sessions before re-reading them</div>

110 </div>

111</div>

112 

113[Full changelog for v2.1.114–v2.1.119 →](/en/changelog#2-1-114)