openpetswithchatandmcp/packages/cli/codemap.md
OpenPets Dev 6ab3bb64d8 feat(rebrand): rename OpenPets to FamiliarOS and pets to familiars
- Rename all user-facing and technical identifiers from OpenPets/Pet to FamiliarOS/Familiar.
- Rename packages from @open-pets/* to @familiaros/*; rename install-pet/pet-format packages.
- Rename plugin IDs and directories from openpets.* to familiaros.*.
- Rename IPC namespace from openpets:* to familiaros:* and state filenames from openpets-* to familiaros-* with legacy migration.
- Rename source files (pet-window, built-in-pet, default-pet-controller, etc.) to familiar equivalents.
- Update locales (en, es-419, ja, ko, pt-BR, zh-Hans, zh-Hant) and tray/pet context menu strings.
- Add Familiar naming feature: preference, settings input, tray menu display.
- Update assets and packaging config; all desktop tests pass.
2026-06-17 01:42:08 +00:00

3.9 KiB

packages/cli/

Main CLI tool for FamiliarOS agent configuration and familiar management.

Responsibility

Primary user-facing CLI for the FamiliarOS ecosystem. Provides commands for: installing familiars from gallery, configuring projects for Claude/OpenCode/Cursor agents, running MCP server wrapper, executing Claude hooks, and direct familiar interaction (status, react, say).

Design/Patterns

Command Router: main() dispatches to subcommands based on process.argv[2]:

  • install <familiar-id> - Install familiar via running app
  • configure - Interactive project setup for Claude, OpenCode, or Cursor
  • status - Check FamiliarOS desktop app connectivity and print JSON status
  • familiars - List installed familiars with flags (default, broken)
  • react <reaction> - Send reaction to desktop app
  • say <message> [--reaction <reaction>] - Display message on familiar
  • mcp - Spawn MCP server (delegates to @familiaros/mcp)
  • hook - Execute Claude hook from stdin

Configuration Flow (configureProject):

  1. Resolve project directory (symlink/escape checks)
  2. Route to agent-specific handler (claude/opencode/cursor)
  3. For Claude: Assert availability, list familiars, build MCP config, write hooks
  4. For OpenCode: Prepare and write OpenCode config via @familiaros/opencode
  5. For Cursor: Configure MCP in .cursor/mcp.json, optional rules in .cursor/rules/familiaros.mdc

Cursor Configuration:

  • --with-rules - Install MCP + project rules
  • --rules-only - Install only .cursor/rules/familiaros.mdc
  • --remove-rules - Remove managed rules file
  • Status classification: not_installed, installed, needs_update, conflict, error
  • Atomic writes with backup creation

Safety Checks:

  • Project path validation (no symlinks, must be directory)
  • .claude/.cursor/.opencode directory safety (no symlinks, path containment)
  • Settings file atomic writes (temp + rename pattern)
  • Shell argument quoting for command injection prevention

Familiar Resolution (resolveConfiguredPet):

  • Validates explicit --familiar argument
  • Otherwise: fetches installed familiars, interactive TTY prompt
  • Validates selected familiar is not broken

Flow

familiaros configure --agent claude --familiar <id> --cwd <dir>
    ↓
resolveProjectDir() → assertSafeProjectHookPath()
    ↓
assertClaudeAvailable() (spawnSync "claude --version")
    ↓
resolveConfiguredPet() → listPets() → pickPet() (interactive)
    ↓
prepareProjectLocalHooks() → Build hook command with marker
    ↓
runClaudeMcpAddJson() → spawnSync "claude mcp add-json ..."
    ↓
writePreparedHooks() → Atomic write to .claude/settings.local.json

familiaros configure --agent cursor --with-rules
    ↓
readCursorMcpConfig() → classifyCursorMcpStatus()
    ↓
readCursorFamiliarOSRules() → classifyCursorRulesStatus()
    ↓
planCursorMcpInstall/Replace() → executeCursorMcpWrite()
    ↓
planCursorRulesInstall/Replace() → executeCursorRulesWrite()

familiaros status
    ↓
createFamiliarOSClient().status() → Print JSON result

Integration Points

Dependencies:

  • @familiaros/client - Familiar listing, installation, status, react, say
  • @familiaros/claude - Hook management, MCP config
  • @familiaros/mcp - MCP server spawning
  • @familiaros/opencode - OpenCode project setup
  • @familiaros/cursor - Cursor project setup (MCP + rules)

External Commands:

  • claude - Claude Code CLI for MCP configuration
  • npx - For published package execution

Exports:

  • cliPackageName constant
  • configureProject(), resolveConfiguredPet() - Programmatic API
  • parseConfigureArgs(), parseInstallArgs(), parseReactArgs(), parseSayArgs() - Argument parsing
  • createVersionPinnedCliCommand(), createLocalDevCliCommand() - Command builders
  • installProjectLocalHooks(), prepareProjectLocalHooks() - Hook installation
  • runClaudeMcpAddJson(), createClaudeMcpAddJsonArgs() - MCP integration