Raw notes

(483 notes)

Short notes, links, and thoughts – shared as I go through my day.


Claude will watermark AI-generated content

Anthropic says supported Claude models will add imperceptible watermarks to generated text. The watermark is part of the text itself, so it can travel with copied text and can even survive some editing.

For supported images and other files, Claude will attach signed C2PA provenance metadata instead. Anthropic says detection tools and technical details are still to come, and these marks are signals rather than perfect proof of origin.

How Claude will watermark generated texts

I am not sure how this works, but I think it might work based on this paper. And this is similar to Google's SynthID that also embeds imperceptible watermarks in AI-generated content.


Pi agent is just better

Composio ran DeepSeek V4 Flash through 8 agent harnesses on 30 agentic tasks, and as per the report Pi agent came out on top in almost every metric. Here is the leaderboard for tasks passed.

Tasks passed across all 8 agent harnesses on DeepSeek V4 Flash

Pi agent passed 20 of 30 tasks, 3 more than the next best harness (Oh My Pi at 17). Claude Code, Codex, and Deep Agents tied at 16, and the rest were at 14-15.

Cost per successful task is where Pi pulls ahead the most. It came in at $0.028, the cheapest of all 8 harnesses, while Claude Code at the other end cost $0.195, almost 7x more. Pi's median time per task was 132 seconds, only Claude Code and OpenCode were slightly faster.

Cost per successful task across all 8 agent harnesses

The same model delivered 47-67% task success, cost $0.019-$0.104 per task, and took 122-272 seconds median time, depending on the harness. Their closing point is a good one. Benchmark the model-harness pair you will actually use, not the model in isolation.

Nice to see Pi win a third party eval like this, since I run Pi with DeepSeek as my default setup anyway.


Kapture Fast – one-click screenshot to clipboard

I built a tiny Chrome extension called Kapture Fast that captures the visible part of a tab and copies it to the clipboard in one click. Just click the toolbar icon or right-click the page and pick "Copy screenshot to clipboard".

It only captures the visible viewport, not the full page. A checkmark flashes on the icon when it works, and on failure a ! badge shows the reason on hover.

It needs just four permissions, no network requests, no analytics, and the screenshot never leaves the machine. Open source under MIT, load it unpacked from the repo in about a minute.

This is another Chrome extension I've shipped after the Minimal X cleanup extension, and I've been using it daily.

Once the screenshot is in the clipboard, I paste it on socials, drop it into chats while vibe coding, or save it on macOS when I need it as a file.


Cursor Pro and SuperGrok usage comparison

I had this question that which subscription is more value for money when using the Grok 4.5 model – Cursor Pro ($20/mo) or SuperGrok ($30/mo). And I just came across this post on X that does a comparison between the both.

Cursor Pro vs. SuperGrok

Here, I have created a comparison table to better understand the usage these subscriptions get you.

Subscription Price Tokens per month Tokens per $ Value advantage
Cursor Pro $20/mo 716,077,180 35,803,859 Better value
SuperGrok $30/mo 987,902,940 32,930,098

Basically, if you consider the $10 price difference between the two, Cursor gets you ~8.73% more tokens than SuperGrok.

tl;dr – Cursor Pro is better than Grok.

I have used Cursor previously, and currently using SuperGrok, but since I availed their promotional offer of $30 for 3 months (i.e., $10/mo), SuperGrok is better value for money for me right now.


How 'keep reading' picks related posts now

The "keep reading" block under every post and note used to pick its suggestions by counting shared tags. Most matches won.

That sounds reasonable until you look at my tags. The ai tag alone sits on 186 of my 637 posts and notes, so sharing it counted for as much as sharing something rare like hetzner. Hundreds of candidates tied at one shared tag, the tiebreakers collapsed, and the sort quietly turned into "show the newest thing tagged ai".

Three things stood out when I finally measured it.

  • 289 entries had never shown up as a suggestion anywhere on the site
  • one note about my terminal config was sitting on 113 pages
  • most entries were getting three suggestions instead of five

So now it scores every pair of entries instead of sorting them, and four things feed that score.

  1. shared tags, weighted so rare ones count for more than common ones
  2. how similar the titles and descriptions are
  3. internal links, counted both ways, so linking A to B also points B back at A
  4. recency, but only enough to break ties

The title matching did most of the heavy lifting here. Around 40% of my entries carry a single tag, so tags were never going to say much about them, but titles always do. The internal links I add by hand turned out to be the most trustworthy signal of the lot.

