framework_eng/skills/tool-usage/browser-ui/gui-control/SKILL.md
Managing 1C GUI via X11. The skill teaches the agent to detect 1C windows (including error dialogs), take screenshots, and simulate input (Enter, Escape) to control the interface without human involvement.
npx skillsauth add steelmorgan/1c-agent-based-dev-framework gui-controlInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
X11 control is an action, not diagnostics. Use only when a GUI dialog is detected that blocks the normal shutdown of the database. Diagnose the cause through the event log (event-log-analysis).
For Security Warning, X11 window metadata may be incomplete. Rely on the sequence: event log → screenshot → keyboard actions.
| Trigger | Action |
|---------|----------|
| No events in the event log after test_start_time | Check whether a GUI dialog is hanging |
| Window title: "Error" / "Warning" | Screenshot → close the dialog → analyze the event log |
| The database does not shut down after tests | Close with Escape + Enter |
| The event log shows Security Warning on EPF | Visually verify; do not act blindly based on titles |
import os
os.environ['DISPLAY'] = ':99' # before importing Xlib and PIL
import os
os.environ['DISPLAY'] = ':99'
from Xlib import display
d = display.Display()
root = d.screen().root
error_windows = []
for win in root.query_tree().children:
name = win.get_wm_name()
wm_class = win.get_wm_class()
if wm_class and '1cv8' in wm_class:
if name and any(kw in name for kw in ['Ошибка', 'Предупреждение', 'Error']):
error_windows.append({'id': win.id, 'name': name})
print(error_windows)
Sequence: Enter (close the dialog) → Escape (close) → Enter (confirm). After that, wait 2-3 seconds and check again using step 1.
import os, time
os.environ['DISPLAY'] = ':99'
from Xlib import display, X
from Xlib.ext.xtest import fake_input
def send_key(d, keycode, delay=0.3):
fake_input(d, X.KeyPress, keycode)
d.flush()
time.sleep(delay)
fake_input(d, X.KeyRelease, keycode)
d.flush()
time.sleep(delay)
d = display.Display()
ENTER = d.keysym_to_keycode(0xFF0D)
ESCAPE = d.keysym_to_keycode(0xFF1B)
send_key(d, ENTER)
time.sleep(1)
send_key(d, ESCAPE)
time.sleep(1)
send_key(d, ENTER)
import os
os.environ['DISPLAY'] = ':99'
from PIL import ImageGrab
from Xlib import display
d = display.Display()
root = d.screen().root
for win in root.query_tree().children:
name = win.get_wm_name()
wm_class = win.get_wm_class()
if wm_class and '1cv8' in wm_class:
geom = win.get_geometry()
img = ImageGrab.grab(bbox=(geom.x, geom.y, geom.x + geom.width, geom.y + geom.height))
path = f'/tmp/onec_{win.id}.png'
img.save(path)
print(f'Screenshot saved: {path}')
search_event_log(from=test_start_time, limit=20)
├── there are events, no Error → wait
├── there is Error → screenshot → close → analyze the event log
└── no events → detect windows
├── window with an error → screenshot → close
└── no windows → the database did not start
| Error | Workaround |
|--------|---------------|
| DISPLAY is not set | os.environ['DISPLAY'] = ':99' before imports |
| python-xlib is not installed | pip install python-xlib |
| PIL.ImageGrab does not work | pip install Pillow |
| Windows are not found, but the process exists | The GUI has not been rendered yet - wait 2-3 seconds |
| XTEST is unavailable | Xvfb with the -extensions XTEST flag |
| Capability | Purpose |
|------------|------------|
| python-xlib | Reading window metadata, simulating input |
| PIL ImageGrab | Screenshot of the framebuffer or a window |
tools
Diagnostics for Vanessa Automation runs. Use when a feature scenario failed, artifacts were not created, or you need to classify a failure after launch.
tools
Creating and refining Vanessa Automation feature scenarios based on real project requirements. Use when you need to write or update a scenario test, not just run it.
tools
--- name: v8-session-manager description: Use when working with the 1С session manager (v8-session-manager) - launch, configuration, connecting 1С clients, reading session_list, calling proxied MCP-tools from 1С extensions, diagnostics. Triggers: mention of `v8-session-manager`, `session_list`, 1С extension MCP showcase, error “no active sessions” / “session_id required”, connecting a client to the manager via `mcpMode=ws`. provides_capabilities: # Built-in manager tools — always available whi
tools
Use when Codex needs to manage v8-runner on local 1C projects through the CLI: configure v8project.yaml, initialize infobases or EDT workspaces, build sources from Designer or EDT, run syntax checks and tests, dump infobase changes, convert source formats, load or export artifacts, launch 1C clients, or choose safe 1C automation command sequences.