Skip to content
View cnpierrepapi's full-sized avatar

Block or report cnpierrepapi

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
cnpierrepapi/README.md

Hi, I'm Chukwudumaga Nnawuogo 👋

  • 🏗️ Founder & Director, Onenept Studios (Delaware C-corp). I build software that shows its work.
  • 🔍 Mostly that means agents. They take public data and turn it into actual business: leads, partnerships, someone getting an email they'll answer. Then there's the boring half, the checks that prove the agent did what it says it did. SYZYGY is the one I'm building right now, and it's already live at syzygybot.com. ASHEARD is live too.
  • 🐈 Neko On Arc is mine too. 377 cats on Robinhood Chain. Each one has its own wallet and trades memecoins by itself, and nobody holds the key, me included. Minted on OpenSea on 14 Oct, more at nekoonarc.com. I build for clients as well.
  • 🤝 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

📬 Contact


🏆 Achievements

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.
  • Eight of my bug reports became fixes. CALL-E's maintainers shipped a merged PR for each and closed them: calle-docs#39, #41, #43, #44, call-e-integrations#107, #108, #109, call-e-dify-plugin#2.
  • 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. Later the same maintainer re-ran the fix and said nothing was blocking it.
  • Credited by name in datahub#19537, the cleanup that came out of my schemaField work.
  • asheard is on npm, published from CI with signed provenance.

🛠️ Languages

Python TypeScript JavaScript Java SQL GraphQL HTML/CSS


🤖 AI & data

Gemini Google ADK PyTorch scikit-learn Pandas NumPy DataHub Jupyter


⚙️ Web & data stores

Next.js React Node.js Express.js FastAPI Tailwind CSS Three.js Prisma PostgreSQL Supabase Neon Redis SQLite


☁️ Cloud, payments & tooling

Vercel Google Cloud Cloud Run Firestore AWS Docker Stripe Paystack Solana Solidity npm Git GitHub Actions


💻 Most used languages

Measured across my own repos with the GitHub languages API, not estimated. Last counted 20 Oct 2026.

TypeScript 56 percent Python 37 percent JavaScript 2 percent HTML and CSS 2 percent


🚀 Projects

🪐 SYZYGY | Next.js, TypeScript, Qloo, Gemini on Vertex, Neon | Oct 2026 | Live

  • A whole commercial team for entertainment, and every one of them is an agent. Most taste data ends up in a slide deck. SYZYGY puts it on payroll.
  • 17 agents read Qloo's audience data looking for a brand, artist or show whose fans overlap with someone else's in a way that sells. Then they do what a sales team would: write the case, find the buyer, draft the email, follow up, read the reply. A person only steps in once someone says yes.
  • Seven desks (sales, touring, sponsorship, talent, venues, market watch, podcasts), and every message passes a clearance check before it goes out. It watches 762 news sources and 1,619 venues, and has 133 buyers verified so far.
  • The floor is public. Each pair the agents are working is a star on the homepage, and you can click into any of them to see the numbers and why it moved. Built for the Qloo hackathon, which closes 30 Oct.

🏷️ LOWBALL | TypeScript, Anchor, Solana, x402, Gemini | Oct 2026 | building

  • A shop where the shopkeeper is an AI and every price is up for haggling. Talk it down, then pay what you agreed in USDC on Solana through x402. Or pay in friends, as long as they turn into real paid orders.
  • The model does the talking but it never sets the price. A plain engine decides, so you can't sweet-talk or jailbreak your way to a free anything. Every deal lands on chain as a receipt.
  • For the Encode Club Solana hackathon. Final submission 8 Nov.

📞 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.

📈 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.

🛂 MIGRAGENT | Gemini, Google ADK, Cloud Run, Firestore, Python | Aug to Oct 2026 | archived

  • An AI reporter on the immigration beat. Every morning it read the official immigration pages of 13 countries, worked out what changed, and filed it to the wire. Every claim had to be a sentence lifted from the government's own page, so it had nothing to make up.
  • By mid-October: 147 rule changes caught, 39 stories filed, 104 guides, out of 1,355 official pages. Each story ended with a count of how many claims were found word for word and how many got cut.
  • Archived on 19 Oct with the model switched off. The whole thing is still in the repo.

🩺 Solana Error Doctor | TypeScript, Solana | Jun 2026 | archived

  • Paste an opaque Solana error, get the root cause and a verified fix. A skill for coding agents, built for the Solana AI Kit. The kit's maintainers passed on it because the kit already covers that ground, so it's archived.

🤝 Upstream contributions

DataHub

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.

CALL-E

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. Eight are fixed and closed. Two more got moved into their main repo, then closed in October as superseded by their V2 API. Not a fix for the old one, the maintainer was clear about that, but V2 doesn't have the problem. 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-python#49 · open · Pass zero as the polling interval when waiting on a call and it hit the API nonstop until timeout. The goals side already checked for that. Now both do.
  • n8n-nodes-calle#5 · open · The phone-number masking showed short numbers in full, which is the one case masking exists for.
  • server-sdk-typescript#17 · closed · Two wait functions in the same package with opposite ideas of when a call is finished. One of them sometimes handed back a call with no result on a call that had one. SDK 1.0 fixed it, so I closed it.
  • 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.

Google ADK

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. The maintainer reproduced the test run independently, 49 of 49, and passed it on for the second review.
  • adk-python#2425 · shipped · 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. Cancellation landed on main on 1 Oct, with a fix that closes off exactly those leftover calls, and the maintainer who closed it thanked both of us for the investigation.
  • adk-python#2792 · fixed · Stopping an agent early printed a stack trace for something you chose to do. I posted the aclose() workaround and why it works. It's fixed in 2.12.0. Another contributor checked it on main, then I ran my repro against the release: a plain break is clean now, ten runs out of ten. The thread stays open for a separate request about turning tracing off.
  • 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.

Smaller ones

  • datahub#18686 · open · The LangChain and ADK hooks in datahub-agent-context can't be imported on a clean install. The package pins a version of acryl-datahub that doesn't have the module it imports.
  • effectstream#895 · open · The Midnight cross-chain template doesn't build from a clean clone. Five separate reasons, each with the fix that worked.
  • phantom/blocklist#1819 · open · A whitelist request for a domain Phantom was flagging.

🧭 How I work

  • 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.

Popular repositories Loading

  1. blocklist blocklist Public

    Forked from phantom/blocklist

    JavaScript

  2. onenept-site onenept-site Public

    TypeScript

  3. solana-error-doctor solana-error-doctor Public archive

    Diagnostic skill for AI coding agents: paste a Solana error, get the root cause and the verified fix. Symptom-routed chapters (Anchor, toolchain, transactions, tokens, RPC, wallet, oracles) + /sola…

    JavaScript

  4. solana-ai-kit solana-ai-kit Public template

    Forked from solanabr/ai-kit

    Claude Code / Codex / AI configs for the expert Solana builder. CLAUDE.md, agents, commands, hooks, rules, skills and settings across Web, Anchor, Pinnochio, Unity, Mobile, security and more.

    Shell

  5. cnpierrepapi cnpierrepapi Public

    Profile

  6. ledgerline-ai ledgerline-ai Public archive

    Trust ledger for AI data agents: settled claims, calibration scores, and a trust-annotating MCP gateway for DataHub

    Python