Yes, Claude Code can decompile itself. Here's the source code.

Yes, Claude Code can decompile itself. Here's the source code.

Hello fellow blue-teamers and masters of "tradecraft", the AI revolution in software engineering has been called - here's what you should know. Whilst I haven't been active since 1995 (I was 13 and was deported from Hong Kong) it's a small world out there and what follows are notes I recently shared with a red-teamer.

AI alignment is your enemy

All of these San Fran companies have gotten their knickers in a knot about "AI alignment and safety". These security guard rails that wrap the LLM can be bypassed but it's easier to head straight to Grok!

these LLMs are shockily good at deobfuscation, transpilation and structure to structure conversions

I discovered this back around Christmas where I asked an LLM to make me an Haskell audio library by transpiling a rust implementation.

An β€œoh fuck” moment in time
Over the Christmas break I’ve been critically looking at my own software development loop, learning a new programming language and re-learning a language I haven’t professionally used in over seven years. It’s now 2025. Software assistants are now a core staple of my day-to-day life as a staff

I'm not going to bury the lede, so let's dig right into the real reason why you clicked on this post, show you how it's done and what is possible.

but first some backstory

Four days ago Anthropic dig a big announcement which released two things into the world:

a. Claude 3.7 (which slaps)
b. An autonomous coding agent called Claude Code

Anthropic’s new β€˜hybrid reasoning’ AI model is its smartest yet
It’s also starting to publicly test an β€œagentic” coding tool called Claude Code.

Claude Code

The source code for Claude Code is currently "not available". Whilst a GitHub repository has been published, it contains no source code. Claude Code was an unusual announcement to release along side Sonnet 3.7 - I suspect it was/is a marketing gimmick which was built to demonstrate the capability of the new model and to show the world how to build an AI coding agent (and how easy it is) from the creators of the LLM model (they know it best)

GitHub - anthropics/claude-code: Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflows - all through natural language commands.
Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflo…

Claude Code is authored in TypeScript and was released to NPM. You can install it via..

$ mkdir claude-code && cd claude-code
$ npm i @anthropic-ai/claude-code

After installing the application into a folder you'll be greeted with the following directory structure..

