10 interesting stories served every morning and every evening.
10 interesting stories served every morning and every evening.
Please make sure your browser supports JavaScript and cookies and that you are not blocking them from loading. For more information you can review our Terms of Service and Cookie Policy.
TL;DR: Today, we are announcing that all GitHub Copilot plans will transition to usage-based billing on June 1, 2026.
Instead of counting premium requests, every Copilot plan will include a monthly allotment of GitHub AI Credits, with the option for paid plans to purchase additional usage. Usage will be calculated based on token consumption, including input, output, and cached tokens, using the listed API rates for each model.
This change aligns Copilot pricing with actual usage and is an important step toward a sustainable, reliable Copilot business and experience for all users.
To help customers prepare, we are also launching a preview bill experience in early May, giving users and admins visibility into projected costs before the June 1 transition. This will be available to users via their Billing Overview page when they log in to github.com.
Why we’re making this change
Copilot is not the same product it was a year ago.
It has evolved from an in-editor assistant into an agentic platform capable of running long, multi-step coding sessions, using the latest models, and iterating across entire repositories. Agentic usage is becoming the default, and it brings significantly higher compute and inference demands.
Today, a quick chat question and a multi-hour autonomous coding session can cost the user the same amount. GitHub has absorbed much of the escalating inference cost behind that usage, but the current premium request model is no longer sustainable.
Usage-based billing fixes that. It better aligns pricing with actual usage, helps us maintain long-term service reliability, and reduces the need to gate heavy users.
What’s changing
Starting June 1, premium request units (PRUs) will be replaced by GitHub AI Credits.
Credits will be consumed based on token usage, including input, output, and cached tokens, according to the published API rates for each model.
A few important details:
Base plan pricing is not changing. Copilot Pro remains $10/month, Pro+ remains $39/month, Business remains $19/user/month, and Enterprise remains $39/user/month.
Code completions and Next Edit suggestions remain included in all plans and do not consume AI Credits.
Fallback experiences will no longer be available. Today, users who exhaust PRUs may fall back to a lower-cost model and continue working. Under the new model, usage will instead be governed by available credits and admin budget controls.
Copilot code review will also consume GitHub Actions minutes, in addition to GitHub AI Credits. These minutes are billed at the same per-minute rates as other GitHub Actions workflows.
Last week, we also rolled out temporary changes to Copilot Individual plans, including Free, Pro, Pro+, and Student, and paused self-serve Copilot Business plan purchases. These were reliability and performance measures as we prepare for the broader transition to usage-based billing. We will loosen usage limits once usage-based billing is in effect.
What this means for individuals
Copilot Pro and Pro+ monthly subscriptions will include monthly AI Credits aligned to their current subscription prices:
Copilot Pro: $10/month, including $10 in monthly AI Credits
Copilot Pro+: $39/month, including $39 in monthly AI Credits
Users on a monthly Pro or Pro+ plan will automatically migrate to usage-based billing on June 1, 2026.
Users on annual Pro or Pro+ plans will remain on their existing plan with premium request-based pricing until their plan expires. Model multipliers will increase on June 1 (see table) for annual plan subscribers only. At expiration, they will transition to Copilot Free with the option to upgrade to a paid monthly plan. Alternatively, they may convert to a monthly paid plan before their annual plan expires, and we will provide prorated credits for the remaining value of their annual plan.
What this means for businesses and enterprises
Copilot Business and Copilot Enterprise monthly seat pricing remains unchanged:
Copilot Business: $19/user/month, including $19 in monthly AI Credits
Copilot Enterprise: $39/user/month, including $39 in monthly AI Credits
To support the transition, existing Copilot Business and Copilot Enterprise customers will automatically receive promotional included usage for June, July, and August:
Copilot Business: $30 in monthly AI Credits
Copilot Enterprise: $70 in monthly AI Credits
We are also introducing pooled included usage across a business, which helps eliminate stranded capacity. Instead of each user’s unused included usage being isolated, credits can be pooled across the organization.
Admins will also have new budget controls. They will be able to set budgets at the enterprise, cost center, and user levels. When the included pool is exhausted, organizations can choose whether to allow additional usage at published rates or cap spend.
The bottom line
Plan prices aren’t changing. You’ll have full control over what you spend, tools to track your usage, and the option to purchase more AI Credits if and when you need them.
If you have questions, visit our documentation for individuals and for businesses and enterprises, and our FAQ and related discussion.
Written by
Mario Rodriguez leads the GitHub Product team as Chief Product Officer. His core identity is being a learner and his passion is creating developer tools—so much so that he has spent the last 20 years living that mission in leadership roles across Microsoft and GitHub. Mario most recently oversaw GitHub’s AI strategy and the GitHub Copilot product line, launching and growing Copilot across thousands of organizations and millions of users. Mario spends time outside of GitHub with his wife and two daughters. He also co-chairs and founded a charter school in an effort to progress education in rural regions of the United States.
Related posts
Explore more from GitHub
Docs
Everything you need to master GitHub, all in one place.
Go to Docs
GitHub
Build what’s next on GitHub, the place for anyone from anywhere to build anything.
Start building
Customer stories
Meet the companies and engineering teams that build with GitHub.
Learn more
The GitHub Podcast
Catch up on the GitHub podcast, a show dedicated to the topics, trends, stories and culture in and around the open source developer community on GitHub.
Listen now
I think this might be the neatest thing I’ve built in
Jelly that nobody will ever notice.
If you’ve ever maintained a help centre or documentation site for a web
application, you’ll know the particular misery of screenshots. You write a
lovely help article, carefully capture a screenshot of the feature you’re
documenting, crop it, maybe add a border and a shadow, upload it, and it looks
great. Then you change the UI slightly — tweak a colour, move a button,
update some copy — and suddenly every screenshot that includes that element
is stale. You know they’re stale. Your users might not notice, but you
know, and it gnaws at you.
Or maybe that’s just me.
Either way, I decided to fix it. The help centre in Jelly has a build system
where screenshots are captured automatically from the running application,
and they update themselves whenever you rebuild.
Markdown with a twist
The help articles are written in Markdown, which gets processed into HTML via
Redcarpet and then rendered as ERB views in the Rails app. So far, so
ordinary. But scattered through the Markdown are comments like this:
<!– SCREENSHOT: acme-tools/inbox | element | selector=#inbox-brand-new-section –>

