Personal project
Piston
A local-first agentic content system built around AI personas — orchestration, local models, multimodal generation, and a human in the loop before anything ships.
What it is
Piston is a content generation system built around AI personas. It currently runs multiple personas, each with its own niche, each generating written content and images. A human reviews everything before it's used, and publishing is a manual step — Piston doesn't post on its own.
The core AI workflow runs entirely on local hardware, on Apple Silicon, rather than depending on a cloud AI service for every generation. An optional call to the Claude API is available when a piece of content benefits from a stronger quality pass.
Why I built it
Calling an LLM API is the easy part of an agentic system. The interesting engineering problems are everywhere else: orchestrating multiple services reliably, giving a model the right context at the right step, running generation locally instead of leaning on a hosted API for every call, handling both text and image generation in the same pipeline, and building a review step that a human can actually trust. Piston exists to work through those problems directly, not just read about them.
Persona, niche, and brand context
Each persona carries its own voice and niche. Piston has also started incorporating affiliate brand relationships — a brand can be associated with a specific persona, so generation happens with the right persona, niche, and brand context together, rather than treating every piece of content the same way. Brand context is the newest layer in the system and the one still actively evolving.
Human review, by design
Every generated piece — text or image — goes through human review before it's used anywhere. That's an intentional constraint, not a limitation waiting to be removed. Running the generation locally and keeping a human in the loop are both part of the same underlying goal: understanding and controlling the system, rather than treating it as a black box that happens to produce content.
Architecture
A React UI talks to a .NET API, which hands work off to Python agent services. Those services trigger n8n workflows that call a local LLM (or Claude, when needed) and ComfyUI for image generation. PostgreSQL holds system state and configuration throughout.
Current status
Piston is an active personal project, not a commercial product. It runs multiple personas across different niches today, generating both text and images, with brand context now part of that generation. Every output is reviewed by a human before it's used, and publishing remains a manual step.