[
 {
  "tool": "claude-code",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "maclustr",
   "research-papers",
   "spboucher-ai-apps",
   "uqo-teaching"
  ],
  "notes": "Primary development agent for every project; operates the cluster over SSH and writes most code and documents."
 },
 {
  "tool": "claude-developer-platform",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "spboucher-ai-apps",
   "groupe-ka"
  ],
  "subscription_status": "API account",
  "notes": "Default provider for chat/note/agents; keys held in per-app .env files on nodes."
 },
 {
  "tool": "openai-platform",
  "use_state": "active",
  "rating": 4,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "spboucher-ai-apps"
  ],
  "subscription_status": "API account",
  "notes": "Second provider; embeddings and selected models benchmarked in chat/note Phase Zero."
 },
 {
  "tool": "nextjs",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "spboucher-ai-apps",
   "groupe-ka",
   "uqo-teaching"
  ],
  "notes": "Framework for almost every web app on the cluster."
 },
 {
  "tool": "postgresql",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "spboucher-ai-apps",
   "groupe-ka",
   "findata"
  ],
  "notes": "Homebrew Postgres 17 on each app node; localhost only."
 },
 {
  "tool": "pgvector",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "spboucher-ai-apps"
  ]
 },
 {
  "tool": "drizzle-orm",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "spboucher-ai-apps"
  ],
  "notes": "snake_case casing mandatory; SQL migrations kept as source of truth."
 },
 {
  "tool": "pm2",
  "use_state": "active",
  "rating": 4,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "maclustr"
  ],
  "notes": "Process supervisor for every mld-deployed app."
 },
 {
  "tool": "caddy",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "maclustr"
  ],
  "notes": "TLS termination on the OVH gateway; routes managed by tunnelctl/mld."
 },
 {
  "tool": "wireguard",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "maclustr"
  ],
  "notes": "wg1 overlay between BHS64 and the Macs; UDP 443 fallback because the LAN router blocks 51820."
 },
 {
  "tool": "tailscale",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "partial",
  "projects": [
   "maclustr"
  ],
  "notes": "Laptop-to-node access only; inter-node SSH over Tailscale blocked by ACL."
 },
 {
  "tool": "homebrew",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "maclustr"
  ]
 },
 {
  "tool": "openssh",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "maclustr"
  ]
 },
 {
  "tool": "git",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "maclustr",
   "spboucher-ai-apps"
  ],
  "notes": "Self-hosted bare repos on the gateway (spbgit); GitHub account suspended, not used."
 },
 {
  "tool": "github",
  "use_state": "archived",
  "rating": 2,
  "priority": "low",
  "cluster_compat": "unknown",
  "notes": "Account suspended; remotes renamed old-origin. Kept for reading public repositories only."
 },
 {
  "tool": "docker",
  "use_state": "testing",
  "rating": 3,
  "priority": "low",
  "cluster_compat": "partial",
  "projects": [
   "maclustr"
  ],
  "notes": "Installed on a few nodes; most apps run natively under PM2 instead."
 },
 {
  "tool": "playwright",
  "use_state": "active",
  "rating": 5,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "spboucher-ai-apps",
   "groupe-ka"
  ],
  "notes": "E2E tests and screenshots; also drives Safari-like automation for admin tasks."
 },
 {
  "tool": "vitest",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "spboucher-ai-apps"
  ]
 },
 {
  "tool": "typescript",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "spboucher-ai-apps",
   "groupe-ka"
  ]
 },
 {
  "tool": "python",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "research-papers",
   "findata"
  ]
 },
 {
  "tool": "uv",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "research-papers",
   "findata"
  ],
  "notes": "Standard Python toolchain on nodes (uv-py3.12)."
 },
 {
  "tool": "fastapi",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "findata",
   "spboucher-ai-apps"
  ]
 },
 {
  "tool": "duckdb",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "findata",
   "research-papers"
  ],
  "notes": "Query engine over the FirstRate Parquet lake; DuckDB 2.x API quirks documented in FinData."
 },
 {
  "tool": "polars",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "findata"
  ]
 },
 {
  "tool": "apache-parquet",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "findata"
  ]
 },
 {
  "tool": "firstrate-data",
  "use_state": "active",
  "rating": 4,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "findata",
   "research-papers"
  ],
  "subscription_status": "paid subscription",
  "notes": "Bulk intraday + fundamentals vendor; private-use licence, no redistribution."
 },
 {
  "tool": "sec-edgar",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "research-papers"
  ],
  "notes": "Russell 3000 filings database built from EDGAR bulk data."
 },
 {
  "tool": "fred",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "research-papers"
  ]
 },
 {
  "tool": "statsmodels",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "research-papers"
  ]
 },
 {
  "tool": "tex-live",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "research-papers",
   "uqo-teaching"
  ],
  "notes": "lualatex for working papers and course material."
 },
 {
  "tool": "overleaf",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "no",
  "projects": [
   "research-papers"
  ],
  "notes": "Thesis collaboration; Safari automation used to read comments."
 },
 {
  "tool": "pandoc",
  "use_state": "active",
  "rating": 5,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "research-papers"
  ],
  "notes": "LaTeX → Word recipe for journal submissions."
 },
 {
  "tool": "zotero",
  "use_state": "candidate",
  "priority": "low",
  "cluster_compat": "unknown",
  "notes": "Evaluate as a shared reference manager for the working-paper series."
 },
 {
  "tool": "jupyter",
  "use_state": "testing",
  "rating": 3,
  "priority": "low",
  "cluster_compat": "yes",
  "projects": [
   "research-papers"
  ]
 },
 {
  "tool": "mlx",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "maclustr",
   "research-papers"
  ],
  "notes": "TITAN-MoE runtime work and local inference experiments on Apple Silicon nodes."
 },
 {
  "tool": "mlx-whisper",
  "use_state": "active",
  "rating": 4,
  "priority": "low",
  "cluster_compat": "yes",
  "projects": [
   "uqo-teaching"
  ],
  "notes": "Transcription of Zoom lecture recordings."
 },
 {
  "tool": "ollama",
  "use_state": "testing",
  "rating": 3,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "maclustr"
  ],
  "notes": "Local model group in chat app still empty; candidate backend."
 },
 {
  "tool": "swift",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "apple-apps"
  ]
 },
 {
  "tool": "swiftui",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "apple-apps"
  ]
 },
 {
  "tool": "xcode",
  "use_state": "active",
  "rating": 3,
  "priority": "medium",
  "cluster_compat": "no",
  "projects": [
   "apple-apps"
  ],
  "notes": "Laptop only (signing, TestFlight)."
 },
 {
  "tool": "testflight",
  "use_state": "active",
  "rating": 4,
  "priority": "low",
  "cluster_compat": "no",
  "projects": [
   "apple-apps"
  ]
 },
 {
  "tool": "launchd",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "maclustr"
  ],
  "notes": "LaunchDaemons for agentd, guardians, WireGuard loops; LaunchDaemon (not Agent) on headless nodes."
 },
 {
  "tool": "tavily",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "spboucher-ai-apps"
  ],
  "subscription_status": "API key",
  "notes": "Web search for chat/agents via MCP."
 },
 {
  "tool": "apify",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "groupe-ka"
  ],
  "subscription_status": "API account",
  "notes": "Actors used by Ka connectors."
 },
 {
  "tool": "firecrawl",
  "use_state": "testing",
  "rating": 3,
  "priority": "low",
  "cluster_compat": "yes",
  "projects": [
   "groupe-ka"
  ],
  "notes": "Replaced by Scrapfly for Lou-Ka."
 },
 {
  "tool": "scrapfly",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "groupe-ka"
  ],
  "subscription_status": "API account"
 },
 {
  "tool": "redis",
  "use_state": "active",
  "rating": 4,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "groupe-ka"
  ]
 },
 {
  "tool": "notion",
  "use_state": "testing",
  "rating": 3,
  "priority": "low",
  "cluster_compat": "yes",
  "notes": "Connected via MCP; not a primary store."
 },
 {
  "tool": "godaddy",
  "use_state": "active",
  "rating": 3,
  "priority": "medium",
  "cluster_compat": "unknown",
  "projects": [
   "maclustr"
  ],
  "subscription_status": "registrar for all domains",
  "notes": "DNS A records to the OVH gateway; changes done in the web console."
 },
 {
  "tool": "ovhcloud",
  "use_state": "active",
  "rating": 4,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "maclustr"
  ],
  "subscription_status": "one dedicated server (Beauharnois)",
  "notes": "Public gateway BHS64; four other servers retired 2026-10-02."
 },
 {
  "tool": "lets-encrypt",
  "use_state": "active",
  "rating": 5,
  "priority": "medium",
  "cluster_compat": "yes",
  "projects": [
   "maclustr"
  ]
 },
 {
  "tool": "model-context-protocol",
  "use_state": "active",
  "rating": 5,
  "priority": "high",
  "cluster_compat": "yes",
  "projects": [
   "spboucher-ai-apps",
   "maclustr"
  ],
  "notes": "Cluster, AKOS, finance-data and search MCP servers used from Claude Code."
 },
 {
  "tool": "zoom",
  "use_state": "active",
  "rating": 3,
  "priority": "low",
  "cluster_compat": "no",
  "projects": [
   "uqo-teaching"
  ]
 },
 {
  "tool": "moodle",
  "use_state": "active",
  "rating": 2,
  "priority": "medium",
  "cluster_compat": "no",
  "projects": [
   "uqo-teaching"
  ],
  "notes": "UQO LMS; grading and announcements automated through Safari."
 }
]