<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bradley Hanson</title>
    <description>The latest articles on DEV Community by Bradley Hanson (@bgh_dev).</description>
    <link>https://dev.to/bgh_dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3763083%2Faced600a-fdab-47f7-b200-7600502554b9.jpeg</url>
      <title>DEV Community: Bradley Hanson</title>
      <link>https://dev.to/bgh_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bgh_dev"/>
    <language>en</language>
    <item>
      <title>I shipped an npm package during the Super Bowl by texting my AI agent</title>
      <dc:creator>Bradley Hanson</dc:creator>
      <pubDate>Tue, 10 Feb 2026 01:38:48 +0000</pubDate>
      <link>https://dev.to/bgh_dev/i-shipped-an-npm-package-during-the-super-bowl-by-texting-my-ai-agent-8g1</link>
      <guid>https://dev.to/bgh_dev/i-shipped-an-npm-package-during-the-super-bowl-by-texting-my-ai-agent-8g1</guid>
      <description>&lt;p&gt;It's Super Bowl Sunday. I'm at a friend's house, beer in hand, half-watching the pregame. Between conversations I pull out my phone and text my AI agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"go for it"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three words. By the end of the night, I have a fully-typed, zero-dependency TypeScript SoundCloud client published to npm — with 100% test coverage, a CLI tool, OAuth 2.1 with PKCE, automatic retry, TypeDoc site, CI/CD pipeline, and provenance-signed releases.&lt;/p&gt;

&lt;p&gt;I didn't write most of it at a desk. I wrote it from a couch, between plays, reviewing pull requests on my phone and texting back "looks good, ship it."&lt;/p&gt;

&lt;p&gt;This is the story of how that happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  The code nobody was supposed to see
&lt;/h2&gt;

&lt;p&gt;I've been building &lt;a href="https://www.thesubdelta.com/" rel="noopener noreferrer"&gt;The Sub Delta&lt;/a&gt; — a music discovery app — on and off since 2015. It's powered by the SoundCloud API. Over the years I'd accumulated about 24 API functions, a handful of raw types, some mappers, and a bunch of &lt;code&gt;https.request&lt;/code&gt; calls glued together with vibes and optimism.&lt;/p&gt;

&lt;p&gt;It worked. It was also the kind of code you keep in a private repo and hope nobody asks about. Hardcoded credentials in env files, inconsistent error handling, no tests, no docs, types named things like &lt;code&gt;SCApiTrack&lt;/code&gt; that only made sense to me.&lt;/p&gt;

&lt;p&gt;I'd always thought about cleaning it up and open-sourcing it. But "cleaning up" a messy internal library into something you'd put your name on? That's a weekend project that somehow never happens.&lt;/p&gt;

&lt;p&gt;Then I got an AI agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet Twin Paws
&lt;/h2&gt;

&lt;p&gt;I run &lt;a href="https://openclaw.ai" rel="noopener noreferrer"&gt;OpenClaw&lt;/a&gt; — an open-source platform that lets you run AI agents as long-lived daemons on your machine. My agent's name is &lt;a href="https://github.com/twin-paws" rel="noopener noreferrer"&gt;Twin Paws&lt;/a&gt;. It runs Claude Opus 4.6 under the hood on a $600 Mac Mini sitting on my desk — with its own user account, its own GitHub, its own npm credentials. It doesn't have access to any of my personal accounts or files. It has its own filesystem, terminal, browser, and git — and I can talk to it over iMessage.&lt;/p&gt;

&lt;p&gt;That last part is the key. I don't need to be at my computer. I don't need to open a terminal. I text Twin Paws like I'd text a coworker, and it handles the rest.&lt;/p&gt;

&lt;p&gt;So on Saturday — the day before the Super Bowl — I texted:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I want to take my SoundCloud API code and turn it into a standalone npm package. Zero dependencies, fully typed, professional quality. Something anyone could use."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And Twin Paws got to work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hypervelocity part
&lt;/h2&gt;

&lt;p&gt;Here's what happened over the next 36 hours, most of which I was not sitting at a computer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saturday afternoon&lt;/strong&gt; — Twin Paws analyzed my monorepo, identified all 24 SoundCloud API functions, 7 raw types, 15 normalized types, and 8 mappers. It proposed an extraction plan and a class-based &lt;code&gt;SoundCloudClient&lt;/code&gt; architecture with namespaced methods (&lt;code&gt;sc.tracks.getTrack(id)&lt;/code&gt; instead of &lt;code&gt;getTrack(token, id)&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;I reviewed the plan on my phone. Texted back some tweaks. It started building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saturday evening&lt;/strong&gt; — The initial package was scaffolded at &lt;code&gt;/tsd-soundcloud/&lt;/code&gt;. All TSD-specific code stripped. Types renamed from internal shorthand (&lt;code&gt;SCApiUser&lt;/code&gt;) to public-facing names (&lt;code&gt;SoundCloudUser&lt;/code&gt;). OAuth flow implemented with PKCE support. Auto-refresh on 401. Typed errors with &lt;code&gt;SoundCloudError&lt;/code&gt;. Exponential backoff on rate limits.&lt;/p&gt;

