geopm/geopm/geopm-install
Claude Code and agent skill by geopm/geopm
- community
Checking that the SKILL.md file is still in the repository.
Install, configure, and verify GEOPM on a system under test. Use when GEOPM is missing or broken: "install GEOPM", "geopmread command not found", "geopmopt command not found", "geopmd not running", "geopmaccess permissions", "permission denied writing a control", "signal name not found", "set up geopmopt", "no controls granted". Covers distro packages from a tagged release, the geopmdpy virtual environment that geopmopt requires, source builds, container clients, access-list generation, and readiness verification. Hands off to geopm-optimize once the machine is ready.
Install
npx vskill@latest install geopm/geopm/geopm-installSKILL.md
GEOPM Install Assistant
Bring a system to the point where GEOPM signals can be read and the hardware controls a tuning campaign needs can be written by the invoking user.
When to use
- GEOPM is not installed, or
geopmread/geopmoptare not onPATH. geopmdis not running, or signal reads fail.- A control write fails, or
geopmaccessshows no controls. - The
geopm-optimizeassistant reported that the readiness gate is not met.
If the user is new to GEOPM, read Concepts before explaining anything. Signal, control, domain, session, and access list are used throughout.
The one fact that shapes most of this work
`geopmopt` is not in any tagged GEOPM release. The published geopmdpy 3.2.2 declares six console scripts and geopmopt is not among them, nor is there an optimize extra to request. So:
- A virtual environment built from the
devbranch is required, not
preferred, for any geopmopt work.
pip install 'geopmdpy[optimize]'does not produce a workinggeopmopt.
Never suggest it.
- Installing or upgrading system packages does not fix a missing
geopmopt.
Revisit this when geopmopt ships in a release; see client-venv.md.
Procedure
1. Choose the target system
Establish whether the system under test is the local machine, a remote host, or a container. Never assume it is local. Ask if it is not stated.
For a remote host, send scripts over stdin:
A non-interactive ssh HOST 'command' does not read ~/.bashrc, so proxy variables and PATH additions defined there are missing. The symptom is that pip, git, and curl produce no output and exit 124, while the same commands work when the user runs them by hand. Export the proxy explicitly in the script you send. The probe reports this as PROXY_ENV=defined_in_bashrc_but_not_exported.
Campaign trials must run on the target, never on the machine driving the install.
For containers see container.md — and prefer running the client on the host.
2. Probe
Read-only, exits 0 even when GEOPM is absent, and emits KEY=VALUE lines plus a human summary.
3. Decide
Map the probe output to exactly one path using probe-and-decide.md. The common answer is: administrator installs the release daemon, user creates a dev virtual environment.
| Path | Reference | |
|---|---|---|
| Release packages | distro-packages.md | |
| Client virtual environment | client-venv.md | |
| Development snapshot daemon | rolling-dev-packages.md | |
| Source build | source-build.md | |
| Container client | container.md |
4. Install
Confirm before anything privileged. Present the exact commands and let the user approve them.
5. Configure access
Generate a least-privilege grant rather than describing one:
It filters the requested names against what the platform supports, validates them, and prints grant and revoke commands. It executes nothing. See access-lists.md.
Validation needs no privileges, so check a proposed list before involving an administrator:
6. Verify
Report the gate status explicitly, whether it passed or failed.
Readiness gate
Hand off to the geopm-optimize assistant only when all three hold:
geopmopt --list-controlsruns and lists at least one dimension with real
(non-n/a) and numerically sane min/max/step (max > 0, min <= max, step > 0).
geopmreadreturns a plausible power reading.- At least one dimension is fully grantable: its primary control is
writable and every control geopmopt writes for it is granted -- the performance governor for cpu-freq, and the paired *_MIN_* control for uncore-freq/gpu-freq where the platform exposes it. A dimension whose primary control is writable but whose companion is missing does not count.
geopm-verify-install.sh exits 0 exactly when these are met, so its exit status is the gate. Do not declare a system ready on the strength of a successful install command.
A dimension counts only when its domain resolved. Bounds alone are not enough: unavailable power dimensions still print hardcoded defaults beside an n/a domain.
Handing off
When the gate passes, say so and move to the geopm-optimize skill, which tunes a workload with geopmopt. It restates this gate identically and will send the user back here if it does not hold.
If the user's original request was about optimizing a workload, continue straight into that flow rather than stopping at "installed".
Safety
- Never run
sudowithout explicit, immediately preceding confirmation. - Never modify access lists without confirmation. They are shared system
configuration, and --write replaces a list while --delete removes an entire list — there is no way to drop individual names. Prefer granting a dedicated Unix group that started empty, which can be revoked cleanly.
- Request the minimum access the campaign needs, and always supply the matching
revoke commands.
- Never install client dependencies into the system Python. That interpreter
belongs to the root-owned daemon.
- Never claim a signal or control exists without checking it on the target.
Why granting controls is reasonable
The first time a session writes a control, the Access Service records the previous value and restores it when the session ends — including when the client is killed. A user can change a power cap but cannot leave it changed after they walk away, and an interrupted campaign needs no cleanup. The boundary: if geopmd itself is killed while a session holds modified controls, restoration may not happen. See access-lists.md.
Diagnosing failures
Start from troubleshooting.md. The single most important point:
GEOPM has no permission-denied message. A signal that is supported but not granted fails with exactly the same text as one that does not exist:
Disambiguate before concluding anything:
Supported but not granted is an access problem. Not supported is a platform limitation, and no amount of installing will fix it.
When to stop
Say so plainly rather than continuing:
- No administrative access and no daemon running. The Access Service cannot
be installed, and without it there is no safe control writing.
- The platform exposes almost nothing. If
geopmaccess --alllists only a
handful of signals, there is no RAPL or MSR access — typical of a virtual machine or WSL. Nothing can be tuned there. Recommend bare metal.
- Every sweep dimension reports an `n/a` domain. The hardware or build does
not support the controls geopmopt would sweep.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking.github/skills/geopm-install/SKILL.md
Popularity
- Repository stars
- 112
- Repository forks
- 53
- 7-day trend score
- 24
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/geopm/geopm/geopm-install)