Where it landed.

  • every entry now gets a full five suggestions
  • entries that never surfaced dropped from 289 to 36
  • nothing appears on more than 20 pages anymore

I can also pin suggestions from the frontmatter now, where scoring fills whatever slots are left.

related:
- /blog/some-post/
- /raw/some-note/

It all runs once at build time instead of per page, so the build did not get any slower. I had reorganized this block once before, and this time it is the matching underneath that got fixed.


Just learned that Ahrefs DR API is free

I just got to know that Ahrefs has a free API that returns DR (Domain Rating) for domains, and it's completely free to use. You do require a free API key and requests do not consume any API units.

I tested it for deepakness.com with a free API key, and DR comes out to be 46, as you see in the response below.

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.ahrefs.com/v3/public/domain-rating-free?target=deepakness.com&output=json"

Actual response:

{
  "domain_rating": {
    "domain_rating": 46.0,
    "license": "http://ahrefs.com/legal/domain-rating-license"
  }
}

Unauthenticated calls still work today but return a deprecation warning as they now return 401 unless you send the free key. If you use the data, Ahrefs requires attribution as "Domain Rating by Ahrefs" with a link to ahrefs.com, under their Domain Rating License program.

I liked this because this can be used for analyzing domains in bulk and then there can be other interesting usage as well.


Pi agent supports Mermaid diagrams now

From the new v0.84.0 update, the Pi coding agent has now started supporting Mermaid diagrams natively. The agent can now show a preview of the diagram directly inside the terminal you're using, as you see below.

Pi agent Mermaid diagram preview in terminal

It's turned on by default when you update to the new 0.84.0 version by running the pi update --all command. It's set to streaming as you see below, but you can turn it off or change it to final as well, and you can learn about it more from the docs.

Mermaid diagram related settings in Pi agent

I think, this is a nice addition to the agent as it helps users visualize complex ideas in a better way. If you see the first diagram above, that is basically the entire architecture of deepakness.com.

Apart from this, loved the new fullscreen TUI mode that you can turn on from the settings. It keeps the text-box pinned at the bottom when you scroll, it's very useful.


Removing webmentions from this site

I removed webmentions from this site entirely today.

How the setup worked (receiving via webmention.io + Bridgy, sending via webmention.app, Eleventy fetch at build time, UI under posts) is already written up in an earlier post.

I removed them because they were not adding much value, and the UI below posts felt messy. Email and Mastodon CTAs already cover how to reply, and the webmention block mostly cluttered the bottom of posts without making the site better to use.

What still shows under posts and notes is Comment via Email, and Comment on Mastodon when a post has a status URL.

By the way, I am not against the webmention protocol. But just clean slate for now; the implementation post is enough if I ever rebuild it.


Parakeet Unified EN 0.6B model in Handy is great

Recently, a new model called Parakeet Unified EN 0.6B appeared in the Handy app. When I wrote about finding the best local speech-to-text app, I was using Parakeet v3, which was already great. But this new Unified EN 0.6B model is on another level.

It is significantly faster and much more accurate than the earlier models. The latency drop is immediately noticeable, and words appear almost instantly as you speak, with virtually zero delay. I am running it on an M2 MacBook Air with 16 GB RAM, and it works flawlessly without slowing down the system.

Handy app running Parakeet Unified EN 0.6B model

Punctuation, capitalization, and technical terms are also handled much better.


My cmux terminal config and themes setup

After trying the Kero terminal for a few days, I came back to cmux and audited how it handles configurations and themes so I can quickly restore everything if I ever reinstall or move to a new Mac.

Because cmux uses Ghostty as its underlying terminal rendering engine, terminal styling is separate from cmux app settings, and here's how it looks on my computer.

My cmux terminal setup

1. Terminal visual theme & fonts live inside the Ghostty config file:

~/Library/Application Support/com.mitchellh.ghostty/config.ghostty

This is also symlinked to ~/.config/ghostty/config. It uses the built-in GitHub Dark Default theme, Fira Code ligatures (+calt, +zero, +ss01), font thickening, a 50,000-line scrollback buffer, and clipboard auto-copy on select.

2. cmux app settings & shortcuts live in the main cmux config file:

~/.config/cmux/cmux.json

This configures preferredEditor: "code", commandPaletteSearchesAllSurfaces: true, matching sidebar background blending (matchTerminalBackground: true), minimal mode, pane split shortcuts (cmd + d), sidebar toggle (cmd + b), and agent notification hooks.

3. Active workspaces & open tabs live in the session state file:

