diff --git a/FlowVision/FlowVision.csproj b/FlowVision/FlowVision.csproj index ade13fc..f9ee151 100644 --- a/FlowVision/FlowVision.csproj +++ b/FlowVision/FlowVision.csproj @@ -168,6 +168,10 @@ ..\packages\System.Threading.Tasks.Extensions.4.6.3\lib\net462\System.Threading.Tasks.Extensions.dll + + ..\packages\Tesseract.5.2.0\lib\net48\Tesseract.dll + True + ..\packages\Microsoft.ML.OnnxRuntime.Managed.1.21.1\lib\netstandard2.0\Microsoft.ML.OnnxRuntime.dll True @@ -316,7 +320,22 @@ + + + + + + + + + + + + + + + diff --git a/FlowVision/lib/Classes/ai/LMStudioActioner.cs b/FlowVision/lib/Classes/ai/LMStudioActioner.cs index 1afd0fb..4770dfd 100644 --- a/FlowVision/lib/Classes/ai/LMStudioActioner.cs +++ b/FlowVision/lib/Classes/ai/LMStudioActioner.cs @@ -185,11 +185,24 @@ public async Task ExecuteAction(string actionPrompt) var response = responseBuilder.ToString(); + // Log the response for debugging + PluginLogger.LogInfo("LMStudioActioner", "ExecuteAction", + $"AI Response: {(string.IsNullOrEmpty(response) ? "(empty)" : $"{response.Length} chars")}"); + // Add assistant response to history if (!string.IsNullOrEmpty(response)) { actionerHistory.Add(new ChatMessage(ChatRole.Assistant, response)); } + else + { + // If response is empty, check if there were tool calls and provide a default response + var defaultResponse = "I executed the requested action successfully."; + PluginLogger.LogInfo("LMStudioActioner", "ExecuteAction", + "Empty response from model, using default response"); + actionerHistory.Add(new ChatMessage(ChatRole.Assistant, defaultResponse)); + return defaultResponse; + } return response; } diff --git a/docs/Getting-Started.md b/docs/Getting-Started.md index 6fdb9a1..7edb4cd 100644 --- a/docs/Getting-Started.md +++ b/docs/Getting-Started.md @@ -3,94 +3,87 @@ layout: default title: Getting Started --- -# Getting Started with Recursive Control +# First Flight Checklist -This guide will help you get up and running with Recursive Control quickly. +Strap into Mission Control and run your first full-loop automation in under ten minutes. -## Your First Commands +## Cue the Agents -Once installed and configured, you can start using natural language commands: +Once the cockpit is configured you can talk in plain-text, mission-style briefs. -### Basic Examples +### Launch Scripts -1. **File Management** +1. **File Ops Circuit** ``` - "Open File Explorer and navigate to my Documents folder" - "Create a new folder called Projects on my Desktop" - "Rename all .txt files in this folder to .md" + “Open File Explorer and navigate to my Documents folder.” + “Create a new folder called Projects on my Desktop.” + “Rename all .txt files in this folder to .md.” ``` -2. **Application Control** +2. **App Relay** ``` - "Open Notepad and type Hello World" - "Launch Chrome and navigate to github.com" - "Open Excel and create a new spreadsheet" + “Open Notepad and type Hello World.” + “Launch Chrome and navigate to github.com.” + “Open Excel and create a new spreadsheet.” ``` -3. **Screen Capture** +3. **Vision Probe** ``` - "Take a screenshot of the current window" - "Capture the entire screen" + “Take a screenshot of the current window.” + “Capture the entire screen.” ``` -4. **Web Automation** +4. **Browser Drone** ``` - "Open a browser and search for AI automation tools" - "Fill out this form with my information" - "Extract data from this webpage" + “Open a browser and search for AI automation tools.” + “Fill out this form with my information.” + “Extract data from this webpage.” ``` -## Understanding the Multi-Agent System +## Meet the Crew -Recursive Control uses a sophisticated 3-agent architecture: +- **Hermes (Coordinator)** — interprets intent, sets the heading +- **Daedalus (Planner)** — drafts the maneuver plan step by step +- **Talos (Executor)** — performs every keystroke, click, and command -1. **Coordinator Agent**: Understands your request and determines the best approach -2. **Planner Agent**: Creates a step-by-step plan to accomplish the task -3. **Executor Agent**: Executes the plan using available plugins +Agents talk to you in real-time so you can abort, adjust, or cheer as they work. -This system ensures tasks are completed efficiently and accurately. +## Mission Briefing Tips -## Tips for Better Results +- **Paint the picture** → “Move all PDF files from Downloads to Documents” beats “Do something with files.” +- **Chunk the mission** → Run multi-stage workflows in segments and confirm each leg. +- **Talk human** → Natural language with intent and context works best; no scripting required. -### Be Specific -❌ "Do something with files" -✅ "Move all PDF files from Downloads to Documents folder" +## Plugin Bay at a Glance -### Break Down Complex Tasks -For very complex workflows, break them into smaller steps and verify each step. +- Keyboard + Mouse autopilot +- Command line (CMD + PowerShell) +- Screen capture + annotation +- Window switching + focus +- Playwright browser automation +- Remote control HTTP bridge -### Use Natural Language -You don't need to use technical commands - just describe what you want in plain English. +## Next Flight Plans -## Available Plugins +- Tour the [UI Features Atlas](UI-Features.html) +- Study the [Multi-Agent Architecture](Multi-Agent-Architecture.html) +- Customize personas via [System Prompts Reference](System-Prompts-Reference.html) +- Join the [Discord flight crew](https://discord.gg/mQWsWeHsVU) -Your commands can utilize these built-in plugins: +## First-Time FAQs -- **Keyboard & Mouse**: Automate input and clicks -- **Command Line**: Execute CMD and PowerShell commands -- **Screen Capture**: Take and analyze screenshots -- **Window Management**: Control application windows -- **Web Browser**: Automate websites with Playwright -- **Remote Control**: Accept commands via HTTP API +**How do I know it’s engaged?** -## Next Steps +Watch the live reasoning feed and action timeline. -- Explore the [UI Features](UI-Features.html) guide -- Learn about [Multi-Agent Architecture](Multi-Agent-Architecture.html) -- Check out [System Prompts](System-Prompts-Reference.html) for customization -- Join our [Discord](https://discord.gg/mQWsWeHsVU) for community support +**Something went sideways.** -## Common First-Time Questions +Hit the abort control, then consult the [Troubleshooting Console](Troubleshooting.html). -**Q: How do I know if it's working?** -A: The UI will show the agent's thinking process and actions in real-time. +**Can I reshape its behavior?** -**Q: What if something goes wrong?** -A: You can interrupt execution at any time. Check the [Troubleshooting](Troubleshooting.html) guide for help. - -**Q: Can I customize the behavior?** -A: Yes! You can adjust system prompts, enable/disable plugins, and configure various settings. +Absolutely. Tweak prompts, toggle plugins, and save profiles. --- -Ready to dive deeper? Check out our [advanced documentation](Multi-Agent-Architecture.html) or join the [community](https://discord.gg/mQWsWeHsVU)! +Ready for more? Dive into [advanced documentation](Multi-Agent-Architecture.html) or sync with the [community](https://discord.gg/mQWsWeHsVU). diff --git a/docs/Installation.md b/docs/Installation.md index 7dbefa9..29253cd 100644 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -3,46 +3,45 @@ layout: default title: Installation --- -# Installation Guide +# Installation Capsule -Get Recursive Control up and running on your Windows system. +Your mission dock for landing Recursive Control on Windows. Choose your payload, confirm dependencies, and ignite the thrusters. -## System Requirements +## Flight Readiness Checklist -### Minimum Requirements +### Baseline Specs - **Operating System**: Windows 10 or Windows 11 - **.NET Framework**: 4.8 or later - **RAM**: 4 GB minimum (8 GB recommended) - **Disk Space**: 500 MB for application files -### Additional Requirements +### Network & Auth - Internet connection for AI model API access - API key for your preferred AI provider (OpenAI, Azure OpenAI, Anthropic, Google, etc.) -## Installation Steps +## Deploy Options -### Option 1: Download Pre-built Release (Recommended) +### Rapid Drop (Recommended) -1. **Download the Latest Release** - - Visit the [Releases page](https://github.com/flowdevs-io/Recursive-Control/releases) - - Download the latest `recursivecontrol.zip` or installer - - Extract to your preferred location +1. **Pull the latest build** + - Hop to the [Releases hangar](https://github.com/flowdevs-io/Recursive-Control/releases) + - Snag the newest `recursivecontrol.zip` payload + - Extract anywhere friendly (no admin elevation required) -2. **Run the Application** - - Double-click `recursivecontrol.exe` - - The application will launch and prompt for initial setup +2. **Boot the cockpit** + - Launch `recursivecontrol.exe` + - First boot unlocks the setup co-pilot -3. **Configure Your AI Provider** - - Click the settings/configuration button - - Select your AI provider (OpenAI, Azure, Anthropic, etc.) - - Enter your API key - - Choose your preferred model +3. **Wire your pilot** + - Open Settings → Providers + - Pick your model stack (OpenAI, Azure, Claude, Gemini, LM Studio…) + - Drop in your API credentials -4. **Test the Installation** - - Try a simple command like "What can you do?" - - Verify the AI responds correctly +4. **Ping the tower** + - Ask "What can you do?" + - Confirm you see agent chatter + completion -### Option 2: Build from Source +### Source Build (Engineers’ Track) For developers who want to build from source: @@ -63,9 +62,9 @@ dotnet build dotnet run --project FlowVision ``` -## Initial Configuration +## Configure Your Pilot -### Setting Up Your AI Provider +### OpenAI #### OpenAI 1. Get your API key from [OpenAI Platform](https://platform.openai.com) @@ -97,7 +96,7 @@ dotnet run --project FlowVision - Provider: LM Studio - Endpoint: http://localhost:1234 (or your configured port) -### Plugin Configuration +### Plugin Bay Enable or disable plugins based on your needs: @@ -110,7 +109,7 @@ Enable or disable plugins based on your needs: - ⚠️ Playwright (requires additional setup) - ⚠️ Remote Control (enable for HTTP API) -## Verifying Installation +## System Checks Run these test commands to verify everything works: @@ -121,9 +120,9 @@ Run these test commands to verify everything works: If all tests pass, you're ready to go! -## Troubleshooting Installation Issues +## Troubleshooting Bay -### .NET Framework Not Found +### .NET Framework Missing - Download and install [.NET Framework 4.8](https://dotnet.microsoft.com/download/dotnet-framework/net48) ### API Key Errors @@ -131,7 +130,7 @@ If all tests pass, you're ready to go! - Check that your API provider account has credits/active subscription - Ensure internet connection is working -### Application Won't Start +### Application Won’t Start - Run as Administrator - Check Windows Event Viewer for error details - Verify all dependencies are installed @@ -141,13 +140,13 @@ If all tests pass, you're ready to go! - Increase available RAM - Consider using a lighter AI model -## Next Steps +## Next Flight Plans - Continue to [Getting Started](Getting-Started.html) guide - Explore [UI Features](UI-Features.html) - Join our [Discord community](https://discord.gg/mQWsWeHsVU) -## Uninstallation +## Uninstall Playbook To remove Recursive Control: 1. Delete the application folder diff --git a/docs/_config.yml b/docs/_config.yml index f3506cc..3da82ac 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -6,8 +6,7 @@ description: AI-Powered Computer Control for Windows baseurl: "/Recursive-Control" url: "https://flowdevs-io.github.io" -# Theme (GitHub Pages supported themes) -remote_theme: pages-themes/cayman@v0.2.0 +theme: null # Plugins (GitHub Pages whitelist) plugins: @@ -15,6 +14,11 @@ plugins: - jekyll-seo-tag - jekyll-sitemap +# Sass pipeline +sass: + sass_dir: _sass + style: compressed + # Markdown settings markdown: kramdown kramdown: diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml new file mode 100644 index 0000000..a374e14 --- /dev/null +++ b/docs/_data/navigation.yml @@ -0,0 +1,74 @@ +# Navigation map for the Recursive Control docs portal +# Each group defines a lane in the Compass navigation and command palette + +- title: Mission Control + icon: ✨ + links: + - label: Home + path: / + description: "Orientation deck, latest signal boosts, and portal jump points" + - label: Installation Capsule + path: /Installation.html + description: "Everything required to land Recursive Control on Windows" + - label: First Flight Checklist + path: /Getting-Started.html + description: "Spin up your agents and complete your first automations" + +- title: Ops Dashboard + icon: 🧭 + links: + - label: UI Features Atlas + path: /UI-Features.html + description: "Every panel, overlay, and feedback loop mapped" + - label: UI Redesign Narrative + path: /UI-Redesign.html + description: "Evolution of the command cockpit and design rituals" + - label: Release Trail Journal + path: /Blog-Post-v2.0.html + description: "Product story from MVP experiments to AI copilots" + +- title: Systems Lab + icon: ⚙️ + links: + - label: Multi-Agent Architecture + path: /Multi-Agent-Architecture.html + description: "Planner, coordinator, executor – the triad that flies your missions" + - label: System Prompts Reference + path: /System-Prompts-Reference.html + description: "Tune personas, guardrails, and playbooks for each agent" + - label: OmniParser Setup + path: /guides/OmniParser-Setup.html + description: "Wire up vision parsing to unlock spatial reasoning" + - label: AI Provider Comparison + path: /guides/AI-Provider-Comparison.html + description: "Latency, cost, and capability matrix across model vendors" + - label: LM Studio Quickstart + path: /guides/LM-Studio-Quickstart.html + description: "Local-first deployments powered by LM Studio" + +- title: Extensible Orbit + icon: 🧩 + links: + - label: API Reference + path: /API-Reference.html + description: "REST endpoints, payloads, and automation recipes" + - label: Plugin Architecture Primer + path: /Multi-Agent-Architecture.html#plugin-ecosystem + description: "Where plugins dock into the agent orchestration" + - label: UI Telemetry Hooks + path: /UI-Features.html#telemetry-hooks + description: "Signal taps for real-time dashboards and observers" + +- title: Support Bay + icon: 🛟 + links: + - label: FAQ Loop + path: /FAQ.html + description: "Quick responses to the most common mission questions" + - label: Troubleshooting Console + path: /Troubleshooting.html + description: "On-call runbooks for recovering from turbulence" + - label: Repo Handbook + path: /README.html + description: "Contribution guidelines, strategy, and governance notes" + diff --git a/docs/_includes/command-palette.html b/docs/_includes/command-palette.html new file mode 100644 index 0000000..908eec4 --- /dev/null +++ b/docs/_includes/command-palette.html @@ -0,0 +1,20 @@ + + diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html new file mode 100644 index 0000000..a71585c --- /dev/null +++ b/docs/_layouts/default.html @@ -0,0 +1,153 @@ + + + {% assign nav = site.data.navigation %} + + + + + + + {% if page.title %}{{ page.title }} · {% endif %}{{ site.title }} + {%- seo -%} + + + + + + + + + + + + + + {% include command-palette.html %} + +
+ + +
+
+
+ {{ site.description }} + +
+
+

