5 Commits
Author SHA1 Message Date
bdeshiandGitHub 97b131070e Revise README for improved clarity and structure
Brings ai-authorship note above the fold, and adds a note about imperfect isolation guarantee.

Signed-off-by: bdeshi <bdeshi@bdeshi.space>
2026-08-06 01:06:12 +06:00
bdeshi 8ea208ced4 release 1.0.0 :party: 2026-08-06 00:35:15 +06:00
Claude Opus 5andbdeshi e803f008f0 Move the workflow actions off Node 20
checkout and action-gh-release both still target Node 20, which GitHub
has deprecated and is already force-running on Node 24. Nothing is broken
yet, but the runners won't accommodate it indefinitely, and a release
workflow is a poor place to discover that.
2026-08-06 00:35:02 +06:00
Claude Opus 5andbdeshi 58fc3444d5 0.0.10
Supersedes 0.0.9, whose published build went out ad-hoc signed because
the release workflow ran without the signing secrets. Anyone installing
it gets an app whose Accessibility grant is pinned to that one binary and
breaks on their next update, so it wants replacing rather than leaving as
the latest release.
2026-08-06 00:25:40 +06:00
Claude Opus 5andbdeshi 150a2394dd Hand the signing secrets to the called release workflow
A workflow invoked with `uses:` gets no secrets unless they are passed to
it, so every secret was empty inside release.yml when tag-on-version-bump
called it. The certificate import was skipped, the build came out ad-hoc,
and the release published that way — the precise outcome signing exists
to prevent.

Its own ad-hoc guard didn't catch it either: that guard only fires when
an identity was configured, and from the called workflow's point of view
none was. So the failure was silent in both places at once, and the run
went green.

Verified against the 0.0.9 build, whose log shows an empty
SIGNING_IDENTITY and Signature=adhoc on the published artifact.
2026-08-06 00:23:52 +06:00
4 changed files with 34 additions and 14 deletions
+2 -2
View File
@@ -28,7 +28,7 @@ jobs:
# below treats as "fall back to ad-hoc".
SIGNING_IDENTITY: ${{ secrets.SIGNING_IDENTITY }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7
with:
ref: ${{ inputs.tag || github.ref }}
@@ -139,7 +139,7 @@ jobs:
run: ditto -c -k --sequesterRsrc --keepParent ".build/shannoncoat.app" "shannoncoat.app.zip"
- name: Publish release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v3
with:
tag_name: ${{ inputs.tag || github.ref_name }}
files: |
+7 -1
View File
@@ -15,7 +15,7 @@ jobs:
tag: ${{ steps.tag.outputs.tag }}
created: ${{ steps.tag.outputs.created }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7
with:
fetch-depth: 0
@@ -45,5 +45,11 @@ jobs:
uses: ./.github/workflows/release.yml
with:
tag: ${{ needs.tag.outputs.tag }}
# A called workflow gets no secrets unless they're handed over, so
# without this the signing secrets are empty inside release.yml and it
# quietly builds ad-hoc — which is exactly what signing exists to
# prevent, and which its own ad-hoc guard misses, since that guard only
# fires when an identity was configured.
secrets: inherit
permissions:
contents: write
+24 -10
View File
@@ -1,14 +1,20 @@
![shannoncoat — which coat will Claude wear today?](docs/hero.png)
Run multiple isolated Claude profiles on macOS — each one its own Claude Desktop
**and** its own paired Claude Code setup — and tell their windows apart at a
glance.
Run multiple isolated [**\***](#isolation) Claude profiles on macOS — each one
its own Claude Desktop **and** its own paired Claude Code setup — and tell their
windows apart at a glance.
Your normal Claude install is left completely alone. It stays exactly as it is
and keeps working normally; shannoncoat only adds profiles alongside it.
Your normal Claude install is left alone. It stays as it is and keeps working
normally; shannoncoat only adds profiles alongside it.
A menu-bar item allows quick switching and profile management.
---
> [!NOTE]
> shannoncoat started as the shell script in the first commit, written by hand.
Claude built the GUI app out of it — most of the Swift, the icon, and this
README — working from human direction, review, and dogfooding.
## Requirements
- macOS 13 or later
@@ -115,8 +121,12 @@ rather than killing Claude underneath it. Answer the dialog.
## Build from source
Requires the Xcode Command Line Tools.
Local builds require the Xcode Command Line Tools.
```
xcode-select --install
```
Then run the build script
```bash
./build.sh
```
@@ -129,8 +139,12 @@ every time, which silently invalidates its Accessibility grant on each rebuild.
`.env.example` walks through creating a self-signed certificate once so the
permission survives.
---
## Isolation
shannoncoat started as the shell script in the first commit, written by hand.
Claude Code built the app out of it — most of the Swift, the icon, and this
README — working from direction, review and testing.
> [!IMPORTANT]
> Perfect isolation is not guaranteed. Claude and Claude Code can have functionally
> full disk access regardless of which profile it's running from, including access
> to default configuration folders.
>
> Some Claude integrations — skills, plugins, etc — may also hardcode the
> `~/.claude` path which may modify content in there.
+1 -1
View File
@@ -1 +1 @@
0.0.9
1.0.0