The agentic CRM for creative agencies that needed one.
Foyer owns the client lifecycle from inbound conversation to delivered work. Polymorphic artifacts. Brand-as-context auto-injected into every creative call. A hosted MCP server so Claude Code, Cursor, and Codex can teammate with your workspace.
Architecture
workspace ⇄ stage · one source of truthAgency cockpit
- inbound_messages
- artifacts_index
- agent_runs
- brand_kit_versions
- audit_log
not copy
Client surface
- pinned artifacts
- themed in client brand
- comment + light-edit
- signed_url grants
- talktrack walkthroughs
Build phases
~38 wks · two engineers · sequential where deps force itArchitecture decisions
10 ADRs · all phase −1 lockedSaaS-only for v1
Self-host is a Phase 7+ paid-enterprise feature, not a v1 fork. One infra, one security surface, one trust story.
Postgres + pgvector, hot/cold split
Time-partitioned message tables. Typed cold tables per kind. `artifacts_index` view is the polymorphic surface.
Polymorphic API over typed storage
One Artifact shape on the wire. Typed tables behind it. Adding a kind = new table + view extension.
Server-side agent runtime
Skills run on Foyer's runtime, not the caller. Every invocation lands in `agent_runs` with full token + cost + cache telemetry.
BrandKit as cached prefix
Anthropic prompt cache keyed on `brand_kit_version`. Triage agents skip injection; creative agents always get it.
Defer Signal to Phase X
Linked-device trust gap is legal + marketing, not engineering. Three gates before any Signal code lands.
Per-seat + container-tier pricing
Client seats always free. AI overage at a publicly published per-run rate. No credits. No opaque throttles.
WorkOS + magic link + OAuth provider
Three constituencies, three auth paths, one observable surface. SAML for enterprise from day one.
365-day audit, 7-year enterprise
Every write is an immutable row. Monthly partitions. Tiered to S3 after 1 year for enterprise retention.
Dynamic skill registry
Skills discovered from a managed index at runtime startup. Anthology evolves without redeploy. Index membership is the gate.
MCP tools — Phase 0
read-only · phase 6 unlocks writes behind OAuth scopesRun it locally in five commands.
Phase 0 ships as a pnpm monorepo. Docker compose boots Postgres + Redis. Drizzle handles migrations. The MCP server is one process and you can wire it into Claude Code today.
- $ docker
- compose up -d
- $ pnpm
- install
- $ pnpm
- db:migrate
- $ pnpm
- server:dev → :4000
- $ pnpm
- mcp:dev → stdio