{{ page.title | default: 'Recursive Control Docs' }}

+ {% if page.subtitle %} +

{{ page.subtitle }}

+ {% endif %} +
+ +
+ +
+ +
+ {{ content }} +
+
+ + +
+
+ + + + + diff --git a/docs/_sass/compass.scss b/docs/_sass/compass.scss new file mode 100644 index 0000000..b058ce3 --- /dev/null +++ b/docs/_sass/compass.scss @@ -0,0 +1,894 @@ +$space-base: 1rem; +$color-bg: #07070a; +$color-surface: rgba(18, 20, 25, 0.82); +$color-surface-alt: rgba(12, 14, 19, 0.95); +$color-accent: #8f6bff; +$color-accent-soft: rgba(143, 107, 255, 0.2); +$color-accent-strong: #7a5cff; +$color-text: #f4f4f6; +$color-text-dim: rgba(244, 244, 246, 0.72); +$color-border: rgba(255, 255, 255, 0.08); +$color-positive: #6bffa7; +$transition: 180ms ease; +$font-display: "Space Grotesk", "Segoe UI", sans-serif; + +* { + box-sizing: border-box; +} + +html, +body { + padding: 0; + margin: 0; + font-family: $font-display; + background: $color-bg; + color: $color-text; + min-height: 100%; +} + +body::before { + content: ""; + position: fixed; + inset: 0; + background: radial-gradient(circle at top right, rgba(143, 107, 255, 0.15), transparent 55%), + radial-gradient(circle at bottom left, rgba(107, 255, 197, 0.08), transparent 50%); + pointer-events: none; + z-index: -2; +} + +.gradient-spark { + position: fixed; + filter: blur(90px); + opacity: 0.32; + z-index: -1; + width: 480px; + height: 480px; + border-radius: 50%; + background: radial-gradient(circle, rgba(143, 107, 255, 0.55), rgba(143, 107, 255, 0)); + top: -120px; + right: -120px; + + &--two { + top: auto; + bottom: -160px; + left: -140px; + background: radial-gradient(circle, rgba(107, 255, 197, 0.45), rgba(107, 255, 197, 0)); + } +} + +a { + color: $color-text; + text-decoration: none; +} + +a:hover { + color: $color-positive; +} + +.viewport-frame { + display: grid; + grid-template-columns: 340px 1fr; + min-height: 100vh; + align-items: start; +} + +.nav-compass { + position: sticky; + top: 0; + height: 100vh; + padding: $space-base * 1.5; + backdrop-filter: blur(18px); + background: rgba(6, 7, 10, 0.6); + border-right: 1px solid $color-border; + display: flex; + flex-direction: column; +} + +.nav-compass__header { + display: flex; + align-items: center; + justify-content: space-between; + gap: $space-base; + padding-bottom: $space-base; + border-bottom: 1px solid $color-border; +} + +.brand-mark { + display: flex; + gap: $space-base * 0.75; + align-items: center; + padding: $space-base * 0.5 $space-base * 0.75; + border-radius: 999px; + background: rgba(255, 255, 255, 0.08); + transition: background $transition, transform $transition; + + &:hover { + background: rgba(255, 255, 255, 0.14); + transform: translateY(-1px); + } +} + +.brand-mark__orb { + width: 22px; + height: 22px; + border-radius: 50%; + background: conic-gradient(from 180deg, rgba(143, 107, 255, 1) 0%, rgba(107, 255, 197, 1) 45%, rgba(255, 255, 255, 0.45) 100%); + box-shadow: 0 0 14px rgba(143, 107, 255, 0.55); +} + +.brand-mark__title { + font-size: 0.95rem; + font-weight: 600; +} + +.brand-mark__subtitle { + font-size: 0.72rem; + color: $color-text-dim; +} + +.nav-controls { + display: flex; + gap: $space-base * 0.5; +} + +.nav-toggle, +.theme-toggle { + background: rgba(255, 255, 255, 0.08); + border: 1px solid transparent; + border-radius: 999px; + padding: $space-base * 0.4 $space-base * 0.7; + color: $color-text; + display: inline-flex; + align-items: center; + gap: $space-base * 0.4; + cursor: pointer; + transition: border-color $transition, background $transition; + + &:hover { + border-color: rgba(255, 255, 255, 0.24); + } +} + +.nav-toggle__icon, +.theme-toggle__icon { + width: 16px; + height: 16px; + position: relative; +} + +.nav-toggle__icon::before, +.nav-toggle__icon::after, +.theme-toggle__icon::before, +.theme-toggle__icon::after { + content: ""; + position: absolute; + inset: 0; + border-radius: 50%; + background: linear-gradient(135deg, rgba(143, 107, 255, 0.9), rgba(107, 255, 197, 0.9)); + opacity: 0.7; +} + +.theme-toggle__icon::after { + filter: blur(6px); + opacity: 0.4; +} + +.theme-toggle__label { + font-size: 0.85rem; +} + +.nav-compass__scroll { + margin-top: $space-base * 1.5; + overflow-y: auto; + padding-right: $space-base * 0.5; +} + +.nav-stacks { + display: grid; + gap: $space-base; +} + +.nav-stack { + border: 1px solid $color-border; + background: $color-surface; + border-radius: 24px; + padding: $space-base; + box-shadow: 0 12px 32px rgba(7, 7, 10, 0.45); + transition: transform $transition, border-color $transition, box-shadow 240ms ease; + + &[data-active="true"] { + transform: translateY(-2px); + border-color: rgba(143, 107, 255, 0.5); + box-shadow: 0 16px 40px rgba(143, 107, 255, 0.25); + } +} + +.nav-stack__header { + display: flex; + gap: $space-base * 0.75; + align-items: center; + margin-bottom: $space-base * 0.75; +} + +.nav-stack__icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 40px; + height: 40px; + border-radius: 14px; + background: $color-accent-soft; + font-size: 1.2rem; +} + +.nav-stack__links { + list-style: none; + padding: 0; + margin: 0; + display: grid; + gap: $space-base * 0.4; +} + +.nav-stack__links li { + margin: 0; +} + +[data-nav-link] { + display: flex; + align-items: center; + justify-content: space-between; + gap: $space-base * 0.75; + padding: $space-base * 0.75; + border-radius: 16px; + border: 1px solid transparent; + background: rgba(255, 255, 255, 0.04); + transition: border-color $transition, background $transition, transform $transition; + + &:hover, + &:focus { + border-color: rgba(143, 107, 255, 0.45); + background: rgba(143, 107, 255, 0.12); + transform: translateX(4px); + } + + &.is-active { + border-color: rgba(143, 107, 255, 0.75); + background: rgba(143, 107, 255, 0.18); + box-shadow: inset 0 0 0 1px rgba(143, 107, 255, 0.4); + } +} + +.nav-link__label { + font-size: 0.95rem; + font-weight: 500; +} + +.nav-link__chevron { + font-size: 1.1rem; + opacity: 0.55; +} + +.nav-empty { + color: $color-text-dim; + font-size: 0.9rem; +} + +.nav-compass__footer { + margin-top: auto; + border-top: 1px solid $color-border; + padding-top: $space-base; + display: grid; + gap: $space-base * 0.5; +} + +.nav-footer-link { + display: flex; + justify-content: space-between; + align-items: center; + gap: $space-base * 0.5; + padding: $space-base * 0.65 $space-base * 0.85; + border-radius: 12px; + background: rgba(255, 255, 255, 0.05); + transition: background $transition, transform $transition; + + span:last-child { + opacity: 0.45; + } + + &:hover { + background: rgba(255, 255, 255, 0.1); + transform: translateY(-1px); + } +} + +.content-orbit { + display: flex; + flex-direction: column; + min-height: 100vh; + padding: $space-base * 1.5 $space-base * 2; +} + +.page-masthead { + display: grid; + grid-template-columns: 1fr auto; + gap: $space-base; + padding: $space-base * 1.5; + border-radius: 32px; + border: 1px solid $color-border; + background: $color-surface-alt; + box-shadow: 0 24px 50px rgba(7, 7, 10, 0.55); + margin-bottom: $space-base * 1.5; + position: relative; + overflow: hidden; +} + +.page-masthead::after { + content: ""; + position: absolute; + inset: 0; + background: radial-gradient(circle at top left, rgba(143, 107, 255, 0.25), transparent 55%); + mix-blend-mode: screen; +} + +.masthead__meta { + display: flex; + align-items: center; + gap: $space-base * 0.75; +} + +.masthead__eyebrow { + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.2em; + color: $color-text-dim; +} + +.masthead__pulse { + width: 14px; + height: 14px; + border-radius: 50%; + background: $color-positive; + box-shadow: 0 0 0 0 rgba(107, 255, 167, 0.65); + animation: pulse 2.8s ease-out infinite; +} + +.masthead__titles h1 { + margin: 0; + font-size: 2.4rem; + font-weight: 600; + letter-spacing: -0.02em; +} + +.masthead__subtitle { + color: $color-text-dim; + font-size: 1.05rem; + max-width: 540px; + margin-top: $space-base * 0.5; +} + +.masthead__actions { + display: flex; + align-items: center; + gap: $space-base; +} + +.masthead__action { + background: $color-accent; + border-radius: 999px; + padding: $space-base * 0.75 $space-base * 1.4; + font-weight: 600; + letter-spacing: 0.01em; + color: #0b0415; + transition: transform $transition, box-shadow $transition; + + &:hover { + transform: translateY(-1px); + box-shadow: 0 12px 24px rgba(143, 107, 255, 0.35); + } + + &--secondary { + background: rgba(255, 255, 255, 0.12); + color: $color-text; + } + + &--ghost { + background: transparent; + border: 1px solid rgba(255, 255, 255, 0.28); + color: $color-text; + + &:hover { + border-color: rgba(255, 255, 255, 0.5); + } + } +} + +.reading-lane { + display: grid; + grid-template-columns: 280px minmax(0, 1fr); + gap: $space-base * 1.5; + align-items: start; +} + +.reading-lane__rail { + display: grid; + gap: $space-base; + position: sticky; + top: $space-base * 1.5; + align-self: start; +} + +.rail-card { + border-radius: 24px; + border: 1px solid $color-border; + background: $color-surface; + padding: $space-base * 1.1; + display: grid; + gap: $space-base * 0.6; + min-height: 140px; + box-shadow: 0 12px 30px rgba(7, 7, 10, 0.45); +} + +.rail-card--context { + position: relative; +} + +.rail-card--context::before { + content: ""; + position: absolute; + inset: -1px; + border-radius: 24px; + border: 1px solid rgba(143, 107, 255, 0.22); + pointer-events: none; +} + +.rail-card__title { + font-weight: 600; + font-size: 0.9rem; + letter-spacing: 0.08em; + text-transform: uppercase; + color: $color-text-dim; +} + +.rail-card__body { + font-size: 0.95rem; + color: $color-text; +} + +.rail-card--toc { + padding: 0; + overflow: hidden; +} + +.rail-card--toc nav { + display: block; + max-height: 540px; + overflow: hidden auto; +} + +.rail-card--toc ul { + list-style: none; + margin: 0; + padding: $space-base; + display: grid; + gap: $space-base * 0.5; +} + +.rail-card--toc a { + display: flex; + align-items: center; + gap: $space-base * 0.6; + padding: $space-base * 0.5 $space-base * 0.75; + border-radius: 14px; + border: 1px solid transparent; + background: transparent; + color: $color-text-dim; + font-size: 0.9rem; + + &:hover, + &:focus, + &.is-active { + border-color: rgba(143, 107, 255, 0.35); + background: rgba(143, 107, 255, 0.1); + color: $color-text; + } +} + +.doc-canvas { + border-radius: 32px; + border: 1px solid $color-border; + background: rgba(10, 12, 18, 0.78); + backdrop-filter: blur(12px); + padding: $space-base * 2; + box-shadow: 0 24px 60px rgba(7, 7, 10, 0.65); +} + +.doc-canvas h1, +.doc-canvas h2, +.doc-canvas h3, +.doc-canvas h4 { + color: $color-text; +} + +.doc-canvas p, +.doc-canvas li { + color: $color-text-dim; + line-height: 1.65; +} + +.doc-canvas pre { + background: rgba(7, 7, 10, 0.9); + border-radius: 18px; + padding: $space-base * 1.2; + border: 1px solid rgba(255, 255, 255, 0.08); + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04); +} + +.doc-canvas code { + font-size: 0.9rem; + color: $color-positive; +} + +.doc-canvas table { + width: 100%; + border-collapse: collapse; + margin: $space-base 0; +} + +.doc-canvas th, +.doc-canvas td { + border: 1px solid rgba(255, 255, 255, 0.05); + padding: $space-base * 0.75; + text-align: left; +} + +.page-footer { + margin-top: $space-base * 2; + display: flex; + justify-content: space-between; + gap: $space-base; + font-size: 0.92rem; + color: $color-text-dim; +} + +.page-footer__left, +.page-footer__right { + display: inline-flex; + align-items: center; + gap: $space-base * 0.5; +} + +.page-footer a { + color: $color-text; + text-decoration: underline; + text-decoration-color: rgba(255, 255, 255, 0.3); + + &:hover { + text-decoration-color: rgba(255, 255, 255, 0.6); + } +} + +.command-launch { + position: fixed; + bottom: $space-base * 1.5; + right: $space-base * 1.5; + background: rgba(143, 107, 255, 0.18); + border: 1px solid rgba(143, 107, 255, 0.45); + color: $color-text; + border-radius: 999px; + padding: $space-base * 0.75 $space-base * 1.3; + display: flex; + align-items: center; + gap: $space-base * 0.6; + font-weight: 600; + backdrop-filter: blur(18px); + cursor: pointer; + transition: transform $transition, box-shadow $transition, background $transition; + z-index: 12; + + &:hover { + transform: translateY(-2px); + background: rgba(143, 107, 255, 0.3); + box-shadow: 0 12px 30px rgba(143, 107, 255, 0.45); + } + + kbd { + background: rgba(255, 255, 255, 0.12); + border-radius: 6px; + padding: 2px 6px; + font-size: 0.78rem; + } +} + +.command-palette { + position: fixed; + inset: 0; + display: none; + align-items: center; + justify-content: center; + z-index: 15; +} + +.command-palette[aria-hidden="false"] { + display: flex; +} + +.command-palette__backdrop { + position: absolute; + inset: 0; + background: rgba(4, 5, 10, 0.72); + backdrop-filter: blur(16px); +} + +.command-palette__panel { + position: relative; + width: min(720px, 90vw); + border-radius: 28px; + padding: $space-base * 1.6; + border: 1px solid rgba(255, 255, 255, 0.08); + background: rgba(10, 12, 18, 0.96); + box-shadow: 0 26px 60px rgba(7, 7, 10, 0.75); + display: grid; + gap: $space-base * 1.1; +} + +.command-palette__header h2 { + margin: 0; + font-size: 1.2rem; + letter-spacing: 0.06em; + text-transform: uppercase; + color: $color-text-dim; +} + +.command-palette__hint { + font-size: 0.82rem; + color: rgba(244, 244, 246, 0.56); + margin: 0.2rem 0 0; +} + +.command-palette__search { + display: grid; + gap: $space-base * 0.6; +} + +.command-palette__search input { + width: 100%; + padding: $space-base * 0.9 $space-base; + border-radius: 18px; + border: 1px solid rgba(255, 255, 255, 0.12); + background: rgba(4, 5, 10, 0.8); + color: $color-text; + font-size: 1.05rem; + outline: none; + transition: border-color $transition; + + &:focus { + border-color: rgba(143, 107, 255, 0.5); + box-shadow: 0 0 0 3px rgba(143, 107, 255, 0.2); + } +} + +.command-palette__status { + font-size: 0.85rem; + color: $color-text-dim; +} + +.command-palette__groups { + display: grid; + gap: $space-base * 0.75; + max-height: 360px; + overflow-y: auto; +} + +.command-group { + border-radius: 18px; + border: 1px solid rgba(255, 255, 255, 0.08); + background: rgba(18, 20, 25, 0.9); + overflow: hidden; +} + +.command-group header { + display: flex; + align-items: center; + gap: $space-base * 0.6; + padding: $space-base * 0.75 $space-base; + font-size: 0.9rem; + color: $color-text-dim; +} + +.command-group__icon { + display: inline-flex; + width: 28px; + height: 28px; + border-radius: 10px; + align-items: center; + justify-content: center; + background: rgba(143, 107, 255, 0.18); +} + +.command-group__list { + list-style: none; + margin: 0; + padding: 0; +} + +.command-group__item { + border-top: 1px solid rgba(255, 255, 255, 0.06); +} + +.command-group__link { + display: flex; + align-items: center; + justify-content: space-between; + gap: $space-base * 0.75; + padding: $space-base * 0.75 $space-base; + transition: background $transition, transform $transition; + + &:hover, + &.is-active { + background: rgba(143, 107, 255, 0.18); + transform: translateX(2px); + } +} + +.command-group__meta { + display: grid; + gap: $space-base * 0.35; +} + +.command-group__title { + font-weight: 600; +} + +.command-group__desc { + font-size: 0.85rem; + color: $color-text-dim; +} + +.command-group__key { + font-size: 0.82rem; + color: rgba(244, 244, 246, 0.52); +} + +.command-palette__footer { + display: flex; + justify-content: space-between; + align-items: center; + gap: $space-base; + font-size: 0.78rem; + color: rgba(244, 244, 246, 0.48); +} + +.command-palette__footer span { + display: inline-flex; + gap: $space-base * 0.4; + align-items: center; +} + +.command-palette__footer kbd { + background: rgba(255, 255, 255, 0.12); + border-radius: 6px; + padding: 2px 6px; +} + +.page-footer a, +.command-group__link { + text-decoration: none; +} + +@keyframes pulse { + 0% { + box-shadow: 0 0 0 0 rgba(107, 255, 167, 0.65); + } + + 70% { + box-shadow: 0 0 0 16px rgba(107, 255, 167, 0); + } + + 100% { + box-shadow: 0 0 0 0 rgba(107, 255, 167, 0); + } +} + +@media (max-width: 1200px) { + .viewport-frame { + grid-template-columns: 300px 1fr; + } + + .reading-lane { + grid-template-columns: 1fr; + } + + .reading-lane__rail { + position: static; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + grid-auto-flow: column; + overflow-x: auto; + } +} + +@media (max-width: 980px) { + .viewport-frame { + grid-template-columns: 1fr; + } + + .nav-compass { + position: fixed; + z-index: 14; + transform: translateX(-100%); + transition: transform 260ms ease; + width: min(340px, 90vw); + } + + .nav-compass[data-open="true"] { + transform: translateX(0); + } + + .nav-toggle__label { + display: none; + } + + .content-orbit { + padding-top: $space-base * 6; + } + + .command-launch { + right: 50%; + transform: translateX(50%); + } +} + +@media (max-width: 680px) { + .page-masthead { + grid-template-columns: 1fr; + } + + .masthead__actions { + flex-wrap: wrap; + } +} + +:root.light { + --bg: #f7f7fb; + --text: #141726; + --text-dim: rgba(20, 23, 38, 0.72); + --surface: rgba(255, 255, 255, 0.85); + --surface-alt: rgba(255, 255, 255, 0.96); + --border: rgba(20, 23, 38, 0.12); +} + +.theme-light { + background: var(--bg); + color: var(--text); +} + +.theme-light .nav-compass, +.theme-light .doc-canvas, +.theme-light .page-masthead, +.theme-light .rail-card { + background: var(--surface); + border-color: var(--border); + color: var(--text); +} + +.theme-light .doc-canvas p, +.theme-light .doc-canvas li { + color: var(--text-dim); +} + +.theme-light .masthead__eyebrow { + color: var(--text-dim); +} + +.theme-light .nav-stack { + background: var(--surface-alt); +} + +.theme-light .rail-card--toc a { + color: var(--text-dim); +} + +.theme-light .command-palette__panel { + background: rgba(255, 255, 255, 0.98); + color: var(--text); +} + diff --git a/docs/assets/css/compass.scss b/docs/assets/css/compass.scss new file mode 100644 index 0000000..1ca8997 --- /dev/null +++ b/docs/assets/css/compass.scss @@ -0,0 +1,4 @@ +--- +--- +@import "compass"; + diff --git a/docs/assets/js/compass.js b/docs/assets/js/compass.js new file mode 100644 index 0000000..434a2fd --- /dev/null +++ b/docs/assets/js/compass.js @@ -0,0 +1,337 @@ +(() => { + const body = document.body; + const nav = document.querySelector('.nav-compass'); + const navLinks = [...document.querySelectorAll('[data-nav-link]')]; + const navDescription = document.getElementById('nav-description'); + const navToggle = document.querySelector('[data-nav-toggle]'); + const commandPalette = document.getElementById('command-palette'); + const commandOpeners = [...document.querySelectorAll('[data-palette-open]')]; + const commandCloser = commandPalette?.querySelector('[data-palette-close]'); + const commandInput = document.getElementById('command-palette-input'); + const commandResults = document.getElementById('command-palette-results'); + const commandStatus = document.getElementById('command-palette-status'); + const themeToggle = document.querySelector('[data-theme-toggle]'); + const readingRail = document.querySelector('[data-rail]'); + const docCanvas = document.querySelector('[data-doc-canvas]'); + + const navData = window.__RC_NAV__ || []; + const shortcuts = new Map(); + + const setNavDescription = (text) => { + if (navDescription) { + navDescription.textContent = text; + } + }; + + navLinks.forEach((link) => { + const description = link.dataset.description; + link.addEventListener('mouseenter', () => setNavDescription(description || '')); + link.addEventListener('focus', () => setNavDescription(description || '')); + link.addEventListener('mouseleave', () => setNavDescription('Hover a page in the Compass to read its story.')); + link.addEventListener('blur', () => setNavDescription('Hover a page in the Compass to read its story.')); + }); + + const mobileNav = { + open: () => { + if (nav) { + nav.dataset.open = 'true'; + } + }, + close: () => { + if (nav) { + nav.dataset.open = 'false'; + } + }, + toggle: () => { + if (nav) { + const open = nav.dataset.open === 'true'; + nav.dataset.open = open ? 'false' : 'true'; + } + } + }; + + if (navToggle) { + navToggle.addEventListener('click', () => mobileNav.toggle()); + } + + const palette = { + visible: false, + open() { + if (!commandPalette) return; + commandPalette.setAttribute('aria-hidden', 'false'); + document.body.style.overflow = 'hidden'; + commandInput?.focus(); + this.visible = true; + renderCommandPalette(''); + }, + close() { + if (!commandPalette) return; + commandPalette.setAttribute('aria-hidden', 'true'); + document.body.style.overflow = ''; + commandInput?.blur(); + this.visible = false; + }, + toggle() { + if (this.visible) { + this.close(); + } else { + this.open(); + } + } + }; + + commandOpeners.forEach((button) => button.addEventListener('click', () => palette.open())); + commandCloser?.addEventListener('click', () => palette.close()); + + document.addEventListener('keydown', (event) => { + if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'k') { + event.preventDefault(); + palette.toggle(); + } + + if (event.key === 'Escape' && palette.visible) { + palette.close(); + } + }); + + let activeCommandIndex = 0; + + const getVisibleCommands = () => { + return [...commandResults.querySelectorAll('.command-group__link')]; + }; + + const moveCommandFocus = (direction) => { + const commands = getVisibleCommands(); + if (!commands.length) return; + + activeCommandIndex = (activeCommandIndex + direction + commands.length) % commands.length; + commands.forEach((cmd, index) => cmd.classList.toggle('is-active', index === activeCommandIndex)); + commands[activeCommandIndex].scrollIntoView({ block: 'nearest' }); + }; + + const activateCommand = () => { + const commands = getVisibleCommands(); + commands[activeCommandIndex]?.click(); + }; + + const renderCommandPalette = (query) => { + if (!commandResults) return; + + const normalized = query.trim().toLowerCase(); + + const groups = navData.map((group) => { + const filteredLinks = group.links.filter((link) => { + if (!normalized) return true; + return ( + link.label.toLowerCase().includes(normalized) || + (link.description && link.description.toLowerCase().includes(normalized)) + ); + }); + + return { ...group, links: filteredLinks }; + }).filter((group) => group.links.length > 0); + + commandResults.innerHTML = ''; + + if (groups.length === 0) { + commandResults.innerHTML = '

No matches yet. Try a narrower phrase.

'; + commandStatus.textContent = 'No matches'; + return; + } + + const fragment = document.createDocumentFragment(); + + groups.forEach((group, groupIndex) => { + const section = document.createElement('section'); + section.className = 'command-group'; + section.setAttribute('role', 'group'); + section.setAttribute('aria-labelledby', `command-group-${groupIndex}`); + + const header = document.createElement('header'); + header.innerHTML = ` + ${group.icon || ''} + ${group.title} + `; + section.appendChild(header); + + const list = document.createElement('ul'); + list.className = 'command-group__list'; + + group.links.forEach((link, linkIndex) => { + const item = document.createElement('li'); + item.className = 'command-group__item'; + + const anchor = document.createElement('a'); + anchor.className = 'command-group__link'; + anchor.href = link.path; + anchor.setAttribute('role', 'option'); + anchor.dataset.commandIndex = `${groupIndex}-${linkIndex}`; + anchor.innerHTML = ` + + ${link.label} + ${link.description || ''} + + + `; + + anchor.addEventListener('click', (event) => { + event.preventDefault(); + window.location.href = anchor.href; + palette.close(); + }); + + item.appendChild(anchor); + list.appendChild(item); + }); + + section.appendChild(list); + fragment.appendChild(section); + }); + + commandResults.appendChild(fragment); + const total = groups.reduce((sum, group) => sum + group.links.length, 0); + commandStatus.textContent = `${total} result${total === 1 ? '' : 's'}`; + activeCommandIndex = 0; + getVisibleCommands()[0]?.classList.add('is-active'); + }; + + commandInput?.addEventListener('input', (event) => { + renderCommandPalette(event.target.value); + }); + + commandInput?.addEventListener('keydown', (event) => { + if (event.key === 'ArrowDown') { + event.preventDefault(); + moveCommandFocus(1); + } else if (event.key === 'ArrowUp') { + event.preventDefault(); + moveCommandFocus(-1); + } else if (event.key === 'Enter') { + event.preventDefault(); + activateCommand(); + } + }); + + const initializeShortcuts = () => { + shortcuts.set('slash', (event) => { + if (event.target === commandInput) { + event.stopPropagation(); + } + }); + + document.addEventListener('keydown', (event) => { + if (event.key === 't' && !['INPUT', 'TEXTAREA'].includes(event.target.tagName)) { + event.preventDefault(); + toggleTheme(); + } + }); + }; + + const toggleTheme = () => { + const current = localStorage.getItem('rc-theme') || 'auto'; + const next = current === 'light' ? 'dark' : current === 'dark' ? 'auto' : 'light'; + applyTheme(next); + }; + + const applyTheme = (mode) => { + localStorage.setItem('rc-theme', mode); + body.classList.remove('theme-light', 'theme-dark'); + + if (mode === 'auto') { + body.classList.add(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'theme-dark' : 'theme-light'); + } else { + body.classList.add(mode === 'dark' ? 'theme-dark' : 'theme-light'); + } + }; + + themeToggle?.addEventListener('click', () => toggleTheme()); + applyTheme(localStorage.getItem('rc-theme') || 'auto'); + + const buildToc = () => { + if (!readingRail || !docCanvas) return; + + const headings = docCanvas.querySelectorAll('h2, h3'); + if (!headings.length) return; + + const toc = document.createElement('nav'); + const list = document.createElement('ul'); + toc.appendChild(list); + + headings.forEach((heading) => { + if (!heading.id) { + heading.id = heading.textContent.toLowerCase().replace(/[^a-z0-9]+/g, '-'); + } + + const item = document.createElement('li'); + const link = document.createElement('a'); + link.href = `#${heading.id}`; + link.textContent = heading.textContent; + link.dataset.tocLink = heading.id; + + link.addEventListener('click', (event) => { + event.preventDefault(); + document.getElementById(heading.id)?.scrollIntoView({ behavior: 'smooth', block: 'start' }); + palette.close(); + }); + + item.appendChild(link); + list.appendChild(item); + }); + + const railToc = document.getElementById('rail-toc'); + if (railToc) { + railToc.innerHTML = ''; + railToc.appendChild(toc); + } + + const observer = new IntersectionObserver((entries) => { + entries.forEach((entry) => { + const link = document.querySelector(`[data-toc-link="${entry.target.id}"]`); + if (!link) return; + if (entry.isIntersecting) { + document.querySelectorAll('[data-toc-link]').forEach((node) => node.classList.remove('is-active')); + link.classList.add('is-active'); + } + }); + }, { + rootMargin: '-40% 0px -45% 0px', + threshold: 0.1 + }); + + headings.forEach((heading) => observer.observe(heading)); + }; + + const hydrateActiveNav = () => { + const page = document.body.dataset.page; + if (!page) return; + navLinks.forEach((link) => { + const href = link.getAttribute('href'); + if (!href) return; + const normalizedHref = href.replace(window.location.origin, '').replace(/index\.html$/, '/'); + const normalizedPage = page.replace(/index\.html$/, '/'); + if (normalizedHref === normalizedPage) { + link.classList.add('is-active'); + link.closest('[data-stack]')?.setAttribute('data-active', 'true'); + } + }); + }; + + const installNavData = () => { + if (!window.__RC_NAV__) { + window.__RC_NAV__ = navData; + } + }; + + installNavData(); + initializeShortcuts(); + renderCommandPalette(''); + buildToc(); + hydrateActiveNav(); + + window.addEventListener('resize', () => { + if (window.innerWidth > 980) { + nav?.removeAttribute('data-open'); + } + }); +})(); + diff --git a/docs/index.md b/docs/index.md index 1623bab..4f523ef 100644 --- a/docs/index.md +++ b/docs/index.md @@ -3,125 +3,89 @@ layout: default title: Home --- -# 📎 Recursive Control Documentation +# Mission Control Briefing -Welcome to the official documentation for **Recursive Control** - an AI-powered computer control system for Windows. +Welcome aboard **Recursive Control Mission Control**. This is your hangar, briefing room, and launch pad for orchestrating autonomous Windows workflows with your preferred AI pilots. -[![Join us on Discord](https://img.shields.io/badge/Join_our_Discord-7289DA?logo=discord&logoColor=white&labelColor=5865F2)](https://discord.gg/mQWsWeHsVU) - -## 🚀 What is Recursive Control? - -Recursive Control is an innovative project designed to enable artificial intelligence (AI) to interact seamlessly with your computer, automating tasks, performing complex workflows, and enhancing productivity through natural language commands. - -## ✨ Key Features +--- -- **AI-Powered Interaction**: Utilize AI models (GPT, Claude, Gemini, etc.) to interpret user input and intelligently execute actions -- **Automated Workflow Execution**: Automate repetitive or complex sequences of computer actions -- **Natural Language Commands**: Simply describe tasks in plain language, and let the AI handle execution -- **Multi-Agent Architecture**: Sophisticated 3-agent system for planning, coordination, and execution -- **Extensible Plugin System**: Modular architecture supporting custom plugins +## Launch Console -## 📚 Documentation +**Pick Your Objective** -### Getting Started -- [Installation Guide](Installation.html) - Set up Recursive Control on your system -- [Getting Started](Getting-Started.html) - Your first tasks and tutorials -- [UI Features](UI-Features.html) - Complete guide to the user interface +- [Installation Capsule](Installation.html) — deploy the suite locally in minutes +- [First Flight Checklist](Getting-Started.html) — complete your first automation loop +- [UI Features Atlas](UI-Features.html) — map every control surface and telemetry feed -### Advanced Topics -- [Multi-Agent Architecture](Multi-Agent-Architecture.html) - Technical deep dive into the agent system -- [System Prompts Reference](System-Prompts-Reference.html) - Understanding and customizing system prompts -- [API Reference](API-Reference.html) - Developer documentation +**Signal Boosts** -### Support -- [FAQ](FAQ.html) - Frequently asked questions -- [Troubleshooting](Troubleshooting.html) - Common issues and solutions +- Discord flight crew → [Join the ops channel](https://discord.gg/mQWsWeHsVU) +- Latest release notes → [Version pulse](https://github.com/flowdevs-io/Recursive-Control/releases) -## 🎯 Quick Start +--- -### Prerequisites -- .NET 4.8 or later -- Windows Operating System -- API Key for your preferred LLM provider (OpenAI, Azure, Anthropic, etc.) +## What You’re Flying -### Installation Steps +Recursive Control stitches together a **triad of agents**, a **modular plugin bay**, and **vision-assisted perception** so your instructions arrive as working Windows tasks. -1. **Download** the latest release from the [Releases](https://github.com/flowdevs-io/Recursive-Control/releases) page -2. **Run** `recursivecontrol.exe` -3. **Configure** your LLM provider in the settings -4. **Start** automating with natural language commands! +| Layer | Callsign | Mission | +| --- | --- | --- | +| 🧭 Coordinator | Hermes | Interprets intent, selects strategy | +| 🛠️ Planner | Daedalus | Authors the execution playbook | +| ⚡ Executor | Talos | Operates Windows actions through plugins | -## 🔌 Built-in Plugins +Plugins extend the aircraft: keyboard and mouse automation, screen intelligence, PowerShell/CMD access, Playwright browser control, remote HTTP bridge, and more. -Recursive Control comes with powerful plugins out of the box: +--- -- **CMDPlugin**: Execute Windows command line instructions -- **PowershellPlugin**: Run PowerShell scripts and commands -- **KeyboardPlugin**: Automate keyboard input -- **MousePlugin**: Automate mouse actions -- **ScreenCapturePlugin**: Capture and analyze screenshots -- **WindowSelectionPlugin**: Select and interact with application windows -- **PlaywrightPlugin**: Automate web browsers -- **RemoteControlPlugin**: HTTP API for remote command execution +## Flight Patterns -## 💡 Example Use Cases +```text +“Launch Excel, log in to Teams, and stage the daily report template.” +“Sweep Downloads, convert every .png into annotated documentation captures.” +“Open Chrome, authenticate into Jira, and create status tickets for each blocker.” +``` -- "Open Excel and create a new spreadsheet" -- "Capture screenshots for documentation" -- "Batch rename files in a folder" -- "Automate website testing with Playwright" -- "Fill out forms automatically" +Every request is decomposed into atomic moves, verified, and streamed back with commentary. -## 🛠️ Development +--- -Want to contribute or build from source? +## Build Lab ```bash -# Clone the repository git clone https://github.com/flowdevs-io/Recursive-Control.git - -# Navigate to directory cd Recursive-Control - -# Restore and build -dotnet restore -dotnet build +dotnet restore && dotnet build ``` -## 🗺️ Roadmap +Fork the repository to inject new agents, craft plugins, or integrate your own telemetry. -### Near-Term Goals -- [ ] Content warning logging for improved safety -- [ ] Expanded model support (Gemini, OLLAMA, Bedrock, Phi4) -- [ ] Improved speech recognition using real-time audio models +--- + +## Radar Timeline -### Future Vision -- [ ] Local Bbox search for reduced token usage -- [ ] Managed LLM integration with subscription options -- [ ] YOLO Bbox parser integration for advanced vision +**Now shipping** -**End Goal**: Recursive Control on every Windows computer, leveraging local SLMs and embedded vision models. Making computer interaction so seamless that keyboards and mice become optional. +- Multi-agent orchestration with live reasoning feed +- OmniParser bridge for Florence-powered spatial awareness +- Plugin toggles, profiles, and per-model prompt vibes -## 🤝 Community & Support +**Locking targets** -- [GitHub Issues](https://github.com/flowdevs-io/Recursive-Control/issues) - Bug reports and feature requests -- [Discussions](https://github.com/flowdevs-io/Recursive-Control/discussions) - Q&A and ideas -- [Discord Community](https://discord.gg/mQWsWeHsVU) - Real-time chat and support -- [LinkedIn](https://www.linkedin.com/company/flowdevs) - Updates and networking +- Reconfigurable task board with shared state between agents +- Gemini, Bedrock, Ollama, Phi4 connectors +- Real-time speech recognition powered by Whisper successors -## 📄 License +--- -This project is licensed under the MIT License - see the [LICENSE](https://github.com/flowdevs-io/Recursive-Control/blob/master/LICENSE) file for details. +## Support Deck -## 📧 Contact +- [FAQ Loop](FAQ.html) +- [Troubleshooting Console](Troubleshooting.html) +- [Repo Handbook](README.html) -For questions, feedback, or collaboration inquiries, connect with us through: -- GitHub repository -- [Discord server](https://discord.gg/mQWsWeHsVU) -- [LinkedIn](https://www.linkedin.com/company/flowdevs) +Open a [GitHub issue](https://github.com/flowdevs-io/Recursive-Control/issues) for feature requests or turbulence reports. --- -
-Made with ❤️ by Engineers -
+**“Make computers feel like teammates.”** — FlowDevs Flight Core