I rebuilt Zo Computer's seven subsystems in 800 lines of Python — here's the architecture, the tradeoffs, and what I cut A developer rebuilt Zo Computer's seven subsystems in 775 lines of Python, creating an open-source package called ZoClone that replicates the AI workspace's agent manager, skills registry, memory engine, scheduler, compute pool, BYOK client, and headless browser without daemons, Docker, or Postgres. The project demonstrates that a single Python package on a laptop can provide 80% of the same functionality using only ~800 lines of dependency-light code. I've been using Zo Computer https://zo.computer as my primary AI workspace for a few months. The piece I kept coming back to wasn't the model — it was the substrate : the agent manager that spawns parallel sessions, the skills registry that auto-loads SKILL.md files, the memory engine that compresses old context, the rrule-based scheduler, the compute pool that turns idle machines into workers, the BYOK client that swaps between Groq/OpenAI/Anthropic, and the headless browser that actually clicks things. So I asked the obvious question: how much of that is concept and how much is platform glue? Could a single Python package on a laptop give a developer 80% of the same shape? ZoClone https://github.com/AmSach/ZoClone is my answer. Seven files in src/ , ~800 lines of dependency-light Python, and every subsystem above is wired up. No daemon, no Docker, no Postgres — just ~/.zoclone/ .db and a ThreadPoolExecutor . Here's the architecture, what I learned about which parts are easy to clone and which ones are doing real work, and the shortcuts I had to take to fit the whole thing in a single repo. ZoClone/ ├── src/ │ ├── zo.py top-level orchestrator + ask loop │ ├── agent manager.py parallel async agents via Zo /zo/ask │ ├── skills.py SKILL.md auto-loader + handler dispatch │ ├── memory.py TF-IDF fallback embeddings + context recall │ ├── automation.py rrule scheduler with minute/hour/day cadences │ ├── compute pool.py node registry + priority FIFO dispatch │ ├── browser.py Playwright headless + navigate/screenshot/eval │ ├── byok.py key vault for Groq/OpenAI/Anthropic/Ollama │ ├── zo client.py OpenAI-compatible chat abstraction │ └── services.py process supervisor start/stop/logs Total LoC: 775 . No init .py magic, no metaclass tricks, no plugin discovery beyond a directory scan. The constraint forced every interface to be a plain function or a class with three methods. zo.py Everything threads through a single ZoClone class that owns the DB connection, a thread pool, and a AIClient that's lazily constructed on first call to ask . python class ZoClone: def init self : self.db = init db self.executor = ThreadPoolExecutor max workers=10 self.ai client = None self.pool = pool module-level singleton self.hosting = hosting module-level singleton self.memory = memory self.scheduler = scheduler def ask self, conv id: str, message: str, provider: str = "groq", model: str = "", tools: list dict = None - dict: if not self.ai client: key = get key provider m = model or PROVIDERS provider "models" 0 self.ai client = AIClient provider, m, key messages = self.memory.get context conv id messages.append {"role": "user", "content": message} system = f"You are Sentience, an advanced AI running locally. Workspace: {os.getcwd }." resp = self.ai client.chat {"role": "system", "content": system} + messages -20: , tools or , ... persist + return The trick is AIClient — it's the only piece that has to be OpenAI-compatible, because every modern provider Groq, Together, OpenRouter, Ollama, LM Studio has converged on the chat completions schema. Anthropic needed a tiny shim, but Groq works out of the box. SKILL.md This is the part I'm proudest of. The directory scan is six lines: python def load all skills : global SKILLS SKILLS = {} if not SKILL DIR.exists : return for item in SKILL DIR.iterdir : if item.is dir and item / "SKILL.md" .exists : skill = load skill item.name, item / "SKILL.md" if skill: SKILLS skill.name = skill The interesting bit is the SKILL.md parser. It accepts the same frontmatter shape as the Agent Skills spec — name , description , triggers comma-separated — and looks for scripts/