Running my Mac Studio fully headless as an LLM server
▲ 105 r/MacStudio+1 crossposts

Running my Mac Studio fully headless as an LLM server

I've been running a Mac Studio (M1 Ultra) as a dedicated, always-on Ollama server for a while — fully headless, no monitor, managed over SSH. Along the way I collected a pile of tweaks that made a real difference in throughput and stability, and wrapped them into a single install script so I could rebuild the whole thing in one shot. Sharing in case it's useful to anyone else pointing their Studio at inference.

What it does:
- Headless setup — disables the GUI and unnecessary services so RAM and GPU go to models, not the desktop
- GPU memory optimization — lets Metal use more of your unified RAM for models (configurable %), so you can fit bigger models than the default cap allows
- Ollama tuned for serving — external access, parallel requests, longer keep-alive, flash attention, several models resident at once
- Auto-start and recovery on boot via launchd, with proper logging
- Optional Docker/Colima autostart if you run containers alongside

It's just config + scripts, one install command. Not selling anything — built it for my own box, it's been rock solid, figured I'd put it out there.

Repo: https://github.com/anurmatov/mac-studio-server

Feel free to use it, fork it, or lift whatever parts are handy — it's MIT. And if you're running Apple Silicon headless for inference, the GPU-RAM allocation trick is the one setting most people don't realize they can change.

u/_ggsa — 4 days ago

Some of you might remember I shared fuddy-duddy.org here back in January 2025 — AI-generated news summaries for Kyrgyzstan. A lot has changed since then, and I want to show one thing that I think is actually useful.

The system now tracks not just what the 12 sources publish, but when. The screenshots show a real story from this week — temporary closure of crossing points on the Kyrgyz-China border. Seven outlets covered the same event, and you can see the full timeline: The Economist broke it first, followed by Akchabar, K-News, 24.kg, VB, Kaktus, and AkiPress.

This isn't meant to be just another aggregator. The goal is to make our media landscape visible — who covers what, who's late, who skips important stories entirely.

What else is new since the last post:

  • Bilingual (RU + EN), independent pipelines
  • Analytics page — category trends, hourly source activity heatmap
  • Telegram and Threads channels with auto-posted story clusters
  • Public MCP at fuddy-duddy.org/mcp

Site: https://fuddy-duddy.org Original post for context: https://www.reddit.com/r/Kyrgyzstan/comments/1i5nc72/

Happy to hear feedback — what to add, what's broken, what doesn't make sense.

u/_ggsa — 2 months ago

I've been running 8 AI agents in production for a few months. Each is a Docker container with its own role (CTO, dev, devops, PM, traders, auditor) and its own Telegram bot. They coordinate through a workflow engine and a shared memory layer. Sharing the patterns that survived contact with real work.

The setup

  • 8 agents, each a Claude or Codex process inside a container, registers with an orchestrator and pulls work off a queue
  • Coordination happens through Temporal workflows, not direct agent-to-agent messages. Every meaningful interaction is a workflow with a defined shape (wrote up the Temporal/durability mechanics separately on r/Temporal — link in comments)
  • Shared memory layer (markdown + vector index) so any agent can read what any other agent wrote — not per-agent isolated state

Coordination patterns that worked

Consensus review as a primitive. When one agent finishes a unit of work (a PR, a design spec, a doc update), N other agents review it in parallel through a ConsensusReviewWorkflow. The implementing agent doesn't know it's being reviewed in parallel — it just gets one consolidated feedback message and either ships or revises. Same workflow reused across PR review, design review, and doc review.

One human, many agents, signal gates. Instead of an agent asking the human "should I proceed?" via chat, the workflow blocks on a wait_for_signal for human approval. The human sees a clickable button in a dashboard with full context (PR diff, reviewer verdicts, repo, phase). Removes the "agent waiting in chat" anti-pattern.

Memory as the cross-agent knowledge layer. All 8 agents share one semantic memory store. The PM writes a design spec memory, the dev reads it before implementing. The ops agent writes a runbook, the CTO reads it before delegating. No prompt engineering to "share context" between agents — they just search the same memory.

Orchestrator as router, not coordinator. The orchestrator doesn't decide which agent does what — that's in the workflow definitions. It just provisions containers, routes messages, and tracks heartbeats. Keeps the brain in the workflow layer where it can be inspected and changed without redeploying anything.

What didn't work

  • Direct agent-to-agent chat. Tried it early, removed it within a month. Conversations drift, no audit trail, no cancellation primitive. Every cross-agent interaction now goes through a workflow.
  • Per-agent isolated memory. Each agent having its own context turned out to be a coordination tax — same facts re-derived in five places. Shared memory + scoped reads is better.
  • Long-running "supervisor" agents that babysit other agents. Workflows do this better and survive restarts.

Demo + code in comments.

reddit.com
u/_ggsa — 2 months ago