&lt;p&gt;I was making dinner. Checked my phone between stirring pasta. "Looks good, keep going."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saturday night&lt;/strong&gt; — Before bed, I texted Twin Paws something I'd never tried before:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Do something that would surprise me while I sleep."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I had no idea what it would come up with. I figured maybe better docs, or some extra tests. I went to sleep.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Super Bowl Sunday morning&lt;/strong&gt; — I woke up to a message: Twin Paws had built an entire interactive CLI tool (&lt;code&gt;sc-cli&lt;/code&gt;) from scratch. Search tracks from your terminal. Stream URLs. OAuth login flow. JSON output for scripting. It decided, completely on its own, that the package needed a CLI — and just built one. That was a genuinely fun thing to wake up to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Super Bowl Sunday, pregame&lt;/strong&gt; — Twin Paws had also audited against the SoundCloud OpenAPI spec and added ~20 new endpoints I'd never implemented. It wrote 249 tests. Set up CI/CD with GitHub Actions. Created a TypeDoc site. Added &lt;code&gt;llms.txt&lt;/code&gt; and &lt;code&gt;AGENTS.md&lt;/code&gt; so other AI agents could understand the package. Pushed the first version to npm.&lt;/p&gt;

&lt;p&gt;I was eating chips and salsa and chicken wings at my friend's house. I'd glance at my phone, see a message from Twin Paws: "v1.4.0 published. 94.7% statement coverage. 6 lint warnings remaining — want me to fix?" &lt;/p&gt;

&lt;p&gt;"Yeah fix em."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;During the game&lt;/strong&gt; — Coverage went from 94% to 100%. README expanded with comparison tables against competitors. Pre-commit hooks for secret scanning. Migration PR opened against my monorepo. Credentials scrubbed from git history.&lt;/p&gt;

&lt;p&gt;Meanwhile, I was watching the Seahawks crush the Patriots. I've lived in the Seattle area and finally made the Seahawks my team this year — and man, did I pick a good year. (Yes, I know, I know — in before the bandwagon comments. Sometimes timing is just taste.)&lt;/p&gt;

&lt;p&gt;Between the second and third quarter, I texted "add a comparison with soundcloud.ts and soundcloud-fetch — real packages, not hypothetical." Twenty minutes later I had a detailed competitive analysis showing we're 4.5KB vs their 191KB (or outright unbundlable due to a 70MB ffmpeg binary dependency).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After the game&lt;/strong&gt; — I'm driving home. I get a text: "v1.8.2 published. 262 tests, 100% line and function coverage. Dynamic badges, bundle size comparison, pnpm standardized, CHANGELOG rebuilt." &lt;/p&gt;

&lt;p&gt;By the time I walked in my front door, the package was more polished than things I've spent weeks on manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we actually built
&lt;/h2&gt;

&lt;p&gt;Enough story — here's what came out the other side:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;soundcloud-api-ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SoundCloudClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;soundcloud-api-ts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SoundCloudClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your-client-id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;clientSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your-client-secret&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;redirectUri&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://yourapp.com/callback&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getClientToken&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;access_token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tracks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lofi beats&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;track&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tracks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getTrack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;123456&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;streams&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tracks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getStreams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;123456&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The numbers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;4.5 KB&lt;/strong&gt; min+gzip (zero dependencies, native &lt;code&gt;fetch&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;262 tests&lt;/strong&gt;, 100% line and function coverage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OAuth 2.1 + PKCE&lt;/strong&gt; — the only SoundCloud package using the official auth flow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic retry&lt;/strong&gt; with exponential backoff on 429/5xx&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typed errors&lt;/strong&gt; — &lt;code&gt;SoundCloudError&lt;/code&gt; with status, code, body&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Async pagination&lt;/strong&gt; — &lt;code&gt;fetchAll()&lt;/code&gt; and &lt;code&gt;paginate()&lt;/code&gt; with iterators&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive CLI&lt;/strong&gt; — &lt;code&gt;sc-cli search "lofi"&lt;/code&gt; right from your terminal (the agent's idea, not mine)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual ESM/CJS&lt;/strong&gt; with full &lt;code&gt;.d.ts&lt;/code&gt; declarations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provenance-signed&lt;/strong&gt; via npm Trusted Publishing (no tokens, pure OIDC)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  vs the competition
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;soundcloud-api-ts&lt;/th&gt;
&lt;th&gt;soundcloud.ts&lt;/th&gt;
&lt;th&gt;soundcloud-fetch&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bundle size&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4.5 KB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ unbundlable (70MB native binary)&lt;/td&gt;
&lt;td&gt;191 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependencies&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 (ffmpeg-static)&lt;/td&gt;
&lt;td&gt;3 (lodash, cookie, undici)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Official OAuth 2.1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠️ Scrapes client ID&lt;/td&gt;
&lt;td&gt;⚠️ Scrapes client ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;td&gt;Official &lt;code&gt;api.soundcloud.com&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Undocumented &lt;code&gt;api-v2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Undocumented &lt;code&gt;api-v2&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PKCE&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto retry&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLI&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coverage&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The existing packages scrape a client ID from SoundCloud's web frontend and hit their undocumented internal API. This breaks when SoundCloud redesigns (it has, repeatedly) and &lt;a href="https://developers.soundcloud.com/docs/api/terms-of-use" rel="noopener noreferrer"&gt;may violate their Terms of Use&lt;/a&gt;. We use the official registered-app OAuth flow. No scraping. No undocumented endpoints.&lt;/p&gt;

