<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Anas Dharar</title>
    <description>The latest articles on DEV Community by Anas Dharar (@anasdharar).</description>
    <link>https://dev.to/anasdharar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3598441%2Fe5d8c79e-344f-49dc-b37a-c0995048338f.jpg</url>
      <title>DEV Community: Anas Dharar</title>
      <link>https://dev.to/anasdharar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anasdharar"/>
    <language>en</language>
    <item>
      <title>LocalPilot: Building a Voice-Controlled Desktop Assistant with Cactus AI</title>
      <dc:creator>Anas Dharar</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:51:54 +0000</pubDate>
      <link>https://dev.to/anasdharar/localpilot-building-a-voice-controlled-desktop-assistant-with-cactus-ai-3k3i</link>
      <guid>https://dev.to/anasdharar/localpilot-building-a-voice-controlled-desktop-assistant-with-cactus-ai-3k3i</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;LocalPilot&lt;/strong&gt;, a local-first, voice-controlled desktop assistant for Windows.&lt;/p&gt;

&lt;p&gt;The idea came from a friend who often had to interrupt his workflow to switch between applications and navigate system settings for simple tasks. I wanted to explore whether he could get those things done just by speaking naturally.&lt;/p&gt;

&lt;p&gt;With LocalPilot, you can say things like "Open Calculator", "Open leetcode.com", "Set a timer for one minute", or "Which applications are running?" The assistant transcribes your speech, interprets your request, and selects an appropriate tool to execute the action.&lt;/p&gt;

&lt;p&gt;The project combines lightweight speech recognition with AI-powered tool calling to make everyday computer interactions more natural.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/AnasDharar/localpilot" rel="noopener noreferrer"&gt;AnasDharar/localpilot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the project code and implementation details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;Check out the source code here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/AnasDharar/localpilot" rel="noopener noreferrer"&gt;github.com/AnasDharar/localpilot&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project is built in Python, with a PySide6 desktop interface, Whistle for speech-to-text, and Needle for tool calling.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The core idea was to separate speech recognition, intent interpretation, and action execution rather than build a large collection of keyword-matching rules.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.cactuscompute.com/" rel="noopener noreferrer"&gt;Cactus&lt;/a&gt;:&lt;/strong&gt; The ecosystem behind the lightweight AI components used in the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.cactuscompute.com/blog/whistle" rel="noopener noreferrer"&gt;Whistle&lt;/a&gt;:&lt;/strong&gt; Converts microphone input into text, giving LocalPilot a transcript of the user's spoken command.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/cactus-compute/needle" rel="noopener noreferrer"&gt;Needle&lt;/a&gt;:&lt;/strong&gt; Handles tool calling, helping map natural-language requests to registered Python functions and their arguments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python and PySide6:&lt;/strong&gt; Power the desktop application, interface, and Windows actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The intended flow is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Voice → Whistle transcription → Needle tool selection → Validated Python function → Windows action → UI feedback&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, a request such as "Open leetcode.com" can be interpreted as a website-opening action, with the URL validated before LocalPilot asks the default browser to open it.&lt;/p&gt;

&lt;p&gt;I used &lt;strong&gt;GitHub Copilot Agent&lt;/strong&gt; throughout development to help implement features, work through integration issues, and iterate on the application. I still had to make the architectural decisions, test the behavior, and refine the implementation around the project's goals.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhvbal3w9xya5xec2k758.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhvbal3w9xya5xec2k758.png" alt="App Image" width="800" height="709"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;LocalPilot is an experiment in what becomes possible when developers can build on open-source tools and inspect how their systems work.&lt;/p&gt;

&lt;p&gt;Instead of depending entirely on a closed, cloud-hosted assistant API, I could combine lightweight speech recognition with a tool-calling framework and write the operating-system integration myself.&lt;/p&gt;

&lt;p&gt;That gives me more control over how commands are interpreted, which actions are available, and what validation happens before an action executes. It also makes the project easier to extend: adding a new capability can mean registering another well-defined Python tool instead of redesigning the entire assistant.&lt;/p&gt;

&lt;p&gt;Open innovation also lowers the barrier to experimentation. A student developer can take existing AI building blocks and turn them into a practical desktop application without having to train every model from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used GitHub Copilot Agent to help develop LocalPilot, from implementing application features to refining the integration between its components.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub Copilot:&lt;/strong&gt; I used GitHub Copilot Agent as a development tool throughout the project to help implement features, troubleshoot issues, and iterate on the codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Next Steps
&lt;/h2&gt;

&lt;p&gt;There’s still a lot I want to improve in LocalPilot. My next priorities are making tool calling more robust, enabling chained tool calls so the assistant can execute multiple steps to complete a single request, adding a global hotkey to activate LocalPilot from anywhere on the desktop, and improving speech-to-text accuracy to handle different accents, background noise, and natural speech more reliably. The goal is to make LocalPilot feel less like a collection of individual commands and more like a seamless, dependable desktop assistant.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
