264 decisions  ·  379 AI-assisted sessions

Decision Log

Every architectural choice, tool selection, and technical direction documented across every project — from enterprise AI platforms to open-source tools and experimental systems.

Pollen

37 decisions
  • Crush vs Hermes-Agent features & port: Use React+Ink for the tree UI — Hermes' tree rendering is easier in React (composable components, automatic diffing)
  • Crush vs Hermes-Agent features & port: Use Unicode braille for spinners — Bubble Tea has a spinner package but limited to preset animations
  • Pollen CLI AI agent skill: Build a dedicated SKILL.md that documents all tool interfaces and session patterns for AI-agent consumption
  • YOLO ONNX/WebAssembly: Wrap the ONNX Runtime in a sidecar process using the ONNX Runtime C API rather than embedding it directly
  • YOLO ONNX/WebAssembly: Use Rust CLI via exec to call the ONNX Runtime shared library, accepting the ~46ms cold-start cost
  • Voice-command STT on Pollen Mesh: Prioritize browser mic capture — simpler, no extra RPC needed, works on any device with a browser
  • macOS menu bar daemon status indicator: Add a small HTTP health endpoint on the existing Prometheus metrics port, with a dedicated port as fallback
  • Lightweight Matrix server & clients: Use Tuwunel + Cinny — both lightweight, actively maintained, Docker-ready pairing
  • Integrating Charmbracelet repos: Focus on specific integration points rather than broad library inclusion
  • Access CP-PLUS camera: Run steps 1 (password) and 2 (delete extra users) first before configuring network access
  • GitHub search YOLO Go/WASM: yalue/onnxruntime_go + yalue/onnxruntime_go_examples is the closest to drop-in
  • Research P2P URI schemes: Content-addressed (CIP hash) primarily for resource identification
  • Research P2P URI schemes: Key-addressed (public key hashes) for identity and service discovery
  • Check pln://macbook/mx:8008: Instead of a new stream type, use the existing workload stream type (StreamTypeWorkload) with a special marker
  • Plan to surface new features: Option C — pln dashboard CLI subcommand as the chosen approach
  • Lightweight Pollen Android UI: Use the pln/ URI scheme for deep linking and cross-component navigation
  • Automatic packaging and deployment: Keep package names as pollen_* for backwards compatibility, even if the project name changes to pln
  • Automatic packaging and deployment: Keep pollen in proto packages so the genpb directory stays at api/genpb/pollen/
  • Port git app from pan to pollen: If gitd is running remotely, the withEnv function handles SSH bridging via the -H flag
  • Research OSS backup patterns: Shell out to rclone sync for the Proton Drive storage backend
  • Needle-rs & Pollen use cases: Start with the CLI command + auto-execution bridge since they unlock all the other use cases at once
  • Explore seed/examples and WASM: Tune busy_timeout to handle WAL lock contention (16+) in concurrent scenarios
  • Installing Android SDK: Download the system image manually and install it instead of relying on the SDK manager
  • Research Android APK alternatives: Use Termux for programmatically interfacing with Android devices
  • Research Android APK alternatives: Build a Kotlin APK for streaming camera over WiFi/USB to OBS
  • No camera capture backend configured: Set up camera capture from within the daemon process, targeting 29 FPS
  • Available apps/services in Pollen: Last-writer-wins (LWW) conflict resolution is fine for personal notes
  • Available apps/services in Pollen: Use per-app databases (pln://app/<name>/db) for service isolation
  • Update pollens README and skills docs: Use vtprotobuf codec in connectrpc for faster serialization
  • Research GitHub self-update patterns: Use GitHub token + ETag caching for release checks
  • Research GitHub self-update patterns: Use Masterminds/semver/v3 for semantic version comparison
  • Explore pollen daemon structure: Add github.com/... structured logging via the daemon's existing logger
  • Find Go daemon gRPC setup: The controlAddr option sets up a TCP listener optionally, and the token is still required for TCP connections
  • Explore pollen architecture: 72 test files out of 241 total files in the codebase
  • Find GoReleaser output artifacts: Use shasum -a 256 and compare checksums for artifact verification
  • Research Syncthing capabilities: Configure folder against the preset allow-list for selective sync
  • HTTP URL not working in note app: https mismatch is the most likely issue — ensure the note app handles both schemes

Pan

8 decisions
  • WASMized git packaging: Choose "go-git to pan-gitd binary" over isomorphic-git or wasm-git+wasmtime for a native, portable approach
  • WASMized git packaging: Add "New pan service" alongside syncthing, nats, and silverbullet as a managed service
  • WASMized git packaging: Use go-git as the pure-Go equivalent (portable, CGO_ENABLED=0, same build pattern as pan-agent)
  • Lightweight UI for pan: Option 2 first (quick, no new toolchain), and if that feels hacky, Option 1 properly (native Go app, fits the project)
  • Photo management service: Weighs ~34MB with zero problematic dependencies
  • Lightweight UI: ~60 MB APK size but only ~20-30 MB RAM at runtime; needs fyne-cross toolchain set up
  • Project explanation: Port the project from TypeScript to Go for improved performance and simpler deployment
  • Explore pan project features: Systematically explore pan to understand its purpose, architecture, and identify features needing porting

Crush

3 decisions
  • Run command: Use a single bash command with & and wait instead of 6 separate parallel tool calls, reducing overhead
  • Check parallel tool execution: Parallel tools can run concurrently; the sequentialMu only serializes sequential tools against each other
  • Customizing opencode configuration: Handle ConfigInvalidError gracefully by validating config before applying

Firewalla Local Web

7 decisions
  • Replicate Firewalla cloud behavior locally: Implement local target list simulation with a fallback that syncs to cloud when available
  • Research Firewalla target lists: Check if there's a firewalla API endpoint for target lists that can be called locally
  • Firewalla TUI - find reusable OSS: Build with box, refresh interval, and device detail views when a device is selected
  • Firewalla TUI dev: Use DeviceDetail() and CursorIndex() for potential enter-to-detail interaction
  • Explore TUI structure: Style components with lipgloss for consistent visual appearance
  • Add project to GitHub: Push firewalla-local-web to GitHub under the deepthink-arch organization
  • Replicate cloud behavior: Set target list type to type: dns when simulating cloud-like DNS-based target groups

Firewalla Local HA

3 decisions
  • Firewalla Purple local web UI: Take a phased approach — start with the highest value item first
  • Firewalla Purple local web UI: Prioritize responsive layout as it has the highest user-facing impact
  • Explore dashboard codebase: Map out existing data structures before planning modifications

Video / 3D

6 decisions
  • Three.js farmland scene: Add a waypoint indicator in the 3D scene, not just in the minimap, for in-world navigation
  • Three.js farmland scene: Use animated pulse effect on waypoints for visual clarity
  • Cloning and testing theatre-js: Use GSAP + Three.js integration instead of Theatre.js for animation control
  • Three.js solar system animation: When a mesh gets a new object reference, the attached mesh in TransformControls is orphaned — avoid full mesh rebuilds
  • 3D scene integration: Evaluate Hyperframes + Theatre.js + GSAP timeline approaches before committing to a stack
  • Three.js solar system: Debug by tracing where isDebugMode is used to narrow down render issues

Meetily / Transcribe

4 decisions
  • AI4Bharat model integration: Run a separate Python service for this model (like the existing whisper-server-package) rather than embedding
  • Indic-Conformer Telugu: Implement a dedicated transcription mode that calls a Python script for the Indic-Conformer model
  • Indic-Conformer: Use an ASR model that doesn't require NeMo for simpler deployment
  • Speaker diarization: Compare PyAnnote vs sherpa-onnx for speaker diarization, especially in the context of the IndicConformer model

IntentCore

3 decisions
  • Explore project directory: Build a macOS Tahoe-style "Liquid Glass" window component — simpler, modern macOS design system with blur effects and glassmorphism
  • IntentCore data orchestration: Store intents as Markdown files on the filesystem (similar to Obsidian) for better accessibility
  • IntentCore architecture: Use the filesystem as the primary store, making data directly accessible without a database layer

Hermes Agent

6 decisions
  • ByteRover index: Build ByteRover as a durable, offline-readable index that lives in the filesystem forever
  • SSH daemon on Fire Stick: Keep Termux, ditch SimpleSSHD, and use Termux's built-in SSH server instead — Termux already has an active session
  • Fire Stick memory: Use SSH-only connectivity (phone/Pi, when adb is unavailable) for remote device management
  • SilverBullet optimization: Put a tiny reverse proxy in front of SilverBullet that strips the service worker entirely — much lighter, but loses offline caching
  • Ladybug graph fix: Use Sigma.js v3 — but v3 beta has no UMD Sigma global (ESM only); v2 is the fallback
  • Skills index update: Add a short Querying section to the existing SKILL.md and delete outdated documentation

App with Backend

3 decisions
  • Full-stack refunds workflow: Use a discriminated union type narrowing pattern — on line 284 the type narrows to 'pending' | 'processing' | 'refunded'
  • Full-stack refunds workflow: Implement Supabase backend with automated refunds workflow using local vertical agent architecture
  • Type safety approach: Use strict TypeScript narrowing patterns to ensure type-safe state transitions in the refund pipeline

Obsidian Organizer

3 decisions
  • Image viewing feature: Use mlx-community/llava-v1 as the vision model for image understanding and captioning
  • Vision model loading: Find a reliable way to load the vision model — look for associated Python environments with mlx_lm installed
  • Feature extension: Add image viewing capabilities and filename update feature alongside existing organization functionality

Memory

3 decisions
  • Hindsight integration: Use SHA-256 with a fixed 32-byte length for content-addressed storage
  • Project relocation: Option B — redo everything in a permanent location (~/Desktop) instead of working from temp directories
  • Strategic pivot documentation: When a pivot based on competitor data affects employees or customers, document the decision logic for compliance