~/Library/Application Support/cmux/session-com.cmuxterm.app.json

Here is the exact config.ghostty content for the terminal theme and font:

# Theme (GitHub Dark Default, built into Ghostty)
theme = GitHub Dark Default

font-family = "Fira Code"
font-size = 14
font-feature = +calt
font-feature = +zero
font-feature = +ss01
font-thicken = true

# Scrollback
scrollback-limit = 50000

# Window
window-padding-x = 20
window-padding-y = 12
window-padding-balance = true
window-inherit-working-directory = true

# Cursor
cursor-style = bar
cursor-style-blink = false

# Mouse & Clipboard
mouse-hide-while-typing = true
copy-on-select = clipboard

For quick CLI interaction, I added these productivity aliases to ~/.zshrc:

alias cm-diff="cmux diff --source unstaged"
alias cm-diff-staged="cmux diff --source staged"
alias cm-md="cmux markdown"
alias cm-browser="cmux browser open"
alias cm-jump="cmux jump-to-unread"
alias cm-status="cmux list-status"

Also, cmux automatically creates timestamped backups of cmux.json inside ~/.config/cmux/ whenever settings are saved (like cmux.json.bak.20260722T055253).

If I ever reinstall cmux or move to a new Mac, I just need to recreate the folders and restore those files:

mkdir -p ~/.config/cmux ~/.config/ghostty ~/Library/Application\ Support/com.mitchellh.ghostty
ln -sf "~/Library/Application Support/com.mitchellh.ghostty/config.ghostty" ~/.config/ghostty/config

Because these files sit in standard macOS user directories rather than inside the .app bundle, simply uninstalling cmux.app leaves all themes, sessions, and shortcuts completely safe and intact.


Fix 'AI: Out of credits' in Antigravity CLI footer

If you use the Antigravity CLI via agy, you might notice an "AI: Out of credits" warning in the status bar footer.

AI Out of credits error in Antigravity CLI footer

Toggling "Use AI Credits" off via /config inside the CLI fixes it temporarily, but every time you exit and reopen agy, it automatically turns back on and the error message shows up again.

This happens because changing the setting in the CLI UI only updates the active session, while the persistent global config file keeps "useAiCredits": true.

To turn it off permanently:

  1. Open ~/.gemini/config/config.json in your text editor.
  2. Locate "useAiCredits" under userSettings and change it to false, something like this:
{
  "userSettings": {
    "useAiCredits": false
  }
}
  1. (Optional) You can also open ~/.gemini/antigravity-cli/settings.json and add "useAiCredits": false there.

Save the file and restart agy and the warning won't appear in the footer anymore.


Using Opus 5 'Low' is better than expected

On and off, I have been using Claude Code for several months, and in all that time I never ran any model below Extra High effort. It always felt like if I use with lower effort, the model will mess up with my existing code. Even when Opus 5 launched, I kept it at Max without thinking twice.

For the last few days, I've been running Opus 5 at Low instead, and I'm loving it so far. It's faster, and it consumes noticeably fewer tokens. I'm working on a huge project right now, so not running out of limits halfway through the day matters a lot more to me than squeezing out the last bit of reasoning.

Claude Code is the tool I use almost entirely for frontend and design work, and that's where this holds up best. For UI design work, the difference between the higher efforts and Low is negligible – I can't really tell which one wrote the component. Higher effort now feels like overkill for most of what I do day to day.

So my default has flipped. I start at Low and only bump the effort, to Medium or High but almost never to Extra High or Max up when a task actually asks for it, like a tricky bug or a change spanning a lot of files.


SharePDF crosses 400 users

SharePDF has now crossed 400 users and tens of new users are signing up every week. The rate varies as per different weeks of the month, but it's growing consistently.

The MRR is currently at $37.33 and I am very happy with the progress.


Replacing n8n with a local script for Typefully drafts

I previously wrote about how I publish blog posts and notes so fast, where I mentioned using simple terminal scripts and background automations to remove friction. One part of that workflow was an n8n automation connecting RSS feeds to Typefully to automatically draft new posts to social media.

While n8n worked, it relied on polling RSS feeds after Netlify finished deploying, and didn't give me fine-grained control over which social platforms a specific post should go to.

So I replaced the n8n setup with a small Node.js script scripts/sync-typefully.js built directly into my existing pnpm blog:push and pnpm raw:push workflow commands.

Here's how it works:

  1. Whenever I publish a post, git commits and pushes the code to GitHub first.
  2. The script polls the live post URL on deepakness.com until Netlify returns a 200 OK status. This ensures no broken 404 links on social media.
  3. Mastodon and Bluesky are enabled by default so I don't have to specify them.
  4. If I want to send the draft to extra channels like Threads, X, or LinkedIn, I can pass a flag like pnpm raw:push --platforms=threads,x.
  5. Once live, it calls the Typefully API to schedule the draft for the next free slot.

And the output in the terminal is shown like this:

[Typefully Sync] Found target file: content/raw/typefully-local-sync/index.md
[Typefully Sync] Configured platforms: mastodon, bluesky
[Typefully Sync] Waiting for Netlify deploy... Polling https://deepakness.com/raw/typefully-local-sync/
[Typefully Sync] ✓ Live page confirmed! (HTTP 200 OK after 42s)
[Typefully Sync] Sending draft to Typefully API...
[Typefully Sync] 🎉 Draft successfully scheduled in Typefully!
  Draft ID: 10183778
  Draft Title: "Replacing n8n with a local script for Typefully drafts"
  Platforms: mastodon, bluesky
  Schedule: next-free-slot

Now there are no external n8n workflows to maintain, zero broken link issues, and full control over social distribution directly from the terminal.

Absolutely love it.

Update: August 05, 2026

I updated scripts/sync-typefully.js to automatically schedule drafts for 15 minutes in the future by default (calculated right after Netlify deployment finishes), instead of pushing to next-free-slot.

I can also customize the delay directly from the command line using the --in flag:

  • pnpm raw:push --in=5 – Schedules 5 minutes from now.
  • pnpm blog:push --in 20 – Schedules 20 minutes from now.
  • pnpm raw:push --now – Publishes immediately.
  • pnpm raw:push --next-free-slot – Keeps the queue slot behavior.

Using the Kero terminal for coding

I just discovered this new terminal app called kero.sh that basically removes the need of opening an IDE like VS Code or so when vibe coding. It was recommended to me on X, and I tried and liked it immediately.

Using the Kero terminal

I mainly use the cmux app that works great, but the inbuilt files and git extension in Kero caught my attention. I miss a few things in the Kero terminal though, like the ability to drag terminal tabs to the left, right, bottom, or top sides as possible in cmux. But I can still use cmd + t or cmd + d in Kero and that is enough.

Another thing I didn't like about Kero is, cmd + + or - didn't work for zoom in or out, as I can do in basically any other terminal. You can only adjust the font size from settings, if you want bigger or smaller text.

Currently, I'm mainly using cmux but testing and trying Kero with my workflow as well. And if I like it after a few days, I'll migrate everything to using Kero.

Let's see.

Update:

Another major thing I didn't like about Kero is that it doesn't persist AI agent sessions (like Pi agent or OMP agent) when the app is restarted. In cmux, if I'm working with Pi or OMP agent and close and reopen the app, all those sessions automatically stay open and I can just continue typing new prompts right away. That doesn't happen in Kero.

So after using it for 3-4 days, I'm back to using cmux.


Typefully now supports Substack as well

I have been using Typefully for, I think, more than 2 years now. And I was super glad to learn that it has now started supporting directly publishing posts to Substack as well. I immediately created an account on Substack, and connected it to Typefully to send my first post, as you see below.

First Substack post from DeepakNess

After this, I think, Typefully is the best social media management and automation tool out there. I haven't come across another such SaaS that is such a delight to use and actually listens to their users.

You can sign up to Typefully from here.

Apart from Substack, I have also connected my X (Twitter), Threads, Mastodon, Bluesky, and LinkedIn profiles, and everything works flawlessly.


Saving €50 each month on Hetzner

I use Hetzner VPS a lot for many of my projects and currently have 5 different servers via them. And after Hetzner hiked their prices, they still let existing users retain their old prices, at least, for now. On the new price, I would be paying €95.95/mo but on old price I'm only paying €45.95, saving €50 each month.

Saving €50 each month on Hetzner

As in the screenshot, I have these VPS currently locked on the old price.

Couldn't be happier.


OPML download on the blogroll

Added a small thing on the blogroll page today – you can now download the list as OPML and import it into your favorite RSS reader.

Download /blogroll in .opml format

It only includes blogs that have a public feed. The file is generated at build time from the same list on the page, so it stays in sync automatically.

That's the update.


3 Reddit accounts brands should have

Came across a short talk by Ross Simmonds on how brands should show up on Reddit, and I liked it. He recommends three types of accounts brands should have:

1. Brand subredditr/yourbrand

