The homepage shows a one-line summary of each contribution. This page is the long version: for every pull request I've opened on RedPlanetHQ/core and RedPlanetHQ/town, what was broken or missing, what I actually built, where it landed in the codebase, and what changed as a result. Numbers are the ones GitHub reports on the PR itself.
An open-source, self-hostable memory backbone — a "personal AI OS" that gives agents like Claude Code, Codex and Cursor a shared, portable memory graph over MCP. I contribute across its stack: MCP tooling, third-party integrations, the self-hosted local-LLM path, integration auditing, and agent-service test coverage.
Shipped 16 read-only MCP tools across two features — a full Postman integration (14 tools) and skills-as-tools (list_skills / get_skill) for coding agents
Unblocked self-hosted deployments end-to-end: fixed four defects on the local-Ollama path with zero change to the hosted OpenAI / Anthropic / Google providers
Closed an audit gap by populating IntegrationCallLog.source for API-triggered actions — the CORE half of Town's NPC action-attribution work
Fixed production bugs across API-key deletion, multi-step chat rendering and Ghost HTML publishing
Added 62 fast, deterministic unit tests over previously untested agent helpers (action-plan parsing, tool-result truncation, history prep)
Built @core/postman, a read-only Postman integration with personal-API-key auth. Runs an incremental sync every 15 minutes across workspaces, collections, environments, APIs and monitor runs (deduped via lastSyncTime + seen-run IDs), and exposes 14 read-only MCP tools over the Postman REST API.
Exposed user-defined CORE skills as MCP tools so coding agents — Claude Code, Codex, Cursor — can discover and load skill instructions on demand instead of pasting them in. Added list_skills (paginated) and get_skill (by id or slugified name) in a new app/utils/mcp/skill.ts module that mirrors the existing MCP modules.
Made self-hosted local Ollama work end-to-end. Fixed four defects: the /api/chat base URL, provider inference short-circuiting to Ollama under CHAT_PROVIDER=ollama (including gpt-prefixed ids), a direct model build for the main conversation agent, and JSON-Schema injection so structured extraction validates on the first pass. Hosted OpenAI / Anthropic / Google paths were left untouched.
integrationsPopulate IntegrationCallLog.source for API-triggered actions
Mergedmerged Jul 2026+32−02 files · 2 commits
Closed an audit gap: integration actions triggered over the API now record who triggered them. POST /api/v1/integration_account/:id/action accepts an optional source (max 128 chars), threaded through executeIntegrationAction into every IntegrationCallLog row, and custom MCP executions now write a call-log row on success and failure like first-party integrations already did.
Fixed blank chat messages on multi-step agent turns. message.parts.find(type === 'text') was grabbing the empty text part emitted for the tool-use step; replaced it with filter + map + join to concatenate every non-empty text part before handing it to the TipTap editor.
api-keysDelete the selected API key, not the last one
Mergedmerged May 2026+13−181 file · 1 commit
Fixed API-key deletion always removing the last key. useTokensColumns shared one open/setOpen state across every row dialog, so all dialogs opened at once and portal stacking left only the last visible — always deleting the last token. Moved visibility into each row's own dialog and switched to DialogClose.
One-line fix to Ghost publishing: append ?source=html to the Admin API request so Ghost accepts HTML-generated post content. Reproduced the failure locally and verified the fix against the Ghost Admin API docs.
Aligned the CLI gateway banners with the redesigned UI. Updated gateway register, env-bootstrap, the Railway and Docker setup flows, and the Tauri app to point users at Sidebar → Gateways → New Gateway.
Added 62 unit tests across three files for previously untested pure-logic agent helpers — parseActionPlan / normalizeActionPlan / createFallbackPlan (30), truncateString / truncateToolResult (20), and prepareHistoryParts (12). No DB or network, so they stay fast and deterministic.
02 / Town
Discord, but you walk around a pixel town — where the NPCs have skills
A multiplayer pixel world where AI NPCs walk around, hold conversations, and act on real connected tools through CORE. My work made Town runnable without a paid API key, gave NPCs real capabilities on their residents' and visitors' own accounts, and bootstrapped the repo's first test suite.
Added Ollama as a third LLM provider so Town runs on a free model — app side, town-cli side, and a one-line fix so streamed Ollama chats actually debit aura (#37, #45, #47)
Built visitor integration grants: a signed-in visitor can lend an NPC their own CORE integrations for a conversation, with per-person token routing so one NPC acts on two accounts safely (#72, merged via #73)
Designed the owner-side grant panel with the guardrail, audit trail and aura pricing that the visitor feature was later built on (#71)
Bootstrapped testing: Vitest plus 61 unit tests over security-relevant modules — prompt sanitisation, town codes, and HMAC-signed events (#34)
Fixed onboarding by adding the .env.example files the setup guide already told contributors to copy (#20)
npcLet signed-in visitors lend NPCs their own CORE integrations
Merged in a follow-upmerged Jul 2026+806−769 files · 5 commits
Closed in favour of #73 — "all the commits are in that PR". All five of my commits (e0e7f3f…b6d43d0) are the first five of #73's six, merged to main on 27 Jul 2026.
Let a signed-in visitor lend an NPC their own CORE integrations for a conversation, so the NPC acts on the visitor's account instead of the owner's — without the owner ever seeing the visitor's credentials. Adds an in-chat consent popover, a soft-deletable VisitorIntegrationGrant table, and per-person token routing inside buildNpcTools.
In reviewopened Jul 2026+682−159 files · 5 commits
Open. The maintainer clarified mid-review that the issue meant visitor-granted access, not owner-granted — so I built that instead as #72. This stayed open as an optional owner-side convenience panel.
An owner-only ACCESS panel that grants specific CORE integrations — and optionally specific actions within them — to individual NPCs, so characters can act on the resident's connected tools during chat. Ships with an owner_only guardrail, a TownActivity audit row per executed action, and aura pricing.
Added Ollama as a third LLM provider alongside Anthropic and OpenAI, via Ollama Cloud's OpenAI-compatible endpoint, so Town can run on a free or lower-cost model without a paid key. Provider priority stays anthropic → openai → ollama, so existing deployments are unaffected.
The companion to #37 on the CLI side: pickModel() gets an ollama branch, and town test set-key ollama <key> persists to ~/.town/config.json alongside the existing keys — so contributors can test NPC prompts without a paid key.
llmRequest stream usage from Ollama so chats debit aura
Mergedmerged Jul 2026+1−01 file · 1 commit
One line: set includeUsage: true on the Ollama provider. OpenAI-compatible APIs only report token usage on streamed responses when stream_options.include_usage is sent, so without it every streamed chat on an Ollama deploy logged 0/0 and debited no aura.
In reviewopened Jul 2026+1,132−16 files · 4 commits
Open — rebased on main at the maintainer's request; tests and typecheck green.
Added a test runner to a repo that had none, plus 61 unit tests over three pure, security-relevant modules: prompt sanitisation, town-code parsing, and HMAC-signed event envelopes. The setup deliberately mirrors RedPlanetHQ/core's, package versions included, so both repos stay consistent.
The setup guide told contributors to run cp .env.example .env, but the file didn't exist — the repo's .env* ignore rule also excluded .env.example. Fixed .gitignore and added a root and a hosting/ example covering every variable the app and docker-compose actually read.
Every claim on this page is checkable — each entry links to the pull request it describes. Reviewing something I wrote? omjeem558@gmail.com, or the résumé.