Docs · The welcome menu

Type toil. Get set up.

Run toil with nothing after it, in a terminal, and it opens a menu that takes you from nothing to a tested connection without typing a command. Every step it takes is a plain toil command, shown as it runs, so the menu is a way in, never the only way.

Docs The welcome menu

                                    
        ⢀⣴⣶⣄          ⣠⣶⣦⡀            ▗▄▖                ▗██▙  ███       
        ⠘⢿⣿⠟          ⠻⣿⡿⠃            ███▖                ▀▀▀▙ ████      
           ⣀⣀⣀⣀⣀⣀⣀⣀⣀⡀               ▗▄███▄▄▄    ▄▄▄▄▄▖    ▄▄▖▀ ████      
         ⣴⣿⣿⡿⣛⣛⣛⣛⣛⣛⢿⣿⣦⡀             ████████▄ ▟███████▙▖ ▐███▖ ████      
        ⢸⣿⣿⡏⣾⣿⣿⣿⣿⣿⣿⣷⣝⢿⣿⣦⡀            ████▘███▟██▛▘██▀███▖▐████ ████      
        ⢸⣿⣿⡇⣿⡿⢿⣿⣿⣿⣿⣿⣿⣷⢹⣿⣿⡆            ████▘  ███▌▛▘ ▗████▐████ ████      
  ⣴⣶⣦   ⢸⣿⣿⡇⣿⣷⣄⠈⠻⣿⣿⣿⣿⣿⢸⣿⣿⡇   ⣴⣶⣦      ███▙▄▖ ▝███▙▄▟███▛█▐████ ███▙▄▖    
  ⠻⠿⠟   ⢸⣿⣿⡇⣿⡟⠁⣠⣾⣿⣿⣿⣿⣿⢸⣿⣿⡇   ⠻⠿⠟      ▝▀███▛▖ ▝▀▜████▀▘█▛▝██▛█ ▝▜███▘▖ ▄▄
        ⢸⣿⣿⡇⣿⣷⣾⣿⡟⠉⠉⠉⢻⣿⢸⣿⣿⡇             ▝▀███▛   ▀▜████▀▘  ▝██▛  ▝▜███▘   
        ⢸⣿⣿⡇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢸⣿⣿⡇          
         ⠻⣿⣿⣮⣭⣭⣭⣭⣭⣭⣭⣭⣵⣿⣿⠟           Let your agents handle the toil.
           ⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉             
        ⢠⣾⣿⣦          ⣴⣿⣷⡄          Enterprise tools and databases.
        ⠈⠻⠿⠋          ⠙⠿⠟⠁          toil alpha · by Imagile
                                    
Recorded from toil’s splash

The splash draws toil's mark in the terminal: the badge fades in, six tool dots pop onto a ring around it, the cursor blinks twice, and the ring makes half a turn and settles, in under three seconds. Any key skips it. This replay is recorded frame by frame from the same code, so it is exactly what your terminal shows. toil is alpha, so the version line says so.

Only for a person at a terminal

The menu opens only when you run toil with no arguments and both stdin and stdout are a terminal, outside CI. Anything else, an agent, a script, a pipe or toil mcp, gets the plain JSON CLI: one envelope on stdout. The menu can change your connections and turn writes on, which agents over MCP never can.

Home

Home shows what this folder is (the repository, its branch and remote, read from .git without running git), how many connections you have and how the last test of each went, and a needs attention list: a config file that won't load, its warnings, a sign-in that was rejected, or no connections yet. Each of those rows opens the screen that fixes it.

Services

Services, the first entry on home, is every command toil has, laid out the way you type it: toil <service> <resource> <action>. Pick a service (the ones you have a connection for come first), then what to act on (an issue, a work item, a pull request), then the action, and the screen shows the command with its arguments and flags. Run it asks for each id, then a line of flags with the required ones filled in, and runs that line. A command that changes something shows the line with --allow-write and asks first; it still needs writes on for the connection. Find a command searches every service by name or description.

Every step is a real command

The menu has no logic of its own. Each action runs a toil connections command in the same process, prompting on your terminal, and the result screen shows the command line it ran and what came back. Run the same line yourself any time.

