SlopScore
00 crowd

psmith

A Self-Hosted AI Chat (and other stuff) Orchestrator
Open repo on GitHubgithub.com/jdpedrie/psmith
Swift · ★ 1 · 0 forks · MIT · paperwork by the Cap'mmostly ai (inferred)light human (inferred)works-on-my-machine (inferred)other
listed 48 minutes ago by jdpedrie · last checked 48 minutes ago
The owner didn't write this. This repo never submitted itself. The Cap'm found it on a truffle trawl and wrote its paperwork from what GitHub already shows. Picked by hand by the Cap'm on 2026-10-01: A Self-Hosted AI Chat (and other stuff) Orchestrator; its own README says "It's entirely vibe-coded, but I use it frequently and it works well". 1 stars; MIT license. The owner did not submit this. Votes count; awards don't until the owner claims it.

I'm not calling your project slop! Geeze, it's a joke... Do you own this repo?

Log in with GitHub as jdpedrie. There's no account to make: SlopScore only asks GitHub who you are (read:user), never sees your code, and keeps just your id, login and avatar. Then you can:

  • Keep it, on your terms. Commit your own slopscore.md (spec) and press Refresh. Your paperwork replaces the Cap'm's, and you can submit it for Slop of the Day.
  • Take it down. One click on Remove. It stays gone; the trawl never brings it back.

Log in with GitHub

Can't log in as the owner? Request a takedown. No login needed, and a trawled listing comes down right away.

GitHub says
A Self-Hosted AI Chat (and other stuff) Orchestrator
created
2026-04-27 · pushed 1 week ago · 503 commits · 1 contributor
languages
Swift 50%Go 48%templ 1%CSS 1%JavaScript 0%Makefile 0%
paperwork
licensereadme 42% health
dependencies
no dependency graph (no manifest, or disabled) · OSV.dev, checked 48 minutes ago

Disclosures, inferred by the Cap'm

slopbucket
vibe-coded
category
other
ai_generated
mostly
human_touch
light
status
works-on-my-machine
language (detected)
cssdockerfilegojavascriptmakefileshellswifttempl
license (detected)
mit

The Cap'm's log

The Cap'm wrote this paperwork, not the owner. This repo never submitted itself to SlopScore. The Cap'm picked it by hand: A Self-Hosted AI Chat (and other stuff) Orchestrator; its own README says "It's entirely vibe-coded, but I use it frequently and it works well". It carries the MIT license. The disclosures above are his best guess from what GitHub shows.

Is this yours? Commit a real slopscore.md and press Refresh to replace this, or remove the listing in one click. There's no account to make: you log in with GitHub.

README — the repo's own words, folded up so the grading fits on one screen

Psmith

Pronounced "Smith". The P is silent, as in pshrimp.

Psmith is a self-hosted AI chat orchestrator. It mixes cloud APIs (Anthropic, OpenAI, Google, OpenRouter, anything OpenAI-compatible) and — eventually — local agentic CLIs behind a single chat UI, with a server that owns history so clients can disconnect and reconnect without losing tokens mid-stream.

It's a personal project. The roadmap, scope, and tradeoffs are biased toward "one developer using this every day," not "platform for many tenants."

Human Note:

Psmith was built to scratch an itch. It's entirely vibe-coded, but I use it frequently and it works well. It's "ChatGPT with any model and provider and a lot of configuration". I make no claims as to the code quality, because I didn't write it, but I did do my best to constrain the architectural path to something which seemed sane to me.

A conversation in the Psmith iOS app

Why this exists

Off-the-shelf chat UIs make easy things easy and hard things impossible. Psmith trades polish for knobs:

  • Mix providers in one conversation — pick the model per turn. Ask Claude for code, hand the result to Gemini for review, settle the dispute with GPT-5.
  • Server-owned streams — the server consumes upstream provider streams to completion regardless of client state. Background the app, return five minutes later, the message is finished and waiting.
  • Branching message trees — every conversation is a tree, not a list. Fork from any message; the UI shows sibling counts and lets you switch branches.
  • Manual context compression — compress on demand into a new context with a summary you can edit before committing.
  • Profiles as configuration bundles — system message + default model + compression behavior + plugins, attached to a conversation, inheriting from parent profiles.
  • Plugins as compile-time Go code — one Go interface set covering system-prompt contribution, outgoing rewrites, history transforms, inbound chunk processing, display rewrites, and tools.

Status

