Kulisa

Kulisa user guide

Kulisa: three profiles of a shop (buyer, seller, admin) side by side, the agent outlining the buyer’s new order in the seller’s and the admin’s, and Claude Code in the terminal below

Kulisa is a desktop app where the AI agent you choose (Claude Code, Codex) works in your signed-in browser profiles, side by side. It builds, checks the result as every user of your app, fixes, and goes again until it works, while you watch every step or take a break. It is made first for developing web apps with several users at once (a buyer, a seller, an admin), and is good for any work in web apps: several clients’ accounts, admin and support work.

You sign in to your accounts yourself, by hand; the agent never does, except as test users of your own app on this computer. Everything stays on your computer.

Words used here

Systems

Kulisa is made for Linux, Windows and macOS. Its installers are for 64-bit Intel and AMD processors (x64), not yet for ARM ones.

Not as an AppImage, Snap or Flatpak, on purpose: on recent Ubuntu an AppImage runs only with the browser’s protection of your signed-in pages turned off, and Snap and Flatpak would keep Kulisa from your terminal, git and agents, which it works with.

Getting started

Download Kulisa from its latest release:

Every installer is built by GitHub from Kulisa’s published code, and GitHub keeps a signed record of it. To check a file you downloaded, with GitHub’s command-line tool: gh attestation verify <file> -R cosmotools/kulisa.

  1. Make a project. At the first start Kulisa shows in three short slides what it does (Skip passes them), then New Project, in three steps (below): its code, its agents, the users of your app. Create makes it and opens its first task.
  2. Tell the agent what to do in the terminal. It opens the profiles it needs itself.
  3. Sign in where your app needs a real account: when the agent asks, or ahead of time with Sign In… in Settings → Profiles. You sign in once, for every task.

More tasks: + in the tasks’ bar makes a new one in one click (with several projects, it asks which one first). Tasks of another project, and those you closed, are in the sidebar (Tasks, below).

The window

Projects

New Project

At the first start, with no project yet, the window is New Project after three slides of what Kulisa does (Back on the first step shows them again); later, New Project… at the foot of the sidebar. Three steps; Next goes on, Back goes back with what you typed kept, and nothing is made before Create.

1. Code. Where its code comes from, in the tabs at the top:

At the very first start it takes one folder or one repository; add the others (a frontend and a backend) later, in Settings. There the project is named after its folder or repository (the line under it says so; rename it in Settings); only a new folder asks for a name.

The step says what will happen as you type. Its color and icon are not asked: Kulisa finds its site’s favicon in its code and takes the color from it, so a red logo makes a red project. A project whose code has no favicon gets the curtain and a color of its own.

2. Agents. Who works in its tasks: tick your agents’ accounts, one or several; ★ marks the one a new task starts (the first you ticked, unless you star another). Add account → Claude Code or Codex signs in to a new one in your browser; an agent not on your computer yet is installed first, by itself (Details shows the installer at work). Tick none and its tasks start with a terminal, where you run what you like.

3. Profiles. The users of your app: Add Profile, a name (ann@shop.com) and who it is (“seller; can approve refunds”): the agent chooses profiles by it. Tick any of your other profiles to have them here too. None now is fine: the agent makes those it needs.

Create makes the project and opens its first task, its agent in the terminal. All of it can be changed later on its page in Settings.

A project’s page

Settings (the gear) → Projects → the project, or Project Settings… in a project’s right-click menu in the sidebar, or in a task tab’s right-click menu, under the project’s name. Everything is saved as you change it; there is no Save button.

Agents and their accounts

Settings → Agents lists the agents Kulisa knows (Claude Code, Codex): installed or not. Click one to see its version, its accounts, and Install if it is not installed. Kulisa never removes or updates an agent: its maker’s installer updates it.

An account is an agent signed in to one of your subscriptions, so a work and a personal one can run side by side. Make one with New Account on the Agents page (then the agent), Add Account on the agent’s page, or on a project’s page. Each account starts clean: your own settings of the agent outside Kulisa are not used. It is shown by its email, and stays until you delete it here (its ⋯ → Delete…).

A task may have several agents at once, each in a tab of its own (Terminals, below): Claude Code next to Codex, two of your accounts, or one agent twice. Each starts a new conversation and names its tab in a few words once it knows what it works on. To pass the work on (when one runs out of its limit, or for a fresh start), click the agent’s icon on its tab (or Change agent… in its right-click menu). Change Agent shows what goes along to the next one: the task’s branch, its profiles still signed in, their tabs, the terminals running, the whole conversation; and what stays behind. Choose the agent and Hand over: it reads what was said and done in that conversation while a bar shows how far it has read, then its tab opens and it tells you in a few lines where it stands. If it needs you first (a permission, a sign-in), its tab opens at once; Show now does not wait. The old tab stays until you close it. Or simply tell an agent “go on with what Claude did”: every agent of the task can read the others’ conversations.