That HTML comment is an instruction to the screenshot system. It says: “go to
the inbox page for the Acme Tools demo team, find the element matching
#inbox-brand-new-section, and capture a screenshot of it.” The image tag
below it is where the result ends up.
How it works
Under the hood, it’s a Rake task that fires up a headless Chrome browser via
Capybara and Cuprite. It scans every Markdown file for those SCREENSHOT
comments, groups them by team (so it only needs to log in once per team),
navigates to each URL, and captures the screenshot.
The capture modes are:
element — screenshot a specific DOM element by CSS selector
full_page — capture the whole page, optionally cropped to a height
viewport — just what’s visible in the browser window
And there are a handful of options that handle the fiddly cases:
<!– SCREENSHOT: nectar-studio/manage/rules | full_page | click=”.rule-create-button” wait=200 crop=0,800 –>
That one navigates to the rules page, clicks a button to open a form, waits
200 milliseconds for the animation, then captures a full-page screenshot
cropped to a specific region. The click option is the one that really makes
it sing — so many features live behind a button press or a popover, and being
able to capture those states automatically is wonderful.
There’s also torn — which applies a torn-paper edge effect via a CSS
clip-path — and hide, which temporarily hides elements you don’t want in
the shot (dev toolbars, cookie banners, that sort of thing).
The satisfying bit
The whole pipeline runs with just this:
rails manual:build
That captures every screenshot and then builds all the help pages. When I
change the UI, I run that command and every screenshot updates to match. No
manual cropping, no “oh I forgot to update that one”, no slowly-diverging
screenshots that make the help centre look abandoned.
The markdown files live in public/manual/, organised by section — basics,
setup, advanced — and the build step processes them into ERB views in
app/views/help/, complete with breadcrumbs and section navigation, all generated
from the source markdown files.
This also makes it easy to update the help centre at the same time I’m working
on the feature; the code and the documentation live together and can be kept in
sync within the same PR or even commit.
One of those “why didn’t I do this sooner” things
I put off building this for ages because it seemed like a lot of work for a
“nice to have”. It was a fair bit of work, honestly. Handling the edge cases
– elements that need scrolling into view, popovers that need clicking,
images that need cropping to avoid showing irrelevant content — took longer
than the happy path.
But now that it exists, I update the help centre far more often than I used to,
because the friction is almost gone. Change the UI, run the build,
commit the results. The screenshots are always current, and I never have to
open a browser and fumble around with the macOS screenshot tool.
Forensic intelligence // Breach analysis
4TB of voice samples were just stolen from 40,000 AI contractors. Here is how to verify if yours is being weaponized.
By the ORAVYS forensic desk
Published April 24, 2026
~7 min read
On April 4, 2026, the extortion group Lapsus$ posted Mercor on its leak site. The dump is reported at roughly four terabytes and bundles a payload that breach analysts have been warning about for two years: voice biometrics paired with the same person’s government-issued identity document. According to the leaked sample index, the archive covers more than 40,000 contractors who signed up to label data, record reading passages, and run through verification calls for AI training.
Five contractor lawsuits were filed within ten days of the post. The plaintiffs argue that the company collected voice prints under a “training data” framing without making clear they were also a permanent biometric identifier. The lawsuits matter, but the people whose voices were already exfiltrated have a more immediate question. What does an attacker actually do with thirty seconds of someone’s clean read voice plus a scan of their driver’s license?
Why this breach is different
Most voice leaks in the last decade fell into one of two buckets. Either a call center got popped and recordings were stolen with no easy way to map them back to identity. Or an ID-document broker leaked driver’s licenses and selfies without any audio attached. Mercor merged both columns. The contractor onboarding pipeline asked for a passport or driver’s license scan, then a webcam selfie, then a sit-down voice recording reading scripted prompts in a quiet room. That sequence, in one row of one database, is exactly what a synthetic voice cloning service needs as input.
The Wall Street Journal reported in February 2026 that high-quality voice cloning now requires roughly fifteen seconds of clean reference audio for tools available off the shelf. The Mercor recordings are reported to average two to five minutes of studio-clean speech per contractor. That is far past the threshold. Pair it with a verified ID document and the attacker has both the clone and the credential needed to put the clone to work.
What attackers can now do with stolen voice data
The threat models below are not speculative. Each is a documented technique already used in the wild before this breach.
Bank verification bypass. Several US and UK banks still treat voiceprint matching as one of two factors. A clone of the account holder reading a challenge phrase clears the audio gate, leaving only a knowledge question that often comes from the same leaked dataset.
Vishing the victim’s employer. Calling HR or finance pretending to be the employee to redirect payroll, request a wire, or unlock a workstation. The Krebs on Security archive lists more than two dozen confirmed cases since 2023.
Deepfake video calls in the Hong Kong Arup template. In 2024 a finance worker at Arup wired roughly 25 million dollars after a multi-person deepfake video call. The voices and faces had been built from public footage. Mercor leaked something better than public footage: studio audio plus a verified ID.
Insurance claim fraud. Pindrop reported a 475 percent year-over-year increase in synthetic voice attacks against insurance call centers across 2025. Auto, life, and disability claims are the prime targets because they are settled by phone.
Romance and grandparent scams targeting family members. The FBI Internet Crime Complaint Center logged 2.3 billion dollars in losses for victims aged 60 and over in calendar year 2026. The single fastest-growing category was emergency impersonation calls, where the synthetic voice claims to be a relative in trouble.
How to check if your voice is being misused
If you ever uploaded a voice sample to Mercor, or to any of the other AI training brokers that operated through 2025, treat your voice the way you would treat a leaked password. You cannot rotate it, but you can change what it unlocks. Here is the short list.
Self-audit your public audio footprint. Search YouTube, podcast directories, and old Zoom recordings for samples of your voice that are publicly indexable. Take down what you can. The less reference audio is in the open, the less robust an attacker’s clone.
Set up a verbal codeword with family and finance contacts. Pick a phrase that has never been spoken on a recording and never typed in chat. Brief the people who handle money on your behalf. If a call ever asks for a transfer, the codeword is mandatory.
Rotate where voiceprints are still in use. Google Voice Match, Amazon Alexa Voice ID, Apple personal voice, and any banking voiceprint enrollment can be deleted and replaced. Do that now, ideally from a new recording in a different acoustic environment than the leaked sample.
Tell your bank to disable voiceprint as a verification factor. Ask in writing for multi-factor authentication that combines an app token or hardware key with a knowledge factor. Many banks let you opt out of voice as a primary factor; few of them advertise it.
Run suspicious recordings through a forensic scanner. If you receive an audio file or voicemail that claims to be from someone you know and asks for money, access, or urgency, run it through a deepfake detector before acting. ORAVYS offers a free check for the first three samples submitted by breach victims (see the offer below).
The forensic checklist that experts use
When a sample lands on a forensic analyst’s desk, the following artifacts are the first pass. Each is something a synthetic voice tends to get slightly wrong, even when the perceptual quality is high.
Codec mismatch. The audio claims to come from a phone call but the spectral signature does not match any known telephony codec.
Breath patterns. Real speakers inhale at predictable points dictated by phrase length and lung capacity. Synthetic voices often skip breaths or insert them at the wrong syllabic boundary.
Micro-jitter. Natural vocal folds vibrate with small irregularities. Generated audio is often too clean at the millisecond level.
Formant trajectory. Vowel transitions follow physical articulator paths in a real mouth. Cloned voices sometimes take impossible shortcuts between formants.
Room acoustics inconsistency. The reverb signature should be identical from the start of the file to the end. Generated audio is often dry while the splice context is reverberant.
Prosody flatness. Synthetic speech often has narrower pitch and energy variance than the same speaker would have in real conditions.
Speech rate stability. Real humans speed up and slow down with content. Generated speech tends to hold a metronomic rate across long passages.
What ORAVYS does specifically
More than 3,000 forensic engines run in parallel on every submitted sample, covering signal, prosody, articulation, codec, and provenance domains.
AudioSeal watermark detection flags files generated by major commercial voice models when the watermark is preserved, giving a deterministic positive when present.
An anti-spoofing module trained against the ASVspoof public benchmarks scores the likelihood that a sample was synthesized rather than recorded.
Biometric processing is RGPD compliant. Audio is never used to train commercial models without explicit consent and is purged on a defined retention schedule.
Free verification for Mercor breach victims
If you were a Mercor contractor and you believe your voice may already be in circulation, ORAVYS will analyze the first three suspect samples free of charge. You will receive a forensic report covering watermark detection, anti-spoofing score, and the artifact checklist above. No card required, no quota gate.
Run a forensic check →
Sources cited in this article: Lapsus$ leak site index (April 2026), Wall Street Journal voice cloning report (February 2026), Pindrop Voice Intelligence Report 2025, FBI IC3 Elder Fraud Report 2026, Krebs on Security archives. Lawsuit references are matters of public record. ORAVYS does not host or redistribute the leaked dataset and does not accept it as input.
I came across a video by Simple Lucas describing a routine to improve focus and productivity.
The routine was basically:
Don’t use any screens/entertainment when trying to focus on work.
When you start to feel mentally drained, sit and stare at a wall for x minutes to recover focus.
I’ve been trying it, and it’s a very effective (but hard) routine.
The problem
The core problem is that most people by default are in an information overload.
A paper published in 2012 showed that in 2008 the average person was receiving 34 GB of information daily, with a daily information exposure growth rate of about 5.4% per year 1.
Extrapolating that trend, we would be at about 87 GB worth of data today.
This calculation includes audio, visual, and text data and incorporates quality into the measurement, i.e. 10 minutes of HD video has more information than 10 minutes of 480p video.
It’s unclear to me exactly how the quality impacts things, but regardless it is obvious that we are all being drowned in a sea of information.
I certainly go through periods of “brain fog” and lack of focus/motivation.
These periods usually go something like:
Get a bad night of sleep (up late for an event, kids keep waking me up).
Wake up very tired so consume large amounts of caffeine.
Have trouble focusing after 2/3 cups so use media while working to dull the pain (music/podcasts) or take more “breaks” (reading hackernews).
Stay up late because I’m wired on caffeine and dopamine from scrolling.
Go back to 2.
I find these cycles very hard to break out of when I’m in them.
The media consumption constitutes a small dopamine hit.
Large numbers of small hits puts you in a hole, where you need even more/stronger hits to feel good.
Disconnecting
The obvious solution is to disconnect from scrolling, but that doesn’t overcome the biggest issue.
When I’m in this “brain fog” cycle (and sometimes outside of it), I will find that around 1/2 pm I hit a wall.
My head will start hurting, my motivation will be trash, and my productivity significantly degrades.
My first instinct is to go for more coffee.
That usually lets me keep working, but at a slow/painful pace.
While looking for focusing strategies I came across the life-changing solution…
Stare at a Wall!
After watching Simple Lucas’ experience, I decided to try it when I hit my focus wall.
It worked.
In my attempts, I combined wall staring with a few other concepts I had heard about.
First was activating the parasympathetic nervous system by staring at the wall “out-of-focus” and using peripheral vision.
Second was incorporating mind blanking which means trying to think of nothing.
I tried intervals of 5 – 10 minutes and when I was done, my focus was back!
What I didn’t expect was how difficult it would be.
Sitting for 5 – 10 minutes staring at a wall without thinking of anything is hard!
I relate it somewhat to the feeling I have with working out.
Often times I want to avoid it because it’s hard, but I’m always happy when I push through and complete it.
It was the exact same experience with the wall staring.
So far I’ve been feeling significant focus/productivity improvements.
I’ve also been using some other strategies to improve focus, which I’ll be talking about in a future post.
I plan to continue this routine and will update to see how much it has impacted productivity/focus.
Thanks for reading!
https://ijoc.org/index.php/ijoc/article/view/1566 ↩︎
https://ijoc.org/index.php/ijoc/article/view/1566 ↩︎
NOTICE OF OBSOLESCENCE
TL;DR: pgBackRest is no longer being maintained. If you fork pgBackRest, please select a new name for your project.
After a lot of thought, I have decided to stop working on pgBackRest. I did not come to this decision lightly. pgBackRest has been my passion project for the last thirteen years, and I was fortunate to have corporate sponsorship for much of this time, but there were also many late nights and weekends as I worked to make pgBackRest the project it is today, aided by numerous contributors. Every open-source developer knows exactly what I mean and how much of your life gets devoted to a special project.
Since Crunchy Data was sold, I have been maintaining pgBackRest and looking for a position that would allow me to continue the work, but so far I have not been successful. Likewise, my efforts to secure sponsorship have also fallen far short of what I need to make the project viable.
Like everyone else, I need to make a living, and the range of pgBackRest-related roles is very limited. I can now consider a wider variety of opportunities, but those will not leave me time to work on pgBackRest, which requires a fair amount of time for maintenance, bug fixes, PR reviews, answering issues, etc. That does not even include time to write new features, which is what I really love to do. Rather than do the work poorly and/or sporadically, I think it makes more sense to have a hard stop.
I imagine at some point pgBackRest will be forked, but that will be a new project with new maintainers, and they will need to build trust the same way we did.
Again, many thanks to all the pgBackRest contributors over the years. It was a pleasure working with you!
Introduction
pgBackRest is a reliable backup and restore solution for PostgreSQL that seamlessly scales up to the largest databases and workloads.
pgBackRest v2.58.0 is the current stable release. Release notes are on the Releases page.
Features
Parallel Backup & Restore
Compression is usually the bottleneck during backup operations so pgBackRest solves this problem with parallel processing and more efficient compression algorithms such as lz4 and zstd.
Local or Remote Operation
A custom protocol allows pgBackRest to backup, restore, and archive locally or remotely via TLS/SSH with minimal configuration. An interface to query PostgreSQL is also provided via the protocol layer so that remote access to PostgreSQL is never required, which enhances security.
Multiple Repositories
Multiple repositories allow, for example, a local repository with minimal retention for fast restores and a remote repository with a longer retention for redundancy and access across the enterprise.
Full, Differential, & Incremental Backups (at File or Block Level)
Full, differential, and incremental backups are supported. pgBackRest is not susceptible to the time resolution issues of rsync, making differential and incremental backups safe without the requirement to checksum each file. Block-level backups save space by only copying the parts of files that have changed.
Backup Rotation & Archive Expiration
Retention polices can be set for full and differential backups to create coverage for any time frame. The WAL archive can be maintained for all backups or strictly for the most recent backups. In the latter case WAL required to make older backups consistent will be maintained in the archive.
Backup Integrity
Checksums are calculated for every file in the backup and rechecked during a restore or verify. After a backup finishes copying files, it waits until every WAL segment required to make the backup consistent reaches the repository.
Backups in the repository may be stored in the same format as a standard PostgreSQL cluster (including tablespaces). If compression is disabled and hard links are enabled it is possible to snapshot a backup in the repository and bring up a PostgreSQL cluster directly on the snapshot. This is advantageous for terabyte-scale databases that are time consuming to restore in the traditional way.
All operations utilize file and directory level fsync to ensure durability.
Page Checksums
If page checksums are enabled pgBackRest will validate the checksums for every file that is copied during a backup. All page checksums are validated during a full backup and checksums in files that have changed are validated during differential and incremental backups.
Validation failures do not stop the backup process, but warnings with details of exactly which pages have failed validation are output to the console and file log.
This feature allows page-level corruption to be detected early, before backups that contain valid copies of the data have expired.
Backup Resume
An interrupted backup can be resumed from the point where it was stopped. Files that were already copied are compared with the checksums in the manifest to ensure integrity. Since this operation can take place entirely on the repository host, it reduces load on the PostgreSQL host and saves time since checksum calculation is faster than compressing and retransmitting data.
Streaming Compression & Checksums
Compression and checksum calculations are performed in stream while files are being copied to the repository, whether the repository is located locally or remotely.
If the repository is on a repository host, compression is performed on the PostgreSQL host and files are transmitted in a compressed format and simply stored on the repository host. When compression is disabled a lower level of compression is utilized to make efficient use of available bandwidth while keeping CPU cost to a minimum.
Delta Restore
The manifest contains checksums for every file in the backup so that during a restore it is possible to use these checksums to speed processing enormously. On a delta restore any files not present in the backup are first removed and then checksums are generated for the remaining files. Files that match the backup are left in place and the rest of the files are restored as usual. Parallel processing can lead to a dramatic reduction in restore times.
Parallel, Asynchronous WAL Push & Get
Dedicated commands are included for pushing WAL to the archive and getting WAL from the archive. Both commands support parallelism to accelerate processing and run asynchronously to provide the fastest possible response time to PostgreSQL.
WAL push automatically detects WAL segments that are pushed multiple times and de-duplicates when the segment is identical, otherwise an error is raised. Asynchronous WAL push allows transfer to be offloaded to another process which compresses WAL segments in parallel for maximum throughput. This can be a critical feature for databases with extremely high write volume.
Asynchronous WAL get maintains a local queue of WAL segments that are decompressed and ready for replay. This reduces the time needed to provide WAL to PostgreSQL which maximizes replay speed. Higher-latency connections and storage (such as S3) benefit the most.
The push and get commands both ensure that the database and repository match by comparing PostgreSQL versions and system identifiers. This virtually eliminates the possibility of misconfiguring the WAL archive location.
Tablespace & Link Support
Tablespaces are fully supported and on restore tablespaces can be remapped to any location. It is also possible to remap all tablespaces to one location with a single command which is useful for development restores.
File and directory links are supported for any file or directory in the PostgreSQL cluster. When restoring it is possible to restore all links to their original locations, remap some or all links, or restore some or all links as normal files or directories within the cluster directory.
S3, Azure, and GCS Compatible Object Store Support
pgBackRest repositories can be located in S3, Azure, and GCS compatible object stores to allow for virtually unlimited capacity and retention.
Encryption
pgBackRest can encrypt the repository to secure backups wherever they are stored.
Compatibility with ten versions of PostgreSQL
pgBackRest includes support for ten versions of PostgreSQL, the five supported versions and the last five EOL versions. This allows ample time to upgrade to a supported version.
Getting Started
pgBackRest strives to be easy to configure and operate:
User guides for various operating systems and PostgreSQL versions.
User guides for various operating systems and PostgreSQL versions.
Command reference for command-line operations.
Command reference for command-line operations.
Configuration reference for creating pgBackRest configurations.
Configuration reference for creating pgBackRest configurations.
Sponsorship
pgBackRest would not exist without sponsors. Writing new features, fixing bugs, reviewing contributions, answering questions from the community, and maintenance all take a considerable amount of time.
Current sponsors: Supabase.
Past sponsors: Crunchy Data, Resonate.
Recognition
Armchair graphic by Alexander Skowalsky.
These are the 3 constraints that I use before I start building anything. I’m a
believer in constraints as an enabler for creativity. Constraints help us
collapse the search space, and figure out innovative solutions to problems.
I’ve been a builder for 10 years, and I’ve built products that went nowhere
because they were either too complex or had no identity. These are the
constraints that I landed on after making those mistakes.
One page or it doesn’t get built
This constraint limits complexity and ambiguity.
Write a one pager for all of your ideas. Your one pager captures your north
star. It’s non-negotiable, precise, ambitious, and lean. Once your one pager is
written, it is applied to all different types of communication. Share it as a
memo for investors, contributors, team members, friends, or family. Working
collaboratively on a product, there will always be contention points and
conflict, it can sometimes be difficult to know what battles to pick. If it’s
not in the one pager, then it’s either not worth fighting over, or the one pager
ought to be amended to include the thing. Not only is a one pager useful for
communication, it’s useful for organising your own thoughts. If you can’t fill
one page, don’t fill the gaps with fluff, it means you’re not ready to build.
First research, plan, prototype, then write the one pager again. Iterate. If it
requires more than one page, it’s too complex, don’t build it.
The core tech must be separable from the product
This constraint limits you to ideas that have real leverage and originality.
Develop a core piece of technology that supports your product and is not the
product itself. The core tech is a method, skill, tool, or even product that
supports what you’re doing today but must survive without it. It’s a type of
reusable IP. Why? Separating the core tech forces you to think beyond the
product that you’re building. Products pivot in direction all the time, while
your core tech is constant and compounding. Compounding efforts have non-linear
gains over longer time horizons. Linus Torvalds developed git to improve the
Linux kernel development workflow. HashiCorp has HCL (HashiCorp Configuration
Language). Google has Kubernetes. But you don’t need big tech resources to build
core tech, it could be a library that you extract from your codebase, or even a
methodology that you refine and commit to. Your core tech is your long term
commitment. It is independent of your product’s direction. However, it must be
aligned with you or your company’s long term vision. If your idea doesn’t enable
core tech, then it isn’t high enough leverage.
One defining constraint must shape the product
This constraint limits feature creep and forces identity.
Define your own constraint that is front and centre to your product. That means
the user sees and interacts with it all the time. It is obvious and it is what
gives your product identity. A good constraint gives your product a feel, it
permeates through all parts of the user experience. Minecraft is built entirely
from blocks. IKEA is flat-pack, self-assembly furniture. The constraint that you
choose limits scope by reducing your decision space, enabling you to concentrate
on the problems that really make the difference. If you don’t choose a
constraint, or choose a bad constraint, you will build a bloated product that
will try to do everything. The design of your product will “fall out” of a
well-designed constraint. Like in your product, your constraint must be front
and centre in your one pager.
Closing Rule
When it comes to deciding what to build, if it fails any of these constraints,
then I don’t build it.
De Nederlandsche Bank will sign a major contract tomorrow with Schwarz Digits, the IT arm of Lidl owner Schwarz Group. DNB aims to reduce its dependence on American cloud companies. As a major Dutch organization, it is opting for a European partner, but how will this play out?
Sales Director Bernd Wagner announced the news on Monday at the Hannover Messe, according to De Telegraaf. The move itself comes as no surprise. DNB Director Steven Maijoor announced last October that he intended to “set a good example” and switch to a European cloud, though he acknowledged that it “is not yet as robust or high-quality as the one from the U.S.”
That is precisely the consideration every company must make. Can a European alternative function well enough to meet the organization’s requirements and needs? Lidl’s platform has been in development for years, but those of Amazon, Google, and Microsoft have sometimes had as much as 20 years of development work behind them.
The fact that the transition to European alternatives does not always go smoothly is evident in Schleswig-Holstein, where the local government is already struggling with the migration from Microsoft to an open-source environment.
Large organizations are already connected to Lidl’s cloud. For example, Lidl and the German supermarket chain Kaufland use it. Deutsche Bahn also collaborates with the Schwarz Group. But now a Dutch organization from a highly regulated sector is opting for this cloud.
Concerns about cloud dependency
Last year, the Dutch Central Bank (DNB) and the Netherlands Authority for the Financial Markets (AFM) warned that the Dutch financial sector had become too dependent on foreign IT service providers, particularly American ones. These concerns were fueled by geopolitical tensions. For example, a prosecutor at the International Criminal Court in The Hague was cut off from his Microsoft email account by President Donald Trump. The ICC is now also switching to non-American systems.
Incidentally, when issuing that warning, DNB also had to admit that it itself is largely dependent on American service providers for its digital infrastructure.
Schwarz Digits and Stackit
Schwarz Digits, via the Stackit cloud platform, has long positioned itself as a European alternative to American hyperscalers. The Lidl-owned company is building a sovereign cloud where all data falls under European law. This sets it apart from American providers, who, under the Cloud Act, are required to hand over data to U.S. authorities. Schwarz Digits recently announced an investment of 11 billion euros in a large data center in Lübbenau.
The project originally began as an internal IT system for Lidl and Kaufland, but is now also attracting external clients, including SAP and Bayern Munich. Together with Deutsche Telekom, it is working on broader European IT alternatives.
A spokesperson for DNB confirmed concerns about cloud dependency on Monday but declined to comment on individual contracts. “That is why, with every new step toward the cloud, we explicitly assess geopolitical risks and explore how we can reduce our dependency,” the spokesperson said.
Dirac - Accurate & Highly Token Efficient Open Source AI Agent
Dirac topped the Terminal-Bench-2 leaderboard for gemini-3-flash-preview with a 65.2% score!
Dirac topped the Terminal-Bench-2 leaderboard for gemini-3-flash-preview with a 65.2% score!
It is a well studied phenomenon that any given model’s reasoning ability degrades with the context length. If we can keep context tightly curated, we improve both accuracy and cost while making larger changes tractable in a single task.
Dirac is an open-source coding agent built with this in mind. It reduces API costs by 64.8% on average while producing better and faster work. Using hash-anchored parallel edits, AST manipulation, and a suite of advanced optimizations. Oh, and no MCP.
Our goal: Optimize for bang-for-the-buck on tooling with bare minimum prompting instead of going blindly minimalistic.
📊 Evals
Dirac is benchmarked against other leading open-source agents on complex, real-world refactoring tasks. Dirac consistently achieves 100% accuracy at a fraction of the cost. These evals are run on public github repos and should be reproducible by anyone.
🏆 TerminalBench 2.0 Leaderboard: Dirac recently topped the Terminal-Bench-2 leaderboard with a 65.2% score using gemini-3-flash-preview. This outperforms both Google’s official baseline (47.6%) and the top closed-source agent Junie CLI (64.3%). This was achieved without any benchmark-specific info or any AGENTS.md files being inserted.
🏆 TerminalBench 2.0 Leaderboard: Dirac recently topped the Terminal-Bench-2 leaderboard with a 65.2% score using gemini-3-flash-preview. This outperforms both Google’s official baseline (47.6%) and the top closed-source agent Junie CLI (64.3%). This was achieved without any benchmark-specific info or any AGENTS.md files being inserted.
Note on the cost table below: A bug was discovered in Cline, the parent repo, after running these evals (issue #10314). We have submitted a PR #10315 to fix this. This bug caused the evals for Dirac and Cline to slightly underreport the numbers ($0.03 vs $0.05 per million token cache read). Although there won’t be a large difference, we will update the evals soon.
Note on the cost table below: A bug was discovered in Cline, the parent repo, after running these evals (issue #10314). We have submitted a PR #10315 to fix this. This bug caused the evals for Dirac and Cline to slightly underreport the numbers ($0.03 vs $0.05 per million token cache read). Although there won’t be a large difference, we will update the evals soon.
All tasks for all models used gemini-3-flash-preview with thinking set to high
🟢 Success | 🟡 Incomplete | 🔴 Failure
🟢 Success | 🟡 Incomplete | 🔴 Failure
Cost Comparison: Dirac is 64.8% cheaper than the competition (a 2.8x cost reduction).
* Expected number of files to be modified/created to complete the task.
See evals/README.md for detailed task descriptions and methodology.
Cost Comparison: Dirac is 64.8% cheaper than the competition (a 2.8x cost reduction).
* Expected number of files to be modified/created to complete the task.
See evals/README.md for detailed task descriptions and methodology.
🚀 Key Features
Hash-Anchored Edits: Dirac uses stable line hashes to target edits with extreme precision, avoiding the “lost in translation” issues of traditional line-number based editing.
AST-Native Precision: Built-in understanding of language syntax (TypeScript, Python, C++, etc.) allows Dirac to perform structural manipulations like function extraction or class refactoring with 100% accuracy.
Multi-File Batching: Dirac can process and edit multiple files in a single LLM roundtrip, significantly reducing latency and API costs.
High-Bandwidth Context: Optimized context curation keeps the agent lean and fast, ensuring the LLM always has the most relevant information without wasting tokens.
Autonomous Tool Use: Dirac can read/write files, execute terminal commands, use a headless browser, and more - all while keeping you in control with an approval-based workflow.
Skills & AGENTS.md: Customize Dirac’s behavior with project-specific instructions using AGENTS.md files. It also seamlessly picks up Claude’s skills by automatically reading from .ai, .claude, and .agents directories.
Native Tool Calling Only: To ensure maximum reliability and performance, Dirac exclusively supports models with native tool calling enabled. (Note: MCP is not supported).
📦 Installation
VS Code Extension
Install Dirac from the VS Code Marketplace.
CLI (Terminal)
Install the Dirac CLI globally using npm:
npm install -g dirac-cli
🚀 CLI Quick Start
Authenticate:
dirac auth
dirac auth
Run your first task:
dirac “Analyze the architecture of this project”
dirac “Analyze the architecture of this project”
Configuration (Environment Variables)
You can provide API keys via environment variables to skip the dirac auth step. This is ideal for CI/CD or non-persistent environments:
ANTHROPIC_API_KEY
OPENAI_API_KEY
OPENROUTER_API_KEY
GEMINI_API_KEY
GROQ_API_KEY
MISTRAL_API_KEY
XAI_API_KEY (x.ai)
HF_TOKEN (HuggingFace)
… and others (see src/shared/storage/env-config.ts for the full list).
Common Commands
dirac “prompt”: Start an interactive task.
dirac -p “prompt”: Run in Plan Mode to see the strategy before executing.
dirac -y “prompt”: Yolo Mode (auto-approve all actions, great for simple fixes).
git diff | dirac “Review these changes”: Pipe context directly into Dirac.
dirac history: View and resume previous tasks.
🛠️ Getting Started
Open the Dirac sidebar in VS Code.
Configure your preferred AI provider (Anthropic, OpenAI, OpenRouter, etc.).
Start a new task by describing what you want to build or fix.
Watch Dirac go!
📈 Star History
📄 License
Dirac is open source and licensed under the Apache License 2.0.
🤝 Acknowledgments
Dirac is a fork of the excellent Cline project. We are grateful to the Cline team and contributors for their foundational work.
Built with ❤️ by Max Trivedi at Dirac Delta Labs
TurboQuant: A First-Principles Walkthrough
Compressing AI vectors to 2 – 4 bits per numberwithout losing
accuracy.
Modern language models store large tables of high-dimensional vectors: KV caches, embeddings, attention keys.
TurboQuant compresses each coordinate of these vectors to 2 – 4 bits with provably near-optimal
distortion, no memory overhead for scale factors, and no training or calibration. This page explains how it
works.
DRIVE: One-bit Distributed Mean Estimation
Vargaftik, Ben-Basat, Portnoy, Mendelson, Ben-Itzhak, Mitzenmacher · NeurIPS 2021 ·
arXiv:2105.08339
EDEN: Communication-Efficient and Robust Distributed Mean Estimation for Federated Learning
Vargaftik, Ben-Basat, Portnoy, Mendelson, Ben-Itzhak, Mitzenmacher · ICML 2022 ·
arXiv:2108.08842
QJL: 1-Bit Quantized JL Transform for KV Cache Quantization with Zero Overhead
Zandieh, Daliri, Han · 2024 · arXiv:2406.03482
PolarQuant: Quantizing KV Caches with Polar Transformation
Han, Kacham, Karbasi, Mirrokni, Zandieh · 2025 · arXiv:2502.02617
TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate
Zandieh, Daliri, Hadian, Mirrokni · 2025 · arXiv:2504.19874
A Note on TurboQuant and the Earlier DRIVE/EDEN Line of Work
Portnoy et al. · 2026 · arXiv:2604.18555
The single load-bearing idea: in high dimensions, a random rotation turns every input vector
into one whose coordinates follow a known fixed distribution. A codebook designed once for
that distribution can then be reused for every input. Everything else on this page is the
construction that puts this observation to work.
This construction was introduced by DRIVE (Vargaftik et al., NeurIPS 2021) for one-bit federated
mean estimation, and generalized to b bits per coordinate by EDEN (Vargaftik et al.,
ICML 2022). TurboQuant (Zandieh et al., 2025) is the same construction with the per-vector
scale parameter fixed to a constant, repackaged for KV-cache compression and inner-product
retrieval. The mapping from each idea on this page to its source paper is in
§0.9.
§0 · Primer: jargon decoder
Eight ideas the rest of the page is built on.
Each mini-demo below covers one concept used later. Skip the ones you already know.
§0.1 · Vector
A list of numbers. An arrow in space.
A vector is an ordered list: [0.3, −1.2]. Geometrically it is an
arrow from the origin. A d-dimensional vector is an arrow in $d$-space, hard
to picture past 3-D, but the rules are the same.
↕ drag tip
coords[0.70, 0.50]
length0.86
§0.2 · Length ‖x‖ & Inner Product ⟨x,y⟩
How much one vector points along another.
Length = $\sqrt{x_1^2+x_2^2+\dots}$.
Inner product $\langle x,y\rangle = x_1 y_1 + x_2 y_2 + \dots = \|x\|\|y\|\cos\theta$.
The inner product reaches its largest positive value when the two arrows point in the same
direction. It drops to zero when the two arrows are perpendicular. It becomes negative when
the arrows point in opposite directions, with its most negative value when they point
exactly opposite.
↕ drag either
tip
‖x‖1.00
‖y‖1.00
⟨x,y⟩0.00
angle90°
§0.3 · Mean Squared Error
Why we square the mistake.
Error is the distance between a guess and the truth. Scoring a guess by the signed error
lets positive and negative errors cancel, which means the score does not penalise being
off. Squaring forces every error to count as a positive number and gives big errors a
larger penalty than small ones. The guess that minimises the mean of squared errors is the
data’s average: it is the unique number that minimises the sum of squared
distances to the points.
The first moment of a quantity $X$ is its mean $\mathbb{E}[X]$; the
second moment is the mean of its square $\mathbb{E}[X^2]$. A zero-mean variable
has a vanishing first moment because positive and negative deviations cancel. Its second
moment is strictly positive whenever any deviation is nonzero, because squared values
are nonnegative and cannot cancel. The MSE above is itself a second moment of the
residual error. This distinction returns in §7, where the per-input
gap $\tilde y - y$ averages to zero in the first moment, while its square averages to a
strictly positive quantity in the second.
The average has a property we will use in §7. It lies between the
data’s most extreme points, so its magnitude is smaller than at least one of them.
When a quantizer compresses a whole bin of values down to the bin’s average, the
stored value is smaller in magnitude than the bin’s largest values. The reconstruction
is a shrunken version of the input. An inner product against a shrunken reconstruction
comes out smaller than the same inner product against the input.
Guess0.00
mean of data0.00
MSE at guess1.00
MSE at mean1.00
§0.4 · Unbiased vs Biased Estimator
Noisy is fine. Systematically off is not.
An estimator is a procedure that takes data and returns a guess $\hat\theta$ for an
unknown truth $\theta$. Repeat it on fresh data and the guesses form a cloud. The cloud can
fail in two independent ways. Variance is one: individual guesses are noisy. Bias is the
other: the procedure is wrong even after averaging many guesses. An estimator with
$\mathbb{E}[\hat\theta]=\theta$ is unbiased; the cloud’s centre sits at $\theta$
regardless of the cloud’s width.
The bullseye below shows both failure modes. Bias is the distance from the cloud’s
centre to the crosshair. Variance is the width of the cloud. The two quantities are
independent of each other. §7 runs the same bullseye against the MSE
quantizer of §6, and the cloud’s centre lands away from the
crosshair. §8 runs it against a different estimator whose cloud
centres on the crosshair.
Mode
shots0
mean of shots–
bias–
To add this web app to your iOS home screen tap the share button and select "Add to the Home Screen".
10HN is also available as an iOS App
If you visit 10HN only rarely, check out the the best articles from the past week.
If you like 10HN please leave feedback and share
Visit pancik.com for more.