- 🏗️ Founder & Director, Onenept Studios (Delaware C-corp). I build software that shows its work.
- 🔍 Right now that means two things. AI agents that tell you where every answer came from, like MIGRAGENT and ASHEARD. And on-chain tools that read the chain themselves instead of trusting someone's dashboard, like Hashcats live and leaf-alert.
- 🧩 I also build for clients. A puzzle-gated NFT allowlist and an online shop are live this month.
- 🤝 When something I build on turns out to be wrong, I send the fix back upstream. Three of those are merged so far.
- 🎓 MSc IT Management with Data Analytics, GBS Malta (in progress) · MSc Innovation, Strategy & Entrepreneurship, Grenoble École de Management (Distinction) · BEng Electrical & Electronics Engineering, Covenant University
- 🚀 Open to remote and contract work: AI Product Manager, Customer Centric Engineer, Forward Deployed Engineer
- 🌐 Site: onenept.com
- 📧 Email: cnpierrepapi@gmail.com
Every line links to the thing itself.
- Three pull requests merged into other people's projects. Two in DataHub in August, one in CALL-E in September.
- Six of my bug reports became fixes. CALL-E's maintainers shipped a merged PR for each and closed them: calle-docs#39, #43, #44, call-e-integrations#107, #108, #109.
- A Google ADK maintainer checked my diagnosis on adk-python#6880 against the client library, said it lined up exactly, and asked me for the fix.
- Credited by name in datahub#19537, the cleanup that came out of my schemaField work.
asheardis on npm, published from CI with signed provenance.
Measured across my own repos with the GitHub languages API, not estimated. Last counted 14 Sep 2026.
📞 ASHEARD | TypeScript, Next.js, Upstash Redis | Sep 2026 | Live
- CALL-E tells you how a phone call ended in three different places, and the three disagree. ASHEARD reads all of them and says which field said what. When no field says anything, it says that too, instead of guessing.
- The finding that made it worth building: a voicemail box that "completed the task" and answered nothing scored 0.90 confidence. A call that really did get the right answer scored 0.92. Same label. There is no threshold between them.
- On npm as
asheard. The review console and a skill built on it are merged into CALL-E's own repo.
🛂 MIGRAGENT | Gemini 3.5, Google ADK, Cloud Run, Firestore, Python | Aug 2026 | Live
- You are moving country or getting licensed to work in one. Fill one short form, upload the documents you already have, and an agent reads the official government sources and hands back a guide you can save as a PDF. No chat window.
- Over 2,000 live requirements across 16 lanes, and every single one carries the source link plus the date it was read. No source, no claim: it goes to an open questions section instead.
- A scheduled round re-reads the sources every day, so when a rule moves the guide moves with it.
📈 Warmleads | Next.js, TypeScript, Supabase, Prisma, Stripe, Paystack | 2026 | Live
- Scores local businesses on how badly they need what an agency sells, so outreach starts from evidence instead of a list. 10,675 scored businesses, live billing in two currencies.
- Taught me more about pricing than about code: the first pricing model needed roughly 1,400 subscribers to work. The fix was the customer, not the feature set.
📄 Dossier | Next.js, TypeScript, Voyage embeddings, pgvector, NDJSON streaming | 2026 | Live
- Answers you can check. Bring a PDF, pasted text or a URL and every answer cites the passages it came from. Or name a company and a tool-using agent reads their site and the web, then hands back a brief.
- Everything streams, so you watch each search and each page open as it happens instead of staring at a spinner.
🩺 Solana Error Doctor | TypeScript, Solana | 2026
- Turns an opaque chain error into a root cause and a verified fix. Shipped as a public skill for coding agents.
One thread, running since July 2026, on how DataHub models incidents. DataHub could raise an incident on a table but not on a column, so the metadata model and the docs disagreed about which entity types were actually supported. I took the column case and the documentation.
- datahub#19115 · merged 20 Aug 2026 · Incident support for
schemaField, so a data quality problem attaches to the column it belongs to instead of the whole dataset. - datahub#19405 · merged 24 Aug 2026 · The permission check for a column incident asked whether you could edit the column, and nobody holds permissions on a column. It now asks about the parent dataset, which is where permissions actually live.
- datahub#18685 · open · Generates the supported-entity table from the metadata model at build time, rather than asking someone to remember to update a page.
- datahub#18684 · open · Two self-hosted MCP troubleshooting entries, both from problems I hit myself.
- datahub-skills#66 · open · A skill that traces which models and dashboards a dataset change is about to break.
The UI half of the column work is built and tested on my fork. I asked before opening it, and the maintainer said the product side isn't settled yet. Fair enough. It waits.
I built ASHEARD on CALL-E's phone-call API in September, placed real calls, and wrote down every place the docs and the payloads disagreed.
- awesome-phone-call-agents#337 · merged 11 Sep 2026 · A skill for reading what actually happened to a call, plus a console that shows the answer next to the field it came from. Four rounds of review before it went in, most of it about security, and the first round found a real hole in my demo. Fixed properly, not patched.
- Fourteen issues across their docs, integrations, both server SDKs, the n8n node and the Dify plugin. Six are fixed and closed. The one I'm happiest about is calle-docs#39: the first example in their authentication guide returned 405 for a good key and a bad key alike, so it couldn't do the one job it was there for.
- server-sdk-typescript#17 · open · Two wait functions in the same package with opposite ideas of when a call is finished. One of them sometimes hands back a call with no result on a call that has one.
- awesome-phone-call-agents#196 · open, p1 · Someone else's timestamp bug. I sent the validation they asked for, including the part that goes against the reporter's own theory.
Building MIGRAGENT on Google's Agent Development Kit turned up four things worth sending back. One issue is mine and is now a pull request, opened after a maintainer asked for it. The other three are threads somebody else opened where I could add the measurement or the workaround that was missing.
- adk-python#6880 · open · A custom model class gets one config object holding 35 fields that belong in three different places in the request, and nothing says which is which. Put the tools in the wrong half and the call still returns 200, so your agent silently has no tools. A maintainer checked the field table against the client library and confirmed it.
- adk-python#6935 · open · The fix. Instead of documenting where each field goes, it hands the job to the converter the official client already uses, so there's one copy of the mapping and it moves when the library moves. My own hand-written list had already gone stale by two fields in a day, which was the argument.
- adk-python#2425 · open · A design for cancelling a running agent. Another contributor measured that cancelling leaves a sync tool and an async tool in different shapes. I traced where ADK passes the leftover call on to the model and ran it on Gemini. Latent, not a live bug, and I took back an earlier line of mine that said otherwise.
- adk-python#2792 · open · Stopping an agent early prints a stack trace for something you chose to do, plus the workaround.
- python-genai#782 · open · Thinking spends two to three thousand tokens before writing a character, so any output limit under about 4k is a zero budget dressed as a generous one.
- effectstream#895 · open · The Midnight cross-chain template doesn't build from a clean clone. Five separate reasons, each with the fix that worked.
- solana-ai-kit#19 · open · Adds Solana Error Doctor to the registry.
- phantom/blocklist#1819 · open · A whitelist request for a domain Phantom was flagging.
- Build on real data. Live markets, real documents, production lineage. A demo that only works on fixture data has not been tested.
- Prove it. A claim should link to a source or settle on chain. I would rather ship a measured result that is inconvenient than a confident one I cannot support.
- Build for one user first. If it is not useful to a single named person, scale will not save it.
- Test on the deployed thing. Localhost agrees with you. Production does not.
