update skill

This commit is contained in:
Oleg Proskurin 2026-06-07 00:51:41 +07:00
parent 62ec508b07
commit 5f8d3330f7
2 changed files with 71 additions and 11 deletions

View File

@ -24,27 +24,42 @@ Do NOT use this skill for:
## Setup overview
- **Launcher script**: `scripts/launch-chrome.sh` — starts Chrome with `--remote-debugging-port=9222` against the local profile copy at `.chrome/Default`.
- **Launcher script**: `scripts/launch-chrome.sh` — starts Chrome with `--remote-debugging-port=9222` against the local profile copy at `.chrome/`. The script is idempotent: if Chrome is already running it exits immediately.
- **Profile copy**: `.chrome/` is a fork of Oleg's `Profile 1` (the `usulpro@gmail.com` profile). Logged-in cookies live here. The directory is gitignored.
- **MCP server**: `chrome-devtools` is configured in `.mcp.json` with `--browserUrl=http://127.0.0.1:9222`, i.e. it attaches to the already-running Chrome rather than launching its own.
You do not launch Chrome yourself — Oleg starts it manually via the script. Your job is to detect whether it's running and to use the MCP tools to drive it.
## Standard workflow
### 1. Verify Chrome is running and attached
### 1. Ensure Chrome is running and attached
Before any browser action, confirm the debug port is live:
Before any browser action, confirm the debug port is live, and launch Chrome automatically if it isn't:
```bash
curl -sf http://127.0.0.1:9222/json/version >/dev/null && echo OK || echo DOWN
```
If `DOWN`, tell Oleg:
**If `DOWN`** — launch the script in the background and poll until Chrome is ready:
> Chrome не запущен с debug-портом. Запусти `./scripts/launch-chrome.sh` и скажи когда готово.
```bash
# Launch Chrome in background (script uses exec, so backgrounding the script is correct)
nohup /projects/my-projects/cv-2026/scripts/launch-chrome.sh >/tmp/chrome-launch.log 2>&1 &
Do NOT try to launch Chrome yourself — the script blocks the terminal and the user is the one who controls the browser window.
# Poll up to 15 seconds
for i in $(seq 1 15); do
sleep 1
curl -sf http://127.0.0.1:9222/json/version >/dev/null && echo "Chrome up after ${i}s" && break
echo "Waiting... ${i}s"
done
curl -sf http://127.0.0.1:9222/json/version >/dev/null || echo "FAILED"
```
If Chrome does not respond after 15 seconds, stop and report:
> Chrome не запускается. Посмотри `/tmp/chrome-launch.log` и проверь, что `.chrome/` существует.
If the launcher prints `Error: .chrome/ does not exist`, stop immediately — there is no profile to use and you cannot create one.
Do NOT try to sign Oleg in, copy profiles, or work around a missing `.chrome/` directory.
### 2. Open / select the right page
@ -100,7 +115,7 @@ When the user asks "what fields does this application form want?", use `take_sna
| Symptom | Likely cause | Action |
|---------|--------------|--------|
| `curl http://127.0.0.1:9222/json/version` fails | Chrome not launched with debug port | Ask Oleg to run `./scripts/launch-chrome.sh` |
| `curl http://127.0.0.1:9222/json/version` fails | Chrome not launched with debug port | Run `./scripts/launch-chrome.sh` in background and poll (see step 1) |
| `new_page` times out but the tab appears in `list_pages` | Slow site / heavy SPA | Continue — check the final URL via `list_pages` |
| Final URL is `/login`, `/checkpoint`, `/signin` | Not signed in | **Stop. Tell Oleg.** Don't try to log in for him. |
| Feed/list shows only the first few items | Lazy loading hasn't fired | Scroll the inner container, not `window` |
@ -109,7 +124,7 @@ When the user asks "what fields does this application form want?", use `take_sna
## Don'ts
- **Don't launch Chrome yourself** (the launcher blocks the terminal; Oleg owns the window).
- **Don't launch Chrome interactively** — always use `nohup ... &` so it detaches from the terminal.
- **Don't try to sign Oleg in** when you hit a login wall — just report and wait.
- **Don't submit forms, click "Apply", send messages, or post anything** unless explicitly instructed.
- **Don't loop on bot-detection pages** — one detection means stop.
@ -118,7 +133,7 @@ When the user asks "what fields does this application form want?", use `take_sna
## Example: "read first N LinkedIn posts"
1. `curl -sf http://127.0.0.1:9222/json/version`confirm Chrome up.
1. `curl -sf http://127.0.0.1:9222/json/version`if DOWN, launch via `nohup ./scripts/launch-chrome.sh &` and poll until up.
2. `list_pages` — is LinkedIn already open? If not, `new_page(https://www.linkedin.com/feed/)`.
3. Verify final URL contains `/feed/` and not `/login`.
4. `evaluate_script`: find `<main>`, step `scrollTop += 1200` with 800ms waits until enough `"Feed post"` h2s have appeared.