tree 
.
β”œβ”€β”€ node_modules
β”‚   β”œβ”€β”€ @anthropic-ai
β”‚   β”‚   └── claude-code
β”‚   β”‚       β”œβ”€β”€ LICENSE.md
β”‚   β”‚       β”œβ”€β”€ README.md
β”‚   β”‚       β”œβ”€β”€ cli.mjs
β”‚   β”‚       β”œβ”€β”€ package.json
β”‚   β”‚       β”œβ”€β”€ scripts
β”‚   β”‚       β”‚   └── preinstall.js
β”‚   β”‚       β”œβ”€β”€ vendor
β”‚   β”‚       β”‚   β”œβ”€β”€ ripgrep
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ COPYING
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ arm64-darwin
β”‚   β”‚       β”‚   β”‚   β”‚   └── rg
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ arm64-linux
β”‚   β”‚       β”‚   β”‚   β”‚   └── rg
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ x64-darwin
β”‚   β”‚       β”‚   β”‚   β”‚   └── rg
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ x64-linux
β”‚   β”‚       β”‚   β”‚   β”‚   └── rg
β”‚   β”‚       β”‚   β”‚   └── x64-win32
β”‚   β”‚       β”‚   β”‚       └── rg.exe
β”‚   β”‚       β”‚   └── sdk
β”‚   β”‚       β”‚       β”œβ”€β”€ CHANGELOG.md
β”‚   β”‚       β”‚       β”œβ”€β”€ LICENSE
β”‚   β”‚       β”‚       β”œβ”€β”€ README.md
β”‚   β”‚       β”‚       β”œβ”€β”€ _shims
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ MultipartBody.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ MultipartBody.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ MultipartBody.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ MultipartBody.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ MultipartBody.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ MultipartBody.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ README.md
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ auto
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-bun.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-bun.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-bun.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-bun.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-bun.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-bun.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-node.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-node.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-node.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-node.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-node.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime-node.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ runtime.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ types-node.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ types-node.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ types-node.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ types-node.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ types-node.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ types-node.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ types.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ types.js
β”‚   β”‚       β”‚       β”‚   β”‚   └── types.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ bun-runtime.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ bun-runtime.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ bun-runtime.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ bun-runtime.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ bun-runtime.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ bun-runtime.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ index.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ index.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ index.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ manual-types.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ manual-types.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ manual-types.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node-runtime.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node-runtime.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node-runtime.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node-runtime.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node-runtime.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node-runtime.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node-types.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node-types.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node-types.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ registry.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ registry.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ registry.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ registry.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ registry.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ registry.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web-runtime.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web-runtime.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web-runtime.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web-runtime.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web-runtime.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web-runtime.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web-types.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web-types.js
β”‚   β”‚       β”‚       β”‚   └── web-types.mjs
β”‚   β”‚       β”‚       β”œβ”€β”€ _vendor
β”‚   β”‚       β”‚       β”‚   └── partial-json-parser
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ parser.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ parser.d.ts.map
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ parser.js
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ parser.js.map
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ parser.mjs
β”‚   β”‚       β”‚       β”‚       └── parser.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ core.d.ts
β”‚   β”‚       β”‚       β”œβ”€β”€ core.d.ts.map
β”‚   β”‚       β”‚       β”œβ”€β”€ core.js
β”‚   β”‚       β”‚       β”œβ”€β”€ core.js.map
β”‚   β”‚       β”‚       β”œβ”€β”€ core.mjs
β”‚   β”‚       β”‚       β”œβ”€β”€ core.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ error.d.ts
β”‚   β”‚       β”‚       β”œβ”€β”€ error.d.ts.map
β”‚   β”‚       β”‚       β”œβ”€β”€ error.js
β”‚   β”‚       β”‚       β”œβ”€β”€ error.js.map
β”‚   β”‚       β”‚       β”œβ”€β”€ error.mjs
β”‚   β”‚       β”‚       β”œβ”€β”€ error.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ index.d.mts
β”‚   β”‚       β”‚       β”œβ”€β”€ index.d.ts
β”‚   β”‚       β”‚       β”œβ”€β”€ index.d.ts.map
β”‚   β”‚       β”‚       β”œβ”€β”€ index.js
β”‚   β”‚       β”‚       β”œβ”€β”€ index.js.map
β”‚   β”‚       β”‚       β”œβ”€β”€ index.mjs
β”‚   β”‚       β”‚       β”œβ”€β”€ index.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ internal
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ decoders
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ jsonl.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ jsonl.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ jsonl.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ jsonl.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ jsonl.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ jsonl.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ line.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ line.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ line.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ line.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ line.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   └── line.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ stream-utils.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ stream-utils.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ stream-utils.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ stream-utils.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ stream-utils.mjs
β”‚   β”‚       β”‚       β”‚   └── stream-utils.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ lib
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ BetaMessageStream.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ BetaMessageStream.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ BetaMessageStream.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ BetaMessageStream.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ BetaMessageStream.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ BetaMessageStream.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ MessageStream.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ MessageStream.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ MessageStream.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ MessageStream.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ MessageStream.mjs
β”‚   β”‚       β”‚       β”‚   └── MessageStream.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ node_modules
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ @types
β”‚   β”‚       β”‚       β”‚   β”‚   └── node
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ LICENSE
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ README.md
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ assert
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   └── strict.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ assert.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ async_hooks.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ buffer.buffer.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ buffer.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ child_process.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ cluster.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ compatibility
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   β”œβ”€β”€ disposable.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   β”œβ”€β”€ index.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   β”œβ”€β”€ indexable.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   └── iterators.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ console.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ constants.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ crypto.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ dgram.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ diagnostics_channel.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ dns
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   └── promises.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ dns.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ dom-events.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ domain.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ events.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ fs
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   └── promises.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ fs.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ globals.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ globals.typedarray.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ http.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ http2.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ https.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ index.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ inspector.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ module.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ net.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ os.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ package.json
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ path.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ perf_hooks.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ process.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ punycode.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ querystring.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ readline
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   └── promises.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ readline.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ repl.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ stream
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   β”œβ”€β”€ consumers.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   β”œβ”€β”€ promises.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   └── web.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ stream.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ string_decoder.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ test.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ timers
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   └── promises.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ timers.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ tls.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ trace_events.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ ts5.6
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   β”œβ”€β”€ buffer.buffer.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   β”œβ”€β”€ globals.typedarray.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”‚   └── index.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ tty.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ url.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ util.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ v8.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ vm.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ wasi.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ worker_threads.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚       └── zlib.d.ts
β”‚   β”‚       β”‚       β”‚   └── undici-types
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ README.md
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ agent.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ api.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ balanced-pool.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ cache.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ client.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ connector.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ content-type.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ cookies.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ diagnostics-channel.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ dispatcher.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ errors.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ fetch.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ file.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ filereader.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ formdata.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ global-dispatcher.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ global-origin.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ handlers.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ header.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ index.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ interceptors.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ mock-agent.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ mock-client.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ mock-errors.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ mock-interceptor.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ mock-pool.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ package.json
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ patch.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ pool-stats.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ pool.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ proxy-agent.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ readable.d.ts
β”‚   β”‚       β”‚       β”‚       β”œβ”€β”€ webidl.d.ts
β”‚   β”‚       β”‚       β”‚       └── websocket.d.ts
β”‚   β”‚       β”‚       β”œβ”€β”€ package.json
β”‚   β”‚       β”‚       β”œβ”€β”€ pagination.d.ts
β”‚   β”‚       β”‚       β”œβ”€β”€ pagination.d.ts.map
β”‚   β”‚       β”‚       β”œβ”€β”€ pagination.js
β”‚   β”‚       β”‚       β”œβ”€β”€ pagination.js.map
β”‚   β”‚       β”‚       β”œβ”€β”€ pagination.mjs
β”‚   β”‚       β”‚       β”œβ”€β”€ pagination.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ resource.d.ts
β”‚   β”‚       β”‚       β”œβ”€β”€ resource.d.ts.map
β”‚   β”‚       β”‚       β”œβ”€β”€ resource.js
β”‚   β”‚       β”‚       β”œβ”€β”€ resource.js.map
β”‚   β”‚       β”‚       β”œβ”€β”€ resource.mjs
β”‚   β”‚       β”‚       β”œβ”€β”€ resource.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ resources
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ beta
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ beta.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ beta.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ beta.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ beta.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ beta.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ beta.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ messages
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ batches.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ batches.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ batches.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ batches.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ batches.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ batches.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ index.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ index.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ index.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ index.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ index.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ index.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ messages.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ messages.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ messages.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ messages.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ messages.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   └── messages.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ models.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ models.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ models.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ models.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ models.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   └── models.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ completions.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ completions.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ completions.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ completions.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ completions.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ completions.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ index.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ index.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ index.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ index.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ index.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ index.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ messages
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ batches.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ batches.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ batches.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ batches.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ batches.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ batches.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.mjs.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ messages.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ messages.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ messages.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ messages.js.map
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ messages.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   └── messages.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ models.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ models.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ models.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ models.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ models.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ models.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ shared.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ shared.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ shared.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ shared.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ shared.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ shared.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ top-level.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ top-level.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ top-level.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ top-level.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ top-level.mjs
β”‚   β”‚       β”‚       β”‚   └── top-level.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ shims
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ node.mjs.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web.d.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web.d.ts.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web.js
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web.js.map
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ web.mjs
β”‚   β”‚       β”‚       β”‚   └── web.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ src
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ _shims
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ MultipartBody.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ auto
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ runtime-bun.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ runtime-node.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ runtime.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ types-node.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ types.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ types.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   └── types.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ bun-runtime.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ manual-types.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ manual-types.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ manual-types.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ node-runtime.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ node-types.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ node-types.js
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ node-types.mjs
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ registry.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ web-runtime.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ web-types.d.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ web-types.js
β”‚   β”‚       β”‚       β”‚   β”‚   └── web-types.mjs
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ _vendor
β”‚   β”‚       β”‚       β”‚   β”‚   └── partial-json-parser
β”‚   β”‚       β”‚       β”‚   β”‚       β”œβ”€β”€ README.md
β”‚   β”‚       β”‚       β”‚   β”‚       └── parser.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ core.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ error.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ internal
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ decoders
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ jsonl.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   └── line.ts
β”‚   β”‚       β”‚       β”‚   β”‚   └── stream-utils.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ lib
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ BetaMessageStream.ts
β”‚   β”‚       β”‚       β”‚   β”‚   └── MessageStream.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ pagination.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ resource.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ resources
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ beta
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ beta.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ messages
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ batches.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”‚   └── messages.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   └── models.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ completions.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ messages
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ batches.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”‚   └── messages.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ models.ts
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ shared.ts
β”‚   β”‚       β”‚       β”‚   β”‚   └── top-level.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ shims
β”‚   β”‚       β”‚       β”‚   β”‚   β”œβ”€β”€ node.ts
β”‚   β”‚       β”‚       β”‚   β”‚   └── web.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ streaming.ts
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ tsconfig.json
β”‚   β”‚       β”‚       β”‚   β”œβ”€β”€ uploads.ts
β”‚   β”‚       β”‚       β”‚   └── version.ts
β”‚   β”‚       β”‚       β”œβ”€β”€ streaming.d.ts
β”‚   β”‚       β”‚       β”œβ”€β”€ streaming.d.ts.map
β”‚   β”‚       β”‚       β”œβ”€β”€ streaming.js
β”‚   β”‚       β”‚       β”œβ”€β”€ streaming.js.map
β”‚   β”‚       β”‚       β”œβ”€β”€ streaming.mjs
β”‚   β”‚       β”‚       β”œβ”€β”€ streaming.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ uploads.d.ts
β”‚   β”‚       β”‚       β”œβ”€β”€ uploads.d.ts.map
β”‚   β”‚       β”‚       β”œβ”€β”€ uploads.js
β”‚   β”‚       β”‚       β”œβ”€β”€ uploads.js.map
β”‚   β”‚       β”‚       β”œβ”€β”€ uploads.mjs
β”‚   β”‚       β”‚       β”œβ”€β”€ uploads.mjs.map
β”‚   β”‚       β”‚       β”œβ”€β”€ version.d.ts
β”‚   β”‚       β”‚       β”œβ”€β”€ version.d.ts.map
β”‚   β”‚       β”‚       β”œβ”€β”€ version.js
β”‚   β”‚       β”‚       β”œβ”€β”€ version.js.map
β”‚   β”‚       β”‚       β”œβ”€β”€ version.mjs
β”‚   β”‚       β”‚       └── version.mjs.map
β”‚   β”‚       └── yoga.wasm
β”‚   └── @img
β”‚       β”œβ”€β”€ sharp-darwin-arm64
β”‚       β”‚   β”œβ”€β”€ LICENSE
β”‚       β”‚   β”œβ”€β”€ README.md
β”‚       β”‚   β”œβ”€β”€ lib
β”‚       β”‚   β”‚   └── sharp-darwin-arm64.node
β”‚       β”‚   └── package.json
β”‚       └── sharp-libvips-darwin-arm64
β”‚           β”œβ”€β”€ README.md
β”‚           β”œβ”€β”€ lib
β”‚           β”‚   β”œβ”€β”€ glib-2.0
β”‚           β”‚   β”‚   └── include
β”‚           β”‚   β”‚       └── glibconfig.h
β”‚           β”‚   β”œβ”€β”€ index.js
β”‚           β”‚   └── libvips-cpp.42.dylib
β”‚           β”œβ”€β”€ package.json
β”‚           └── versions.json
β”œβ”€β”€ package-lock.json
└── package.json

