Skip to main content

Track Claude CLI Cost

A quick guide on how to track session cost with a Claude hook. This will both keep a running cost counter below your Claude CLI and persist session costs to ~/.claude/cost/.

Quick GitHub PR Creation

Add the following to your ~/.bashrc or ~/.zshrc:

alias ghpr='git push && gh pr create --fill'

Now just run ghpr after you've committed, and now you have a PR!

Disable npm install scripts

(for security purposes)

  • Globally:
    • run npm config set ignore-scripts true
    • this will populate ~/.npmrc
  • Per repo:
    • create ./.npmrc
    • add ignore-scripts=true into that file

A New SSH Key

To create and authorize a new SSH:

  1. Run ssh-keygen -t ed25519 on the client machine.
  2. Enter an absolute path to your .ssh folder and the name of the id (id_*).
  3. Enter a new passphrase twice.
  4. Upload the *.pub file to whatever service the SSH key is for, or add it to ~/.ssh/authorized_keys on the host machine.
  5. Add the following to the client machine's ~/.ssh/config file (for macOS at least). Be sure to fill in the <fill-me> parts
    Host <choose-a-name>
    HostName <ip-or-domain-here>
    User <username>
    AddKeysToAgent yes
    UseKeychain yes
    IdentitiesOnly yes
    IdentityFile ~/.ssh/<your-non-pub-id-file-name>
  6. Connect with ssh choose-a-name (use the name you entered next to Host in the config file).

Tidy TSC Output

For cleaner tsc (TypeScript compiler) output: pipe its output into my package tidy-tsc:

npm i -g tidy-tsc

npx tsc | tidyt
npx tsc -b | tidyt # etc.

# in one of my packages
npm run compile | tidyt

| tidyt cleans up the tsc output so instead of seeing tons of logs for every single file's errors like this:

src/file.ts:9:18 - error TS2304: Cannot find name 'missingValue'.
9 const value = missingValue;
~~~~~~~~~~~~
src/file.ts:18:15 - error TS7006: Parameter 'char' implicitly has an 'any' type.
18 .map((char, index) => (index % 2 ? char.toUpperCase() : char.toLowerCase()))
~~~~
src/file.ts:18:21 - error TS7006: Parameter 'index' implicitly has an 'any' type.
18 .map((char, index) => (index % 2 ? char.toUpperCase() : char.toLowerCase()))
~~~~~
Found 3 errors.

All you see is this:

Failed files (1):

src/file.ts