In the menuIt runs
Add a connection toil connections add <name> --area <area>, then toil connections test <name>
Test a connection, or all of them toil connections test <name>, once per connection
Sign in again toil connections login <name>, then toil connections test <name>
Turn writes on or off toil connections writes <name> on, asks you to type the name
Make a connection its area's default toil connections default <name>
Remove a connection toil connections remove <name>, after you type the name

Adding a connection

Four steps: pick the service, name the connection (the area's own name is suggested), answer the questions that service needs, with its defaults filled in and the secret read without echo, then a live test. Before anything is saved you see every setting and where the secret goes. The secret goes to your operating system's credential store, with only a reference in your config. If there is already a default connection for that area, you're asked whether this one should take over. Esc goes back a step without losing what you typed.

The test sends one cheap, authenticated read, such as Jira's /rest/api/2/myself, through the same code every command uses, so a rejected token fails here the way it would later. For an area with no such check, the test confirms the settings and the secret and says it sent nothing.

Writes need the name typed

Turning writes on for a connection asks you to type its name. There is no flag that skips the question, and without a terminal the command refuses and tells you to set "writes": true yourself. Removing a connection asks for the name too. Even with writes on, every write still needs --allow-write on the call. How writes are gated.

Connecting an agent

Pick Claude Code, Codex or VS Code, tick the areas it should see (none means every area), and the menu prints the snippet that registers toil mcp --areas … with it. It never edits another program's config.

Agent skills

One submenu for everything an agent reads from its skills folder. Skill plugins adds a marketplace, a git repository of skill plugins, installs one for the agent and place you pick, and switches installed skill plugins on and off. View installed skills lists every skill in every agent folder. Install the toil skill runs toil skill install for the agent and place you pick; toil keeps that copy current from then on.

Dossiers

New to dossiers? What is a dossier? explains them, with diagrams.

This folder says which dossier applies where you are and why: your repository's folder or remote is one of its repos, or it's checked into the repository. If none does, it offers to create one for this repository or add the repository to one of yours.

Create takes six steps: a name, the repositories from a scan (as checkboxes), each area with the connection it uses (or a new connection, through the same wizard as above), the Jira fields, Confluence spaces, Sonar or Azure DevOps projects found on that connection (as checkboxes), the environments and their resources, then a review that shows the whole dossier and checks it. Review groups what the check finds and offers each fix in place: relink an area, add the connection it names, remove a section toil has no area for, take a credential out of a stored remote, adopt it, or look its values up on the service. Edit shows the commands a change runs before you save it.

Binding a dossier to a connection with writes on asks you to type the connection's name, as turning writes on does, and importing a dossier whose bindings do asks for the dossier's name. Import lists every connection the file names that you don't have yet, each with a row that adds it. Export writes into this repository's .toil/dossiers/ or to a file, and never commits. Deleting asks for the name.

In the menuIt runs
This folder toil dossiers context
Create: name toil dossiers init <name>
Create: repositories toil repos scan, then toil dossiers add-repo <name> <folder> for each one ticked
Create: an area and its connection toil dossiers link <name> <area> --connection <connection>, or --host <host>
Create: discovery toil jira issue fields --discover --custom-only --dossier <name>, then toil dossiers field for each one ticked
Create: an environment toil dossiers env <name> <env> <area> --connection <connection>
Review toil dossiers check <name>, and toil <area> check-dossier
Remove a section toil dossiers unlink <name> --area <area>, after you type the area
Export toil dossiers export <name> --repo <dir>, or --file <path>
Import toil dossiers import <file>, after toil dossiers check <file>
Delete toil dossiers remove <name>, after you type the name

Brick breaker, retired

Brick breaker has been retired: a paddle on a character grid never felt right. There may be something else in the menu for the minutes a build takes. It is not listed, it is not a command or an MCP tool, and HR has asked us not to say how to find it. If your config file grows a sealed "game" entry, that's the menu's doing: it holds nothing but a game's progress, sealed so it can't be edited by hand or copied to another account. That guards against tampering, not prying: anyone who can read your files can open it. No command reads it, and deleting it only starts the game over.

Terminals

The splash animates in Windows Terminal, macOS Terminal and Linux terminals. The legacy Windows console host, NO_COLOR, TOIL_NO_ANIMATION, TERM=dumb and a window smaller than 40 by 12 get the still frame. Where Unicode isn't safe, the legacy console host or TOIL_ASCII, everything is drawn in plain ASCII. Long lists scroll on a short window; on a narrow one, text wraps and table rows are cut at the edge rather than wrapping into each other.

KeyDoes
Up / down, or j / kMove
Enter, or 1 to 9Choose
SpaceTick a box: areas for an agent, repositories or discovered values for a dossier
EscBack one screen, keeping your answers
qQuit from anywhere but a text field
Ctrl+CCancels the command running; twice in two seconds leaves the menu

Screens

What you'll see.

Drawn by the menu's own code, with placeholder hosts.

    ▗▄▖                ▗██▙  ███       
    ███▖                ▀▀▀▙ ████      
  ▗▄███▄▄▄    ▄▄▄▄▄▖    ▄▄▖▀ ████      
  ████████▄ ▟███████▙▖ ▐███▖ ████      
   ████▘███▟██▛▘██▀███▖▐████ ████      
    ████▘  ███▌▛▘ ▗████▐████ ████      
    ███▙▄▖ ▝███▙▄▟███▛█▐████ ███▙▄▖    
    ▝▀███▛▖ ▝▀▜████▀▘█▛▝██▛█ ▝▜███▘▖ ▄▄
     ▝▀███▛   ▀▜████▀▘  ▝██▛  ▝▜███▘   

  toil

  toil alpha · 2 connections · 1 failing · no warnings

  Repo       /home/you/payments
  Branch     main  from https://bitbucket.imagile.dev/scm/pay/payments.git

  Needs attention

  ▸ 1  wiki: sign-in rejected   Sign in again
    2  Services                 Browse and run every command: service, resource, action
    3  Health check             Config file, this folder and every connection
    4  Connections              Add, test, sign in again, writes and defaults
    5  Connect an agent         Pick areas and get the MCP config snippet
    6  Agent skills             Skill plugins, what is installed, and the toil skill
    7  Dossiers                 This folder, create, review, edit, export and import
    8  Help                     How toil works, a command cheatsheet, the docs
    9  Quit                     Back to your shell

  up/down move   enter select   1-9 jump   q quit
Home: this folder, connection health, and what needs attention first.
    ▗▄▖                ▗██▙  ███       
    ███▖                ▀▀▀▙ ████      
  ▗▄███▄▄▄    ▄▄▄▄▄▖    ▄▄▖▀ ████      
  ████████▄ ▟███████▙▖ ▐███▖ ████      
   ████▘███▟██▛▘██▀███▖▐████ ████      
    ████▘  ███▌▛▘ ▗████▐████ ████      
    ███▙▄▖ ▝███▙▄▟███▛█▐████ ███▙▄▖    
    ▝▀███▛▖ ▝▀▜████▀▘█▛▝██▛█ ▝▜███▘▖ ▄▄
     ▝▀███▛   ▀▜████▀▘  ▝██▛  ▝▜███▘   

  toil › Services › jira

  Jira Data Center: issues, search, transitions, comments, worklogs, attachments

  Connections  corp-jira healthy

  ▸ 1  issue           get, history, create, update, schema, transition, transitions, comment, log-
    2  board           list
    3  sprint          list
    4  api             Call any Jira Data Center REST endpoint on the connection, e.g. toil jira ap
    5  check-dossier   Check the call's dossier against Jira: its projects and field ids exist

  up/down move   enter select   esc back   q quit
Services: a service and its resources, each with the actions under it.
    ▗▄▖                ▗██▙  ███       
    ███▖                ▀▀▀▙ ████      
  ▗▄███▄▄▄    ▄▄▄▄▄▖    ▄▄▖▀ ████      
  ████████▄ ▟███████▙▖ ▐███▖ ████      
   ████▘███▟██▛▘██▀███▖▐████ ████      
    ████▘  ███▌▛▘ ▗████▐████ ████      
    ███▙▄▖ ▝███▙▄▟███▛█▐████ ███▙▄▖    
    ▝▀███▛▖ ▝▀▜████▀▘█▛▝██▛█ ▝▜███▘▖ ▄▄
     ▝▀███▛   ▀▜████▀▘  ▝██▛  ▝▜███▘   

  toil › Services › jira › issue › get

  Get a Jira issue by key

  toil jira issue get <key...>

  Arguments
    <key>                        Issue key (e.g. PROJ-123); give up to 100 keys to read several

  ▸ 1  Run it   Asks for <key>, then flags

  up/down move   enter select   esc back   q quit
A command as you would type it; Run it asks for the ids, then flags, and shows the line first.
    ▗▄▖                ▗██▙  ███       
    ███▖                ▀▀▀▙ ████      
  ▗▄███▄▄▄    ▄▄▄▄▄▖    ▄▄▖▀ ████      
  ████████▄ ▟███████▙▖ ▐███▖ ████      
   ████▘███▟██▛▘██▀███▖▐████ ████      
    ████▘  ███▌▛▘ ▗████▐████ ████      
    ███▙▄▖ ▝███▙▄▟███▛█▐████ ███▙▄▖    
    ▝▀███▛▖ ▝▀▜████▀▘█▛▝██▛█ ▝▜███▘▖ ▄▄
     ▝▀███▛   ▀▜████▀▘  ▝██▛  ▝▜███▘   

  toil › Connections

  Connections

  NAME       AREA        HOST                    WRITES      FROM  HEALTH
  corp-jira  jira        jira.imagile.dev        read only   file  healthy
  wiki       confluence  confluence.imagile.dev  read only   file  sign-in rejected

  ▸ 1  corp-jira              jira jira.imagile.dev
    2  wiki                   confluence confluence.imagile.dev
    3  Add a connection       Pick a service, sign in, test it
    4  Test all connections   One read against each

  up/down move   enter select   esc back   q quit
Connections, with where each came from and whether it answered.
    ▗▄▖                ▗██▙  ███       
    ███▖                ▀▀▀▙ ████      
  ▗▄███▄▄▄    ▄▄▄▄▄▖    ▄▄▖▀ ████      
  ████████▄ ▟███████▙▖ ▐███▖ ████      
   ████▘███▟██▛▘██▀███▖▐████ ████      
    ████▘  ███▌▛▘ ▗████▐████ ████      
    ███▙▄▖ ▝███▙▄▟███▛█▐████ ███▙▄▖    
    ▝▀███▛▖ ▝▀▜████▀▘█▛▝██▛█ ▝▜███▘▖ ▄▄
     ▝▀███▛   ▀▜████▀▘  ▝██▛  ▝▜███▘   

  toil › Connections › Add

  Step 1 of 4: service

  Which service is it?

  ▸ 1  confluence   Confluence Data Center: pages, spaces, CQL search, comments, labels and attachm
    2  github       GitHub and GitHub Enterprise Server: pull requests, reviews and checks
    3  jenkins      Jenkins: jobs, builds, console logs and the build queue
    4  jira         Jira Data Center: issues, search, transitions, comments, worklogs, attachments
    5  sonar        SonarQube: projects, quality gates, issues and measures

  up/down move   enter select   esc back   q quit
Adding a connection starts with the service, then its name.
    ▗▄▖                ▗██▙  ███       
    ███▖                ▀▀▀▙ ████      
  ▗▄███▄▄▄    ▄▄▄▄▄▖    ▄▄▖▀ ████      
  ████████▄ ▟███████▙▖ ▐███▖ ████      
   ████▘███▟██▛▘██▀███▖▐████ ████      
    ████▘  ███▌▛▘ ▗████▐████ ████      
    ███▙▄▖ ▝███▙▄▟███▛█▐████ ███▙▄▖    
    ▝▀███▛▖ ▝▀▜████▀▘█▛▝██▛█ ▝▜███▘▖ ▄▄
     ▝▀███▛   ▀▜████▀▘  ▝██▛  ▝▜███▘   

  toil › Connections › Add › sonar

  $ toil connections add sonar --area sonar
  ✓ Saved sonar (sonar) to your config file.

  $ toil connections test sonar
  ✓ sonar answered GET /api/authentication/validate on sonar.imagile.dev.

  Each step above is a plain command: run it yourself any time.

  ▸ 1  Continue   

  up/down move   enter select   esc back   q quit
Every step shows the plain command it ran, and what came back.
    ▗▄▖                ▗██▙  ███       
    ███▖                ▀▀▀▙ ████      
  ▗▄███▄▄▄    ▄▄▄▄▄▖    ▄▄▖▀ ████      
  ████████▄ ▟███████▙▖ ▐███▖ ████      
   ████▘███▟██▛▘██▀███▖▐████ ████      
    ████▘  ███▌▛▘ ▗████▐████ ████      
    ███▙▄▖ ▝███▙▄▟███▛█▐████ ███▙▄▖    
    ▝▀███▛▖ ▝▀▜████▀▘█▛▝██▛█ ▝▜███▘▖ ▄▄
     ▝▀███▛   ▀▜████▀▘  ▝██▛  ▝▜███▘   

  toil › wiki

  wiki

  Area       confluence  (its default)
  Host       confluence.imagile.dev
  Writes     off (read only)
  Health     sign-in rejected

  AUTH: Confluence rejected the personal access token on connection "wiki".
  Fix: Create a new token, then run toil connections login wiki.

  ▸ 1  Test it          One read, as a real command would send
    2  Sign in again    Replace its secret, then test it
    3  Turn writes on   Asks you to type the name to confirm
    4  Remove           Asks you to type the name to confirm

  up/down move   enter select   esc back   q quit
One connection's actions; a rejected sign-in comes with its fix.
    ▗▄▖                ▗██▙  ███       
    ███▖                ▀▀▀▙ ████      
  ▗▄███▄▄▄    ▄▄▄▄▄▖    ▄▄▖▀ ████      
  ████████▄ ▟███████▙▖ ▐███▖ ████      
   ████▘███▟██▛▘██▀███▖▐████ ████      
    ████▘  ███▌▛▘ ▗████▐████ ████      
    ███▙▄▖ ▝███▙▄▟███▛█▐████ ███▙▄▖    
    ▝▀███▛▖ ▝▀▜████▀▘█▛▝██▛█ ▝▜███▘▖ ▄▄
     ▝▀███▛   ▀▜████▀▘  ▝██▛  ▝▜███▘   

  toil › Connect an agent › Claude Code › jira

  Connect Claude Code

  Run this once:

    claude mcp add toil -- toil mcp --areas jira

  The agent gets the tools for jira only.
  Reads only: write tools appear once a person turns writes on for a connection.

  esc back   q quit
Pick the areas an agent should see, and copy its config snippet.
    ▗▄▖                ▗██▙  ███       
    ███▖                ▀▀▀▙ ████      
  ▗▄███▄▄▄    ▄▄▄▄▄▖    ▄▄▖▀ ████      
  ████████▄ ▟███████▙▖ ▐███▖ ████      
   ████▘███▟██▛▘██▀███▖▐████ ████      
    ████▘  ███▌▛▘ ▗████▐████ ████      
    ███▙▄▖ ▝███▙▄▟███▛█▐████ ███▙▄▖    
    ▝▀███▛▖ ▝▀▜████▀▘█▛▝██▛█ ▝▜███▘▖ ▄▄
     ▝▀███▛   ▀▜████▀▘  ▝██▛  ▝▜███▘   

  toil › Agent skills

  Agent skills

  Skill plugins come from marketplaces, git repositories of agent skills. The toil skill ships with
  toil, and toil keeps the copies it installed current.

  ▸ 1  Skill plugins            Marketplaces: add, install, switch on and off
    2  View installed skills    Every skill in every agent folder
    3  Install the toil skill   Or rewrite its description now; pick the agent and place

  up/down move   enter select   esc back   q quit
Agent skills: skill plugins from marketplaces, what is installed, and the toil skill.