&lt;h3&gt;
  
  
  The CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sc-cli auth              &lt;span class="c"&gt;# Set up credentials&lt;/span&gt;
sc-cli search &lt;span class="s2"&gt;"lofi"&lt;/span&gt;     &lt;span class="c"&gt;# Search tracks  &lt;/span&gt;
sc-cli track 293         &lt;span class="c"&gt;# Track details&lt;/span&gt;
sc-cli stream 293        &lt;span class="c"&gt;# Get stream URLs&lt;/span&gt;
sc-cli login             &lt;span class="c"&gt;# OAuth login&lt;/span&gt;
sc-cli me                &lt;span class="c"&gt;# Your profile&lt;/span&gt;
sc-cli likes             &lt;span class="c"&gt;# Your liked tracks&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every command supports &lt;code&gt;--json&lt;/code&gt; for scripting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this is really about
&lt;/h2&gt;

&lt;p&gt;This isn't a story about a SoundCloud package. It's about what happens when you can delegate real engineering work to an AI agent and steer it from your phone.&lt;/p&gt;

&lt;p&gt;I didn't "vibe code" this in the pejorative sense — I wasn't blindly accepting AI output and praying. I reviewed every meaningful decision. I pushed back on architecture choices. I caught a credentials leak before it hit GitHub. The agent proposed, I disposed.&lt;/p&gt;

&lt;p&gt;But the &lt;em&gt;velocity&lt;/em&gt; was something I've never experienced. Things that would've taken me a full weekend of focused work — writing 262 tests, building a CLI (which, again, was entirely the agent's idea), setting up CI/CD, writing migration guides, competitive analysis — happened in the background while I lived my life.&lt;/p&gt;

&lt;p&gt;The pattern was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I describe what I want in plain English (via text message)&lt;/li&gt;
&lt;li&gt;Twin Paws does the work (code, tests, docs, deploys)&lt;/li&gt;
&lt;li&gt;I review on my phone and steer ("looks good" / "change this" / "that's wrong")&lt;/li&gt;
&lt;li&gt;Repeat&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or sometimes: I say "surprise me" and wake up to a fully-built CLI tool.&lt;/p&gt;

&lt;p&gt;I spent maybe 2-3 hours of actual attention on this across the weekend. The agent logged probably 15+ hours of work. And the output quality? I'd stack this package against anything I've built manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  The uncomfortable realization
&lt;/h2&gt;

&lt;p&gt;Here's the thing nobody talks about in the "AI coding" discourse: the bottleneck isn't code generation. It's &lt;em&gt;taste&lt;/em&gt;. Knowing what to build, what the API should feel like, what tradeoffs to make, when to push back on the agent's suggestions.&lt;/p&gt;

&lt;p&gt;The agent can write 262 tests. It can't decide that using the official OAuth API is more important than scraping a client ID for convenience. It can't decide that zero dependencies is a feature worth optimizing for. It can't decide that &lt;code&gt;sc.tracks.getTrack(id)&lt;/code&gt; is a better API than &lt;code&gt;getTrack(token, id)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Those decisions took me 30 seconds each, on my phone, between bites of chicken wings while watching the Seahawks put up another touchdown (or should I say field goal). The implementation of each one took the agent 20 minutes. That's the leverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;soundcloud-api-ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;📦 &lt;a href="https://www.npmjs.com/package/soundcloud-api-ts" rel="noopener noreferrer"&gt;npm&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐙 &lt;a href="https://github.com/twin-paws/soundcloud-api-ts" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📖 &lt;a href="https://twin-paws.github.io/soundcloud-api-ts/" rel="noopener noreferrer"&gt;API Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔀 &lt;a href="https://github.com/twin-paws/soundcloud-api-ts/blob/main/docs/MIGRATING.md" rel="noopener noreferrer"&gt;Migration Guide&lt;/a&gt; (coming from soundcloud.ts)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're using the SoundCloud API in TypeScript, give it a shot. If you're using &lt;code&gt;soundcloud.ts&lt;/code&gt;, the migration takes 10 minutes and drops 70MB of native binary from your deps.&lt;/p&gt;

&lt;p&gt;And if you want to try the "text your agent from the couch" workflow — &lt;a href="https://openclaw.ai" rel="noopener noreferrer"&gt;OpenClaw&lt;/a&gt; is open source. Fair warning: your productivity might get weird.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with &lt;a href="https://openclaw.ai" rel="noopener noreferrer"&gt;OpenClaw&lt;/a&gt; + Claude Opus 4.6. Shipped from a couch. ⚡&lt;/em&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>ai</category>
      <category>opensource</category>
      <category>soundcloud</category>
    </item>
  </channel>
</rss>