View File

@ -1,4 +1,15 @@
{
"JS_RemoteJobs": {
"lang": "en",
"priority": "p1",
"exclude": ["kafka", "golang", "kotlin", "android", "swift", " rust ", " java "]
},
"notificaJobs_nodeJS": {
"lang": "en",
"priority": "p1",
"exclude": ["kafka", "golang", "kotlin", "android", "swift", " rust "]
},
"jaabz_com": {
"lang": "en",
"priority": "p1",
@ -38,6 +49,28 @@
"include": [["typescript", "javascript", " react", "node.js", "nodejs", "fullstack", "full-stack", "ai engineer", "tech lead", "techlead"]],
"exclude": ["mental health", "marketing", "sales", "designer", "manager", "recruit", "kafka", "golang", "kotlin", "android", "swift"]
},
"ai_dev_job": {
"lang": "ru",
"priority": "p2"
},
"jsdevjob": {
"lang": "ru",
"priority": "p2",
"include": [["react", "javascript", "typescript", "frontend", "fullstack", "full-stack", " llm", " ai engineer"]],
"exclude": ["kafka", "golang", "kotlin", "android", "swift", "курс ", "вебинар", "конкурс", "#резюме", "#resume"]
},
"itdevjobs": {
"lang": "mixed",
"priority": "p2",
"include": [["#remote"], ["#typescript", "#javascript", "#react", "#fullstack"]],
"exclude": ["kafka", "golang", "kotlin", "android", "swift", "#резюме", "#resume", "#cv"]
},
"serbia_jobs": {
"lang": "en",
"priority": "p2",
"include": [["#vacancy", "#вакансия"], ["frontend", "fullstack", "full-stack", "javascript", "typescript", " react", "node.js", "nodejs", "ai engineer", " llm", "tech lead"]],
"exclude": ["kafka", "golang", "kotlin", "android", "swift", " java ", "#cv", "#resume", "#резюме", "#ищуработу", "sales manager", "marketing"]
},
"javascript_jobs_feed": {
"lang": "ru",
"priority": "p2"
@ -79,6 +112,18 @@
"exclude": ["kafka", "golang", "kotlin", "android", "swift", "#резюме", "#resume", "#cv", "#ищуработу"]
},
"devsunite": {
"lang": "en",
"priority": "p3",
"include": [["javascript", "typescript", " react", "node.js", "nodejs", "fullstack", "full-stack"]],
"exclude": ["kafka", "golang", "kotlin", "android", "swift", " java ", " rust ", "php", "devops", "qa", "sales", "marketing", "designer", "cloud engineer", "aws engineer"]
},
"it_jobs_cyprus": {
"lang": "ru",
"priority": "p3",
"include": [["#vacancy", "#вакансия"], ["javascript", "typescript", " react", "node.js", "nodejs", "fullstack", "full-stack", "frontend", "ai engineer", " llm"]],
"exclude": ["kafka", "golang", "kotlin", "android", "swift", " java ", "#cv", "#resume", "#резюме", "#ищуработу", "igaming", "iGaming", "sales", "marketing", "devops", "manual test", "qa engineer"]
},
"devops_jobs": {
"lang": "ru",
"priority": "p3",