Cassette Build Report 003 — Cassette Is the Name, and the Architecture Is Still Open
I named Cassette after an agent gave the project a name that carried an unapproved architecture with it.

Scope note: This post defines the operation Cassette must preserve while leaving the implementation open. It does not describe a finished interface or claim that any one runtime is the final path.
“It gave it that name. Not me. I am giving the project the name of cassette.”
That was my correction to the first answer. The sentence looked like a naming decision, but the real issue was architectural authority. CartridgeLM had arrived with a compiler, a storage layout, and a routing scheme already attached. If I accepted the name without separating it from the proposal, the proposal would keep deciding what the project meant.
Cassette needed a name that could hold the question without answering it too soon.
I described the operation in pieces. The system would work with macOS and Apple architecture. A user would have an external USB-C flash drive or SSD. A very large downloadable language model, at the level of a full Kimi K3 or something comparable, would be stored directly on that external device. The user would choose the model, activate it through some control, and let Cassette do the work required to make it usable from Codex, Ollama, OpenClaw, Hermes, a custom endpoint, or another compatible agent system.
The phrase “Cassette does things” was deliberate. I did not know whether the answer would require model transformation, routing, compilation, a native storage runtime, a protocol broker, or several parts that had not yet been named. Leaving that unknown visible was more honest than filling it with a familiar product category.
I also had to clarify what Cassette was not. It was not another chat application. It was not a wrapper that made an existing runtime look different. A user interface was allowed if it controlled genuine work on the model and its physical execution. The interface could be a button, a prompt, or another control surface. The invention had to remain in the model and the path that executed it.
The code constraint made the distinction harder. I wanted the smallest amount of code physically possible, but not a demonstration that avoided the difficult parts. The model would need acquisition, conversion, interoperability, durability, and support for training or related updates when its structure allowed them. Small did not mean incomplete.
That standard is important for open-source work. A short repository can be impressive because it hides the work it does not perform. A complete mechanism can be small because it removes unnecessary machinery. Those are different achievements. Cassette has to minimize the implementation without minimizing the promise.
The naming correction also changed how I read future answers. When an agent supplied a clean system name, I started looking for the architecture that had entered with it. When an answer described a button, I asked what physical operation the button controlled. When an answer proposed a client integration, I asked whether the underlying model path had changed or whether the project had become a better wrapper.
I wanted Cassette to remain open at the point where the engineering had not yet earned a decision. That is not indecision. It is a way to keep a candidate mechanism from becoming a hidden requirement.
The name now does one useful thing. It identifies the project without deciding how the project works.
