Open platform — upload your own tools

The AI workspace
that actually works.

Break free from the limitations of traditional IDEs and unleash your creativity with Relectric, the AI-powered workspace designed for builders, creators, and tinkerers. Seamlessly integrate your tools, automate workflows, and let your ideas take shape like never before.


class DJTool(RelectricTool):
  @RelectricTool.function
  def start_remixing(self, genre):
    relectric.automation.queueJob(
      lambda: relectric.chatagent
        .sendMessage(f"remix {genre}"),
      interval=1800
    )
đŸŽĩ
DJ Tool
Automated remix generation
class FluxKlein(RelectricTool):
  def build_ui(self):
    with ui.Column():
      self.prompt = ui.Textbox()
      self.img = ui.Image()
      self.btn = ui.Button("Generate")
      self.btn.click(self.run)
đŸ–ŧī¸
FLUX.2 Klein
Text-to-image generation
class GodotPlaytest(RelectricTool):
  @RelectricTool.function
  def run_playtest(self, path):
    relectric.terminal.execute(
      f"godot --path {path}")
    shot = relectric.workspace.readFile(
      "screenshot.png")
🎮
Godot Playtest
VLM visual game testing
class MobileAutomation(RelectricTool):
  @RelectricTool.function
  def run_task(self, instruction):
    relectric.terminal.execute(
      "adb shell screencap")
    relectric.chatagent.sendMessage(
      instruction, images=[img])
📱
Mobile Automation
ADB + VLM device control
class ACEStepCover(RelectricTool):
  @RelectricTool.function
  def generate_cover(self, audio):
    result = self.pipeline(
      audio, lyrics=self.lyrics,
      strength=0.85,
      variants=3)
🎤
ACE-Step Cover
AI music cover generation
class WebSearch(RelectricTool):
  @RelectricTool.function
  def search(self, query):
    results = relectric.browser.search(
      query, max_results=10)
    return [{"title": r.title,
      "url": r.url} for r in results]
🔍
Web Search
DuckDuckGo results extraction
class DJTool(RelectricTool):
  @RelectricTool.function
  def start_remixing(self, genre):
    relectric.automation.queueJob(
      lambda: relectric.chatagent
        .sendMessage(f"remix {genre}"),
      interval=1800
    )
đŸŽĩ
DJ Tool
Automated remix generation
class FluxKlein(RelectricTool):
  def build_ui(self):
    with ui.Column():
      self.prompt = ui.Textbox()
      self.img = ui.Image()
      self.btn = ui.Button("Generate")
      self.btn.click(self.run)
đŸ–ŧī¸
FLUX.2 Klein
Text-to-image generation
class GodotPlaytest(RelectricTool):
  @RelectricTool.function
  def run_playtest(self, path):
    relectric.terminal.execute(
      f"godot --path {path}")
    shot = relectric.workspace.readFile(
      "screenshot.png")
🎮
Godot Playtest
VLM visual game testing
class MobileAutomation(RelectricTool):
  @RelectricTool.function
  def run_task(self, instruction):
    relectric.terminal.execute(
      "adb shell screencap")
    relectric.chatagent.sendMessage(
      instruction, images=[img])
📱
Mobile Automation
ADB + VLM device control
class ACEStepCover(RelectricTool):
  @RelectricTool.function
  def generate_cover(self, audio):
    result = self.pipeline(
      audio, lyrics=self.lyrics,
      strength=0.85,
      variants=3)
🎤
ACE-Step Cover
AI music cover generation
class WebSearch(RelectricTool):
  @RelectricTool.function
  def search(self, query):
    results = relectric.browser.search(
      query, max_results=10)
    return [{"title": r.title,
      "url": r.url} for r in results]
🔍
Web Search
DuckDuckGo results extraction
class GodotProject(RelectricTool):
  @RelectricTool.function
  def create_project(self, name):
    relectric.workspace.writeFile(
      f"{name}/project.godot",
      self._template(name))
    return f"Created {name}"
đŸ•šī¸
Godot Project
Game project scaffolding
class LyricsEditor(RelectricTool):
  @RelectricTool.function
  def rewrite(self, lyrics, theme):
    prompt = f"Rewrite as {theme}"
    result = relectric.llamacpp.prompt(
      prompt + "\n" + lyrics,
      temperature=0.9)
    return result
âœī¸
Lyrics Editor
LLM-powered lyrics rewriting
class GPUMonitor(RelectricTool):
  def build_ui(self):
    with ui.Column():
      self.info = ui.JSON()
      self.btn = ui.Button("Refresh")
  @RelectricTool.function
  def get_gpu_info(self):
    return execute("nvidia-smi")
🧠
GPU Monitor
VRAM & utilisation tracking
class ScreenshotTool(RelectricTool):
  @RelectricTool.function
  def capture(self, region=None):
    img = pyautogui.screenshot(
      region=region)
    path = "capture.png"
    img.save(path)
    return path
📸
Screenshot
Desktop screen capture
class YTDLPTool(RelectricTool):
  @RelectricTool.function
  def download(self, url):
    out = relectric.terminal.execute(
      f"yt-dlp -x --audio-format "
      f"mp3 -o out.mp3 {url}")
    return out["stdout"]
âŦ‡ī¸
YT-DLP
YouTube audio downloader
class ParodyGenerator(RelectricTool):
  @RelectricTool.function
  def generate(self, song, theme):
    relectric.chatagent.sendMessage(
      f"Download '{song}'")
    relectric.chatagent.sendMessage(
      f"Rewrite lyrics: {theme}")
    relectric.chatagent.sendMessage(
      "Generate the cover")