Create this last week if you haven't already. If someone else claims it and owns it, you lose complete control. And if the subreddit already exists, slide into the mod's DMs and ask if they'd be okay with you becoming a co-mod.

2. Brand user accountu/yourbrand

This is the official brand voice. Use it only when people are saying nice things. Don't get into fights with this account.

3. Personified human account

A real person representing the brand in the subreddits where your community already exists. This one shows up when people are complaining, have problems, or are asking questions adjacent to what you sell.

Simple setup, but makes a lot of sense.


Google Search Console now supports social accounts

Google Search Console has received one of the biggest updates in years as it now supports adding social profiles like Instagram, TikTok, X, and YouTube. It will show which of your contents are performing good, and how many clicks they're getting from Google.

Google Search Console supported social accounts list

I just added and verified my X (Twitter) profile where I had to log in and give GSC access to my X profile. It requested access to details like profile picture, username, followers count, etc. as you see in the screenshot here.

Adding X profile to Google Search Console

It will take up to 48 hours for the data to appear. And it will be interesting to see those data about my X posts.


Cursor launches a new plan 'Start' in India

Cursor AI has launched a new pricing plan exclusive to India, it's called Start and costs ₹649 per month. It sits between the Free and Pro plan, and I'm sure the limits are accordingly adjusted.

Cursor Start pricing plan

I think, it's a good plan for casual coders or beginners. They can use Composer 2.5 model for everything and if more intelligence is required, Grok 4.5 can also be used.


Subscribed to SuperGrok 3-month offer

I was subscribed to Cursor's Pro+ plan and used Grok 4.5 via there, and absolutely loved the model. It's fast and intelligent. And now that my Cursor subscription has ended, I was suggested to use Grok Build via SuperGrok as there was a great ongoing offer.

SuperGrok 3-month offer

I checked and discovered that there is a pay for 1-month and get 2 months extra for free offer going on via Grok Android app. So I immediately subscribed to it and now using it via Grok Build.

So far so good, and will share my experience in the next few days.


Updated the footer of the site

I spent some time reorganizing the footer on this site. Nothing fancy, just making it easier to scan after it had slowly turned into a long flat list of links over time.

Earlier the footer menu was basically one row of everything – all with the same weight. It worked, but nothing felt primary. So I split it into two rows: the main links up top and the rest slightly smaller and quieter below.

The stats line got a small polish too. Numbers are a bit heavier now so they stand out, separators are simple center dots, and GitHub contributions stay on the second line. I had written about showing stats in the footer earlier, so this is more of a layout cleanup than a new feature.

Before:

Footer before the update

After:

Footer after the update

While I was at it, I also cleaned up a few nearby things: “Building now” on the homepage, a single Related block on posts and notes (tag matches plus the AI stack link when it fits), and a small latest writings list on the Now page. Also switched most page headings to sentence case so they feel more consistent, except on individual posts and notes.

That's the update.


Thinking of getting another wifi connection

I have a wifi connection from Airtel Fiber at my place and it's quite good, until I experienced a 2-3 hours downtime last week. And where I live, there's no strong cellular signal as well, so I'm completely dependent on the wifi for internet and calls.

To prevent this from happening again, I'm thinking of getting another wifi connection, likely from Jio Fiber. It should not be very high speed and even 30 Mbps would work as it's just for backup, as my main connection is good for me at 200 Mbps.

I'm almost sure about this and will be getting this installed next week.


$934.38 worth of usage on Cursor $60 plan

Today, my Cursor AI subscription is expiring (yet to decide whether I will renew or not) and I was surprised when I checked my usage in the last 30 days. I used $934.38 worth of tokens across different models on my Cursor Pro+ ($60/mo) plan, as you see in the screenshot here.

That's 15x!

Cursor usage on $60 plan

I used more than 2.9 billion tokens across different models, and most used were Cursor Grok 4.5 and Composer 2.5 models. While I could have managed and done better for the API models, I am still very happy with everything.

Cursor usage tokens on Pro+ plan

Apart from this, here's a screenshot from my Cursor profile that shows some more data points.

Cursor profile page screenshot

Currently, I have auto-renew turned off and have yet to decide whether I would want to renew the subscription or not. I am currently also subscribed to Claude $100 plan, and can also use Grok Build via my X Premium subscription.

I think, for now, Cursor Pro for $20/mo would be enough for me.

Apart from this, I remembered one more thing that even after I finished 100% in both Cursor Models and Other Models pools, the Auto mode kept working. I used another ~90 million tokens in the last 2-3 days of my subscription.