Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Stelekit Ui Skill

ASecurity

Desktop UI automation for SteleKit Compose app. Launch app, take screenshots, click buttons, type text, verify UI state. Like playwright but for the SteleKit desktop app. Use when user wants to test SteleKit UI, debug visual issues, verify flows work, or automate desktop interaction.

8 stars
0 votes
0 copies
0 views
Added 9/20/2026
toolspythonbash

Works with

cli

Security Analysis

A100/100

Scanned 9/20/2026

Install to Claude Code

$npx -y skills add tstapler/dotfiles --skill stelekit-ui-skill --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Stelekit Ui Skill?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Stelekit Ui Skill
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tstapler-stelekit-ui-skill/badge)](https://www.skillsdirectory.com/skills/tstapler-stelekit-ui-skill)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: stelekit-ui-skill
description: Desktop UI automation for SteleKit Compose app. Launch app, take screenshots, click buttons, type text, verify UI state. Like playwright but for the SteleKit desktop app. Use when user wants to test SteleKit UI, debug visual issues, verify flows work, or automate desktop interaction.
---

**IMPORTANT - Path Resolution:**
This skill can be installed in different locations. Before executing any commands, determine the skill directory based on where you loaded this SKILL.md file, and use that path in all commands below. Replace `$SKILL_DIR` with the actual discovered path.

Common installation paths:

- Manual global: `~/.claude/skills/stelekit-ui-skill`
- Dotfiles: `~/dotfiles/.claude/skills/stelekit-ui-skill`
- Project-specific: `<project>/.claude/skills/stelekit-ui-skill`

# SteleKit Desktop UI Automation

General-purpose desktop automation for the SteleKit Compose Desktop app. Write Python scripts to launch the app, take screenshots, click, type, and verify UI state.

**CRITICAL WORKFLOW - Follow these steps in order:**

1. **Run setup if tools missing** - On first use or if xdotool/wmctrl/scrot are absent:

   ```bash
   python3 $SKILL_DIR/setup.py
   ```

2. **Write scripts to /tmp** - NEVER write scripts to the skill directory; always use `/tmp/stelekit-ui-*.py`

3. **Execute via run.py** - Always run scripts through the executor:

   ```bash
   python3 $SKILL_DIR/run.py /tmp/stelekit-ui-script.py
   ```

4. **Scripts import helpers** - Every script starts with `from helpers import *` (run.py adds `lib/` to sys.path automatically)

## How It Works

1. You describe what you want to test or automate
2. I write a Python script in `/tmp/stelekit-ui-*.py`
3. I execute it via: `python3 $SKILL_DIR/run.py /tmp/stelekit-ui-script.py`
4. Results printed to console; screenshots saved to `/tmp/`
5. I read screenshots with the Read tool to see what is on screen
6. I take follow-up screenshots to verify interactions worked

## Setup (First Time)

```bash
python3 $SKILL_DIR/setup.py
```

This installs `xdotool`, `wmctrl`, and `scrot` via pacman (Arch/Manjaro) or brew (macOS). Only needed once.

## Execution Pattern

**Step 1: Check if app is running and take initial screenshot**

```python
# /tmp/stelekit-ui-check.py
from helpers import *

wid = window_id()
if wid:
    print(f"SteleKit window found: {wid}")
    focus_stelekit()
else:
    print("SteleKit not running - launching...")
    launch_app()

path = screenshot('/tmp/stelekit-current.png')
print(f"Screenshot saved to {path}")
```

**Step 2: Execute from skill directory**

```bash
python3 $SKILL_DIR/run.py /tmp/stelekit-ui-check.py
```

**Step 3: Read the screenshot**

Use the Read tool to view `/tmp/stelekit-current.png` and see the current app state.

**Step 4: Interact based on what you see**

```python
# /tmp/stelekit-ui-interact.py
from helpers import *
focus_stelekit()
click_in_window(300, 400)       # click at (300, 400) relative to window top-left
type_text("My new page")
key("Return")
screenshot('/tmp/stelekit-after.png')
```

## Common Patterns

### Launch App and Screenshot

```python
# /tmp/stelekit-ui-launch.py
from helpers import *

if not window_id():
    launch_app(timeout=20)
else:
    focus_stelekit()

path = screenshot('/tmp/stelekit-home.png')
print(f"Screenshot: {path}")
```

### Click a Button by Approximate Location

```python
# /tmp/stelekit-ui-click.py
from helpers import *

focus_stelekit()
geo = window_geometry()
print(f"Window at x={geo[0]} y={geo[1]} w={geo[2]} h={geo[3]}")

# Take screenshot first to identify coordinates visually
screenshot('/tmp/stelekit-before-click.png')

# Click at a position within the window (relative coords)
click_in_window(x=150, y=80)
import time; time.sleep(0.5)

screenshot('/tmp/stelekit-after-click.png')
```

### Open Command Palette (Ctrl+K)

```python
# /tmp/stelekit-ui-cmd-palette.py
from helpers import *

focus_stelekit()
key("ctrl+k")
import time; time.sleep(0.3)
screenshot('/tmp/stelekit-cmd-palette.png')
```

### Search for a Page

```python
# /tmp/stelekit-ui-search.py
from helpers import *

focus_stelekit()
key("ctrl+k")              # open command palette
import time; time.sleep(0.3)
type_text("My Page Name")
time.sleep(0.3)
screenshot('/tmp/stelekit-search.png')
key("Return")              # confirm selection
time.sleep(0.5)
screenshot('/tmp/stelekit-navigated.png')
```

### Navigate to Journals

```python
# /tmp/stelekit-ui-journals.py
from helpers import *

focus_stelekit()
geo = window_geometry()
# Sidebar is on the left — Journals is typically near the top
# Take screenshot first to confirm layout
screenshot('/tmp/stelekit-sidebar.png')
```

### Type Into a Block Editor

```python
# /tmp/stelekit-ui-type.py
from helpers import *

focus_stelekit()
# Click on a block to focus it, then type
click_in_window(x=400, y=300)
import time; time.sleep(0.2)
type_text("Hello from automation")
time.sleep(0.2)
screenshot('/tmp/stelekit-typed.png')
```

## Inline Execution (Quick Tasks)

For simple one-off tasks, pass inline code as a string:

```bash
python3 $SKILL_DIR/run.py "
from helpers import *
focus_stelekit()
screenshot('/tmp/quick.png')
print('Done')
"
```

## Available Helpers

```python
from helpers import *

# Window management
wid = window_id()                     # Find SteleKit window ID (None if not running)
focus_stelekit()                      # Bring SteleKit to front
launch_app(wait=True, timeout=15)     # Launch if not running, wait for window
wait_for_window(timeout=15)           # Wait for window to appear, return ID
geo = window_geometry()               # Returns (x, y, width, height)

# Screenshots
path = screenshot('/tmp/out.png')     # Full screen screenshot
path = screenshot('/tmp/win.png', window='stelekit')  # Window screenshot

# Mouse & keyboard
click(x, y)                           # Click at absolute screen coordinates
click_in_window(x, y)                 # Click relative to SteleKit window top-left
type_text("hello world")              # Type text into focused window
key("ctrl+k")                         # Press key combo (xdotool keysym format)
key("Return")
key("Escape")
key("ctrl+shift+f")
```

## Tips

- **Always screenshot first** - Before clicking anything, take a screenshot and read it to understand the current UI state
- **Use relative coords** - `click_in_window(x, y)` is safer than `click(x, y)` since it offsets by window position
- **Wait after actions** - Use `import time; time.sleep(0.3)` after clicks/keystrokes before screenshotting
- **Check window exists** - Always call `window_id()` or `focus_stelekit()` before interacting
- **xdotool key syntax** - Use `ctrl+k`, `Return`, `Escape`, `Tab`, `ctrl+shift+p`, etc.

## Troubleshooting

**xdotool not found:**
```bash
python3 $SKILL_DIR/setup.py
```

**Window not found:**
- Make sure SteleKit is running: `python3 $SKILL_DIR/run.py "from helpers import *; launch_app()"`
- The window title pattern defaults to `stelekit` (case-insensitive)

**Screenshot is blank or wrong window:**
- Use `screenshot('/tmp/full.png')` for full screen instead of window-specific capture

**Click lands in wrong place:**
- Take a screenshot first, read it, identify coordinates visually, then click

## Example Usage

```
User: "Launch SteleKit and show me the current state"

Claude: I'll launch SteleKit and take a screenshot.
[Writes: /tmp/stelekit-ui-launch.py with launch_app() + screenshot()]
[Runs: python3 $SKILL_DIR/run.py /tmp/stelekit-ui-launch.py]
[Reads: /tmp/stelekit-home.png with the Read tool]
Here's what SteleKit looks like right now...
```

```
User: "Click the New Page button"

Claude: Let me first take a screenshot to find the button location.
[Takes screenshot, reads it]
I can see the New Page button at approximately (120, 45) in the window.
[Writes: click_in_window(120, 45) + screenshot to verify]
[Runs script, reads result screenshot]
Clicked successfully - new page dialog is now open.
```

Attribution

tstaplertstapler
View sourceMore from tstapler →
SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Related Skills

ucoz-landing-skill

Playbook for creating and editing uCoz landing pages via MCP tools (`templates_tool`, `ftp_tool`, `modules_tool`). Use for tasks such as: "build a landing page", "update the homepage as a landing page", "create a promo page on the homepage", "add a lead form / menu / SEO to the homepage". Homepage: `page_list`, `page_get`; first publish — `page_update` with full `page_tmpl`; HTML edits after generation — `patch_template` (module_id=2, template_id=1), not `update_template`. Activate the mail f...

107 votes

Paperclip

Interact with the Paperclip control plane API for task coordination and governance. Use when checking assignments, updating issue status, posting comments, delegating work, managing routines, or calling Paperclip API endpoints.

805541 votes

Instantly Rdsthomas Mission Control

Instantly.ai cold email outreach API - manage campaigns, leads, accounts, and analytics. Use for cold email automation, lead management, campaign creation/monitoring, and email account warmup.

761 votes

Daw Music

Digital Audio Workstation usage, music composition, interactive music systems, and game audio implementation for immersive soundscapes.

761 votes

Caveman Compress

Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format to save input tokens. Preserves all technical substance, code, URLs, and structure. Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md. Trigger: /caveman-compress FILEPATH or "compress memory file"

1023330 votes
View all in tools →