2026-04-02
What shipped today
Architecture pivot: subscription to tmux
The big story today isn’t what we built — it’s what we learned we can’t keep doing. Anthropic’s updated ToS broadly restricts programmatic use of subscription OAuth tokens outside Claude Code’s interactive interface. Our claude -p ephemeral dispatch, shipped yesterday with deterministic context injection and parallel fan-out, falls into a gray area that could trigger an algorithmic sweep. The breadstick theory of AI pricing: they built the all-you-can-eat plan assuming human typing speed as the rate limiter. We brought a bucket.
The fleet reverted to tmux injection — Paul drives /loop in project sessions, Charlie monitors from the paulos session via tmux capture-pane. The deterministic code (context injection, priority cascade, lock management) stays dormant in orchestrate_loop.py as the blueprint for the API dispatch path.
Skopos gets a face and a voice
The dev-loop persona work landed. Anti-pattern list (“Now reading…” → don’t), narration examples, Discord summary guidance. Tested across diktura and skillexis — Sonnet stopped writing like a build script and started writing like an engineer with opinions. “Offset pagination with count is the right call here — cursor-based would be overkill for an admin table.”
Skopos also got its own Discord bot identity. Separate from Charlie — different token, different avatar (flat expression, 1940s technical manual style), posts to per-project Discord channels. Dev-loop notifications show up as Skopos in #diktura, not as Charlie in #paulos.
Per-project Discord channels
Every project now posts to its own Discord channel. Channel map hardcoded in the dev-loop skill. Bot allowlist updated. Charlie stays in #paulos for ops; Skopos talks in project rooms. Clean separation of engineering notifications from COO chatter.
Humanizer back on API
Switched the humanizer from claude -p (subscription) back to call_llm() (Anthropic API). Fixed a bug where _ensure_env_loaded() skipped loading .env when a stale ANTHROPIC_API_KEY was in the shell environment. All paulos CLI commands that call LLMs now use API keys, never subscription auth.
Paul knowledge base: vector embeddings
Built paulos paul search — semantic similarity search over Paul’s 707-file corpus using OpenAI text-embedding-3-small + SQLite + sqlite-vec. 2,658 chunks embedded. Finds “When intelligence gets cheap, judgment becomes priceless” when you search for “the value of human judgment in an AI world.” Updated the paul MCP server (stdio.ts) to use vector search + claude -p for answer generation.
Doc audits round 2
Three more projects tightened: scholexis DECISIONS.md (35K→12K), polymathic-h (27K→5.7K), phantasmagoria (21K→7.9K). Five projects audited total across two days.
Ghost lock exorcism (#666)
Replaced fcntl.flock with PID-based locks. Dead process = stale lock = take it. The fleet was blocked for hours by ghost locks from crashed claude -p subprocesses. 11 stale locks cleared in one pass. The fix: write PID to lock file, check if PID is alive before honoring.
Authexis client in Notion
Created Authexis as a client in the Synaxis AI Notion workspace. Created the engagement record and migrated two deliverables (onboarding questionnaire, competitive analysis) from the git repo to Notion. Deleted clients/authexis/ from the synaxis-ai repo — client work belongs in Notion, not git.
Synaxis-ai issue cleanup
Closed 7 misplaced issues (client engagement work on GitHub instead of Notion). Updated DECISIONS.md with the clear rule: GitHub for methodology development, Notion for client engagements, product repos for product features.
Charlie’s blog post
“Every organization is full of unmarked graves” — 1,249 words on computing’s philosophical inability to delete, Nietzsche’s active forgetting, and why organizations are the one system that still believes in erasure. Saved as draft in polymathic-h. Sources woven in: Pacioli, git revert vs reset, tombstones, Ricoh’s 40-year institutional memory, Kransdorff on corporate amnesia.
Completed
- #663 — Fix humanizer (switched to API)
- #664 — Social tease auto-runs after /reflect
- #666 — Ghost lock fix (PID-based locks)
- #667 — Paul knowledge base (vector embeddings)
- synaxis-ai: closed #14, #45, #46, #50, #51, #52, #53 (misplaced client work)
Carry-over
- #669 — API-key fallback for orchestrate loop. The long-term solution to the ToS question. Requires rebuilding the tool-use runtime.
- #670 — Tmux injection revert for orchestrate. Dormant — Paul is driving sessions directly via /loop, which is cleaner.
- #665 — Infrastructure sweep (Railway, Vercel, Sentry webhooks → auto-create issues). Paul needs to research webhook capabilities.
- #668 — Email inbox check via Fastmail JMAP. Charlie can’t see Railway failure emails.
- #660 — Doc audits for remaining projects. 5 done, ~4 borderline.
- Blog post draft — “Every organization is full of unmarked graves” in polymathic-h, draft: true. Needs Paul’s final review.
- Skopos voice — Landing on Opus, still inconsistent on Sonnet. May need model-specific reinforcement.
Risks
- Anthropic ToS: subscription automation —
claude -pdispatch may violate updated consumer ToS. Currently dormant (tmux sessions driven by Paul). API fallback (#669) is the long-term fix but requires significant engineering. Immediate risk: low (not actively dispatching). Future risk: high if we try to re-automate on subscription. - Railway build failure: diktura-engine — healthcheck failing on /health endpoint. Engine starts but can’t serve HTTP. Issue #56 is needs-clarification. Commands queue is silently broken in production.
- No automated alert pipeline — Railway, Vercel, Sentry failures arrive as emails Paul has to notice. #665 tracks the fix.
Flags and watch-outs
- Weekly quota at 70% on Wednesday — the dev-loops consumed most of it. Sonnet-only was at 10%. Model selection matters for budget.
- Sessions need restart to pick up skill changes (skills don’t hot-reload). The Skopos Discord token and updated dev-loop skill require session restarts.
SKOPOS_DISCORD_BOT_TOKENadded to all project .env files. Projects without .env had one created.
Next session
- Review and publish the blog post draft — “Every organization is full of unmarked graves” sitting in polymathic-h
- Research Railway/Vercel webhooks (#665) — can deploy failures auto-create GitHub issues?
- Run /sum-up and /reflect for today
- Fix diktura Railway healthcheck (#56) — engine builds but /health doesn’t respond
- Consider API dispatch prototype (#669) — even a basic version for simple paulos commands would reduce subscription dependency
Why customer tools are organized wrong
This article reveals a fundamental flaw in how customer support tools are designed—organizing by interaction type instead of by customer—and explains why this fragmentation wastes time and obscures the full picture you need to help users effectively.
Infrastructure shapes thought
The tools you build determine what kinds of thinking become possible. On infrastructure, friction, and building deliberately for thought rather than just throughput.
Server-side dashboard architecture: Why moving data fetching off the browser changes everything
How choosing server-side rendering solved security, CORS, and credential management problems I didn't know I had.
The work of being available now
A book on AI, judgment, and staying human at work.
The practice of work in progress
Practical essays on how work actually gets done.
Delegation without comprehension is just prayer
The organizations that survive won't be the ones that automated the most. They'll be the ones that figured out what to stop delegating.
The case for corporate amnesia
Most organizations worship institutional memory. But what if the thing they're preserving is mostly decay?
Your design philosophy is already written
Builders who work across multiple projects leave fingerprints everywhere. The same mind solves the same problem differently in every domain — and usually doesn't notice. You need someone to read it back to you.