Hey all, a special release this week - AI Counterpart is now a public repo. I’ve had some time recently to actually think about what I want to build, and I was going back to my Commodore 64 days with Eliza. I wanted it to actually be something special. For that to be something special, I needed to build a full system.
I originally created John OS as something that I was using personally. That was going to be basically my version of a clone, but that doesn’t help you. I want everyone else to be able to build off the same kind of concept, so that’s why I created Counterpart, which is actually now a public repo.
Take a look. I wrote a little article about it today, and I think that’s going to be really helpful for you. Let me know what you think. All right, let’s get into it.
I wanted an AI that could answer questions the way I would. Use my knowledge. Sound like me. Help someone work through a problem without making them dig through everything I’ve ever written.
And be clear that it is AI.
That last part matters. I’m building a counterpart, not trying to convince someone they’re talking to the actual John.
The project started inside John OS, my personal repository for context, writing, and how I work. Now the reusable part has its own public home: Counterpart.
You can download it, run it locally, and start experimenting with your own version.
It is early. I like what it is becoming. I also have a much better appreciation for how much work hides inside the phrase “make it sound like me.”
The first problem was that it wouldn’t answer
An early version kept telling me, “I don’t have enough in the approved material.”
Fair enough. I don’t want it inventing my opinions.
However, if I ask a basic question, I still want a useful answer. My knowledge files should give it context, not make it helpless whenever a question falls outside them.
I also didn’t want every answer introduced with “From John Mann’s source.” I wanted a conversation, with sources available when they matter.
That pushed the work in a more useful direction: personal knowledge, general knowledge, and current information need different treatment.
Something I wrote can support a claim about my views. A web search can help find current information. Neither gives the model permission to invent a personal experience and put my name on it.
A confident answer in my tone is still wrong if I never said or believed the thing.
The model is only one part of this
I started with a local model because I wanted control over where the data went. I also wanted to swap models without rebuilding the whole product around one provider.
Then the local server slowed down my computer enough that I wanted it out of the way so I could play for a bit.
Very sophisticated product research.
Local inference uses real hardware. “Runs on your machine” is a choice with tradeoffs, not a promise that it runs comfortably on every machine.
The current prototype uses Ollama by default and supports a configurable, compatible local endpoint. You choose and download the model separately.
There is also an optional OpenAI bring-your-own-key path. It requires an explicit choice and disclosure of what leaves the machine. That request can send persona instructions, relevant knowledge excerpts, and conversation history to the provider. There is no automatic cloud fallback.
I haven’t verified a live cloud-model call yet, so I’m not calling that part battle-tested.
The point is to keep the person’s context separate from the model serving it. I want to be able to change the engine without starting over on what makes the counterpart useful.
Your knowledge needs boundaries
The public repository does not contain my personal corpus.
It includes a fictional coffee-roasting expert named Mira Vale, with sample knowledge files. That gives people something concrete to run without turning my private material into everyone’s starter kit.
A persona defines who the counterpart represents, its domain, its voice, and the files it is allowed to use. My own context stays in John OS.
That separation is important if this becomes a product people use to share their expertise. You should be deliberate about what belongs in it. Dumping every document you own into a folder is a pretty lazy answer to a trust problem.
Start with material you understand and have the right to use.
Then ask questions that expose the gaps.
Does it explain a tradeoff the way you would? Does it ask for missing context? Can it say it doesn’t know without shutting down the conversation?
Those answers will teach you more than a flattering paragraph that happens to use your favorite words.
Research is still a work in progress
I wanted the counterpart to look beyond my files when something needs current information.
There is an opt-in web search path now. Most results are short search snippets and links, not full pages the system has read and verified. There is a narrow official-document check for Ollama’s macOS requirements, but that is not a general research system.
The model can still make unsupported claims.
So I treat those links as places to investigate, not proof that the whole answer is correct. A citation does not do the thinking for you.
Try it with something you actually know
Counterpart is available on GitHub under the MIT license. The README covers the local setup, privacy choices, and current limitations.
My suggestion: start with the fictional example. Then try a small set of your own material.
Ask it a question you answer all the time. Ask a follow-up. Disagree with it. See whether the response reflects your reasoning or just sounds vaguely like you.
That’s the work I’m interested in.
I want people to make their expertise more useful to others. Getting the voice right helps. Earning trust takes a lot more conversation.
Work with Me
Building something with AI and want help turning the idea into a useful product? Work with me at Startups and Code.



