How I Found My Voice in 13,839 Messages
I built a writing profile from the OpenCode messages I actually typed, with clear limits, an authorship gate, and a test against unseen work.
I wanted a way to use AI for writing without letting it replace the part that makes the writing mine.
So I stopped trying to describe my voice from memory. I used 13,839 messages I had actually typed.
The result is a working voice profile for OpenCode. It is not a personality model. It is not permission to put my name on whatever an agent produces. It is a set of evidence-backed registers, selection rules, sentence patterns, anti-patterns, and authorship checks that now has to survive real use.
This is the first shreemulay.com article developed through the skill. The earlier posts on this site were AI-generated. That distinction matters because the test here is not whether the prose sounds polished. The test is whether I can still recognize, verify, reject, and own it.
That standard continues the discipline behind Commitmaxxing & Tokenminimizing: preserve the decisions that matter instead of asking the next draft to reconstruct them.
Nate B Jones Prompted the Project
Nate B Jones’s public work prompted this project.
His article, “What AI Slop Actually Costs, and Who Ends Up Paying”, made the cost concrete. Weak AI writing does not only waste the reader’s time. It moves review, correction, and trust work onto someone else.
His August 5, 2026 video, “AI Slop Is Costing You Hours. Here’s How To Stop Sending It.”, showed a public method for treating authorship as something that can be specified and tested rather than vaguely requested with “sound like me.”
I adapted the concept, public method, originating specification, trigger conditions, register model, sentence patterns, anti-patterns, selection rules, accuracy rule, and grading test from Nate’s public work. He deserves explicit credit for all of them.
There is also an important limit. I did not retrieve or reverse engineer his paid material. Nate’s subscriber-only Pro-Authorship Skill was not directly accessed or inspected.
The only related concept I use here is publicly visible: compare a paragraph an author rejected with the version the author actually sent. The difference can reveal what the author protected. Maybe it was a fact. Maybe it was directness. Maybe it was the relationship. That comparison is evidence, but it still needs confirmation from the author.
The Corpus Is Narrow on Purpose
The corpus contains 13,839 filtered root-session messages typed by me in OpenCode from November 2025 through August 2026. Root-session filtering matters because it reduces copied context, tool output, and nested agent material that I did not write.
The latest 90 days are weighted most heavily. My current choices should count more than habits I may have already changed.
I excluded LinkedIn posts and emails. Those have been AI-generated for years, so using them as proof of my natural writing would create a circular system: AI prose would teach AI what I supposedly sound like.
This is OpenCode-only evidence. It is not a claim about how I write in every context. It does not prove how I speak with patients, write a condolence note, argue a clinical point, or talk with my family. A model built from one environment should say where it stops.
That boundary is useful. OpenCode contains decisions, corrections, questions, frustration, delegation, and repeated instructions. It is a good record of how I think while work is moving. It is not my whole voice.
One Voice Was the Wrong Model
The messages did not support one universal tone. They supported five registers.
Command is for clear, reversible work. It uses direct imperatives, stacked instructions, and very little ceremony.
Challenge appears when something is broken, wasteful, or needlessly complicated. The heat belongs on the problem and its cost, not on the person.
Exploratory is for decisions that are still open. It allows “I don’t know,” linked questions, and a direct request for judgment. For public writing, this is the primary register because fake certainty is worse than an unfinished thought stated honestly.
Authority is for decisions that are made and stakes that are real. It is declarative. It does not pretend every option remains open after a ruling has been made.
Relational is inferred, and that label needs to stay attached to it. The evidence comes mostly from my briefs about what I want to say to another person, not from a strong corpus of finished messages I wrote myself. It suggests that I name a feeling directly and then state what I need. It does not justify pretending the system knows my finished relational voice.
The selection rule matters more than phrase matching. Audience + stakes + decision state should choose the register. A public article should usually be Exploratory with an Authority spine. A consequential decision should not be softened into generic friendly-professional language. A patient-facing message should never borrow the heat of Challenge.
Rhythm Can Survive Correction
My raw messages contain typos because I type quickly. Reproducing those errors would be imitation, not authorship.
The profile corrects spelling and grammar while preserving rhythm: short paragraphs, direct openings, contractions, fragments when they carry the thought, and questions when the decision is genuinely open. No deliberate typos. No fake roughness.
Accuracy beats voice. Every time.
If a technical, clinical, financial, or factual statement cannot be both accurate and voice-consistent, the accurate version wins. A sentence that sounds like me but is wrong is worse than a plain sentence that is right.
That rule also limits certainty. The corpus count, date range, filtering, and weighting are claims I can check. A claim that this profile captures my “authentic self” would be much larger than the evidence allows.
Anti-Patterns Need Two Labels
Some anti-patterns came from evidence in my own messages. Certain words, openings, and polished transitions are almost absent. Warm-up sentences delay the point. Long closing summaries repeat what was already clear. Corporate neutrality often removes the actual decision.
Other checks are borrowed from Nate’s originating specification and from common AI-writing failure modes. Those can still be useful, but they should not be presented as if 13,839 messages independently proved every one of them.
The distinction is simple: observed absence is evidence about my corpus. A borrowed check is a test worth running. They are not the same claim.
There is one rule underneath both: start with something you meant.
Do not begin with generated prose and ask a profile to decorate it. Begin with the decision, question, fact, concern, or feeling that was already yours. The system can help shape it, but it cannot manufacture the intent and then certify the result as authorship.
The Authorship Gate Is Not Optional
Before anything goes out under my name, I want five questions answered:
- Did you read it? Not skim the opening and trust the rest.
- Do you mean it? A fluent sentence is not automatically my position.
- Which claims and numbers did you check? Name them rather than saying the piece was “reviewed.”
- What did you reject or materially change? Authorship includes refusal and correction, not only approval.
- What remains uncertain? Uncertainty should survive editing when the evidence is incomplete.
This gate is deliberately plain. It makes authorship visible at the point where it is easiest to fake: after the draft looks finished.
If I cannot answer those questions, the post is not ready. The presence of a voice profile does not lower that standard. It raises it because the output may feel familiar enough to escape scrutiny.
Rejections Are Better Than Catchphrases
The profile will be tested on unseen work. That is the only useful next step.
I do not want it optimized against the same messages that produced the rules. I want new drafts, real edits, and specific reasons for rejection. Did I remove a hedge because the decision was already made? Did I restore uncertainty because the evidence was weaker than the draft claimed? Did I change a Relational message because directness had become an attack?
Confirmed reusable rejection patterns should update the profile. One-off preferences should not. A repeated, clearly explained correction can become a rule. A random phrase I happened to use once should remain a phrase.
This is the opposite of phrase mimicry. The goal is not to sprinkle in my favorite punctuation, copy shorthand, or force every paragraph into the same cadence. The goal is to preserve how I choose a register, where I put certainty, what I refuse to claim, and what I protect when I revise.
The first unresolved test is concrete: on the next ten unseen drafts, can the profile reduce my material edits without increasing unchecked claims or making me less willing to reject the draft?
That test follows the same rule as my Day Zero audit: make the work inspectable before calling it ready.