57 directories, 436 files

cli.mjs

This is the meat of the application itself. It is your typical commonjs application which has been compiled from typescript. As part of the process of compilation with Webpack a minifier step combines all the source code into this file and truncates the symbols.

so let's get kicking.

Your first task to is open up cli.mjs within your favourite AI coding assistant or even Claude Code itself. Due to the "safety rails and AI alignment" you'll need to strip the top comments from the application otherwise they will kick in unless you use an LLM such as Grok which has no guard rails.

Here's the prompt that I used.

CLI.js is a commonjs typescript application which has been compiled with webpack.
The symbols have been stripped.
Inspect the source code thoroughly (extra thinking) but skip the SentrySDK source code.
Create a specification library of features of the application.
Convert the source code into human readable.
Keep going until you are done!

Because cli.mjs is close to 5mb - which is way bigger than any LLM context window out here. It shouldn't work but it does. You're going to need babysit it for a while and feed it reward tokens of kind words ("your doing good, please continue") and encourage it to keep on going on - even if it gives up. It will time out, lots...

After about two minutes it'll spit out a technical specification which details how the application was built and the features of the application...

At this point it'll timeout for sure. This is when you need to do the "new meta" of asking the LLM to write out the technical specification library. I say new meta because - hi folks - welcome, I haven't talked about this yet publicly yet but the results of this technique when used in combination with the "old meta" are truly absurd. I'll be going deep into this in a follow-up blog post so if you wanna be the first to see it - like, subscribe and click on the bell below below.

