Local professional identity engine
2026 · Open-source npm release
seco
Capture one career story once, then render it for every surface
I designed and built a local-first MCP system that turns guided, reviewed professional memories into reusable material for resumes, LinkedIn, GitHub, Obsidian, LaTeX, cover letters, bios, and job-specific applications.

Quick scan
TL;DR
The shortest version: what changed, what shipped, what was verified, and where the proof stops.
Overview
Problem
Professional evidence is repeatedly rewritten for resumes, profiles, portfolios, and applications, which makes the underlying story easy to fragment or lose.
Move
Made a reviewed, structured experience memory the durable source of truth, then treated every professional surface as a renderer over that record.
Outcome
Published an open-source local MCP package with guided intake, 13 tools, 10 render surfaces, job-description tailoring, Obsidian export, and an install-artifact release gate.
Scope
Independent product, interaction, systems, and full-stack engineering across the core library, MCP transport, local browser UI, packaging, and launch site.
Proof
- Product surface
- 13 MCP toolsCurrent definitions cover intake, review, memory CRUD, rendering, tailoring, and exports.
- Render system
- 10 output typesOne structured memory can produce resume, LinkedIn, GitHub, Obsidian, LaTeX, cover-letter, and bio formats.
- Release checkpoint
- 100 testsThe June 2026 journal records a passing 1.0.1 release check and installed-tarball MCP smoke.
- Build history
- 7 commitsThe inspected application history spans May 25 through June 21, 2026.
01 · Context
The product premise was a memory problem, not a writing prompt.
Resumes, LinkedIn profiles, GitHub READMEs, portfolios, and cover letters all ask for different versions of the same underlying evidence. seco began from the premise that asking a model to rewrite an unstructured history each time would keep the output flexible but leave the source material fragile.
The alternative was to capture the experience itself: situation, responsibility, action, result, skills, metrics, dates, and context. Once that evidence is reviewed and stored, each destination can become a constrained view over the same professional memory.

02 · The decision
Keep one canonical record and make every interface a transport layer.
Capture in conversation. Review before save. Render from structured evidence.
All business logic lives in the core workspace: intake state, draft extraction, scoring, rendering, persistence, and exports. Claude Desktop, Claude Code, the MCP App card, and the localhost browser call that same service layer instead of reimplementing product behavior in each surface.
The product also separates draft inference from durable memory. After each answer, seco extracts a structured draft, reports confidence and missing fields, and asks the highest-value next question. In the preferred flow, the draft is not committed until the person reviews the structured fields and explicitly saves it.
Engineering noteLocal-first is a boundary, not a blanket offline claim.
SQLite and configuration live under the user’s local seco directory. External model and transcription calls happen only through user-supplied keys, and optional voice providers are not required for text intake.
- The canonical database path is ~/.seco/seco.db with WAL mode and foreign keys enabled.
- First-run setup writes provider keys to ~/.seco/.env with file mode 0600.
- Anthropic handles extraction and rendering; Deepgram and OpenAI are optional voice paths, so local-first does not mean all processing stays offline.
03 · What shipped
A complete loop from raw experience to reusable career material.
Text intake stays inside MCP chat while a native intake card shows captured details, confidence, quality, and missing fields. Voice intake moves intentionally to the localhost browser, where microphone access starts only after an explicit action and can fall back from Deepgram streaming to OpenAI Whisper or typed responses.
Reviewed memories can be listed, updated, versioned, deleted, scored against a job description, and rendered across ten output types. The tailoring pipeline selects the strongest matching experiences, produces role-specific material, records skill-gap analysis, and stores the application snapshot alongside the source memories.
Obsidian is an optional workspace mirror rather than a replacement database. Exported notes use stable filenames, stay within the selected vault boundary, and refuse silent overwrite unless it is explicitly requested.
One local companion

Engineering noteThe packaged artifact is tested as a product surface.
The release gate goes beyond testing the workspace: it packs the npm artifact, installs it in a temporary project, starts the installed MCP binary, and verifies the exposed tool list.
- The current journal records 100 passing tests, a successful build, and a zero-vulnerability production audit for the pending 1.0.1 release state.
- Dry-run packaging and installed-tarball MCP smoke passed after fixing a runtime dependency boundary missed by workspace tests.
- MCPB staging completed, but final bundle packing remains unverified because the release environment did not have the external mcpb CLI.
04 · Evidence
The evidence is an installable system and the release constraints it exposed.
seco’s application repository records seven commits from May 25 through June 21, 2026, all authored by Aidan. The first engineering journal entry identifies seco-mcp@1.0.0 as already published; subsequent work added release automation, native MCP UI, persistent intake preferences, diagrams, Obsidian export, and prepared a 1.0.1 release state.
The checked-in suite contains 100 test definitions across the core, MCP server, and web UI. The latest journal records that all 100 passed as part of the 1.0.1 release check, along with the build, production dependency audit, dry-run package, and installed-tarball smoke.
No usage, conversion, retention, or hiring-outcome analytics were found. The case-study claims are therefore limited to source behavior, release history, recorded verification, package boundaries, and captures rendered from the actual checked-in interfaces.
05 · Reflection
A professional memory earns trust through review, portability, and proof.
The central architecture decision held: keeping product logic in one core package made it possible to add an MCP-native card, preserve a browser voice fallback, and extend outputs without forking the meaning of an experience across clients.
The release work also changed the definition of done. A green monorepo build did not prove that someone else could install the npm artifact. Testing the packed binary revealed a real dependency boundary and made distribution evidence part of the product, not only a maintenance concern.
The next gap is external validation. The repository demonstrates a coherent local workflow and defensible data boundaries, but future work should measure whether people complete intake, return to their saved memories, and trust the generated material enough to use it in real applications.