Claude Code is a CLI tool, use it like one!


Originally published on LinkedIn
I was watching Theo's stream last night and he made a very good point. In the "it's better to be late than early" we are now officially in the late part of leveraging tools like ClaudeCode, OpenCode, etc.
This doesn't mean that your main codebase you are working on should have everything written by some LLM. That's idiotic. What it does mean though is that there are ways to use them which are useful to accelerate what you're doing.
This could be building that little side tool which would save you a couple minutes, but wasn't worth building before.
This could be testing out a new feature that you can now prototype in 3 hours instead of 3 days, and then throw all the code away and write it properly if it was a good idea.
This could even be a quick little bash script that normally you wouldn't bother writing since you haven't written one in 6 months and would have to quickly google a couple things.
With that in mind every time I go look up some info on how to do the "cooler" things with these tools I get a bunch of slop guides for vibe coding, so I have decided to make a series of threads on how someone who does actual work can use them.
CLAUDE CODE | OPENCODENow before we get into it let's quickly cover why I am covering all this from the perspective of Claude Code and not something better like OpenCode.
The reason is simple. I want you to try these things out and with the $20 Claude Code subscription you will get enough usage to play with all these thing each day because Anthropic subsidizes the cost of using these to win market share.
I don't want you worrying about the API costs of testing these, especially given the high spends we've all seen here on X.
If you don't care or your company is covering the API costs then you should be able to do all the things I will cover with OpenCode and more. (Just check out what ThePrimeagen is doing with 99 -- a really cool neovim integration built on top of OpenCode)
WARNING: Despite what many think, CC isn't open source, Anthropic has been pulling some increasingly shitty things lately, and in general they deserve a lot of pushback for all this. If you aren't familiar then check out this video which covers the latest things and gets into some of the issues from before: http://youtu.be/gh6aFBnwQj4
Now that we've covered that, let's jump into it.
Even though you are most likely used to seeing these in the form of a TUI, these are ultimately CLI tools (even Cursor has a CLI tool so they don't leave you hanging). What this means is that you can use them in your command line like anything else.
px aux | grep -i node | claude -p "explain what each likely is" --printps aux gives me all the processes that are running, with grep I filter just for processes which mention node, then I can pipe this straight into claude to help me figure out which is which and have it print it straight out.
Below I have includes the output of both ps aux | grep -i node on it's own and the output when I pipe it into Claude Code. Can you get the same information without having Claude Code process it? Absolutely! Is it much easier to find what I'm looking for from it's output? Almost certainly.
Here's what each process likely is:
**1.
•[kworker/2:4-inode_switch_wbs] ** (PID 142)
- A **kernel worker thread** running on CPU 2. These handle deferred/asynchronous kernel work. The inode_switch_wbs" part indicates it's related to switching writeback (disk write caching) between different backing devices for inodes.
**2.
*fusermount3 ... /run/user/1000/doc'** (PID 1482)
- The **FUSE (Filesystem in Userspace) mount helper**. This specific instance is mounting a
"portal" filesystem at '/run/user/1000/doc' - this is the **DG Document Portal**, part of Flatpak/sandboxed app infrastructure that allows sandboxed apps to access files through a controlled portal interface.
**3.
chrome --type=gpu-process
** (PID 3459)
- **Helium Browser's GPU process**. Helium is a Chromium-based browser. This process handles all GPU-accelerated rendering, compositing, and WebGL. It's using Wayland and your GPU's render node (/dev/dri/renderD128').
**4. 'chrome --type=utility --utility-sub-type=network.mojom.NetworkService ** (PID 3462)
- Helium Browser's **network service process**. Handles all network requests (HTTP, WebSocket, DNS, etc.) in an isolated process for security.
**5. 'chrome --type=utility --utility-sub-type=storage.mojom.StorageService ** (PID 3476)
- Helium Browser's **storage service process**. Manages IndexedDB, localStorage, cache storage, and other persistent browser storage APIs.
**6. 'chrome --type=utility --utility-sub-type=audio.mojom.AudioService ** (PID 3674)
- Helium Browser's
**audio service process**. Handles all audio playback and recording in
an isolated process.
**7. '/proc/self/exe --type=renderer ... obsidian ** (PID 3891)
- **Obsidian note-taking app's renderer process**. Obsidian is an Electron app (Chromium-based). This is the process that actually renders the UI and runs the JavaScript for your notes. The
'--no-sandbox --no-zygote' flags indicate it's running without the usual
Chromium sandboxing.
**8. 'grep -i node ** (PID 5136)
- Your own **grep command** searching for "node" - this appeared in the output because grep matched itself (the classic "grep shows itself" situation).ps aux | grep -i node
root
142
0.0
0.0
[kworker/2:4-inode_switch_wbs]
I
14:27
0:00
root
2724
- 14:27
fusermount3 -o rw, nosuid, nodev, fsname=portal, auto_unmount, subtype=portal /run/user/1000/doc
allison+
3459
4.2
0.7 51172352 250824?
SL
14:29
1:44
/opt/helium-browser-bin/chrome --type=gpu-process
--ozone-platform=wayland - -render-node-
override=/dev/dri/renderD128 --crashpad-handler-pid=3419 --enable-crash-reporter=, Arch
Linux --change-stack-guard-on-fork=enable --gpu-
preferences=UAAAAAAAAAAGAAAAAAAAAAAAAAAAGAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAA
AAAAAABgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAA --shared-files --metrics-shmem-handle=4, i, 730847305780426758, 10196721000641952741, 262144 --field-trial-handle=3,1, 10211741580815698138, 9834960561105053376, 262144 --disable-features=EyeDropper variations-seed-version --trace-process-track-vuid=3190708988185955192
allison+
3462
0.2
0.3 50762340 123208 ?
SL
14:29
0:07
/opt/helium-browser-bin/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --render-node-override=/dev/dri/renderD128 --crashpad-handler-pid=3419 --enable-crash-reporter=,Arch
Linux --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --metrics-shmem-handle=4,1, 4782894218717039497, 3008458366494834809, 524288 --field-trial-handle=3,1,10211741580815698138, 9834960561105053376, 262144 --disable-features=EyeDropper --variations-seed-version --trace-process-track-vuid=3190708989122997041
allison+
3476 0.0 0.1 50718144 65348 2
SL
14:29
0:00
/opt/helium-browser-bin/chrome --type=utility --utility-sub-type=storage.mojom.StorageService --lang=en-US --service-sandbox-type=utility --render-node-override=/dev/dri/renderD128 --crashpad-handler-pid=3419 --enable-crash-reporter=,Arch
Linux --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --metrics-shmem-handle=4,i, 1045610037759254769, 9305319054407010436, 524288 --field-trial-handle=3, i, 10211741580815698138, 9834960561105053376, 262144 --disable-features=EyeDropper --variations-seed-version --trace-process-track-vuid=3190708990060038890
allison+
3674
0.0 0.2 50798424 84860 ?
SL
14:29
0:00
/opt/helium-browser-bin/chrome --type=utility --utility-sub-type=audio.mojom.AudioService -
-Lang=en-US --service-sandbox-type=none --render-node-override=/dev/dri/renderD128 --crashpad-handler-pid=3419 --enable-crash-reporter=, Arch Linux --change-stack-guard-on-fork=enable -- shared-files=v8_context_snapshot_data:100 --metrics-shmem-handle=4,1, 14611343009711087858, 16621507328785103434, 524288 --field-trial-handle=3,1, 10211741580815698138, 9834960561105053376, 262144 --disable-features=EyeDropper --variations-seed-version --trace-process-track-vuid=3190709002241582927
allison+
3891 0.4 0.7 1481639984 240064 ?
SL 14:29
0:10
/proc/self/exe --type=renderer --enable-crash-reporter=b04165cb-c2e6-40d6-84f0-
9687b1d8b4ec, no_channel --user-data-dir=/home/allisonmahmood/.config/obsidian --standard-schemes=app --secure-schemes=app --fetch-schemes=app --streaming-schemes=app --code-cache-schemes=app --app-path=/usr/lib/obsidian/app.asar --no-sandbox --no-zygote - -node-integration-in-worker --ozone-platform=wayland --lang=en-US --num-raster-threads=4 --enable-main-frame-before-activation --renderer-client-id=4 --time-ticks-at-unix-epoch=-1768051641903005 --launch-time-ticks=126711326 - -shared-files=v8_context_snapshot_data:100 --field-trial-handle=3, 1, 18183092579800615065, 11426464162140855701, 262144
--enable-
features=PdfUseShowSaveFilePicker,SharedArrayBuffer --disable-features=ScreenAIOCREnabled, SpareRendererForSitePerProcess --variations-seed-version
allison+
5403
_0.0 0.0 6620
4176 pts/0
S+ 15:10
0:00 grep - i nodeNext time we'll jump into the actual flags claude has in your CLI and useful things we can do with them.
claude \
-p "analyze this crash log, what's the root cause" \
--model claude-sonnet-4-2025-05-14 \
--output-format json \
--max-turns 1 \
--system-prompt "You are a senior SRE. Be blunt. No Pleasantries." \
--allowedTools "" \
--verbose \
< /var/log/app/crash.log