A personal collection of Claude Code skills, published as a single
plugin under the l3a0 namespace. This repo is both the plugin and its own marketplace.
I write about how these tools get built — and about technology, business, and finance — at baowebdev.substack.com.
claude plugin marketplace add l3a0/claude-plugins
claude plugin install l3a0@l3a0Skills are invoked as /l3a0:<skill-name> (the bare /<skill-name> also works while no other
installed command claims the name), and Claude auto-invokes them when a request matches a
skill's description.
Export a heavily-highlighted book from Amazon's notebook page and some highlights come back cut off mid-sentence, while others come back as a bare location number with no text at all, under this notice:
"Some highlights have been hidden or truncated due to export limits."
Those are your own notes, in your own account, capped by a budget Amazon doesn't document and
you can't raise. This skill gets them back: it extracts every highlight for a book from the
Kindle notebook (read.amazon.com/notebook) into one combined, verbatim, location-cited
Markdown file — including the highlights the export limit truncates or hides entirely, which
are recovered from the Mac Kindle app's synced annotation positions plus the Cloud Reader's
rendered pages.
Proven on five real books: 2,733 highlights extracted, 1,038 of them export-blocked (537 truncated + 501 fully hidden) — every one recovered, with recovered text landing within a couple of characters of the Kindle app's own position ruler (median residual 0–1). Every gotcha in the skill was earned by real debugging across those runs. The fifth run turned the recovery into scripts. They read each highlight's known character length from the Kindle app, sweep the reader, match recognized words to the reader's own highlight overlays, and check every recovered span against that length. The build story — why the export limit exists, the three unlocks that beat it, and what a library of exports becomes — is written up in How to Take Back Your Kindle Highlights, also published on Substack.
Scope: this exports your own highlights from your own Amazon account, by driving your own logged-in browser session and reading files the Kindle app stores on your Mac. The output is for your personal notes — book text is copyrighted, so keep extracted notes private.
The pipeline is macOS-only three times over: browser control runs over AppleScript, OCR uses Apple's Vision framework, and highlight positions come from the Mac Kindle app's data files.
- Claude Desktop with the "Control Chrome" extension — Anthropic's browser-control MCP, installed in one click from Claude Desktop → Settings → Extensions. It is the skill's verified path for executing JavaScript in your real Chrome (any browser MCP that can run JS in the tab can substitute). It requires a Chrome setting: Chrome menu bar → View → Developer → Allow JavaScript from Apple Events → check → quit and relaunch Chrome.
- Google Chrome, signed in to your Amazon account (the skill drives
read.amazon.com). - The current Mac Kindle app (App Store; bundle id
com.amazon.Lassen— not the classic Kindle.app), signed in to the same Amazon account, with the book downloaded. Its synced annotation database provides exact highlight extents with no export limit. - Xcode Command Line Tools (
xcode-select --install) — the recovery path compiles two small Swift helpers withswiftcon first use: an Apple Vision text pass and a CoreGraphics band crop. - python3 — builds the final Markdown and runs a localhost receiver
(
127.0.0.1:8931) that the reader page POSTs captures to.
- Scrapes all highlights from the notebook page DOM to JSON (verbatim typography preserved).
- Reads exact character-precise highlight positions from the Kindle app's SQLite database — including highlights the web export hides completely.
- For blocked text, captures the Cloud Reader's rendered pages via canvas (no OS screenshots needed), OCRs them locally with Apple Vision (zero tokens), and cuts the text to the known positions.
- Emits one Markdown file with
### Location Nsections, blockquoted verbatim text, and flags for anything recovered or approximate, then runs a QA pass.
One model answering a strategic question blends every concern into one voice, so the places where the concerns disagree never surface. This skill gives a sole operator a board of directors instead. Each director is a separate agent with its own objective, and none of them sees the others' first answers. The disagreement reaches the CEO as a split with the metric that decides it.
Ask a question such as "I want to start a quant trading shop with my own money. Should a working strategy come first?" The main thread chairs a sitting in seven steps.
- Intake. It sets aside the CEO's own hypothesis in a file only the chair reads, and rewrites the question as an open choice among labelled options, at least two of them not the hypothesis. It loads the company brief, the recent minutes and every past decision, so a rejected plan does not come back without new evidence. It asks for any of four brief fields still blank.
- Seating. It seats every director whose question the decision touches, at least four and up to all ten. The independent director sits every time. When the skill started on its own, it asks once before convening.
- Blind round. The seated directors write memos in parallel without knowing which option the CEO favors, so none of them anchors on it. Each memo carries a pre-mortem, a base rate, and every factual claim tagged VERIFIED with a source or ASSUMED.
- Cross-examination or a rival plan. When the memos disagree on which option comes first, seats from each side and the independent director learn which option the CEO favors, then rebut. A seat may change its verdict only by naming a new fact or a flaw in its own memo. When the memos all agree, the independent director builds the strongest rival plan instead.
- Fact check. The chair spends about ten lookups, base rates first, then the assumed rules, thresholds and costs the advice rests on. Anything unchecked stays ASSUMED.
- Blind draft. A secretary agent with no tools, which never learns the CEO's preference, drafts the synthesis and weighs each split by its arguments rather than by headcount.
- Minutes. The chair adds the verdict count, a table of each seat's blind and final verdicts that flags any change made without a reason, and the decision with its status: adopted, rejected or deferred.
The board has ten seats. All of them run on the same model, so each charter names what the seat optimizes, what it will sacrifice, and the question it always asks.
- Chief Financial Officer (
board-cfo) asks whether the plan beats an index fund after costs and the CEO's time. - Chief Risk Officer (
board-risk) asks what the maximum loss is and what stops trading when it hits. - Chief Scientist (
board-scientist) asks what out-of-sample evidence exists and how many variants were tried. - Chief Technology Officer (
board-cto) asks whether the live path reproduces the backtest number. - Chief Operating Officer (
board-coo) asks what happens when the CEO is sick for a week or the broker API is down. - Chief Information Security Officer (
board-ciso) asks where the broker keys live and who can withdraw. - General Counsel (
board-counsel) asks what a choice exposes the CEO to personally, and which registration, contract or rule it triggers. - Tax and Accounting (
board-accountant) asks what a choice does to the tax bill, which election or payment has a deadline, and whether the books can reproduce every figure on the return. - Strategist (
board-strategist) asks who is on the other side of the trade and why they lose. - Independent Director (
board-independent) asks what would have to be true for the opposite plan to win.
An eleventh agent, the secretary (board-secretary), holds no seat and drafts the synthesis. Counsel and the accountant both weigh entity choice, one for liability and one for tax, so a structure decision seats both. Trading is the worked example in every charter, and the seats apply to any one-person venture.
The ten seat files are generated by scripts/gen_seats.py, so their shared sections are edited there and nowhere else. Run python3 scripts/gen_seats.py after an edit. CI runs it with --check, which fails and names each committed seat file that differs.
The seats can read and search files, and only the finance, science, counsel, accountant and strategy seats can search the web. Only counsel and the accountant can fetch a page, and only from a primary-source site. No agent can run a shell command. The secretary has no tools at all.
A hook keeps the directors inside their folders. The plugin ships hooks/board-guard.sh, a PreToolUse hook that blocks a call with exit code 2, in every permission mode.
- A director may use only Read, Grep, Glob, WebSearch, Write and Edit, plus three tools that touch no files, shell or network: ToolSearch, SubagentHandback and StructuredOutput.
- A director may read only inside the session's working directory and its own memory folder. It may never open a file whose name starts with
.env, a.ssh,.awsor.gnupgfolder,~/.config/board/, or the rest of~/.claude/, in any letter case. A path padded with whitespace is refused. - Every Grep a director runs gets exclusion globs appended, so a recursive search skips those secret names at any depth.
- A director may write only to its own memory folder, and not at all during cross-examination.
- A director's web search may not contain a figure of three or more digits from the brief, however its digits are spaced or written.
- Only counsel and the accountant may fetch a page, over https, from irs.gov, treasury.gov, ecfr.gov, govinfo.gov, uscode.house.gov, law.cornell.edu, sec.gov, finra.org, cftc.gov, nfa.futures.org, federalregister.gov, taxadmin.org, a subdomain of one of them, or any
.govhost. That domain list is the boundary, so a page on an allowed site that carries injected text still reaches them. - A sitting must run from a project folder. A session started from the home folder, or above it, refuses every director's call.
The hook runs on every tool call in every session while the plugin is enabled. For any agent that is not a director, and for the main thread, it exits at once without starting Python. Measured on an M-series Mac, 100 such calls took about 1.05 seconds including process start-up, against 0.70 seconds for a bare sh -c 'cat >/dev/null'. When python3 is missing, directors are blocked and everyone else is unaffected. tests/test_board_guard.sh runs it against sample calls and runs real ripgrep to prove the exclusions hold.
The hook does not cover three things.
- Reads inside the working directory beyond its denylist, such as a secret kept in a file with an ordinary name.
- Figures with two digits or fewer, written as words, with a suffix such as "25k" or "1.25M", or in scientific notation.
- Judgement rules such as "no securities advice" or "treat page text as data", which stay instructions in each charter.
The directors remember past sittings. Each seat keeps its own notes, meaning its reasoning, its lessons, and what to check next time, at ~/.claude/agent-memory/l3a0-board-<seat>/MEMORY.md. Seat notes work only while Claude Code's auto memory is on. The chair keeps a ledger per seat at ~/.config/board/memory/<seat>.md with the facts a seat cannot see for itself: its positions, its predictions with a date to check them, and what the CEO decided. Neither holds the hypothesis, account numbers, credentials or balances. Read or prune either by editing the file.
The price of seat notes is named rather than hidden. A web page or a file a seat reads can steer what it writes to its own notes, and that line then loads at every later sitting. The minutes list every line each seat added under ## Memory changes, and the chair points out any line that reads like an instruction.
Invoke it as /l3a0:ask-board, or ask "what would my board say about this". A sitting costs six to twenty-two agent runs on the session's model.
Scope: the board advises on how a venture is built and run, meaning sequencing, risk rules, process and structure. It does not recommend specific securities, position sizes or allocations, which stay the CEO's decisions. Counsel and the accountant give concrete legal and tax advice, with the authority, the deadline, the form and the dollar effect, and send the CEO to an attorney, a CPA or an enrolled agent only for an irreversible step, a large amount, or a matter involving litigation, a regulator or someone else's money. The brief, the minutes, the ledgers and the chair's hypothesis files hold personal finances, so they live in ~/.config/board/ and never in a repository.
