Skip to content

Wayfinder: Finance Guru becomes a Claude Code + Codex plugin #131

Open

Description

@AojdevStudio

Planning artifact for converting this repo, in place, into an installable agent plugin. The repo keeps its traction; the owner's private instance data leaves it entirely.

Decisions (locked 2026-08-31)

  1. Open-core line: everything open. All skills, agents, and the Python engine ship free under the existing AGPL-3.0. The commercial layer is convenience, never withheld features. AGPL already prevents proprietary forks.
  2. Keepfolio relationship: the plugin is the funnel. Finance Guru is the free, self-hosted, CLI-native experience; Keepfolio is the polished product for people who will not run a terminal. The README says so explicitly.
  3. Connectivity: CSV-first. v1 works on day one with broker CSV exports. SnapTrade/SimpleFIN live sync stays in the plugin as documented bring-your-own-credentials for power users. No paid-API wall in the first hour.
  4. First user: technical operators already running Claude Code or Codex. Onboarding may assume CLI comfort, uv, and API-key literacy.

Phases

Each phase lands as its own reviewed PR train through the layer-7/history push gates. No commit in any phase may contain household data; the gates enforce it.

Initiative memory: kp-b71f778eef854cbbac9eb2f981c870e1.

Activity

  1. linear-code commented on Sep 1, 2026

    @linear-code
  2. AojdevStudio commented on Sep 1, 2026

    @AojdevStudio
    OwnerAuthor

    P2 plan (2026-09-01)

    One PR per unit. Each passes the layer-7 and history push gates on its own.

    PR Change State
    P2-A Untrack the strategies script, the .memory note, and .dev/meeting-notes. Ignore rules added. #132 merged (8d441f8)
    P2-B One InstancePaths model in src/config/instance_paths.py owns every private path, resolved from FIN_GURU_DATA_ROOT with cwd as the default. Legacy per-file env overrides (FIN_GURU_PRIVATE_DIR, FIN_GURU_HEDGING_DIR, FIN_GURU_DIVIDEND_SCHEDULES, FIN_GURU_PORTFOLIO_DIR) are deleted with their callers migrated. DATABASE_URL stays optional and defaults to family_office.db under the root. .env loads from the root. pyproject.toml gains a build system so src imports from any cwd via uv run --project. #133 merged (c70d05b)
    P2-C Prose sweep. Skills, agents, tasks, workflows, and the fin-core session hook point at the instance layout and invoke tools as python -m src... so they run with the instance as cwd. Done with a codemod; its mapping table is in the PR body. #134 closed by GitHub when its base was deleted; continued as #136, merged (d0515b1). 17 review threads triaged; pre-existing doc bugs tracked in #137
    P2-D src/cli/instance_init.py scaffolds a local-only instance (layout, git init, .gitignore, .env template, CLAUDE.md) idempotently, plus a runbook for moving the owner's existing data. #135 open against main, rebased; now also makes the instance a uv project depending on the engine, so uv run python -m src.<tool> works from the instance with no flags

    Instance layout (decided)

    Flat. The instance root holds .env, user-profile.yaml, config.yaml, system-context.md, family_office.db, dividend-schedules.yaml, and the directories imports/ (broker CSV drops, was notebooks/updates), analysis/, tickets/, strategies/, hedging/, reports/, auto-tickets/, notes/. The fin-guru-private/fin-guru/... nesting and the three competing profile locations go away. The repo-relative layout only ever existed because the data lived inside the checkout.

    Findings while grounding

    • The history gate scans added lines only, so untracking passes without a rewrite. Old blobs stay in history; that decision belongs with chore(privacy): clear remaining layer-7 standing findings on main #130.
    • src is not importable from outside the checkout today. A hatchling build section fixes it, verified from a scratch cwd on 2026-09-01.
    • The engine currently searches three different profile paths and the session hook reads a fourth. None of the private ones exist on disk. P2-B collapses them to one.
    • The scanner on this machine warns that scripts/qa/pii-replacements.txt is missing and falls back to the template, so repo-specific literals are not detected locally. Worth restoring from BWS before P2-C's large sweep.

    Scope note

    "Owner sessions move to the instance" needs the skills to invoke the engine with the instance as cwd. P2-C gives them that form. The onboarding wizard still writes its private files under the repo; P2-D's scaffold replaces that path for the owner, and the wizard's rewrite belongs to P3's onboarding skill.

    Proposed owner instance path: ~/Documents/Irondi-Household/family-office-data, local git, no remote.

    Merge order: #132, #133, #134, #135. The Python CI workflows trigger against main only, so #134 and #135 get their lint-and-test run when each retargets after its parent merges; the full suite passed locally on both heads. The owner's data migration (runbook in #135) runs only after #135 merges.

  3. 3 remaining items

  4. AojdevStudio commented on Sep 2, 2026

    @AojdevStudio
    OwnerAuthor

    P3 and P4 in review (2026-09-02)

    Run as a multi-model program from one coordinator. Landed since the P2 comment: #138 (progress-persistence flake, Opus lane) and #140 (instance_init git-environment fix, codex lane). The owner's data migration ran; the checkout holds no private files and the dashboard agent serves from the instance.

    Open, all against main:

    PR Unit Lane
    #141 Standing scanner findings, closes #130 codex
    #142 SnapTrade SDK pin below 12 (fresh instances resolved 13) codex
    #143 Wiki evidence ledger rows; Wiki pages committed locally, push is an owner gate Fable
    #144 Skill and onboarding contract fixes, closes #137 codex
    #145 P3: plugin and marketplace manifests, paid-MCP probe, onboarding skill, Codex surface codex
    #146 P4: README and setup guides for installers Fable
    #147 P4: Diátaxis site on the AOJ Starlight starter, Pages workflow added, not enabled Fable

    Owner gates: push the Wiki, enable Pages after #147, restore scripts/qa/pii-replacements.txt. Follow-ups filed: #139 (atomic persistence writes).

  5. AojdevStudio commented on Sep 2, 2026

    @AojdevStudio
    OwnerAuthor

    P3 and P4 landed (2026-09-02)

    All program units merged, in order: #138, #140, #144, #145, #146, #141, #142, #147, #149, #143. Issues #130 and #137 closed by their PRs. Main is at f512ee4.

    What is on main now beyond P2: the plugin and marketplace manifests (finance-guru 2.3.0), the shared paid-MCP capability probe wired into six skills and six agents, the instance-onboarding skill, the Codex surface through the instance's .agents link, the README and setup guides for installers, the credentials and contributor guides, the Diátaxis site under docs-site/ with its Pages workflow, the SnapTrade SDK pin, the initializer hardened against inherited git environments and roots with remotes, chart tools running as modules from an instance, and the closed scanner findings.

    Owner gates, parked in the program store:

    1. Push the refreshed Wiki: seven pages, validator green, committed on dev-substrate at ~/finance-guru-wiki with no push made.
    2. Enable GitHub Pages for docs-site/ on the .github/workflows/docs.yml workflow.
    3. Verify interactively that the installed plugin surfaces the fg-* agents and the instance-onboarding skill; plugin details counts zero agents headlessly because they live under .claude/agents.
    4. Restore scripts/qa/pii-replacements.txt on the MacBook.

    Open follow-ups: #139 (atomic persistence writes), #148 (Dependabot on the docs site's npm dependencies). The remaining phase-P4 item, closing this Wayfinder, waits on the gates above.

  6. AojdevStudio commented on Sep 2, 2026

    @AojdevStudio
    OwnerAuthor

    Reopened. GitHub auto-closed this when the v2.3.0 release commit (#164) landed, because its changelog carried the 'closes #131' reference from #145. The plugin packaging shipped in 2.3.0, but this wayfinder tracks the plugin becoming the primary install path, which the README roadmap still lists as open. Keeping it on the roadmap label.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    roadmapPlanned direction, not a backlog defect

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions