agentleFS
calebnewtonusccalebnewtonusc/Chewbacca/skills/agent-setup/SKILL.md

agent-setup

Skill8 starsChanged 3 months agoMITView on GitHub

Finish the parts of this kit's install that need a browser or a permission dialog: screen and accessibility grants, provider keys, any step behind a web console, and verification. Use after setup.sh, when doctor.sh reports a tool installed but unusable, or when the user says to finish setting something up themselves.

  • Reads credentials

4 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

4 rules. 0 are common, 3 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 3 edited versions we read keep these.

  • 3

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Stop and ask if the frontmost window is a login page, a password field, a payment form, a video call, or anything you did not open.

    line 26
  2. Distinctive:

    Prefer, in this order:

    line 32
  3. Very specific:

    If permissions read Granted but capture still fails, it is the Bridge, not TCC.

    line 58
  4. Distinctive:

    Check what exists before asking for anything:

    line 64

“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Agent setup

setup.sh installs binaries. It cannot tick a checkbox in System Settings, click through a consent screen, or fill in a web console that has no API. This skill is how you finish those, so the user does not have to.

Work through the checks first, do only what is actually missing, and end by running ./doctor.sh.

Before touching the GUI: is a person using this machine?

Driving the mouse, the keyboard, or the browser while someone is mid-task will interrupt them and can capture what they are typing. Check first, every time:

peekaboo list apps --json | head -40      # what is frontmost

Stop and ask if the frontmost window is a login page, a password field, a payment form, a video call, or anything you did not open. Say which window you saw and offer to continue when they are done. Never screenshot to find out whether it is safe: that is the capture you are trying to avoid. peekaboo list gives you titles without pixels.

Prefer, in this order:

  1. A CLI or an API. Always.
  2. chrome-js, which reads and clicks through JavaScript. Deterministic, and it never captures the screen.
  3. peekaboo click on a specific labeled element.
  4. Screenshots, only when you must see a layout you cannot query.

1. Screen Recording and Accessibility

peekaboo permissions

Both must read Granted. If not, these are TCC grants and no CLI can set them: they need a real click in System Settings. Open the exact panes for the user and tell them which app to tick (the terminal or editor running you, not peekaboo):

open "x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture"
open "x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"

Say BLOCKED: grant Screen Recording and Accessibility and move on to the rest. Come back and re-run peekaboo permissions when they say it is done.

If permissions read Granted but capture still fails, it is the Bridge, not TCC. See docs/MACOS-TOOLS.md; the kit's peekaboo wrapper already forces local execution.

2. Provider API keys

Check what exists before asking for anything:

for k in ANTHROPIC_API_KEY OPENAI_API_KEY GEMINI_API_KEY; do
  [ -n "${!k:-}" ] && echo "$k set" || echo "$k missing"
done

Nothing here is blocked on a key:

  • summarize runs on the local Claude CLI with --cli claude.
  • mac-use falls back to the same CLI when no key is set.

Both cost more per call than a provider key and both inherit the user's ~/.claude/CLAUDE.md, so a preamble the instructions ask for lands in the output. Mention that once. Do not ask for a key the user has not offered.

3. A step that lives behind a web console

Some tools need a credential that only a web console issues, and consoles rarely have an API. chrome-js drives one through JavaScript. Read the page between every step rather than assuming the last click landed.

chrome-js --check                         # which profiles allow JS, and the account on each
chrome-js --list                          # every tab Chrome exposes
chrome-js --open "<url>" --profile Default --match "<url-part>" --text
chrome-js --match "<url-part>" --click "Next"
chrome-js --match "<url-part>" --eval "document.title"

Four things that will cost you an hour each if you do not know them:

  • "Allow JavaScript from Apple Events" is per Chrome profile, not per browser. A window in a profile without it fails every call with the same opaque error. chrome-js --check prints the state of each profile.
  • Chrome exposes one AppleScript-visible instance. Windows belonging to other profiles or other user-data-dirs are invisible, so a tab can appear to vanish between two calls. Always pass --profile, and confirm with --list.
  • Open the console in the profile whose account owns the resource. Landing in the wrong account gives a permissions page that reads like a broken project and is really a wrong-account problem.
  • Angular and Polymer ignore el.value = x. Go through the native setter and dispatch the events, or the framework never sees the change:

    var d = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value");
    d.set.call(el, value);
    el.dispatchEvent(new Event("input", { bubbles: true }));
    el.dispatchEvent(new Event("change", { bubbles: true }));

    Dropdowns are usually a mat-select or [role="combobox"]: click it, wait, then click the [role="option"] you want. Chip fields commit on a synthetic Enter KeyboardEvent.

A consent screen granting access to someone's own account is theirs to approve. Get it to the point of one click, hand them the URL, say BLOCKED: approve the consent screen, and verify after they do.

4. Verify and report

./doctor.sh

Report what you finished, what is still blocked and why, and what it costs the user to unblock it. A step you skipped is a fact they need, not a failure to hide. Never report a tool as working because it installed; report it as working because you ran it.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.