I want enhance /Volumes/GoldenSnake/git/mcp/co-chrome/src/cli.ts

I want make original cli.ts to sharable utility.
And I'll create multiple cli instance to make Agent easy to compare different browser.

The different cli instance will share same code, but have different connection profile

## Decisions

**Q1: What is a "connection profile"?**
A named config bundling `userDataDir`, `browserUrl`, `headed`, and `mcpType`.
→ **Decision:** Named profile preset that groups all browser connection knobs.

**Q2: How does each binary know which browser is "its" browser?**
Each binary is a thin entry-point that imports the shared CLI utility and passes its profile inline.
→ **Decision:** Inline in entry file — `cli1.ts` imports `runCli` from a shared core and passes its own profile config directly. No external config file needed.

**Q3: File structure — rename cli.ts or extract?**
→ **Decision:** Rename `cli.ts` → `cli-core.ts`, export `runCli(profile)`, remove bare `main()` call. Entry points are thin shims.

**Q4: Binary naming convention?**
Mental model: `co-chrome` = main browser, `co-chrome-ref` = 対照組 (reference/comparison browser).
→ **Decision:** `co-chrome` (existing, unchanged entry) + `co-chrome-ref` (new comparison entry).

**Q5+Q6: How does co-chrome-ref get its connection config, and what differentiates the two binaries?**
Both binaries compile from the **same `src/cli.ts`** (no duplication). At runtime, the CLI detects its invoked binary name (`process.argv[1]`) and looks up a profile from `~/.co-chrome/profiles.json`.
→ **Decision:** One source file, two `bin` entries in `package.json`. Profile resolved by binary name at startup. Config lives at `~/.co-chrome/profiles.json`.

**Q7: What happens when no profile exists for the binary name?**
→ **Decision:** Silent fallback — no profile found → use CLI flags as-is, no warning. Profile file is purely additive defaults, not required.

**Q8: Precedence — CLI flags vs profile defaults?**
→ **Decision:** CLI flags always win. Profile values are defaults only; explicit flags override them.
