{"id":50758563,"url":"https://github.com/slaffik/solo-menubar","last_synced_at":"2026-06-14T10:00:41.589Z","repository":{"id":363697097,"uuid":"1262277418","full_name":"slaFFik/solo-menubar","owner":"slaFFik","description":"SwiftBar plugin to display actionable MenuBar icon with the list of active Solo projects, todos and scratchpads","archived":false,"fork":false,"pushed_at":"2026-06-10T11:47:31.000Z","size":218,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-11T07:32:52.356Z","etag":null,"topics":["solo","soloterm","swiftbar","swiftbar-plugin","swiftbar-plugins"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/slaFFik.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-07T19:51:37.000Z","updated_at":"2026-06-10T11:47:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/slaFFik/solo-menubar","commit_stats":null,"previous_names":["slaffik/solo-menubar"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/slaFFik/solo-menubar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slaFFik%2Fsolo-menubar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slaFFik%2Fsolo-menubar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slaFFik%2Fsolo-menubar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slaFFik%2Fsolo-menubar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/slaFFik","download_url":"https://codeload.github.com/slaFFik/solo-menubar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slaFFik%2Fsolo-menubar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34234557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["solo","soloterm","swiftbar","swiftbar-plugin","swiftbar-plugins"],"created_at":"2026-06-11T07:31:50.638Z","updated_at":"2026-06-13T09:01:15.210Z","avatar_url":"https://github.com/slaFFik.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Solo Menubar\n\nA tiny macOS menu bar widget that shows which of your [Solo](https://soloterm.com) projects have a **running agent or process** — and lets you jump straight into any of them with a single click.\n\nBuilt as a [SwiftBar](https://github.com/swiftbar/SwiftBar) (or [xbar](https://github.com/matryer/xbar)) plugin. Pure Python, no third‑party dependencies, no remote requests.\n\n![Solo Menubar showing active projects in a SwiftBar dropdown](assets/screenshot.png)\n\n## What it does\n\n- Puts the Solo logo in your menu bar.\n- Click it to see every project that currently has at least one **running** process (i.e. an \"active\" project).\n- Optional toggles (all off by default) to also list idle projects and show per‑project TODO / scratchpad counts — see [Options](#options) below.\n- Each project — and each individual agent/terminal under it — is a clickable **deep link** that opens Solo focused on that exact process.\n- Refreshes the moment you open the menu — no background polling.\n- Shows a friendly error state that tells you whether Solo is closed, its HTTP API is off, or the API just isn't responding.\n\n## Requirements\n\n- macOS\n- [SwiftBar](https://github.com/swiftbar/SwiftBar) — `brew install swiftbar` (xbar works too)\n- Python 3 (`python3` on your `PATH`; only the standard library is used)\n- [Solo](https://soloterm.com) **0.8.2 or newer** running with its **HTTP API enabled**\n\n\u003e [!NOTE]\n\u003e Tested against **Solo 0.8.2**. Solo's HTTP API is still evolving and may change in future releases — a Solo update can break the plugin until it's adapted. If the menu suddenly shows *\"Solo API changed — update this plugin\"* (or an error row that won't go away) right after a Solo update, check here for a newer plugin version. You can Watch for new Releases.\n\n### Enable Solo's HTTP API\n\nThe plugin reads Solo's local control plane. Enable the HTTP API in Solo's settings — Solo then writes a discovery file to `~/.config/soloterm/http-api.json`, which the plugin reads to find the API's base URL and its local auth token. No setup beyond the toggle: Solo writes the token itself, and nothing ever leaves your machine.\n\n## Installation\n\n```bash\n# 1. Clone\ngit clone https://github.com/slaFFik/solo-menubar.git ~/Projects/solo-menubar\n\n# 2. Make sure it's executable\nchmod +x ~/Projects/solo-menubar/solo-menubar.py\n\n# 3. Symlink it into your SwiftBar plugin folder\nln -s ~/Projects/solo-menubar/solo-menubar.py ~/Documents/SwiftBar/solo-menubar.py\n```\n\nPoint SwiftBar at your plugin folder (e.g. `~/Documents/SwiftBar`) and the icon appears right away. SwiftBar follows the symlink, so you can keep editing the file in the repo and SwiftBar always runs the latest version.\n\n## How it works\n\nEach time you open the menu (and once on launch), the plugin:\n\n1. Reads the API base URL and bearer token from `~/.config/soloterm/http-api.json`, so it survives Solo restarting on a different port and never needs credentials from you.\n2. Calls `GET /api/projects` and `GET /api/processes?status=running` (the unfiltered process list when *Show all projects* is on) and joins them by project. TODO/scratchpad counts, when toggled on, come from each list endpoint's `totalCount` via concurrent `limit=1` probes — one item per request instead of the full list.\n3. Keeps any project that has a running process (or all projects, if you toggle that on).\n4. Renders a clickable deep link per project/process:\n   `solo://proj/{project_id}/process/{slug}--{process_id}`\n\nIt refreshes on open via SwiftBar's `refreshOnOpen` flag, so the list is always current the instant you click — without polling Solo in the background.\n\n## Configuration\n\n**Refresh** — by default the file is named `solo-menubar.py` (no interval), so SwiftBar refreshes it only when you open the menu. The menu bar icon is static, so background polling buys nothing. If you *do* want it to poll as well, encode an interval in the filename:\n\n| Filename | Behavior |\n| --- | --- |\n| `solo-menubar.py` | Refresh on menu open only *(default)* |\n| `solo-menubar.10s.py` | Also poll every 10 seconds |\n| `solo-menubar.1m.py` | Also poll every minute |\n\n(Rename the symlink in your SwiftBar plugin folder — SwiftBar reads the interval from the filename it sees there.)\n\n### Options\n\nToggles at the bottom of the menu. All are **off by default**, and your choices are remembered between launches.\n\n| Option | What it does |\n| --- | --- |\n| **Show all projects** | List every project, not just those with a running process. Idle projects appear greyed out. The toggle label shows the total project count. |\n| **Show TODOs** | Under each project, show its number of open TODOs (only when above zero). |\n| **Show Scratchpads** | Under each project, show its number of scratchpads (only when above zero). |\n\n## Troubleshooting\n\n- **\"Solo HTTP API not enabled\"** — Solo has never written its discovery file; turn the HTTP API on in Solo's settings.\n- **\"Solo not running\"** — open Solo. If it *is* open, re-enable its HTTP API so it rewrites the discovery file.\n- **\"Solo is running, but its HTTP API isn't responding\"** — toggle the HTTP API off and on, or restart Solo.\n- **\"Solo API changed — update this plugin\"** — your Solo speaks a newer API contract than this plugin; grab the [latest plugin release](https://github.com/slaFFik/solo-menubar/releases).\n- **Nothing shows in the menu bar** — confirm SwiftBar's plugin folder is set, the file is executable (`chmod +x`), and `python3` is installed (`xcode-select --install`).\n- **Menu doesn't update while it's open** — macOS renders a menu at the moment you open it; the plugin re‑reads Solo on each open, so just close and reopen to see fresh data.\n\n## Credits\n\n- [Solo](https://soloterm.com) by Aaron Francis.\n- Plugin by [Slava Abakumov](https://github.com/slaFFik).\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslaffik%2Fsolo-menubar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fslaffik%2Fsolo-menubar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslaffik%2Fsolo-menubar/lists"}