Commit Graph
100 Commits
Author SHA1 Message Date
Sanju Sivalingam 2411f47914 chore: remove CLAUDE.md from tracking and add to gitignore 2026-02-20 03:01:01 +05:30
Sanju Sivalingam a42b5b08f4 fix: address critical review issues in voice overlay
- Clean up voice sessions on WebSocket disconnect (prevents timer leak)
- Guard against missing LLM config in voice_stop send path
- Return overlay to idle on goal_failed (prevents stuck UI)
2026-02-20 02:16:39 +05:30
Sanju Sivalingam 1f47a990cc feat(android): add RECORD_AUDIO runtime permission handling 2026-02-20 02:12:38 +05:30
Sanju Sivalingam 16f581f479 feat(android): wire voice recording and transcript into ConnectionService 2026-02-20 02:11:41 +05:30
Sanju Sivalingam 07f608a901 feat(android): expand AgentOverlay with voice mode state machine 2026-02-20 02:10:00 +05:30
Sanju Sivalingam 7b685b1b0f feat(android): add voice overlay UI with transcript and action buttons 2026-02-20 02:08:00 +05:30
Sanju Sivalingam 2c10e61390 feat(android): add animated gradient border composable 2026-02-20 02:07:02 +05:30
Sanju Sivalingam 36ffb15f39 feat(android): add VoiceRecorder with AudioRecord PCM streaming 2026-02-20 02:06:10 +05:30
Sanju Sivalingam 2986766d41 feat(android): add voice protocol models and overlay mode enum 2026-02-20 02:05:06 +05:30
Sanju Sivalingam 3522b66b02 feat(server): wire voice messages into device handler 2026-02-20 01:59:50 +05:30
Sanju Sivalingam 63276d3573 feat(server): add voice session handler with Groq Whisper STT 2026-02-20 01:57:53 +05:30
Sanju Sivalingam 4a128f7719 feat(shared): add voice overlay protocol types 2026-02-20 01:55:40 +05:30
Sanju Sivalingam 669aa3d9b1 docs: add voice overlay implementation plan
11 tasks covering shared protocol types, server Groq Whisper STT handler,
Android VoiceRecorder, gradient border overlay, voice panel UI, AgentOverlay
state machine, ConnectionService wiring, and permission handling.
2026-02-20 01:52:40 +05:30
Sanju Sivalingam eae221b904 docs: add voice overlay design document
Design for voice-activated overlay feature — tap floating pill to activate
voice mode, stream audio to server for Groq Whisper STT, show live
transcription on screen with glowing gradient border, send as goal.
2026-02-20 01:46:49 +05:30
Sanju Sivalingam fcda17109b update readme 2026-02-19 08:23:25 +05:30
Sanju Sivalingam 0b5a447c4d feat: replace get started button with open dashboard link 2026-02-19 00:19:02 +05:30
Sanju Sivalingam d35d685c3f feat: add APK download links and launch banner across site, web, and README 2026-02-18 23:56:38 +05:30
Sanju Sivalingam a3a50539be chore: trigger deployment 2026-02-18 23:41:51 +05:30
Sanju Sivalingam b3ade24e38 fix: update email sender name and switch to production Polar checkout link 2026-02-18 23:33:54 +05:30
Sanju Sivalingam ce6d1e320b fix: handle Polar activation limit gracefully + switch checkout to command pattern
- Server: wrap licenseKeys.activate() in try/catch — if activation limit
  reached, treat as already-activated and proceed to store the key
- Web: switch activateFromCheckout from form() to command() pattern for
  programmatic invocation with proper error handling
