Skip to content
krutovvvPublic

About

Native Mac terminal for your own servers: servers in folders, commands as blocks, an AI agent on a local LLM. Rust + GPUI, agent on Rig. Deep alpha, no releases: source to fork and change with your own agent.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Term

A native Mac terminal for your own servers, written in Rust with GPUI. Servers sit in folders, commands and their output are blocks, and an AI agent inside the app can service a server through the same shell, on a local LLM.

I built it for myself and put the source here in case it helps someone. Deep alpha, not a product: there is nothing to download. You take the code and change it.

Commands as cards, a failed one in red, a question to the agent and its answer

The pictures show made-up data. The same app runs in your browser, on a made-up shell: type help.

Is this for you?

Maybe, if:

  • you look after a lot of servers and want them in one list, not in a config file and your memory;
  • you run a model on your own machine and want it to look at a server for you, with nothing installed on that server;
  • you want your own terminal and would rather change working code than start from zero.

Probably not, if:

  • you want an app to install and just use;
  • you need accounts, a cloud, team features or Windows and Linux: none of that is here;
  • you want your passwords encrypted on disk. Here they are in plain text in one SQLite file, on purpose.

Why I made it

I work on a lot of servers. I wanted to pick one from a list and be on it, with no project set up for each, and I wanted to type commands in a real text field with a mouse and a selection, not at the end of a line of a 1970s screen.

The idea of commands as blocks comes from Warp, whose client is open source. I liked it, but I needed only about that much of it, so I had my own written. I say "had" because an agent did it: I am a front-end developer and I don't write Rust.

The other half is the agent. Servicing a server is mostly looking around: the logs, the disk, a service that fell over. A local model can do that well enough, as long as you see each command and decide what may change.

What's in it

  • Servers in folders. Drag them where they belong. Address, login, password or key, a jump host. One SQLite file you can open and read. Import from ~/.ssh/config.
  • Blocks. Each command is a card with its output, its folder, how long it ran and how it ended. A failed one is red. A click selects it, a double click brings the command back to the field. ⌘-click opens a link, or goes to a folder ls listed. vim and htop still get the whole screen.
  • A real command field. The shell only ever gets the finished command. ↑ walks this server's own history, Tab completes from it, and a file dropped from Finder becomes its path. Nothing is installed on the server.
  • An agent, on your model. Any endpoint in the OpenAI chat format. Its commands go down the tab's own shell, each a card you can read, and anything not known to only read asks you first. Built on Rig, in the same process: no Node, no service. It has limits you set for context and steps, skills you write as plain folders, and any MCP server over HTTP. Near the context limit it retells its older work to itself instead of forgetting it, a long output waits in a file to be read on, and it keeps a plan you can see.
  • Sessions that come back. Your tabs return at the next start with their commands and the agent's conversation, on a new shell. A tab you close waits in History.
  • An MCP server. term --mcp gives your other agents the list of servers.
  • Logins through ssh's own askpass. Nothing reads the terminal's output to answer a prompt, so a password never answers stray text.
The agent asks to run a command, with Allow once and Deny Two sessions as tabs, in the light theme
The form of a new server The agent's model settings

What has been tried

The tests pass and every screen has been looked at in pictures, but this is young. The agent has run for real on a local model on this Mac. Logging in to real servers with a password has barely been used yet, and a conversation is gone once its tab closes.

Making it yours

The code is the point. Give the repository to your coding agent and describe what you need. Everything is written down for it: AGENTS.md, skills, and a SPEC.md beside each module. It is laid out for a small local model: short files, folders named for what they are, a map from a request to a file.

The look is the one all my apps share, plain macOS on purpose. It has no character of its own, so it makes a good blank to build on.

The web demo

Every app I make also compiles to the browser, from the same Rust. I am a web developer, and I like seeing how far that goes. Only what cannot exist in a tab is made up: the shell, the servers and the agent. The grid, the blocks and everything you click are the app's own code.

License

MIT. Other people's code in it is listed in Cargo.lock; vendor/ holds the few crates patched in one or two lines, each with its own licence, and the icons are Lucide (licence).

About

Native Mac terminal for your own servers: servers in folders, commands as blocks, an AI agent on a local LLM. Rust + GPUI, agent on Rig. Deep alpha, no releases: source to fork and change with your own agent.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages