Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,14 @@ sleep 6 # let the next poll apply it, THEN capture
lines, trailing pad whitespace, and scrollbar thumb artifacts:

```bash
python .agents/skills/capture-tui-diagram/clean_capture.py tmp/raw.txt > tmp/grid.txt
python .claude/skills/capture-tui-diagram/clean_capture.py tmp/raw.txt > tmp/grid.txt
```

For a **single-column** capture (the `stack` preset) add `--compress` to collapse
runs of blank chart rows so a ~47-row frame fits a doc:

```bash
python .agents/skills/capture-tui-diagram/clean_capture.py tmp/stack_raw.txt --compress > tmp/stack.txt
python .claude/skills/capture-tui-diagram/clean_capture.py tmp/stack_raw.txt --compress > tmp/stack.txt
```

**Never `--compress` a side-by-side frame** (grid, or dashboard+table): the two
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ Gate 1–4 → Build → Audit → [MANUAL CONFIRM] → Deploy → Ver
### Step 1 — Build

```bash
bash .agents/skills/publish-cover/scripts/build-cover-dist.sh
bash .claude/skills/publish-cover/scripts/build-cover-dist.sh
```

What the script does deterministically:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ tape. actop monitors the whole system, so that's fine.
From anywhere in the repo:

```bash
bash .agents/skills/record-tui-gif/record.sh
bash .claude/skills/record-tui-gif/record.sh
```

This drives a GPU workload against the llama.cpp router (llamacpp-first default;
Expand All @@ -53,14 +53,14 @@ Examples:

```bash
# Default: llama.cpp router, OpenAI protocol, original qwen model:
bash .agents/skills/record-tui-gif/record.sh
bash .claude/skills/record-tui-gif/record.sh
# Heavier load, longer generations:
CONCURRENCY=3 NUM_PREDICT=8192 bash .agents/skills/record-tui-gif/record.sh
CONCURRENCY=3 NUM_PREDICT=8192 bash .claude/skills/record-tui-gif/record.sh
# Ollama fallback (native /api/generate, agentic profile):
ROUTER_URL=http://localhost:11433 MODEL=qwen3.6:35b-a3b-agentic API=ollama \
bash .agents/skills/record-tui-gif/record.sh
bash .claude/skills/record-tui-gif/record.sh
# Record a custom tape with idle gauges (e.g. a quick layout check):
SKIP_WORKLOAD=1 TAPES=tmp/mytape.tape bash .agents/skills/record-tui-gif/record.sh
SKIP_WORKLOAD=1 TAPES=tmp/mytape.tape bash .claude/skills/record-tui-gif/record.sh
```

## The GPU workload driver
Expand All @@ -71,11 +71,11 @@ generations across N concurrent workers until Ctrl-C or `--duration`.

```bash
# llama.cpp (default): OpenAI protocol against the llamacpp router
.venv/bin/python .agents/skills/record-tui-gif/gpu_workload.py \
.venv/bin/python .claude/skills/record-tui-gif/gpu_workload.py \
--url http://localhost:9040 --model qwen3.6:35b-a3b \
--api openai --concurrency 2 --num-predict 4096
# ollama fallback: native /api/generate (llama.cpp 404s on this path)
.venv/bin/python .agents/skills/record-tui-gif/gpu_workload.py \
.venv/bin/python .claude/skills/record-tui-gif/gpu_workload.py \
--url http://localhost:11433 --model qwen3.6:35b-a3b-agentic \
--api ollama --concurrency 2 --num-predict 4096
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# the dashboard drops to ~80 cols and silently degrades mid-take; 1800px
# (~212 cols) leaves it ~122 cols, so grid survives the whole recording.
#
# Render from the repo root: vhs .agents/skills/record-tui-gif/actop-demo.tape
# Render from the repo root: vhs .claude/skills/record-tui-gif/actop-demo.tape
# (or via record.sh, which drives a GPU workload so the gauges move).

Output images/actop-demo.gif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# 5. stop the GPU workload
#
# Run from anywhere inside the repo:
# bash .agents/skills/record-tui-gif/record.sh
# bash .claude/skills/record-tui-gif/record.sh
#
# Config via env:
# TAPES="tmp/a.tape tmp/b.tape" tapes to record (default: bundled actop-demo.tape)
Expand Down
File renamed without changes.
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,22 @@ This project follows a Keep a Changelog-style format and uses version tags for r

## [Unreleased]

## [1.9.7] - 2026-08-13

### Fixed

- **The agent skills were invisible to the agent.** `record-tui-gif`,
`publish-cover`, `capture-tui-diagram`, and `run-actop` were moved from
`.claude/skills/` to `.agents/skills/` in the 1.4.x docs reorg. Claude Code
discovers project skills only under `.claude/skills/`, so from that point on
none of the four were ever offered — they stayed correct, committed, and
unused, and got followed only when someone happened to grep them out of the
tree. `audit-conformance` stayed behind in `.claude/skills/` and kept working,
which is what made the breakage hard to notice.
All four are moved back, their internal `.agents/skills/...` path references
rewritten, and `CLAUDE.md` now states the constraint so a future reorg does
not silently re-break discovery.

## [1.9.6] - 2026-08-12

### Fixed
Expand Down
2 changes: 2 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,8 @@ The `docs/` directory contains essential system reviews, research, and operation
- `docs/SPEC-system.md`: Detailed system design reference — native bindings, sampling layer, SoC profile fallback, TUI rendering, testing contract. Kept in sync with the code on every PR that touches architecture.
- `docs/ROADMAP.md`: Open hardware/metric-coverage gaps and their priority.

**Agent skills live in `.claude/skills/` — nowhere else.** Claude Code discovers project skills only under `.claude/skills/` (plus `~/.claude/skills/` and plugins); a skill parked anywhere else is invisible to the agent and will simply never be invoked. `record-tui-gif`, `publish-cover`, `capture-tui-diagram`, and `run-actop` were moved to `.agents/skills/` in a past docs reorg and silently stopped being offered — they were still correct, still committed, and still useless, because nothing surfaced them. Do not "consolidate" them elsewhere; if another tool needs its own convention, give that tool a copy or a symlink and leave `.claude/skills/` as the real home.

**Conformance auditing:** the `/audit-conformance` skill (`.claude/skills/audit-conformance/`) periodically judgment-scans the whole tree against 12 coding rules (layering, dead code, DRY, naming, swallowed errors) — the whole-codebase counterpart to diff-scoped `/code-review`. It writes an actionable `docs/TODO-conformance-YYYY-MM-DD.md` and never proposes structural/guard tests (they would violate the functional-tests-only mandate).

## Coding Style & Naming Conventions
Expand Down
4 changes: 2 additions & 2 deletions docs/cover.html
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@

<section class="hero">
<div class="wrap">
<span class="badge">v1.9.6</span>
<span class="badge">v1.9.7</span>
<h1>actop<span>.</span></h1>
<p class="tagline">
Watch your Apple Silicon Mac the way it actually works — <strong>sudoless</strong>,
Expand Down Expand Up @@ -274,7 +274,7 @@ <h2>actop — Apple <span style="color: var(--accent);">C</span>hip top</h2>

<footer>
<div class="wrap">
<p>actop v1.9.6 · an independent project inspired by <a href="https://github.com/tlkh/asitop">asitop</a> · MIT licensed</p>
<p>actop v1.9.7 · an independent project inspired by <a href="https://github.com/tlkh/asitop">asitop</a> · MIT licensed</p>
</div>
</footer>

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "actop"
version = "1.9.6"
version = "1.9.7"
description = "Apple Silicon (M1–M4) power, GPU, ANE & memory-bandwidth monitor — sudoless TUI + Python API for profiling local LLM / MLX / CoreML inference"
readme = "README.md"
license = { text = "MIT" }
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.