Once it has finished dumping out the technical specification library you'll need to feed it this prompt

Now deobfuscate the application.
Split the application into separate files per domain in the SPECS folder.
Provide an overview of the directory structure before starting deobfuscation.
Skip the SENTRYSDK.

After a couple moments you'll be greeted with the skeleton of the deobfuscated outcome...

claude-code/
β”œβ”€β”€ package.json
β”œβ”€β”€ tsconfig.json
β”œβ”€β”€ README.md
β”œβ”€β”€ LICENSE.md
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ index.ts                        # Main entry point
β”‚   β”œβ”€β”€ cli.ts                          # CLI argument parsing and commands
β”‚   β”œβ”€β”€ config/                         # Configuration management
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ schema.ts
β”‚   β”‚   └── defaults.ts
β”‚   β”œβ”€β”€ terminal/                       # Terminal interface
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ input.ts
β”‚   β”‚   β”œβ”€β”€ output.ts
β”‚   β”‚   └── rendering.ts
β”‚   β”œβ”€β”€ codebase/                       # Codebase analysis
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ scanner.ts
β”‚   β”‚   β”œβ”€β”€ indexer.ts
β”‚   β”‚   β”œβ”€β”€ search.ts
β”‚   β”‚   └── watcher.ts
β”‚   β”œβ”€β”€ commands/                       # Command processing
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ parser.ts
β”‚   β”‚   β”œβ”€β”€ executor.ts
β”‚   β”‚   └── handlers/
β”‚   β”‚       β”œβ”€β”€ edit.ts
β”‚   β”‚       β”œβ”€β”€ search.ts
β”‚   β”‚       β”œβ”€β”€ explain.ts
β”‚   β”‚       β”œβ”€β”€ git.ts
β”‚   β”‚       └── system.ts
β”‚   β”œβ”€β”€ ai/                             # AI integration
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ client.ts
β”‚   β”‚   β”œβ”€β”€ context.ts
β”‚   β”‚   β”œβ”€β”€ prompts.ts
β”‚   β”‚   └── response.ts
β”‚   β”œβ”€β”€ fileops/                        # File operations
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ reader.ts
β”‚   β”‚   β”œβ”€β”€ writer.ts
β”‚   β”‚   β”œβ”€β”€ diff.ts
β”‚   β”‚   └── vcs.ts
β”‚   β”œβ”€β”€ execution/                      # Command execution
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ shell.ts
β”‚   β”‚   β”œβ”€β”€ sandbox.ts
β”‚   β”‚   └── monitor.ts
β”‚   β”œβ”€β”€ auth/                           # Authentication
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ oauth.ts
β”‚   β”‚   └── tokens.ts
β”‚   β”œβ”€β”€ telemetry/                      # Analytics and telemetry
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ events.ts
β”‚   β”‚   └── reporter.ts
β”‚   β”œβ”€β”€ errors/                         # Error handling
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ types.ts
β”‚   β”‚   β”œβ”€β”€ handlers.ts
β”‚   β”‚   └── formatter.ts
β”‚   └── utils/                          # Utilities
β”‚       β”œβ”€β”€ index.ts
β”‚       β”œβ”€β”€ logger.ts
β”‚       β”œβ”€β”€ async.ts
β”‚       └── formatting.ts
β”œβ”€β”€ scripts/                            # Build and deployment scripts
β”‚   β”œβ”€β”€ build.js
β”‚   └── preinstall.js
└── tests/                              # Test suite
    β”œβ”€β”€ unit/
    β”œβ”€β”€ integration/
    └── fixtures/

