A few weeks ago I coded minimalist coding agent, which I called ii – just about 70 lines of code which runs a while loop on top of Anthropic API. Second github commit to improve ii was done from within ii itself. My curiosity took my one step further: what if I vibe-code terminal itself? Yeah, why not, instead of running iTerm, what would it take to vibe-code one and run ii inside of it?

This is how wisp was born. The below screenshot may look just like any regular screenshot of a terminal, except this is “Wisp Terminal” mac app vibe-coded and running vibe-coded ii coding agent.

GitHub: https://github.com/andriybuday/wisp

And here is 1M tokens burned just to add basic copy and scrolling capability:

And not only this runs super-simple stuff. I can actually run OpenCode inside of this terminal and it kind of works. It has sharp edges and some things appear broken, but it does work for most part and is fast thanks to GPU rendering acceleration:

Unlike with coding agent where I could read the code and for the most part understand what is happening, I honestly don’t know what is happening in wisp. It is based on rust, does GPU accelerated text rendering, uses bunch of libraries I’ve never heard about, but it works. Here are tech details.

Stack / architecture (AI summary):

  • Rust terminal emulator. Deps: winit 0.30 (window/input), wgpu 23 (GPU), fontdue 0.9 (glyph rasterization), portable-pty 0.8 (shell PTY), vte 0.13.1 (ANSI parser), pollsterbitflagsbytemuckarboard 3 (clipboard, added this session).
  • Data flow: keypress → PTY write → shell → bytes → vte parser → Terminal cell grid → Renderer builds textured quads → wgpu draw. One quad per glyph/background/cursor; glyphs sampled from a single R8Unorm atlas texture.
  • Render is immediate-mode: build_vertices() walks the whole grid every frame and emits a vertex buffer + u16 index buffer.

Also, unlike coding agent, which was vibe-coded with Sonnet model, I had to run Opus to get this one working and at one point I got stuck with rendering where the text wold not render, so I used Claude Cowork and gave it permission to take screenshots and fix the rendering and iterate on it.

Instead of conclusion

So where am I going with all of this? Well, it has never been easier to implement literary anything you might need. If needed (and if you have enough tokens) I’m sure you can vibe-code operating system for yourself. Producing code has never been this easy and quick. At the same time we are moving more closer to the core of why software engineering exists – which is to solve real world problems and I am looking to learn how all of this evolves.