Dictation: hold the right Ctrl key (the right ⌘ on a Mac) while you speak, wherever you are in Kulisa, a page or the terminal, and let go; or press it once to start and once more to stop. The text goes into the agent’s input for you to read and send. It hears the language chosen in ☰ → Language. The microphone at the end of the terminals’ row shows that it is listening, and works the same way by the mouse: hold it, or click to start and again to stop. While you speak, a capsule at the top of the terminal shows your voice as a wave and how long you have spoken; when you let go it says it is transcribing, then that the text is in the agent’s input. Claude Code listens itself; for Codex and any other agent without dictation of its own, Kulisa listens with Claude Code behind the scenes, so you need it installed and signed in with a Claude subscription (Settings → Agents); the words appear as you speak and are put right when you let go. The first time after a break, the capsule says Getting ready… for about a second (the microphone turns blue): speak once it shows the wave. With a terminal in front, the key brings the agent back in front. Greyed out, its tooltip says why. Another key instead of the right Ctrl: ☰ → Keyboard Shortcuts, Change on its row, then press the key.

GitHub

Settings → GitHub holds your GitHub accounts, as many as you have (work, personal). Kulisa keeps their sign-ins itself, encrypted with your computer’s keyring; your agents never see them. Add Account adds one, two ways:

In an organization you are a member of, only its owner can install Kulisa App: GitHub lets you request it, and the owner decides. Ask them to install Kulisa App on the repositories you work on; or, if they will not, make a fine-grained token for the organization, which its owner may also have to approve (and, where the organization signs in through its company’s single sign-on, authorize for it). A repository no account can reach says so on its row in the project, with a link to install Kulisa App.

The list shows each account, where Kulisa App is installed, the projects using it and until when it is signed in. A sign-in with GitHub lasts six months from the last time Kulisa used it; a token, until it ends. When one ends, or GitHub turns it down, the account says Signed out: Sign in Again… in its ⋯ or right-click menu. On a Linux computer without a keyring, Kulisa cannot keep a sign-in safely, so it keeps none: you sign in again after Kulisa restarts, and the page says so. Delete… (its ⋯) deletes an account after a question; Kulisa forgets its sign-in, which GitHub still knows until it ends: the question links the GitHub page where you revoke it at once.

Tasks

Several windows

Profiles

Settings → Profiles is the one place for who a profile is: the same person in every project and task. Click a profile there to see its page.

Signing in

Open, close, remove

A profile’s pane

A pane is a small Chrome. Its header shows the profile’s picture and name, what the agent is doing in it, ⋯ (the profile’s menu, also on a right-click) and ×. Under it, a tab strip, then back, forward, reload, the address bar, Pick and ⋮.

Working with the agent

Terminals

Look and zoom

Keyboard shortcuts

☰ → Keyboard Shortcuts (Ctrl+Shift+/) lists them all. On macOS they are ⌘’s. The main ones:

Keys What
Ctrl+` The terminal in front, and back to the page
Ctrl+Shift+` A new terminal
Ctrl+Shift+A The sidebar: every project with its tasks
Ctrl+Shift+N New task of the same project
Ctrl+Shift+1…9 The first to ninth tab
Ctrl+Shift+PgDn / PgUp The next or previous task
Ctrl+Shift+C (in a page) Pick an element for the agent
Ctrl+Shift+S (in a page) Screenshot of an element
Ctrl+T, Ctrl+W, Ctrl+Shift+T (in a page) New tab, close the tab, open the tab closed last
Ctrl+L (in a page) The address bar

In the terminal every other key is the agent’s.

Where Kulisa keeps things

☰ → About Kulisa (on a Mac also Kulisa → About Kulisa in the menu bar) opens Settings at its About page: Kulisa’s version and the exact folders on your computer: the data folder, the projects’ folder and the program’s, each with a button that opens it in your file manager, its path there to copy. Look there rather than guess: where the folders are depends on your OS and its settings. Usually:

Reporting a problem

When something goes wrong, ☰ → Report a Problem… opens Settings at its Log page: what Kulisa did, line by line, as it happens (Follow keeps the end in view). Scroll up to read older entries; turn Follow on to return to the latest. Searching covers the whole log. Errors shows the warnings and errors alone; Agent, Human and Tasks what the agent did, what you did, and tasks and windows opened and closed; the field beside them narrows it further (a task’s name, a word). The log holds your project and task folders, profile names and the pages’ addresses without their queries; never what you typed, passwords, tokens or cookies. Then pass it on any way you like:

Reinstalling and removing Kulisa

Uninstalling Kulisa (your OS’s way: Apps on Windows, apt remove kulisa or dnf remove kulisa on Linux, the Trash on macOS) removes the program only (on Ubuntu and Debian, apt purge kulisa also removes where its updates come from). Everything you made stays where it is listed above, so installing Kulisa again brings it all back: your projects, tasks, profiles with their sign-ins, agents’ accounts and settings.

To remove everything, do it before uninstalling, in Kulisa, so that it cleans up after itself. First note the folders in ☰ → About Kulisa (Settings → About): once the program is gone, nothing shows them. Then delete every project (⋯ → Delete Project… on its page: its tasks go with it, with their copies of the code and their branches), every profile (Settings → Profiles) and every agent’s account (Settings → Agents: the account’s ⋯ → Delete…, which signs it out). Then uninstall the program and delete the data folder (above). What remains and is yours to keep or remove:

If you uninstall first, the tasks’ copies of the code stay next to your repositories, each still a worktree and a branch of its repository: in a terminal, in the repository, git worktree prune and git branch -D <branch> remove them (the same on every OS).