- TypeScript 78.1%
- Clojure 12.9%
- JavaScript 9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
## What Adds `extensions/victorialogs/docker-compose.yml` for running a local VictoriaLogs instance, plus a short "Running VictoriaLogs locally" section in the extension README pointing at it. ## Why The extension defaults to `http://localhost:9428` but the repo gave you no way to get an instance there. The README's manual smoke test used a bare `docker run`, which loses all ingested logs on container recreation and doesn't come back after a host restart. The compose file fixes both: - `restart: unless-stopped` — returns with the Docker engine after a reboot, but an explicit `docker compose stop` stays stopped (unlike `always`). - Named volume on `/victoria-logs-data` — the image's default data path is otherwise ephemeral. - `--retentionPeriod=7d` stated explicitly rather than left implicit, so the local retention window is visible. ## How tested Against a real instance on this machine: - `docker compose config -q` — valid - `docker compose up -d` — container healthy, `GET /health` → 200 - Ingested two sample lines via `/insert/jsonline` → 200 - `logs_search` with `service:checkout` returned both lines through the extension ## Out of scope notes The README claims `VICTORIALOGS_URL` can be set in a `.env` file, but `src/env.ts` only reads `process.env` — unlike the sibling `postgres`/`mongodb` extensions, which parse `.env` via `dotenv`. A `.env` entry is silently ignored today. Left alone here; worth its own PR to either fix the README or add `dotenv.parse`. Co-authored-by: yousuf.alvi <yousuf.alvi@teg.com.au> Reviewed-on: #280 |
||
| docs | ||
| extensions | ||
| scripts | ||
| skills | ||
| themes | ||
| .gitignore | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| package-lock.json | ||
| package.json | ||
| piloop-config.yaml | ||
| README.md | ||
pi-extensions-and-skills
Personal skills and extensions for pi, distributed as a pi package. Install on any machine with one command; develop on this repo with live edits.
What's included
Skills (15; penpot also ships a dependency-free fetch script and its vendored reference under skills/penpot/docs/):
| Skill | What it does |
|---|---|
bruno-cli |
Run Bruno API collections from the CLI (.bru files, test suites, OpenAPI/WSDL imports) |
commit-changes |
Commit working-tree changes via branch → PR → merge workflow (issue-driven for feature/bug/enhancement, no-issue date-driven for chore/documentation) |
commit-docs |
Commit existing docs via a no-issue, date-driven branch → PR → squash-merge workflow (always labeled documentation) |
create-issues |
Create issues from templates or structured input |
explain |
Walk through the current branch's diff in plain English — new functions plus recursive call-site tracing to entry points |
forgejo-cli |
Interact with a Forgejo instance via the fj CLI |
forgejo-plumber |
Debug failed Forgejo Actions runs via the forgejo extension — failed-run triage (find → view → jobs → log → root-cause), log-grep strategy, common failure categories, tool cheat-sheet |
furnish-repo |
Furnish a new repo (structure, config, docs) |
github-cli |
Interact with GitHub via the gh CLI |
init-project |
Scaffold a new project |
meilisearch |
Work with Meilisearch |
penpot |
Design in Penpot over the RPC API — bootstrap colour/typography assets, import and link the committed component library, compose and commit screens with the penpot extension, and reconstruct a screenshot or mockup as editable shapes (image → design; needs PENPOT_URL/PENPOT_TOKEN). Ships a vendored Penpot reference pinned to Penpot 2.17.2 (skills/penpot/docs/) |
review |
Review code, PRs, and changes |
tdd-implementation |
Drive implementation via test-driven development |
victorialogs-debugging |
Debug issues by searching VictoriaLogs via the victorialogs extension — error-spike triage, known-entity tracing, missing-log investigation, LogsQL cheat-sheet |
Extensions (10):
| Extension | What it does |
|---|---|
rg |
Overrides the built-in grep tool with ripgrep (faster, regex-native) |
postgres |
Postgres client tools (runs via pg, dotenv, pgpass) |
pr-comments |
Forgejo PR review tools: detect branch, find PR, list unresolved comments, reply |
forgejo |
Forgejo REST API tools: issue/PR/label/milestone suites + read-only Actions run/job/log tools (calls the API directly, no shell interpolation) |
grillme |
Socratic planning/grilling sessions (customized fork of @majorgilles/pi-grill-me, vendored at extensions/grillme/) |
learn-repo |
Guided repo onboarding with an enforced mastery gate — traces one feature end to end then generalises into architecture, quizzes after every section, code-graded answers that the model cannot skip or reveal, writes .learn-repo/<repo>/PROGRESS.md and CONCEPTS.md |
victorialogs |
VictoriaLogs log-querying tools (logs_search, logs_hits, logs_facets) against a running VictoriaLogs instance |
mongodb |
Read-only MongoDB querying tools (mongo_find, mongo_count, mongo_list_collections) against a configured MongoDB instance (via MONGODB_URI in .env; zero tools registered when unconfigured) |
vision |
Analyze local image files (JPEG, PNG, GIF, WebP) with the DeepSeek deepseek-flash vision model (vision tool; DEEPSEEK_API_KEY/VISION_* config; zero tools registered when unconfigured) |
penpot |
Penpot design-creation tools over the Penpot RPC API (colour/typography assets, screen composition, component instancing) — currently registers penpot_whoami (verify PENPOT_URL/PENPOT_TOKEN), penpot_list_projects (teams → projects), penpot_get_file (revision, pages and library assets), penpot_list_library (library assets as resolved name → id lookups, with duplicate-name detection), the staged penpot_create_color / penpot_create_typography / penpot_discard token primitives and penpot_add_frame (staged add-obj frame with auto-layout props, returning its shape id), penpot_add_rect / penpot_add_text (staged add-obj rect/text primitives with library-colour and library-typography reference resolution) and penpot_add_image (staged add-obj image primitive that uploads the media object first, after the designated-target guard), penpot_add_svg (imports an SVG — an .svg file path or inline svg markup — as native shapes, linking fills to matching file/library colours and preserving unsupported nodes as svg-raw, which it reports as not rendered by Penpot 2.17), penpot_instance_component (stages a real library-component instance by cloning the main-instance subtree with fresh ids, resolved by name against the file and its linked libraries, with unknown/ambiguous names, nested instances and unlinked libraries refused), penpot_import_library (imports a committed .penpot library artifact into a nominated project as a new file via the multipart streaming import-binfile command), penpot_export_library (exports a file as a .penpot ZIP artifact to disk via the streaming export-binfile command, verifying the ZIP magic before writing), penpot_list_libraries (lists the library files linked to a file — read-only), penpot_link_library / penpot_unlink_library (link and unlink a library file on a consumer file, each verified by re-reading get-file-libraries and behind the designated-target guard), penpot_authorize_target (records a user-named file/project in the session write allow-list), and the write control tools penpot_status (staged state, never writes) / penpot_commit (one update-file per commit behind the designated-target guard — fail-closed when a file's project cannot be resolved — with live revn read + one conflict retry + re-read verification, and dry_run preview) |
Prerequisites
- pi installed
rgbinary onPATHfor thergextension (e.g.sudo apt install ripgrep)- A reachable Postgres instance + credentials (via env /
.env) for thepostgresextension FORGEJO_TOKENfor theforgejoextension (Forgejo → Settings → Applications → Generate New Token)- The
fjCLI installed and authenticated (fj auth login) for thepr-commentsextension - A reachable VictoriaLogs instance for the
victorialogsextension (optional — defaults tohttp://localhost:9428if unset) - A reachable MongoDB instance for the
mongodbextension, configured viaMONGODB_URIin the project's.env(the extension registers no tools when unconfigured); prefer a dedicated read-only DB user (readrole) DEEPSEEK_API_KEYfor thevisionextension, configured viaDEEPSEEK_API_KEYin the project's.env(the extension registers zero tools when unconfigured); keep it out of commits — the.envfile is never committedPENPOT_URL(instance base URL, without the/apisuffix) andPENPOT_TOKEN(personal access token from your Penpot account settings) for thepenpotextension, whose vendored reference is pinned to Penpot2.17.2inskills/penpot/docs/VERSION; the token needs edit rights on a project to write, andpenpot_link_library/penpot_unlink_libraryadditionally need edit rights on the library file itself
Install
On any machine — one command
pi install https://git.excelera.net/david/pi-extensions-and-skills@main
Then /reload (or restart pi). Verify:
pi list # shows the package
# /reload, then check /skills lists the 15 skills and extension tools are callable
If the repo is private, use a URL that carries your Forgejo credentials, or the SSH form (pi install git:git@git.excelera.net:david/pi-extensions-and-skills@main). If public, the HTTPS URL above works as-is.
pi clones the package to ~/.pi/agent/git/git.excelera.net/david/pi-extensions-and-skills, runs npm install (installing the hoisted pg/dotenv/pgpass/adm-zip/mongodb/image-size deps), and loads the skills and extensions declared in the pi manifest.
From a checkout of this repo — one command
From any git checkout (dev machine or fresh clone), one command updates and registers everything:
git clone https://git.excelera.net/david/pi-extensions-and-skills
cd pi-extensions-and-skills
npm run install:local
install:local is an explicit script — it never runs on npm install, only when you run it. It does, in order:
- Preflight checks (fail fast with an actionable message):
piCLI present, not inside pi's managed clone, a git checkout of this repo, onmain, clean working tree. A missingrgbinary only prints a warning and skips thergextension; a missingfjCLI only prints a warning and skipspr-comments/forgejo-cli, while an installed-but-unauthenticatedfjonly prints a warning and still installs them — install continues either way. A missingFORGEJO_TOKENonly prints a warning — install continues (it's a per-machine env var, not a hard requirement). git pull --ff-only— only runs on cleanmain.npm install— installs the runtime deps (pg,dotenv,pgpass,typebox,adm-zip,mongodb,image-size).- Global pi registration with URL-entry dedupe — any existing settings entry (global, or this checkout's project scope at
.pi/settings.json) that references this repo's URL (https://…,git:…,ssh://…) is removed, then the repo is registered as a local-path package. One clean identity, no duplicate skills/extensions. - Reminder — run
/reloadin pi to pick up the changes.
Examples of the preflight messages:
| Problem | Message |
|---|---|
pi not installed |
install pi first (see the pi README) |
| running inside pi's managed clone | run from your own checkout |
| not a checkout of this repo | git clone … first |
not on main |
git checkout main |
| dirty working tree | git commit / git stash |
git pull fails |
check your network/credentials |
npm install fails |
the npm error output |
rg missing |
warning only — skips the rg extension; install sudo apt install ripgrep and re-run to include it (install continues) |
FORGEJO_TOKEN missing |
warning only — generate in Forgejo → Settings → Applications (install continues) |
fj missing/not authenticated |
warning only — missing fj skips pr-comments and forgejo-cli, unauthenticated fj still installs them; run fj auth login (install continues) |
Note: pi does not run npm install for local-path packages; install:local does it for you (including after git pull brings in new deps).
Updating
- Dev machine / any checkout:
npm run install:local— pulls, reinstalls deps, re-registers with dedupe, then/reload. - Installed machines: re-run the install command —
pi install https://git.excelera.net/david/pi-extensions-and-skills@main. pi pins refs at install time andpi updatedoes not move pins to newer refs, so re-installing is the update path.
Uninstalling
pi remove https://git.excelera.net/david/pi-extensions-and-skills
For a local-path (checkout) setup, remove the local-path entry instead: pi remove /absolute/path/to/this/repo. Then /reload.
Extension notes
- rg — registers a
greptool (same name as the built-in, overrides it) backed by ripgrep; needs thergbinary. - postgres — reads connection config from
.envvia dotenv; seeextensions/postgres/README.md. - pr-comments — tools for listing unresolved review comments and replying; see
extensions/pr-comments/README.md. - forgejo — Forgejo issue/PR/label/milestone + Actions run/job/log tools; token from
FORGEJO_TOKEN; seeextensions/forgejo/README.md. - grillme — Socratic planning/grilling sessions; a customized fork of
@majorgilles/pi-grill-mevendored atextensions/grillme/; seeextensions/grillme/README.md. - victorialogs — VictoriaLogs log-querying tools (
logs_search,logs_hits,logs_facets); base URL fromVICTORIALOGS_URL(defaults tohttp://localhost:9428); seeextensions/victorialogs/README.md. - mongodb — read-only MongoDB querying tools (
mongo_find,mongo_count,mongo_list_collections); URI fromMONGODB_URIin the project's.envonly (case-insensitive + nestedconfig__MONGODB_URIlookup; a process-envMONGODB_URIis not read; zero tools when unconfigured); seeextensions/mongodb/README.md. - vision — analyze local image files (JPEG, PNG, GIF, WebP) with the DeepSeek
deepseek-flashvision model (visiontool); key fromDEEPSEEK_API_KEY, options fromVISION_MODEL/VISION_BASE_URL/VISION_MAX_TOKENS/VISION_TIMEOUT/VISION_THINKING(zero tools when unconfigured); seeextensions/vision/README.md. - penpot — Penpot design-creation tools (
penpot_whoami…penpot_commit); needsPENPOT_URL/PENPOT_TOKEN, and a token with edit rights for writes; the vendored reference is pinned inskills/penpot/docs/VERSION(2.17.2); seeextensions/penpot/README.md.
Caveats
- Refs are pinned at install; updates require re-running the install command (not
pi update). - Local-path packages don't get
npm installrun by pi — usenpm run install:local(or install deps manually in the repo).
Repository layout
skills/ # 15 skills, each a dir with SKILL.md (frontmatter name = skill name); penpot/ also ships scripts/fetch-penpot-docs.mjs and the generated docs/ reference)
extensions/
rg/ # ripgrep grep override (single index.ts)
postgres/ # postgres client tools (needs pg, dotenv, pgpass)
pr-comments/ # Forgejo PR comment tools (needs typebox)
forgejo/ # Forgejo REST API tools (needs typebox, adm-zip)
grillme/ # Socratic planning/grilling sessions (customized fork of @majorgilles/pi-grill-me)
mongodb/ # read-only MongoDB querying tools (mongo_find, mongo_count, mongo_list_collections; needs mongodb, bson, dotenv; bun test)
vision/ # DeepSeek vision analysis tool (vision; needs dotenv, typebox, image-size; node --test)
penpot/ # Penpot design-creation tools over the RPC API (penpot_whoami, penpot_list_projects, penpot_get_file, penpot_list_library, penpot_list_libraries, staged penpot_create_color/penpot_create_typography/penpot_discard/penpot_add_frame/penpot_add_rect/penpot_add_text/penpot_add_image/penpot_add_svg/penpot_instance_component, penpot_import_library, penpot_export_library, penpot_link_library/penpot_unlink_library, penpot_authorize_target, penpot_status/penpot_commit; needs PENPOT_URL/PENPOT_TOKEN)
victorialogs/ # VictoriaLogs log-querying tools (needs typebox; bun test)
scripts/
local-install.mjs # npm run install:local implementation (preflight → pull → install → register)
local-install.test.mjs # unit tests for local-install.mjs (npm test)
package.json # pi package manifest (extensions + skills globs, hoisted deps)