🎭
Parody Generator
Multi-step agent orchestration
class GodotProject(RelectricTool):
  @RelectricTool.function
  def create_project(self, name):
    relectric.workspace.writeFile(
      f"{name}/project.godot",
      self._template(name))
    return f"Created {name}"
đŸ•šī¸
Godot Project
Game project scaffolding
class LyricsEditor(RelectricTool):
  @RelectricTool.function
  def rewrite(self, lyrics, theme):
    prompt = f"Rewrite as {theme}"
    result = relectric.llamacpp.prompt(
      prompt + "\n" + lyrics,
      temperature=0.9)
    return result
âœī¸
Lyrics Editor
LLM-powered lyrics rewriting
class GPUMonitor(RelectricTool):
  def build_ui(self):
    with ui.Column():
      self.info = ui.JSON()
      self.btn = ui.Button("Refresh")
  @RelectricTool.function
  def get_gpu_info(self):
    return execute("nvidia-smi")
🧠
GPU Monitor
VRAM & utilisation tracking
class ScreenshotTool(RelectricTool):
  @RelectricTool.function
  def capture(self, region=None):
    img = pyautogui.screenshot(
      region=region)
    path = "capture.png"
    img.save(path)
    return path
📸
Screenshot
Desktop screen capture
class YTDLPTool(RelectricTool):
  @RelectricTool.function
  def download(self, url):
    out = relectric.terminal.execute(
      f"yt-dlp -x --audio-format "
      f"mp3 -o out.mp3 {url}")
    return out["stdout"]
âŦ‡ī¸
YT-DLP
YouTube audio downloader
class ParodyGenerator(RelectricTool):
  @RelectricTool.function
  def generate(self, song, theme):
    relectric.chatagent.sendMessage(
      f"Download '{song}'")
    relectric.chatagent.sendMessage(
      f"Rewrite lyrics: {theme}")
    relectric.chatagent.sendMessage(
      "Generate the cover")
🎭
Parody Generator
Multi-step agent orchestration

Tool-First Architecture

A dual-interface system: every tool has a UI and agent-callable functions.

Dual Interface

Every tool exposes both a human-facing UI and agent-callable functions. Use it manually or let the AI orchestrate.

Agent Orchestration

The chat agent chains tools into multi-step workflows — build a game, playtest it, fix bugs, all autonomously.

Self-Hosted & Local

Runs on your hardware with local LLM inference via llama.cpp. Full control over data, GPU, and execution.

How It Works

Three layers working together

01

Electron Desktop

The Electron shell manages windows, the local LLM server, terminal sessions, browser proxies, file system access, and managing conversations.

02

Python Runtime

A FastAPI WebSocket server auto-loads tools from .tools/, manages job queues, watches for hot-reload, and streams stdout to connected clients.

03

SDK & Tools

Tools are Python classes with a Gradio-like UI and @RelectricTool.function decorated methods. The host bridge proxies calls between Python tools and the desktop.

What You Can Build

Real tools built by the community, not toy demos

🎮

Game Development

Full Godot game pipeline: project scaffolding, scene building, asset management, automated playtesting with VLM visual assertions, and iterative bug fixing.

godot_project godot_scene godot_playtest godot_orchestrator
đŸŽĩ

Music Production

AI music covers with ACE-Step, lyrics editing via LLM, YouTube downloads, audio playback, and automated DJ job queuing for continuous remix generation.

acestep_cover lyrics_editor dj_tool ytdlp_tool
📱

Mobile Automation

ADB device control, automated UI testing with VLM-based visual assertions, screen capture & analysis, and natural-language task execution on Android.

android_device mobile_automation screenshot_tool
🎨

Image Generation

Text-to-image with FLUX.2 Klein, img2img support, configurable inference steps and guidance, and workspace-relative output management.

flux_klein

The Relectric SDK

Everything your tool needs, built in

đŸ—‚ī¸

relectric.workspace

Read, write, search, list, rename, copy, and delete files across the workspace.

đŸ’ģ

relectric.terminal

Execute shell commands with stdout/stderr capture and working directory control.

🌐

relectric.browser

Web search via DuckDuckGo with configurable result limits and timeouts.

🤖

relectric.chatagent

Send messages (with images) to the AI agent, manage conversations programmatically.

⚡

relectric.llamacpp

Start/stop/query the local llama.cpp server, send prompts with temperature control.

🔄

relectric.automation

FIFO job queue with blocking semaphore, interval repeats, persistence, and job management.

âš™ī¸

relectric.settings

Get and set layout configuration and workspace settings programmatically.

đŸ“Ļ

Hot Reload

Edit tool source — the runtime auto-reloads and broadcasts UI updates to all clients.

Platform Tools

Tools available on the platform

View all tools →
🔍

Web Search

DuckDuckGo search with result extraction

📝

Chat Agent

Multimodal LLM with tool calling & context

đŸŽĩ

ACE-Step Cover

AI music cover generation with lyrics

đŸ–ŧī¸

FLUX.2 Klein

Text-to-image & img2img generation

🎮

Godot Suite

Full game dev: scaffold, build, test, iterate

📱

Android Automation

ADB control with VLM visual testing

🧠

GPU Monitor

NVIDIA/AMD VRAM & utilisation tracking

🔄

Automation

FIFO job queue with blocking & repeats