- Activate page: auto-fires on mount, shows spinner/error states, retry button
2026-02-18 23:28:19 +05:30
Sanju Sivalingam e9d1c863e1 fix: self-hosted useSend support + purchase-first activate UX
- Pass USESEND_BASE_URL to UseSend SDK for self-hosted instances
- Add debug logging for email sends
- Redesign activate page: prominent Purchase Now button, collapsible license key input
2026-02-18 23:08:27 +05:30
Sanju Sivalingam 9b2ca21d28 fix: address code review issues for email verification
- Use $env/dynamic/private instead of process.env (SvelteKit convention)
- Fail fast if USESEND_API_KEY is missing
- Await sendEmail with try/catch + console.error (was silently discarded)
- Fallback for user.name in email greeting
- Fix open redirect on login redirect param
2026-02-18 23:08:27 +05:30
Sanju Sivalingam 7b5685cc25 feat: add Umami analytics tracking across web app
Add centralized event tracking with consistent naming convention.
Tracks auth flows, license activation, device interactions, API key
management, settings, and navigation for conversion analysis.
2026-02-18 23:08:27 +05:30
Sanju Sivalingam caf9862f4f feat: handle unverified login with redirect to verify-email 2026-02-18 23:08:27 +05:30
Sanju Sivalingam 8b614dac95 feat: redirect signup to verify-email page 2026-02-18 23:08:27 +05:30
Sanju Sivalingam 8783fe90a3 feat: wire email verification into better-auth config 2026-02-18 23:08:27 +05:30
Sanju Sivalingam 7125aed49f feat: add email helper module using useSend SDK 2026-02-18 23:08:27 +05:30
Sanju Sivalingam 8748e7a28b feat: add usesend-js dependency for email verification 2026-02-18 23:08:27 +05:30
Sanju Sivalingam b34088ceb7 feat: Polar license key integration and dashboard UI improvements
- Add license activation flow: server validates/activates keys via Polar SDK
- Auto-activate from Polar checkout redirect (checkout_id in URL)
- Gate dashboard behind license activation (redirect to /activate if no plan)
- Preserve redirect URL through login flow for post-purchase activation
- Show plan status badge in sidebar and overview page
- Add account section to settings (email, plan, license key)
- Add svelte-sonner toasts with custom black theme and iconify icons
- Improve validation messages across all forms
- Update API key prefix to droidclaw_
- Add cursor pointer globally for clickable elements
- Support Polar sandbox mode via POLAR_SANDBOX env flag
2026-02-18 23:08:27 +05:30
Sanju Sivalingam 59ee665088 revert: remove workflow automation, keep overlay and stop_goal
Remove all workflow-related code from PR #6 (input classifier,
workflow parser, notification listener, workflow CRUD handlers).
Keep the overlay, stop_goal, AbortSignal threading, and OkHttp
engine switch. Add v2 design doc for safer workflow implementation.
2026-02-18 20:39:04 +05:30
Sanju Sivalingam 88af77ddc7 fix: configure postgres idle timeout and connection recycling for Railway
Railway proxy closes idle DB connections after ~60s, causing
CONNECTION_CLOSED errors on stale sockets. Set idle_timeout=20s and
max_lifetime=5m so postgres-js recycles connections before they die.

Also fix sendCommand to fall back to persistent device ID on reconnect.
2026-02-18 13:56:34 +05:30
Sanju Sivalingam 3bab84f611 fix(auth): use internal secret for web→server calls instead of cookie forwarding
Cookie forwarding between dash.droidclaw.ai and tunnel.droidclaw.ai was
unreliable. Now the web app passes userId + shared internal secret via
headers. Also removes debug logging from device auth and session middleware.
2026-02-18 12:40:49 +05:30
Sanju Sivalingam 562d4095f0 fix(android): prevent save button from disappearing during API key editing
DataStore flow re-emissions were resetting editingApiKey via remember(apiKey),
hiding the save button mid-edit. Now uses null sentinel to track edit state
independently from stored value.
2026-02-18 12:32:26 +05:30
Sanju Sivalingam 8ef15af97a debug: add logging to device auth for hash mismatch investigation 2026-02-18 12:27:56 +05:30
Sanju Sivalingam 05d1cc657d fix code 2026-02-18 12:01:23 +05:30
Sanju Sivalingam d03be7365e debug: add logging to session middleware for auth investigation 2026-02-18 11:59:59 +05:30
Sanju Sivalingam 68ca812267 revert(server): use direct DB queries for all auth validation
Reverts middleware and dashboard WS to direct DB session lookups.
Replaces auth.api.verifyApiKey in device WS with direct DB query
using SHA-256 hash matching, removing dependency on BETTER_AUTH_SECRET
for auth validation.
2026-02-18 11:46:48 +05:30
Sanju Sivalingam a865c1e2f0 fix(android): add explicit connect/request timeouts to WebSocket client
CIO engine had no timeout config, causing connect failures on slower networks.
2026-02-18 11:31:47 +05:30
Sanju Sivalingam a1ec1ac731 fix(agent): use device screen dimensions for scroll/swipe coordinates
Swipe coordinates were hardcoded for 1080x2400 screens, causing scrolls
to fail on devices with different resolutions. Now reads screenWidth and
screenHeight from DeviceInfo and computes coordinates proportionally.
2026-02-18 10:48:37 +05:30
Sanju Sivalingam 81d78684a5 refactor: use better-auth api for session validation in server middleware and websocket 2026-02-18 10:38:15 +05:30
Sanju Sivalingam 22b13bec2f update android app default server url to production 2026-02-18 10:25:42 +05:30
Sanju Sivalingam 22481c8834 add health endpoint to web app 2026-02-18 10:08:25 +05:30
Sanju Sivalingam 071b3960a7 add start:server script to root package.json 2026-02-18 09:38:04 +05:30
Sanju Sivalingam 7a2a1186a2 use bun instead of node for web start script 2026-02-18 09:31:16 +05:30
Sanju Sivalingam dbff2e1e35 add start script to web package.json for railway deploy 2026-02-18 09:30:33 +05:30
Sanju Sivalingam a745815400 update readme and configure monorepo for railway deployment
readme rewritten with ascii diagrams, detailed setup, and conversational tone.
root package.json updated with packageManager field for bun, web workspace,
and build/start scripts pointing to web/ for railway railpack compatibility.
2026-02-18 09:20:03 +05:30
Sanju Sivalingam 792b42974f feat(agent): implement server-side multi-step skills
Skills (copy_visible_text, find_and_tap, submit_message, read_screen,
wait_for_content, compose_email) were CLI-only using direct ADB. The
server prompt advertised them but they silently failed when chosen.