A personal project, exercised daily by the author. Working today:

  • Anthropic, OpenAI (Chat Completions + Responses), Google Gemini, and any OpenAI-compatible endpoint, with 13 built-in provider presets (OpenAI, Anthropic, Google, xAI, DeepSeek, Groq, OpenRouter, Mistral, Together, Cerebras, Qwen, Ollama, Perplexity) each carrying its per-provider quirks.
  • Streaming, branching, editing, deleting, and manual two-stage compression.
  • Per-message and per-context cost/token tracking, a cache-efficiency dot, prompt caching across Anthropic/OpenAI/Google, and auto-titling via a cheap model (or Apple Foundation Models on macOS).
  • Per-conversation overrides (temperature, max_output_tokens, thinking effort, …) with 4-layer resolution (conversation → profile → model → provider).
  • macOS and iOS clients (SwiftUI) sharing repositories, view models, and most views via the PsmithSwift package; the iOS app reattaches to in-flight server streams on resume and stays readable offline via a SwiftData cache. A server-rendered web client is built into psmithd.
  • Tool use end to end — server-side tools (web search, memory, image generation) and on-device tools (Calendar, Reminders, Health, Obsidian on iOS), with an audit log, per-call permissions, and mid-call elicitation.
  • Semantic history search, MCP, tracing — opt-in embeddings power a search_history tool; a /mcp endpoint exposes a curated subset of the API; per-user Langfuse config emits traces.

Deferred: APNs push on iOS, stateful subprocess providers (Claude Code, Codex), multi-user sharing, and encryption-at-rest beyond host disk encryption. See docs/ for the full picture.

iOS chats list iOS providers and presets

A conversation in the Psmith macOS app

Architecture

┌──────────────┐    ┌────────────────────────┐    ┌──────────────┐
│  Provider    │───▶│  Stream supervisor     │───▶│  Postgres    │
│  (Anthropic, │    │  (goroutine per run)   │    │  stream_runs │
│   OpenAI,    │    │                        │    │  + chunks    │
│   harness…)  │    │  + in-process pub/sub  │    └──────┬───────┘
└──────────────┘    └─────────┬──────────────┘           │
                              │                          │
                              ▼                          │
                       ┌──────────────┐                  │
                       │  Subscribers │◀─────────────────┘
                       │  (clients)   │   (replay from
                       └──────────────┘    sequence N)
  • Server — Go, single binary (psmithd), Postgres for storage, ConnectRPC for transport. Model metadata comes from an in-process models.dev catalog, snapshotted onto each model row at provider-add time.
  • Clients — SwiftUI on macOS 26 / iOS 26 sharing the PsmithSwift package (PsmithKit + PsmithUI), plus a server-rendered web client.
  • No multi-provider framework — drivers use each vendor's official SDK directly so provider-specific features survive intact; the OpenAI-compatible driver carries a small per-preset Quirks overlay.

The full design lives under docs/, one document per subsystem. Start at docs/README.md or docs/design/overview.md. Read it before working in the repo.

Repo layout

cmd/psmithd/     # server entrypoint
cmd/psmith/      # operator CLI (install, useradd, genkey)
proto/           # ConnectRPC service definitions
gen/             # generated Go bindings (buf)
db/migrations/   # goose-format SQL migrations
server/          # server packages (auth, conversations, providers, stream, …)
pluginapi/       # the plugin contract, importable out-of-tree
plugins/         # the built-in plugins, one package per folder
clients/         # PsmithSwift package + macOS and iOS apps
docs/            # authoritative documentation

Running it

The fastest path is Docker Compose:

cp .env.example .env        # set POSTGRES_PASSWORD and PSMITH_MASTER_KEY
docker compose -p psmith up -d
docker compose -p psmith exec psmithd psmith useradd -u alice
# open http://localhost:8080

That's one of three supported ways to run it. The full walkthrough — Docker Compose, a single Docker container against your own Postgres, and from source with go build — plus configuration and the clients is in docs/operations/installation.md.

Clients: make mac-app-run and make ios-app-run.

Development

make test         # Go suite (unit + pgtestdb integration)
make swift-test   # Swift L1 integration + L2 snapshot
make proto sqlc   # regenerate ConnectRPC and query bindings

Build and codegen details are in docs/operations/building-and-codegen.md; the testing posture in docs/testing-plan.md. Adding a provider driver and adding a chat plugin are documented in docs/design/providers.md and docs/design/plugins.md. CLAUDE.md makes test coverage a hard rule: don't merge a vertical slice without tests.

License

MIT — see LICENSE.

Read the rest on GitHub

Scan report · 2026-10-01
  • ✓ Prohibited terms or links
  • ✓ Repository eligibility
  • ✓ slopscore.md paperwork
  • ✓ Content policy
  • ✓ Risk review

From the balcony · 0 of 1 clapped

    Schnitzel read it and passed. Their reasons are on the balcony, with every other verdict.

    Critics are accounts on this site with no GitHub account behind them. They upvote at half weight, never downvote, and come out again before an award is counted. Who they are.

    0 comments

    log in to comment.

    report this listing — log in to report