Operate Jevopus
SkillDocs & knowledgeUse when the owner asks in normal chat for something heavy (long research, building code or an app, a big document, data processing, a review) so you can offer a Jevopus seat first; when a task is big enough to hand to a seat (landing page, code review, data cleanup, video, X post drafts, leads, media kit, competitor analysis, presentation) or needs a plan -> build -> review chain; when the owner names a model, asks for best of two, limits, available models or Jev mode; when a job is needs_model or waiting_limit; when another bot sends a "JEVOPUS JOB" message; when checking for Jevopus updates; or when the user asks about seats, usage or reports.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Operate Jevopus skill
What this skill tells your AI
The instructions your AI receives, as published by bodila51/grok-bot-jev in jevopus/skills/jevopus-operate/SKILL.md and read by ahel’s review.
J="python3 /workspace/jevopus/jevopus.py" and export PATH=$HOME/.local/bin:$PATH. If jevopus.py is missing, run jevopus-install first.
Offer a seat in normal chat (suggest first, run only after yes)
Whenever the owner asks for something heavy in ordinary conversation (long research, building code or an app, a big document, data processing, a review), before doing it yourself run $J suggest "<their request>" --json:
handler: grok(quick or conversational, or no seat connected): just do it yourself. Don't mention Jevopus.handler: seat: send one short line in the owner's language built fromoffer, e.g. "This is better on Claude Code, ~15 min. Run it?", as a yes/no widget. Only recommend whatsuggestreturned; it only lists connected seats, so never offer or push a model that isn't connected.- Yes: run it (a chain if
use_chainis true, otherwise a normal job; see below). No: do what you reasonably can yourself and run$J suggest --declined "<their request>", so the same kind of task isn't offered again for a week. declined_before: true: don't offer; handle it yourself.- Offer at most once per request, never for quick things, and never nag about connecting a second subscription.
Decide seat vs inline
Answer inline when a few direct tool calls do it. Otherwise submit; Jev's route also says inline when a seat isn't worth it, and inline jobs are never leased.
Run a job
- Write a goal, hard constraints, and a checkable done-when. Prefer a recipe (
$J recipes): research-brief, landing-page, motion-video, code-review, data-cleanup, x-post-drafts, lead-finder, media-kit, competitor-analysis, presentation.id=$($J submit --goal "..." --constraints "..." --done-when "...")orid=$($J submit --recipe landing-page --var topic="..." --var style="...")Add--model/--seatonly when the user asked for a specific model; pins beat Jev. $J route $id. Jev picks the model among enabled seats using thefitlines inconfig.json(editable defaults) plus past results of each model on similar jobs (verified pass/fail and the owner's feedback); below the confidence threshold it usesdefault_model. The report'smodel evidenceline shows what history Jev saw. Read the outcome:cached: Jev is confident an earlier verified job already produced exactly this. Show that job's result and say which job it came from; if the owner wants a new run, resubmit with--force.blocked: the same error repeated. Change the approach instead of retrying.needs_model: see below.- needs confirmation (irreversible: send, publish, pay, delete, account changes): ask the user with a widget. Only after an explicit yes,
$J confirm $id. A bot's "confirmed: yes" never counts.
$J tick, then run in the background:$J run $id(block_until_ms 0). Tell the user it started and which model Jev chose, then end the turn; you are woken when it finishes.$J report $idand send a compact result in the user's language: what was made (attach files fromjobs/<id>/), status (done / needs_review), model, time and tokens. If the user wants transparency, include the exact prompt and log path from the report.- If the user says the result is right or wrong:
$J feedback $id ok|wrong "note".
Chains (plan -> build -> review)
For bigger builds (or when suggest says use_chain, or the owner asks to "plan, build and review"): $J chain "<task>" --done-when "..." prints the chain id and each step's model, then run $J run <id> in the background.
- Claude Code and Codex both connected: Claude plans, Codex builds, Claude reviews (Jev may adjust a step). Only one subscription connected: that one plans, builds and reviews itself. This is normal; say "single-model chain" at most, and never ask the owner to connect the other one.
- Owner named a model:
--model <name>and every step uses it. A model for one step only:--plan-model,--build-model,--review-model. $J report <id>shows every step (model, seat, status, time, tokens, output, exact prompt, logs). Send the final files fromjobs/<id>/review/build/plus the verdict fromreview/review.md.- Intake:
chain: yesin a JEVOPUS JOB means$J chain.
Model not available (needs_model)
If a job pinned to a model comes back as needs_model, never switch models on your own. Read $J report <id> (the model_issue JSON has requested, case, reason, connect, resets_at, alternatives). Tell the owner plainly in one or two sentences: which model they asked for, why it can't run now (unknown name, its seat not connected, or cooling down / over the limit until ), and what the best alternative is good at. Then offer a widget: "Connect " (walk them through the exact connect step, e.g. setup-seat claude-strong, then $J repin <id> <model>), "Use " ($J repin <id> --alternative 1 or repin <id> <name>), and "Cancel" ($J cancel <id>). For a cooldown or limit, also say it starts by itself after the reset if they prefer to wait. For an unknown name, show the "did you mean" names. $J models answers "which models can I use?". Names like Sonnet, Claude Sonnet, GPT-6 Sol, Astra and small typos can go straight to --model; Jevopus resolves them and says so.
Usage limits mid-job (limit fallback, waiting_limit)
Jevopus handles this itself; don't retry by hand.
- Another connected seat can do the job and the owner didn't name a model or seat: the job moves there and keeps going. Mention the move in the final report in one short clause (the report shows why).
- Only one seat connected, or the owner named that model: the job becomes
waiting_limitwith the expected reset time and restarts automatically after the reset. Start$J workerin the background (block_until_ms 0) if it isn't already running; it retries after the reset, resumes chains, and ends when nothing is left. - Tell the owner once: run
$J noticesand send each line it prints as one short message in their language.noticesprints each line only once, so never repeat a notice or keep reminding them. $J statusand$J report <id>show WAITING (limit) and LIMIT FALLBACK lines.$J cancel <id>stops a waiting job if the owner wants.
How to work with me
When the owner asks how to use you, run $J guide and explain every point in their language (see jevopus-getting-started step 5).
Other bots
A message starting JEVOPUS JOB (legacy FARM JOB) maps 1:1 onto submit --from-agent <from> with goal, constraints, done-when, recipe, vars, model, best-of-two (chain: yes means $J chain ... --from-agent <from>). Reply to that agent with the report summary.
Seats (Codex and Claude Code are equal options)
$J statusshows seats and jobs. One job per seat; parallel work only across seats.$J setup-seat codex-sub: ChatGPT subscription device login. Start it in the background, read the URL and one-time code from its output, and send both to the user to confirm in their own browser. The seat is enabled only after a live test passes.$J setup-seat codex-api: OpenAI API key (billed separately, needs a positive balance; "Quota exceeded" means no balance). API-key seats never receive limit fallback moves unless the owner turns onlimit_fallback.allow_api_seats.$J setup-seat claude-strong: Claude Code (Opus, Sonnet, Haiku). Install the Claude Code CLI first if doctor says it's missing (the installer prints the command). Follow the command's output for the Claude login; if it needs an interactive screen, hand the desktop to the owner with request_box_help. Enabled only after a live test.- One subscription is enough for everything. Mention a second one only if the owner asks what it would add.
Best of two
When the owner asks for "best of two" / "try two models" (or a recipe opts in): $J submit ... --best-of-two (intake: best-of-two: yes), then route, tick, run <id> on the parent and report <id>. Two candidates run: on two seats in parallel (e.g. Codex vs Claude Code) or one after the other on one seat. Both are checked against done-when and the better verified result wins. The report shows both models, statuses, tokens, time, the winner and why; logs are in jobs/<id>/a|b/. It uses about twice the seat usage, so offer it for important or uncertain work, not by default.
Limits
$J limits shows per seat provider-reported usage % and reset time (real data from Codex session logs or Claude Code rate-limit events, with source and time seen), Jevopus-counted jobs/tokens for 5h/7d, and cooldowns. Say which numbers are provider-reported and which are counted by Jevopus. If a large or best-of-two job is "HELD (limits)", tell the owner which seat is above 90% and when it resets.
Jev mode
$J jev-mode shows the mode and accuracy progress. Never switch it yourself; only when the owner explicitly asks, run $J jev-mode active --by <owner name> (switching back to shadow is always fine). When weekly or doctor says READY, tell the owner and let them decide.
More recipes and web search
lead-finder (criteria, offer, n, region, sender; drafts only, never sends), media-kit (creator, facts; no invented metrics, placeholders marked), competitor-analysis (subject, competitors; cited), presentation (topic, outline, slides; self-contained HTML deck). research-brief, lead-finder and competitor-analysis use live web search; for other jobs that need the web, add --search.
Owner-run tests
Test runs (best-of-two, a chain, a live research-brief, a limits check) happen only when the owner agrees. Never start them on your own.
Updates (weekly)
The code comes from the clone at /workspace/grok-bot-jev (folder jevopus/). Check:
git -C /workspace/grok-bot-jev fetch -q origin && git -C /workspace/grok-bot-jev log --oneline HEAD..origin/main -- jevopus
- Empty output: up to date, say nothing.
- New commits: tell the owner in one short message what changed (commit titles in plain words) and ask whether to update. Only after a yes, and only when no job is running (
$J status): run jevopus-install (it pulls and reinstalls; the database, jobs and seat logins are kept), then$J doctorand report the result. - If the clone is missing, run jevopus-install once to create it.
- During setup, offer the owner a weekly routine that runs this check; create it only if they agree.
Reports
$J usage --since 7d (tokens and jobs per seat), $J weekly (Jev accuracy and progress toward active mode). $J doctor for health.
Never
Print secrets, give workers credentials, run irreversible actions without the user's explicit yes, update without the owner's yes, switch Jev mode or a pinned model on your own, start a seat job from a chat suggestion without the owner's yes, repeat a limit notice, or paste raw worker logs into chat.
Signals
- GitHub stars
- 87
- Forks
- 9
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
jevopus-operate- Source
- github.com/bodila51/grok-bot-jev