Now intercepted in the agent loop before actionToCommand() and executed
server-side using existing WebSocket primitives (get_screen, tap, swipe,
clipboard_set). Each skill replaces 3-8 LLM calls with deterministic
server-side logic.
2026-02-18 00:58:59 +05:30
Sanju Sivalingam db995e4913 fix(agent): prevent stuck loop by adding action history to LLM prompt
The UI agent had no memory of previous actions — each step was a fresh
single-shot LLM call. After typing and sending a message, the LLM saw
an empty text field and retyped the message in a loop.

- Add RECENT_ACTIONS (last 5 actions with text/result) to user prompt
- Add chat app completion detection rule to dynamic prompt
- Add send-success hints for WhatsApp and Messages apps
- Add git convention to CLAUDE.md (no co-author lines)
2026-02-18 00:53:13 +05:30
Sanju SivalingamandClaude Opus 4.6 9193b02d36 fix(agent): address code review issues
- Add empty goal guard in parser (returns done instead of passthrough)
- Replace `as any` casts in pipeline.ts with proper ActionDecision types
- Add runtime type guards for untrusted LLM output in classifier
- Add intent action to dynamic prompt so UI agent can fire intents

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 00:32:14 +05:30
Sanju Sivalingam 3769b21ed1 refactor(agent): delete preprocessor.ts (replaced by parser.ts) 2026-02-18 00:28:50 +05:30
Sanju SivalingamandClaude Opus 4.6 d5c3466554 feat(agent): wire intent-first pipeline into all entrypoints
Replace preprocessor+runAgentLoop with runPipeline in both device.ts
(WebSocket) and goals.ts (REST). The pipeline orchestrates: deterministic
parser (stage 1) -> LLM classifier (stage 2) -> lean UI agent (stage 3).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 00:28:13 +05:30
Sanju SivalingamandClaude Opus 4.6 18b8509081 feat(agent): add pipeline mode with dynamic prompts to agent loop
When pipelineMode is enabled in AgentLoopOptions, the loop uses
buildDynamicPrompt() with per-screen context (editable fields,
scrollable elements, app hints, stuck state) instead of the static
mega-prompt. Legacy mode (default) is unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 00:24:25 +05:30
Sanju Sivalingam 3f389c5de6 feat(agent): add dynamic prompt builder for Stage 3 UI agent 2026-02-18 00:22:24 +05:30
Sanju Sivalingam 91a828452b feat(agent): add Stage 2 LLM goal classifier 2026-02-18 00:15:56 +05:30
Sanju Sivalingam 5dd199e0b8 feat(agent): add Stage 1 deterministic goal parser 2026-02-18 00:09:15 +05:30
Sanju Sivalingam 122bf87e72 feat(agent): add app-specific hints registry 2026-02-18 00:07:24 +05:30
Sanju SivalingamandClaude Opus 4.6 41a49f0619 feat(shared): add PipelineResult, IntentCommand, DeviceCapabilities types
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 00:04:36 +05:30
Sanju Sivalingam e300f04e13 feat: installed apps, stop goal, auth fixes, remote commands
- Android: fetch installed apps via PackageManager, send to server on connect
- Android: add QUERY_ALL_PACKAGES permission for full app visibility
- Android: fix duplicate Intent import, increase accessibility retry window
- Android: default server URL to ws:// instead of wss://
- Server: store installed apps in device metadata JSONB
- Server: inject installed apps context into LLM prompt
- Server: preprocessor resolves app names from device's actual installed apps
- Server: add POST /goals/stop endpoint with AbortController cancellation
- Server: rewrite session middleware to direct DB token lookup
- Server: goals route fetches user's saved LLM config from DB
- Web: show installed apps in device detail Overview tab with search
- Web: add Stop button for running goals
- Web: replace API routes with remote commands (submitGoal, stopGoal)
- Web: add error display for goal submission failures
- Shared: add InstalledApp type and apps message to protocol
2026-02-17 22:50:18 +05:30
Sanju Sivalingam fae5fd3534 fix: goals route now finds devices by persistent DB ID, not connection UUID 2026-02-17 21:22:43 +05:30
Sanju Sivalingam 5b73e89217 fix: add valibot schemas to query() functions — fixes bad request on detail page 2026-02-17 21:16:58 +05:30
Sanju Sivalingam 423cd7af01 fix: add getDevice query, fix IN clause, add error handling to getDeviceStats 2026-02-17 21:13:50 +05:30
Sanju Sivalingam b240887b0e fix: resolve type errors in devices pages 2026-02-17 21:08:47 +05:30
Sanju SivalingamandClaude Opus 4.6 9de0b040dc feat: rewrite device detail page with tabbed layout (Overview/Sessions/Run)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:05:26 +05:30
Sanju SivalingamandClaude Opus 4.6 a46af1a236 feat: rewrite devices page as phone-card grid
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:04:18 +05:30
Sanju SivalingamandClaude Opus 4.6 a5bfe74384 feat: add DeviceCard.svelte phone-frame component
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:03:25 +05:30
Sanju SivalingamandClaude Opus 4.6 9423ed85ff feat: add device stats query and enrich listDevices with metrics
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:02:07 +05:30
Sanju SivalingamandClaude Opus 4.6 bf92ff4742 feat: handle heartbeat messages, update battery in DB + dashboard
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:01:06 +05:30
Sanju SivalingamandClaude Opus 4.6 c3d6674793 feat: add 60s battery heartbeat to ConnectionService
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 20:59:33 +05:30
Sanju SivalingamandClaude Opus 4.6 a7738936f2 feat: extend DeviceInfo with battery, manufacturer, heartbeat
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 20:55:42 +05:30
Sanju SivalingamandClaude Opus 4.6 0c0efe9b1e chore: remove docs/plans from repo and gitignore it
Contains product architecture, roadmaps, and implementation plans
that should not be public.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 20:17:06 +05:30
Sanju SivalingamandClaude Opus 4.6 c395f9d83e feat: add DB persistence, real-time WebSocket, goal preprocessor, and Android companion app
- Add device/session/step DB persistence in server agent loop
- Add goal preprocessor for compound goals (e.g., "open YouTube and search X")
- Add step-level logging to agent loop
- Fix dashboard WebSocket auth (direct DB token lookup instead of auth.api)
- Fix web layout to use locals.session.token instead of cookie
- Add dashboard-ws.svelte.ts WebSocket store with auto-reconnect
- Rewrite devices page with direct DB queries and real-time updates
- Add device detail page with live step display and session history
- Add Android companion app resources, themes, and screen capture consent

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 20:12:41 +05:30
Sanju SivalingamandClaude Opus 4.6 ea707af83e fix(android): add CHANGE_NETWORK_STATE for foreground service on SDK 36
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 18:41:59 +05:30
Sanju SivalingamandClaude Opus 4.6 61fcecd021 fix(android): add screenHash to screen responses, handle goal_failed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 18:17:48 +05:30
Sanju SivalingamandClaude Opus 4.6 4e9f0e14ae feat(android): add HomeScreen, SettingsScreen, LogsScreen with bottom nav
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:55:02 +05:30
Sanju SivalingamandClaude Opus 4.6 516b83bd0f feat(android): add ReliableWebSocket, CommandRouter, ConnectionService
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:51:19 +05:30
Sanju SivalingamandClaude Opus 4.6 ac7fc85891 feat(android): add GestureExecutor and ScreenCaptureManager
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:47:10 +05:30
Sanju SivalingamandClaude Opus 4.6 0e8ff24e08 feat(android): add AccessibilityService, ScreenTreeBuilder, permissions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:43:42 +05:30
Sanju SivalingamandClaude Opus 4.6 78b605bc86 feat(android): add data models, DataStore settings, Application class
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:40:56 +05:30
Sanju SivalingamandClaude Opus 4.6 e22326cbd3 feat(android): add Ktor, serialization, DataStore, navigation dependencies
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:38:56 +05:30
Sanju SivalingamandClaude Opus 4.6 2c17ba40e8 docs: add Android companion app design
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:21:34 +05:30
Sanju SivalingamandClaude Opus 4.6 61461199db fix: add non-null assertion for deviceId route param
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 15:06:23 +05:30
Sanju SivalingamandClaude Opus 4.6 c659dfd8cc feat: add web Dockerfile for Railway deployment
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:46:31 +05:30
Sanju SivalingamandClaude Opus 4.6 84af22e4a1 feat: add goal proxy API route
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:45:52 +05:30
Sanju SivalingamandClaude Opus 4.6 7557481e83 feat: add devices page with goal input and step log
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:45:47 +05:30
Sanju SivalingamandClaude Opus 4.6 edfc91468b feat: add LLM provider settings page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:45:44 +05:30
Sanju SivalingamandClaude Opus 4.6 8fc5587876 fix: use schema-based deleteKey and reactive key list refresh
- Add deleteKeySchema for proper FormData validation
- Return { deleted: true } from deleteKey for change tracking
- Use $state for keysPromise to refresh list after create/delete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:43:46 +05:30
Sanju SivalingamandClaude Opus 4.6 9422e94a8e feat: add API keys management page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:40:42 +05:30
Sanju SivalingamandClaude Opus 4.6 ebe82c7481 feat: add dashboard layout with navigation and auth guard
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:32:26 +05:30
Sanju SivalingamandClaude Opus 4.6 c0cf5039cd feat: switch SvelteKit from Cloudflare to node adapter
Deploying to Railway instead of Cloudflare, so swap
@sveltejs/adapter-cloudflare for @sveltejs/adapter-node.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:29:47 +05:30
Sanju SivalingamandClaude Opus 4.6 4c8241c964 feat: add agent loop with LLM integration and stuck detection
Server-side agent loop that adapts the CLI kernel to work over WebSocket.
Three new modules: stuck detection, LLM provider abstraction (OpenAI/Groq/
OpenRouter), and the main perception-reasoning-action loop. Also wires up
the goals route to start agent loops with duplicate-device protection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:27:26 +05:30
Sanju SivalingamandClaude Opus 4.6 577c195862 feat: add REST routes for devices, goals, and health
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:21:11 +05:30
Sanju SivalingamandClaude Opus 4.6 8fe3ad9926 feat: add WebSocket handlers for device and dashboard connections
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:17:29 +05:30
Sanju SivalingamandClaude Opus 4.6 5b2a072cee feat: add apiKey plugin and new schema tables
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:11:55 +05:30
Sanju SivalingamandClaude Opus 4.6 bc014fd587 feat: scaffold Hono server with auth and health check
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:07:19 +05:30
Sanju SivalingamandClaude Opus 4.6 1e9e1f7e29 feat: add @droidclaw/shared types package
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:03:27 +05:30
Sanju SivalingamandClaude Opus 4.6 920ce46375 Add Discord link to site nav and footer
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:37:29 +05:30
Sanju SivalingamandClaude Opus 4.6 9e9f398ed6 Add auto-scroll to find_and_tap skill for off-screen elements
find_and_tap now scrolls down and rescans (up to 10 times) when the
target element isn't visible on the current screen. Stops as soon as
the element is found — no wasted scrolls. This removes the need for
LLMs to manually scroll-and-check in workflow prompts.

Also simplifies the Gemini-to-WhatsApp workflow prompts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 21:56:34 +05:30
Sanju Sivalingam 2312f8bece update workflow 2026-02-16 21:14:16 +05:30
Sanju SivalingamandClaude Opus 4.6 4848587f0c Add Gemini-to-WhatsApp workflow example
Multi-app workflow: ask Gemini about droidclaw.ai, copy response,
switch to WhatsApp, find contact, paste and send.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 20:47:40 +05:30
Sanju SivalingamandClaude Opus 4.6 6a63af1a68 Add ASCII art banner to CLI and update gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 20:00:46 +05:30