sherpa-assistant
●live stale dev privateAI assistant for The Tax Shelter — replaces Clawdbot with better memory, security, and cost control
- Primary: https://sherpa-assistant.onrender.com
- GitHub: https://github.com/klill6506/sherpa-assistant
- Local:
D:\dev\sherpa-assistant
README
No README.
STATUS
--- type: project-status project: sherpa-assistant last_updated: 2026-04-27 --- # STATUS — sherpa-assistant *The freshest file. Answers "where am I on this project?" Updated at the end of every substantive session.* --- ## Current state <One short paragraph: what state is the project in right now? Mid-build? Shipped MVP? Stalled waiting on something? Be concrete.> ## In progress - [ ] <What's actively being worked on. If nothing, write "Nothing in flight."> ## Next up 1. <The next thing to pick up when work resumes.> 2. <The thing after that, if obvious.> ## Blocked / waiting on <External dependencies, decisions you need from someone, vendor responses, etc. "Nothing blocking" is a fine answer.> ## Known issues <Bugs you know about but haven't fixed, edge cases not yet handled, debt you've taken on. Be specific so future-you doesn't get blindsided.> ## Recent wins - 2026-04-27: <What was completed in the last session or two. Concrete, with dates.> ## Last session recap *2026-04-27* — <One paragraph: what got done, what was learned, anything surprising. Read this first when picking up the project after a break.>
DECISIONS
--- type: project-decisions project: sherpa-assistant last_updated: 2026-04-27 --- # DECISIONS — sherpa-assistant *Architectural and scope choices. Append-only log. Each entry is a decision that shouldn't be re-litigated without new information. If you find yourself reopening a decision, either add a new entry that overrides the old (and say why) or leave both so the history is visible.* --- ## How to use this file Each decision gets a dated entry with: what was decided, why, what was considered instead, and what would change our mind. Never delete entries — if a decision is reversed, add a new one that supersedes it. --- ## 2026-04-27 — <Short decision title> **Decision:** <what we chose> **Context:** <the problem or question that forced a choice> **Alternatives considered:** <what else was on the table and why we passed> **Reasoning:** <why this option won> **Would reconsider if:** <what new information would flip this> --- ## 2026-04-27 — <Short decision title> **Decision:** **Context:** **Alternatives considered:** **Reasoning:** **Would reconsider if:** --- <!-- Append new entries at the top. Older decisions remain below. -->
MEMORY
--- type: project-memory project: sherpa-assistant last_updated: 2026-04-27 --- # MEMORY — sherpa-assistant *Standing facts, preferences, and accumulated context. Long-lived — not "what I did yesterday" (that's STATUS.md). Update when you learn something worth keeping.* --- ## Purpose and scope <Why this app exists, who uses it, what problem it solves. 2-3 sentences max.> ## Domain knowledge <Rules of the domain that Claude should know before making changes. For tax apps: the specific IRS rules this module implements, state conformity notes, edge cases. For non-tax apps: business rules, workflows, naming conventions specific to this app's world.> ## User preferences discovered <Things Ken has said he prefers, or patterns that work / don't work. Example: "Ken prefers server-rendered HTML over SPAs for internal tools." "Don't auto-format tax return numbers with commas on input, only on display."> ## Integrations and external systems <APIs, webhooks, third-party services this app talks to. Auth patterns, rate limits, quirks.> ## Gotchas and lessons learned <The things that have bitten us. Non-obvious behavior, debugging dead-ends, environment quirks. Write these when they happen so the next session doesn't repeat the mistake.> ## Data model highlights <Key tables/models and what's non-obvious about them. Don't duplicate the schema — reference it. Focus on the things you'd warn someone about.>
CLAUDE.md
# Sherpa Assistant (J.A.R.V.I.S) — Project Memory
## Overview
Conversational tax expert for Ken Lill, CPA, at The Tax Shelter (Athens, GA).
Pivoted from a general-purpose personal assistant to a tax law expert grounded in the Tax Rule Studio database.
- **Name**: J.A.R.V.I.S
- **Stack**: Python 3.12 / FastAPI / local (Windows 11)
- **LLM**: Anthropic (Haiku default, Sonnet for complex via `!smart` or keyword routing)
- **Database**: Supabase Postgres with pgvector for embeddings
- **Tax Data**: Tax Rule Studio tables (same Supabase database, read-only)
- **Channels**: Web UI (Yeti mascot) + Slack (Socket Mode)
## Architecture
```
User message (web or Slack)
→ app/core/conversation.py (orchestrator)
→ Step 1: Validate & sanitize (security.py)
→ Step 2: Store user message in Supabase
→ Step 3: Fire-and-forget embed via OpenAI (embeddings.py)
→ Step 4: Load context:
a. Static memory files (SOUL, IDENTITY, USER, etc.)
b. Imported memories (Clawdbot migration)
c. Semantic search (similar past conversations)
d. Tax Brain + Second Brain + web search (tax_router.py)
→ Step 5: Route model (Haiku vs Sonnet)
→ Step 6: Call Anthropic API (llm.py) with prompt caching
→ Step 7: Store assistant response + fire-and-forget embed
→ Post reply back to web UI or Slack
```
## Key Files
| File | Purpose |
|------|---------|
| `app/main.py` | FastAPI app, lifespan, startup banner |
| `app/config.py` | All settings via pydantic-settings + `@lru_cache` |
| `app/channels/slack.py` | Slack Socket Mode handler, DM detection, `!note` command |
| `app/channels/chat.py` | REST API for web UI |
| `app/core/conversation.py` | Main orchestrator — ties everything together |
| `app/core/llm.py` | System prompt, model routing, Anthropic API calls |
| `app/core/tax_brain.py` | Read-only query layer for Tax Rule Studio tables |
| `app/core/tax_router.py` | Tax intent detection → Tax Brain + Brain + web search → context |
| `app/core/emb
…(truncated for upload size)
Diary mentions
No recent diary mentions for this app.
Render
- Service:
sherpa-assistant - Status: live
- Last deploy: 2026-03-24T01:29:24.074793Z