Now this is the part where it gets wild. Strap yourself in for another "oh-fuck" moment in time....

As the CLI.js is circa 5Mb in size. What follows is going to require a-lot of patience but the key is to use the following prompt and keep giving it "yeah bb, you doing great. keep going" words of encouragement.

Look at the SPECS library.
Look at CLAUDE-CODE folder.
Look at @CLI.js (do not confuse it with @cli.ts), keep transpiling and implement anything that's not in the SPECS folder that has not been implemented in the CLAUDE-CODE folder.

Seriously, you are going to need to enter that at least 100 times over the next 30 minutes. Here's the source code on GitHub if you don't have the patience to do it yourself...

GitHub - ghuntley/claude-code-source-code-transpilation
Contribute to ghuntley/claude-code-source-code-transpilation development by creating an account on GitHub.

Now, a sharp mind should have picked up by now the implications of this but I'll spell it out. Using the above technique you can clean-room any software in existence.

but the madness doesn't stop there

Deobfuscating JavaScript isn't that interesting or impressive though. Understand dear reader that this technique can be done on any programming language and even from pre-existing binaries themselves. I've transpiled from ASM to into very human readable C successfully and others have converted VB .exe's to Python...

still reading? good it's time for the grand reveal aka what this entire blog post is about...

All those "source available" founders who raised shit-loads-of-cash in the last boom are now screwed, as anyone can re-implement their "proprietary features" which provide them with revenue within hours using the above technique to launch competing startups at lower-operating costs.

All you need is access to their source-code and they have given you the keys to the kingdom on a golden platter by going to market as "commercial open-source" with source-code "protected by restrictive licensing" uploaded directly onto GitHub.

CockroachDB scurries off to proprietary software land
As VC-owned fauxpen source biz yells β€˜show me the money,’ more may follow to the peril of the community

Please understand that restrictive software licenses no longer matter because these LLMs can be driven to behave like Bitcoin mixers that bypass licensing and copyright restrictions using the approach detailed in this blog post.

These zombie companies are about to get harvested if the founders don't "Elon Musk" their companies... fast... especially if they don't have a defensible moat.

So, here's to the next generation of builders. May you use these insights wisely and to your advantage. It's an incredible time to be alive if you just do things.

The future belongs to people who can just do things
There, I said it. I seriously can’t see a path forward where the majority of software engineers are doing artisanal hand-crafted commits by as soon as the end of 2026. If you are a software engineer and were considering taking a gap year/holiday this year it would be an

go fucking build. if you aren't losing sleep right now and doing 80+hr weeks of coding right now whyyyyyyyy. there's so much opportunity available right now...

ps. hi Anthropic

I'm friendly - if you have any concerns/questions please contact me. There's not many killer examples of how to do MCP (even though in my last post I recommended folks learn em) properly and in a follow-up blog post coming shortly I'll be going deep from fundamentals to teach folks how to do it. Your tool system prompts are A+++ and I'm a big fan...

pps. socials for this blog post are below

If you enjoyed reading, give 'em a share please: