personal-assistant

personal-assistant forgejo

Notes

Review 6
  • Verdict: APPROVED

    Re-review of board item #1745 after refinement. All 6 findings from the previous review (review-1745-2026-07-03) have been addressed.

    Previous Findings Resolution

    • [x] Removed profiles.yaml and permission.yaml from file targets -- Goose v1.27.2 only uses config.yaml
    • [x] Secret management addressed -- config.yaml is Salt-managed, goose-custom tracks config.yaml.example (structure only, secrets redacted)
    • [x] Skills claim corrected -- issue now correctly states Goose uses extensions configured in config.yaml, not claude-custom skills
    • [x] AC #3 fixed -- now references GOOSE.md symlink, no profiles.yaml
    • [x] Directory structure reconciled -- target structure matches Goose's actual config layout (config.yaml.example, GOOSE.md, recipes/, extensions/, docs/, salt/)
    • [x] [SCOPE] arch-personal-assistant note created -- exists in pal-e-docs with correct stack description

    Template Completeness

    • [x] Type -- Feature
    • [x] Lineage -- Standalone, Sprint 2 planning
    • [x] Repo -- ldraney/goose-custom (to be created)
    • [x] User Story -- well-formed, matches groq-pivot story
    • [x] Context -- detailed, includes Salt management strategy and Goose extension model
    • [x] File Targets -- 5 files, all new in new repo, accurate to Goose config
    • [x] Feature Flag -- none (appropriate for config repo scaffolding)
    • [x] Acceptance Criteria -- 7 items, all agent-verifiable
    • [x] Test Expectations -- 2 items (manual, appropriate for scaffolding)
    • [x] Constraints -- 4 constraints, accurate to Goose's extension model
    • [x] Checklist -- present
    • [x] Related -- present, references dependencies

    Traceability

    • [x] story:groq-pivot label -- verified on project-personal-assistant user-stories section: "I can use Groq API as the primary inference backend for Goose"
    • [x] story note verified -- groq-pivot entry exists in project-personal-assistant user-stories table
    • [x] arch:personal-assistant label -- present on board item
    • [x] arch note verified -- arch-personal-assistant note exists in pal-e-docs (Goose CLI + Groq API stack, Salt config, repos list)
    • [x] Forgejo issue -- ldraney/personal-assistant#26, open

    File Targets

    • [x] README.md -- new file in new repo, setup guide and symlink instructions
    • [x] .gitignore -- new file, excludes rendered configs with secrets
    • [x] config.yaml.example -- template with structure shown, secrets redacted (not the live config)
    • [x] GOOSE.md -- global context file, Goose equivalent of CLAUDE.md
    • [x] docs/setup.md -- detailed setup guide with Salt integration notes

    Repo Placement

    OK. Issue filed on ldraney/personal-assistant (project repo) for creating ldraney/goose-custom (new repo). Correct pattern -- the target repo does not exist yet.

    Dependencies

    • depends:4 (issue #4, "Install Goose CLI") -- board item 1486 in done column. Satisfied.
    • depends:5 (issue #5, "Configure Goose profile for Groq") -- board item 1487 in done column. Satisfied.

    Both dependencies functionally complete.

    Acceptance Criteria

    • [x] AC 1: Forgejo repo created -- verifiable via API
    • [x] AC 2: Directory structure scaffolded -- verifiable via ls
    • [x] AC 3: GOOSE.md symlinked -- verifiable via readlink
    • [x] AC 4: config.yaml.example documents structure -- verifiable via content check
    • [x] AC 5: README documents pattern -- verifiable via content check
    • [x] AC 6: .gitignore excludes secrets -- verifiable via content check
    • [x] AC 7: Salt state reference documented -- verifiable via content check

    7 AC, all agent-verifiable, all within one repo.

    Blast Radius

    Low. Creates a new standalone repo. No existing systems modified. Only interaction point is the GOOSE.md symlink into ~/.config/goose/.

    Decomposition Assessment

    5 file targets in 1 repo, 7 AC. All straightforward scaffolding. Estimated agent time well under 5 minutes. No decomposition needed.

    Recommendation

    No action needed. All previous findings resolved. Ticket is ready for implementation.

  • Verdict: READY

    Re-review of board item #1742 (Spike). Both issues from the prior review (review-1742-2026-07-03) have been fixed. Scope is solid, traceability complete, fits in a single agent pass.

    Template Completeness

    Template: template-issue-spike

    • [x] Type — Spike
    • [x] Lineage — Standalone, follows from Groq pivot
    • [x] Repo — ldraney/personal-assistant
    • [x] Question — 7 sub-questions covering file edits, MCP tool use, multi-step workflows, code review, reasoning, coverage %, and model comparison
    • [x] Deliverables — 2 items: docs/model-evaluation.md and follow-up tickets
    • [x] Time-box — 1 session (2-3 hours)
    • [x] Related — project and dependency on #6

    Traceability

    • [x] story:groq-pivot label — present on board item
    • [x] story note verified — found in project-personal-assistant user-stories section (describes Groq API as primary inference backend for Goose)
    • [x] arch:personal-assistant label — present on board item
    • [x] arch note verified — arch-personal-assistant note exists in pal-e-docs (covers Goose CLI + Groq stack, key decisions, repos)
    • [x] Forgejo issue — ldraney/personal-assistant#23, state: open

    File Targets

    Spike type — deliverable creates docs/model-evaluation.md (does not yet exist, as expected). The docs/ directory exists in the repo with 6 existing files. No existing file targets to verify.

    Repo Placement

    OK — issue filed on ldraney/personal-assistant, repo field matches. Single-repo spike.

    Dependencies

    • depends:6 — Issue #6 "Adapt core system prompts for Goose" (board item #1488, currently in todo column). Documented in issue body: "Should run after #6 (system prompts affect evaluation quality)". Dependency is consistent between board labels and issue text.

    Acceptance Criteria

    Deliverables (spike equivalent of AC):

    • docs/model-evaluation.md with pass/partial/fail results per test category, overall score, and recommendation — verifiable by file existence and content check
    • Follow-up tickets created for integration gaps — verifiable by querying Forgejo

    Both are concrete and agent-verifiable.

    Blast Radius

    Minimal — spike produces documentation and follow-up tickets only. No code changes, no downstream consumers affected. Results will inform model selection for downstream issues (#14, #16, #17 which depend on sprint 3-4 work).

    Decomposition Assessment

    No decomposition needed:

    • 1 file target, 1 repo — well under 3-file/2-repo threshold
    • 2 deliverables — under 5 AC threshold
    • Time-boxed to 1 session — self-limiting by design

    Recommendation

    No action needed. Ready to move to todo once dependency #6 is complete.

    Prior Review Issues (Resolved)

    1. groq-pivot user story — now present in project-personal-assistant user-stories section
    2. arch-personal-assistant note — now exists in pal-e-docs with stack, key decisions, and repos documented
  • Verdict: APPROVED

    Re-review of board item #1488. Three issues from prior review (review-1488-2026-07-03) have all been resolved.

    Prior Issues -- Resolution

    • [x] [LABEL] Add story:groq-pivot label -- FIXED. Label now present on board item.
    • [x] [SCOPE] Create arch-personal-assistant note -- FIXED. Note created with architecture tag, documents Goose + Groq stack, key decisions, and repo layout.
    • [x] [BODY] Clarify prompt loading mechanism -- FIXED. Issue body now specifies tom extension with GOOSE_MOIM_MESSAGE_FILE env var. Added scripts/assemble-prompt.sh and salt/states/goose/files/config.yaml (in pal-e-platform) to file targets.

    Template Completeness

    • [x] Type -- Feature
    • [x] Lineage -- references #3 and #5
    • [x] Repo -- ldraney/personal-assistant
    • [x] User Story -- as a developer, want Goose loaded with adapted Claude Code prompts
    • [x] Context -- explains architecture spike, source material, prompt categorization, and tom extension loading mechanism
    • [x] File Targets -- 7 files (5 prompts + assemble script + Salt config)
    • [x] Feature Flag -- None (appropriate for internal tooling)
    • [x] Acceptance Criteria -- 6 criteria
    • [x] Test Expectations -- 3 expectations
    • [x] Constraints -- 3 constraints
    • [x] Checklist -- 4 items (updated to include Salt template)
    • [x] Related -- references project and dependencies

    Traceability

    • [x] story:groq-pivot label -- present on board item
    • [x] story note verified -- project-personal-assistant user-stories section has "I can use a Claude Code-like agentic coding experience powered by open-source models" with success metric referencing Goose. Aligns with groq-pivot story.
    • [x] arch:personal-assistant label -- present on board item
    • [x] arch note verified -- arch-personal-assistant note exists in pal-e-docs (created 2026-07-04). Documents Goose CLI + Groq API stack, key decisions, repo layout.
    • [x] Forgejo issue -- ldraney/personal-assistant#6, open

    File Targets

    • [x] system-prompts/task-execution.md -- NEW file (directory does not exist yet, expected for feature)
    • [x] system-prompts/safety.md -- NEW file
    • [x] system-prompts/code-style.md -- NEW file
    • [x] system-prompts/tone.md -- NEW file
    • [x] system-prompts/platform-context.md -- NEW file
    • [x] scripts/assemble-prompt.sh -- NEW file (concatenates prompt files into single assembled prompt)
    • [x] salt/states/goose/files/config.yaml in pal-e-platform -- NEW file (cross-repo, explicitly noted in issue body). Salt states dir exists at salt/states/ in pal-e-platform; goose/ subdirectory to be created.

    Repo Placement

    Issue filed on ldraney/personal-assistant, which is correct for the 6 primary file targets. One file target (salt/states/goose/files/config.yaml) is in ldraney/pal-e-platform -- explicitly acknowledged in the issue body. The Salt change is a single config update (setting GOOSE_MOIM_MESSAGE_FILE env var) and does not warrant a separate Forgejo issue. The arch note confirms Salt config lives in pal-e-platform. Acceptable.

    Dependencies

    • depends:3 -- "Spike: Investigate Goose config format and claude-custom compatibility" -- board item #1485, column: done. Satisfied.
    • depends:5 -- "Configure Goose profile for Groq + Kimi K2 backend" -- board item #1487, column: done. Satisfied. (Forgejo issues still open -- cleanup item, not blocking.)
    • Downstream: No items on the board have depends:6 in their labels. Sprint:3-4 items depend on other issues, not directly on #6.

    Both upstream dependencies satisfied. No blockers.

    Acceptance Criteria

    • [x] AC1: "System prompt files created in system-prompts/" -- verifiable via file existence
    • [x] AC2: "scripts/assemble-prompt.sh assembles prompt files into a single file" -- verifiable by running script
    • [x] AC3: "Goose loads assembled prompt at startup via tom extension (GOOSE_MOIM_MESSAGE_FILE)" -- verifiable by checking env var and Goose startup
    • [x] AC4: "Goose follows tone guidelines" -- subjective, covered by Test Expectations (side-by-side comparison)
    • [x] AC5: "Goose uses tools appropriately" -- subjective, covered by Test Expectations
    • [x] AC6: "Goose shows safety awareness" -- subjective, covered by Test Expectations

    All criteria are testable. ACs 4-6 are behavioral and require human judgment, which is inherent for system prompt work.

    Blast Radius

    Minimal. All primary file targets are new files in new directories. The Salt template creates a new state (goose/) alongside existing states. No existing code or configuration is modified. Prompt content will affect Goose behavior system-wide once loaded, which is the intended effect.

    Decomposition Assessment

    • 7 file targets across 2 repos -- exceeds file count threshold (>3) but only 2 repos (not >2)
    • 6 acceptance criteria -- technically exceeds >5 threshold
    • However: ACs 4-6 are behavioral verification criteria, not implementation steps. They cannot be meaningfully decomposed into sub-tickets. Actual implementation work is: 5 independent prompt files + 1 assembly script + 1 config line.
    • Estimated agent work: read source material, create 5 prompt files (parallel), write assembly script, update Salt config. Feasible in a single pass if agent has local access to claude-code-reference/.
    • No decomposition needed. Borderline on AC count, but behavioral ACs are verification, not implementation.

    Recommendation

    No action needed. All prior review issues resolved. Scope is solid.

    Minor observations (non-blocking):

    • The arch-personal-assistant note is not associated with the personal-assistant project in pal-e-docs (project field is null). Consider linking it.
    • Forgejo issues #3 and #5 are still open despite board items being in "done". Consider closing them.
  • Verdict: NEEDS_REFINEMENT

    Template Completeness

    • [x] Type -- Feature
    • [x] Lineage -- present
    • [x] Repo -- ldraney/goose-custom (to be created)
    • [x] User Story -- present, well-formed
    • [x] Context -- present, detailed background
    • [x] File Targets -- present (but has accuracy issues, see below)
    • [x] Feature Flag -- none (appropriate for config repo scaffolding)
    • [x] Acceptance Criteria -- 6 items
    • [x] Test Expectations -- 2 items (manual, appropriate for scaffolding)
    • [x] Constraints -- present
    • [x] Checklist -- present
    • [x] Related -- present

    Traceability

    • [x] story:groq-pivot label -- thematically aligns with "agentic coding experience powered by open-source models" user story on project page
    • [x] story note verified -- user-stories section exists on project-personal-assistant with relevant stories
    • [x] arch:personal-assistant label -- present on board item
    • [ ] arch note MISSING -- [SCOPE] Create architecture note arch-personal-assistant for component personal-assistant. Search returned no results.
    • [x] Forgejo issue -- ldraney/personal-assistant#26, open

    File Targets

    • [x] README.md -- valid, new file in new repo
    • [x] .gitignore -- valid, new file in new repo
    • [x] config.yaml -- valid, Goose uses ~/.config/goose/config.yaml (confirmed via goose info)
    • [ ] profiles.yaml -- ISSUE: Goose v1.27.2 does NOT use profiles.yaml. Only config.yaml exists in ~/.config/goose/. No evidence of a profiles feature.
    • [ ] permission.yaml -- ISSUE: Goose v1.27.2 does NOT use permission.yaml. No such file exists or is referenced by Goose.
    • [x] GOOSE.md -- valid as global context file (analogous to CLAUDE.md)
    • [x] docs/setup.md -- valid, new file in new repo

    Additional concern: The existing ~/.config/goose/config.yaml contains plaintext secrets (FORGEJO_TOKEN, PALDOCS_API_KEY). Symlinking this from a git repo would commit secrets to version control. The issue does not address secret management.

    Repo Placement

    Acceptable. Issue is filed on ldraney/personal-assistant (the project repo) but creates ldraney/goose-custom (a new repo). This is the correct project-level tracking pattern -- the new repo doesn't exist yet to host its own issues. The Forgejo repo ldraney/goose-custom does not yet exist (confirmed via API).

    Dependencies

    • depends:4 -- "Install Goose CLI and configure Groq API key on archbox" -- Forgejo state: OPEN, board item 1486: done column. Goose IS installed at /home/ldraney/.local/bin/goose v1.27.2. Work is complete but issue not closed.
    • depends:5 -- "Configure Goose profile for Groq + Kimi K2 backend" -- Forgejo state: OPEN, board item 1487: done column. Config shows GOOSE_PROVIDER: groq with model openai/gpt-oss-120b. Work is complete but issue not closed.

    Dependencies are functionally satisfied (work done, board items in done column), but Forgejo issues remain open -- minor housekeeping gap.

    Acceptance Criteria

    • AC 1 (Forgejo repo created) -- verifiable by agent
    • AC 2 (directory structure scaffolded) -- verifiable by agent
    • AC 3 (symlinks for config.yaml, profiles.yaml) -- INVALID: profiles.yaml does not exist in Goose. Fix to reference only config.yaml and GOOSE.md.
    • AC 4 (skills directory shared) -- claims "Goose reads .claude/skills/ natively" but goose info shows only config.yaml as config. Needs verification or correction.
    • AC 5 (README documents pattern) -- verifiable by agent
    • AC 6 (.gitignore mirrors claude-custom) -- verifiable by agent

    6 AC, but all within one repo and straightforward scaffolding. No decomposition needed despite hitting the >5 threshold.

    Blast Radius

    Low blast radius. This creates a new standalone repo. No existing systems are modified. The only interaction point is the shared skills directory between claude-custom and goose-custom, and the symlinks into ~/.config/goose/ (which currently has only config.yaml and backups). The existing config.yaml would be replaced by a symlink -- ensure backup strategy is documented.

    Decomposition Assessment

    7 file targets in 1 repo, 6 AC, estimated agent time under 5 minutes. All files are simple scaffolding (config templates, README, .gitignore). No decomposition needed despite 6 AC -- each is trivial.

    Recommendation

    • [BODY] Remove profiles.yaml and permission.yaml from file targets and directory structure -- Goose v1.27.2 uses only config.yaml. Replace target structure with actual Goose config files.
    • [BODY] Add secret management strategy to Context section -- existing config.yaml contains plaintext API tokens (FORGEJO_TOKEN, PALDOCS_API_KEY). Options: (a) template config.yaml with env var references, (b) use a .env file excluded from git, (c) keep secrets-bearing config out of the repo and only track structure.
    • [BODY] Verify or correct the claim "Goose reads .claude/skills/ natively" -- goose info only shows config.yaml as config path. If skills sharing requires a different mechanism, update the issue.
    • [BODY] Fix AC #3: remove profiles.yaml reference from symlink acceptance criterion.
    • [BODY] Reconcile target structure with file targets -- the structure shows recipes/ and extensions/ directories but file targets don't scaffold them.
    • [SCOPE] Create architecture note arch-personal-assistant for the personal-assistant component.
  • Verdict: NEEDS_REFINEMENT

    Template Completeness

    • [x] Type — Spike
    • [x] Lineage — "Standalone — follows from Groq pivot"
    • [x] Repo — ldraney/personal-assistant
    • [x] Question — well-structured with 7 sub-questions covering file edits, MCP tool use, multi-step workflows, code review, reasoning tasks, coverage percentage, and model comparison
    • [x] Deliverables — docs/model-evaluation.md + follow-up tickets
    • [x] Time-box — 1 session (2-3 hours)
    • [x] Related — project reference and dependency on #6

    All required spike template sections present. Extra ### Note section documents model name change from Kimi K2 to gpt-oss-120b (acceptable context).

    Traceability

    • [x] story:groq-pivot label — present on board item
    • [ ] story note MISSING — [SCOPE] The user-stories section of project-personal-assistant has four generic stories (developer, operator, business owner) but none are identified as "groq-pivot". The Groq pivot represents a strategic shift from local Ollama inference to Groq cloud API. Create a user story entry for the groq-pivot story on project-personal-assistant user-stories section.
    • [x] arch:personal-assistant label — present on board item
    • [ ] arch note MISSING — [SCOPE] No arch-personal-assistant note found in pal-e-docs. The project page (project-personal-assistant) has an architecture section with Mermaid diagram, three-layer breakdown, and cost model, which may suffice. Create architecture note arch-personal-assistant or confirm the project page architecture section covers this role.
    • [x] Forgejo issue — ldraney/personal-assistant#23, open

    File Targets

    • [x] docs/model-evaluation.md — deliverable to be created (does not exist yet, expected for spike). The docs/ directory exists with 6 existing files (anatomy.md, architecture.md, deployment-pipeline.md, mcp-integration.md, model-serving.md, prompt-engineering.md). Target path is valid.

    Repo Placement

    OK. Issue filed on ldraney/personal-assistant, work targets the same repo. Single-repo scope. No mismatch.

    Dependencies

    • [ ] [LABEL] Issue body states "Should run after #6 (system prompts affect evaluation quality)" but board item #1742 has no depends:6 label. Issue #6 ("Adapt core system prompts for Goose") is still open and in backlog (board item #1488). Add depends:6 label to track this dependency.
    • Board item #1488 (issue #6) itself depends on #3 and #5 (both done), so its own blockers are cleared.
    • Other groq-pivot story items in backlog: #1745 (issue #26, sprint:2), #1746 (issue #27, sprint:3), #1743 (issue #24, sprint:3). No circular dependencies detected.

    Acceptance Criteria

    Deliverables are verifiable by an agent:

    • docs/model-evaluation.md — agent can verify file exists and contains pass/partial/fail results, overall score, and recommendation
    • Follow-up tickets — agent can verify new Forgejo issues created and linked

    The question sub-bullets (simple file edits, MCP tool use, multi-step workflows, code review, reasoning tasks) provide clear test categories. The "compare with qwen/qwen3-32b and llama-3.3-70b-versatile if time permits" is appropriately scoped as optional.

    Blast Radius

    Low. This is a spike (investigation only, no code changes to production systems). The evaluation results will inform model selection for the broader personal-assistant project. No downstream consumers affected. No existing code patterns at risk.

    Decomposition Assessment

    • File targets: 1 (docs/model-evaluation.md)
    • Repos: 1
    • Deliverables: 2
    • Time-box: 1 session (2-3 hours, inherently interactive)

    No decomposition needed. Single-file output, time-boxed, single repo. Well within the 5-minute rule for agent work (the spike itself is manual/interactive evaluation, not automatable).

    Recommendation

    • [LABEL] Add depends:6 to board item #1742 labels — issue body documents dependency on #6 but board item does not track it
    • [SCOPE] Create "groq-pivot" user story entry in project-personal-assistant user-stories section describing the strategic shift to Groq cloud API
    • [SCOPE] Create architecture note arch-personal-assistant or explicitly confirm the project page architecture section fulfills that role
  • Verdict: NEEDS_REFINEMENT

    Template Completeness

    • [x] Type — Feature
    • [x] Lineage — references #3 and #5
    • [x] Repo — ldraney/personal-assistant
    • [x] User Story — as a developer, want Goose loaded with adapted prompts
    • [x] Context — good background on the architecture spike, source material, and categorization
    • [x] File Targets — 5 files in system-prompts/
    • [x] Feature Flag — None (appropriate for internal tooling)
    • [x] Acceptance Criteria — 5 criteria
    • [x] Test Expectations — 3 expectations
    • [x] Constraints — 3 constraints
    • [x] Checklist — 3 items
    • [x] Related — references project and dependencies

    Traceability

    • [ ] story:X label — MISSING. No story label on board item. The issue's user story aligns with project-personal-assistant user story #1 ("Claude Code-like agentic coding experience"). Other sprint:2 items (e.g., #1745) use story:groq-pivot. [LABEL] Add story:groq-pivot label.
    • [x] arch:personal-assistant label — present on board item
    • [ ] arch note MISSING — searched pal-e-docs for arch-personal-assistant and variants; no matching architecture note exists. The project page has an architecture section, but no dedicated arch note. [SCOPE] Create architecture note arch-personal-assistant for the personal-assistant component.
    • [x] Forgejo issue — https://forgejo.tail5b443a.ts.net/ldraney/personal-assistant/issues/6, open

    File Targets

    • [x] system-prompts/task-execution.md — NEW file (directory does not exist yet, expected)
    • [x] system-prompts/safety.md — NEW file
    • [x] system-prompts/code-style.md — NEW file
    • [x] system-prompts/tone.md — NEW file
    • [x] system-prompts/platform-context.md — NEW file
    • [x] docs/prompt-engineering.md — verified exists in repo, contains keep/adapt/drop categorization as claimed
    • [x] claude-code-reference/ — gitignored, local-only source material (acceptable per constraints)

    Repo Placement

    OK. Issue filed on ldraney/personal-assistant, ### Repo section says ldraney/personal-assistant. All file targets are within this repo. No cross-repo work needed.

    Dependencies

    • depends:3 — "Design Goose + Groq architecture" (spike) — board item 1485, column: done
    • depends:5 — "Configure Goose profile for Groq + Kimi K2 backend" — board item 1487, column: done (note: Forgejo issue still open, but board shows done)
    • Downstream dependents: Issues #13 (delegation protocol spike), #16 (kanban workflows), #17 (PR lifecycle) all depend on #6. These are sprint:3-4 items, appropriately sequenced.

    Both upstream dependencies are satisfied. No blockers.

    Acceptance Criteria

    • [x] AC1: "System prompt files created in system-prompts/" — verifiable via file existence check
    • [ ] AC2: "Goose loads assembled prompt at startup" — UNDERDEFINED. Does not specify the mechanism. Issue #5 shows Goose config is managed via Salt template at salt://goose/files/config.yaml, but no mention of system prompt loading path. Options: Goose profile instructions field, .goosehints file, CLI --instructions flag, or Salt template update. [BODY] Specify prompt loading mechanism in AC2 — e.g., "Goose profile instructions field references assembled prompt" or "system-prompts assembled into .goosehints".
    • [x] AC3: "Goose follows tone guidelines" — subjective but covered by Test Expectations (side-by-side comparison)
    • [x] AC4: "Goose uses tools appropriately" — subjective but covered by Test Expectations
    • [x] AC5: "Goose shows safety awareness" — subjective but covered by Test Expectations

    Blast Radius

    Minimal. All file targets are new files in a new directory. No existing code is modified. The prompts will affect Goose behavior system-wide once loaded, but that is the intended effect. No sibling services impacted.

    Decomposition Assessment

    • 5 file targets across 1 repo — under threshold
    • 5 acceptance criteria — at threshold but not over
    • Estimated agent work: read docs/prompt-engineering.md categorization, read claude-code-reference/ source material, synthesize 5 prompt files, configure loading mechanism. Feasible in a single agent pass if agent has local access to claude-code-reference/.
    • No decomposition needed.

    Recommendation

    • [LABEL] Add story:groq-pivot label to board item — this work is part of the Groq/Goose pivot story, consistent with other sprint:2 items.
    • [SCOPE] Create architecture note arch-personal-assistant in pal-e-docs — the arch:personal-assistant label has no backing note.
    • [BODY] Clarify AC2 — specify how Goose loads the assembled prompt at startup (profile instructions field, .goosehints, CLI flag, or Salt template update to config.yaml).
Project Page 1
  • Project: personal-assistant project-personal-assistant

    personal-assistant

    Vision

    Self-hosted AI coding agent that replicates Claude Code behavior using open-source models, fully owned and controlled. Goose CLI + Groq API (openai/gpt-oss-120b) + adapted system prompts from the Claude Code leak, with local Ollama fallback for offline use. MCP-connected to the full pal-e-platform stack. Configuration managed by SaltStack.

    Operating thesis: The value of Claude Code is 80% prompt engineering and 20% model quality. The leaked prompts (515 fragments from Piebald-AI + Opus 4.6 system prompt) provide the behavioral blueprint. Goose provides the harness. Groq API provides fast inference on open-weight models (gpt-oss-120b, 120B params) at low cost. The result: fast inference for automations and delegation at API pricing, with Claude Code retained for complex agentic work.

    Long-term play: As open-source coding models improve (Qwen4, DeepSeek V5), the same infrastructure scales up. The prompt engineering and platform integration are the durable investment. The model and inference provider are swappable components — if Groq disappears, download weights and self-host.

    User Stories

    Story Role Description Success Metric
    core-agent Developer (Lucas) I can use a Claude Code-like agentic coding experience powered by open-source models, with full MCP access to my platform. Goose + gpt-oss-120b completes structured coding tasks (PR creation, code review, file editing) with acceptable quality.
    groq-pivot Developer (Lucas) I can use Groq API as the primary inference backend for Goose, with fast response times and no GPU infrastructure to manage. Goose + Groq API (gpt-oss-120b) handles agentic tasks with acceptable latency. Salt-managed credentials. Fallback to Ollama for offline use.
    offline-fallback Developer (Lucas) I can switch to local Ollama inference when offline or when Groq is unavailable, without changing my workflow. Profile switching is seamless. Local model selected and tested (#24).
    platform-automation Platform Operator (Lucas) I can run automated platform tasks (PR reviews, CI monitoring, doc updates) without consuming Claude API credits. Automated tasks run on Groq API at predictable cost.
    customer-ai Business Owner (Lucas) I can offer AI-powered features to customers (chat-with-docs, guided workflows) using my own infrastructure. Customer-facing AI features run on owned infrastructure with predictable costs.

    Architecture

    System Overview

    graph TB
        subgraph operator["Operator Workstation (archbox)"]
            GOOSE["Goose CLI\nAgentic coding interface"]
            OLLAMA["Ollama\nLocal fallback model TBD\nCPU inference, always-on"]
            PROMPTS["System Prompts\nVersion-controlled\nAdapted from Claude Code leak"]
            SALT["SaltStack\nManages config.yaml\nPillar-injected secrets"]
        end
    
        subgraph groq["Groq API (cloud)"]
            GROQAPI["Groq Inference\nopenai/gpt-oss-120b\nOpenAI-compatible API"]
        end
    
        subgraph platform["pal-e-platform (archbox k3s)"]
            MCP["MCP Servers\npal-e-docs · Forgejo · Woodpecker\nGmail · Sheets · Notion"]
        end
    
        GOOSE -->|"primary inference"| GROQAPI
        GOOSE -->|"offline fallback"| OLLAMA
        GOOSE -->|"MCP protocol"| MCP
        GOOSE -->|"loads"| PROMPTS
        SALT -->|"renders config"| GOOSE
    

    Three Layers (Replacing Claude Code)

    Layer Claude Code personal-assistant
    Model (brain) Claude Opus/Sonnet via API gpt-oss-120b via Groq API (primary), local Ollama (fallback)
    Prompts (behavior) 515 internal prompt fragments Adapted versions, version-controlled
    Interface (harness) Proprietary TypeScript/React/Ink CLI Goose (open-source Rust CLI by Block)

    Cost Model

    Option Monthly Cost Speed
    Groq API (gpt-oss-120b) Usage-based (currently free tier) Fast cloud inference
    Local only (Ollama CPU) $0 ~15-25 tok/s

    Plan

    5 sprints on board-personal-assistant. Sprint 1 complete (infrastructure + Groq pivot). Sprint 2 in progress (system prompts, model evaluation, goose-custom repo).

    Board

    board-personal-assistant — Personal Assistant Board. Continuous kanban.

    Status

    • Sprint 1 COMPLETE (2026-07-04) — Groq credentials, Goose config, Salt IaC, docs updated
    • Sprint 2 in progress — #6 (system prompts), #23 (model evaluation), #26 (goose-custom repo)
    • Forgejo repo: ldraney/personal-assistant
    • Salt state: pal-e-platform/salt/states/goose/ manages config.yaml with pillar-injected secrets
    • Groq API key stored at ~/secrets/groq/api_key, GPG-encrypted in Salt pillar

    Milestones

    Date Milestone Impact
    2026-06-17 Project bootstrapped Forgejo repo, architecture docs, project page, board created. Research complete on model selection, GPU pricing, Goose capabilities.
    2026-07-04 Sprint 1 complete — Groq pivot Kimi K2 deprecated on Groq → pivoted to gpt-oss-120b. Groq credentials stored, Goose configured with Salt IaC, all docs updated. MCP servers connected (Forgejo, pal-e-docs).

    Repos

    Repo Platform Role Status
    personal-assistant Forgejo Architecture docs, system prompts, evaluation results active
    goose-custom (planned) Forgejo Goose config, GOOSE.md, recipes — mirrors claude-custom pattern planned (#26)

    Infrastructure

    Component Details
    Primary Inference Groq API — openai/gpt-oss-120b, OpenAI-compatible endpoint
    Local Fallback Ollama on archbox (host process) — model TBD (#24), CPU inference via 128GB RAM
    Agent Harness Goose CLI v1.27.2 (open-source by Block, Rust, Apache 2.0) — MCP support, OpenAI-compat backend
    System Prompts Adapted from Claude Code leak (Piebald 515 fragments + Opus 4.6), version-controlled
    MCP Servers Connected: pal-e-docs, Forgejo. Available: Woodpecker, Gmail, Sheets, Notion, GroupMe
    Config Management SaltStack — salt/states/goose/ renders config.yaml with pillar-injected secrets
    Secrets GPG-encrypted Salt pillar: groq_api_key, forgejo_token, paldocs_api_key
Board 1