🧠

parslips-skill

Claude skill allowing an agent to use the parsley template editor via an HTTP server

Version
v5.11.0
Updated
Oct 18

parslips-skill 5.11.0 — travels with Parslips 5.11.0

v5.11.0 Oct 18 on GitHub ↗

Travels with Parslips 5.11.0 — "One API format: .apiext".

Changes since 5.10.0

  • eval returns the snippet's last expression. End with it (var n = q.size(); n). A top-level return x; isn't an error, but comes back with an empty value.
  • Component names that aren't unique get a reason, not a guess. The component endpoints (/context, /componentApi, /keypath, /find, /callers, /validate, /rename, /quickfix) say when several projects have the name (pass project=). They also say when two classes in one project share it in different packages, naming both files; this used to be an internal error.
  • The dev server comes back after an Eclipse restart on macOS, where it used to hang every request until Eclipse was quit.

Install

git clone https://github.com/undur/parslips-skill.git
ln -s "$PWD/parslips-skill/parslips-skill" ~/.claude/skills/parslips-skill

Skill versions match the plugin version they document.

parslips-skill 5.10.0 — travels with Parslips 5.10.0

v5.10.0 Oct 14 on GitHub ↗

Travels with Parslips 5.10.0 — "Route links, understood".

Changes since 5.9.0

  • Keep moving, and never stop someone else's app. A held dev port isn't a reason to stop and ask: /launch runs your app on the next free port and says so (port, movedFrom). It lists the app that holds the port with lastTouchedSeconds, how long ago it was last worked on through the dev server (also in /status). Taking the port (stopOthers=true) is the developer's call: ask first, naming the holder.
  • Act on ready:false, don't wait. Apps start in seconds; give /launch timeout=30 at most. A launch whose JVM died answers at once, and one with no port and no output for 15 s is reported as stalled, with lastOutput and the thread state. Read it, act once, report if it fails again.
  • A wedged JVM is yours to kill only if you started it. Someone else's: tell the developer.
  • Launch through the dev server, never by hand. An ng-objects or wonder-slim app that finds its port held at startup stops whatever ng or WO app holds it, and kills one that hangs. /launch picks a free port before that can happen.
  • New WebObjects projects are on wonder-slim 8.0.17: a component created while the app runs is found without a restart.

Install

git clone https://github.com/undur/parslips-skill.git
ln -s "$PWD/parslips-skill/parslips-skill" ~/.claude/skills/parslips-skill

Skill versions match the plugin version they document.

parslips-skill 5.9.0 — travels with Parslips 5.9.0

v5.9.0 Oct 2 on GitHub ↗

Travels with Parslips 5.9.0 — "Ask the editor, don't reconstruct".

Changes since 5.8.0

  • Reading any answer. Every endpoint says no the same way: error (your call is wrong), reason (it was fine, nothing happened), hint (the call that fixes it). One check covers them all.
  • Never wait blind. Every request to the app gets a timeout (curl -m 15). A timeout leads to /threads, which shows what the debugger stopped, where and why, and then to /dialogs. Apps launched through the dev server fail fast on compile errors and uncaught exceptions instead of hanging.
  • Work where Eclipse looks. /where?path=$PWD before the first edit. A git worktree is invisible to Eclipse, and there every call "succeeds" while nothing takes effect.
  • Ask the editor, don't reconstruct. /context before working on a component; /componentApi, /keypath, /find (also class= for a model class's key, through template keypaths), /callers, /elementRegistry.
  • Refactor through the editor. /rename (a component, a key or a WOD element, with a preview) and /quickfix. Never rename by hand across files.
  • New traps: display components extend ERXNonSynchronizingComponent and read their bindings by name; framework source on disk may be newer than the jar the app runs; a failed static initializer needs a restart.
  • /restart builds before it stops, and ready means the app survived its startup.

Install

git clone https://github.com/undur/parslips-skill.git
ln -s "$PWD/parslips-skill/parslips-skill" ~/.claude/skills/parslips-skill

Skill versions match the plugin version they document.

parslips-skill 5.8.0 — travels with Parslips 5.8.0

v5.8.0 Sep 25 on GitHub ↗

Travels with Parslips 5.8.0 — "Hybrid projects: every template knows its runtime".

Changes since 5.7.0

  • Hybrid projects. A WebObjects app that also serves ng-objects components holds templates of both runtimes; a template under ng/<namespace>/components/ is an ng template, the rest are WebObjects. /elementApi takes runtime=ng|wo so an agent can ask as the template it is editing would.
  • /elementApi?…&debug=true shows how an element's class was looked up — the tool for "the class for X is missing" markers that the resolved API contradicts.
  • Tag aliases: ng projects use ng-objects' ng-tag-aliases.properties; WebObjects projects keep parsley-tag-aliases.properties.
  • Adaptor diagnosis: wo-adaptor-jetty 0.12.0+ selects itself when it is a dependency of the project, so "every route 404s" means checking the pom — no property to set.

Install

git clone https://github.com/undur/parslips-skill.git
ln -s "$PWD/parslips-skill/parslips-skill" ~/.claude/skills/parslips-skill

Skill versions match the plugin version they document.

parslips-skill 5.7.0 — travels with Parslips 5.7.0

v5.7.0 Sep 19 on GitHub ↗

The first release of the skill — and the start of a convention: the skill is released under the same version number as the Parslips plugin it documents. Skill v5.7.0 teaches the dev server of plugin 5.7.0. They travel together.

What the skill gives an agent

Working in a WebObjects / ng-objects / Wonder project whose developer runs Eclipse with Parslips, an agent that edits files on disk can:

  • make its edits take effect (/refreshProject), with a build-error report instead of a false ok, and validate templates without rendering them (/validate)
  • start, stop and restart apps (/launch, /stop, /restart) with preflight refusals that name the reason and the fix, and wait-until-ready
  • read what happened — the Eclipse console kept after the process dies (/console), the running app's log, the Problems view (/problems)
  • ask the editor what an element can do (/elementApi) and run code inside the live app (eval)
  • see and answer Eclipse's modal dialogs (/dialogs), the stop-the-world prompts it otherwise can't see
  • leave a trail the next session (or the human) can read (/activity, and /watch as a live page)

…and it carries the doctrine that makes the loop reliable: refresh after every edit, hand the workspace back settled, recognise a broken hot swap and restart instead of debugging, never "fix" the loop with Maven, check for a dialog before diagnosing a hang.

New with 5.7.0

  • Start a project from nothing. /createProject generates an ng-objects app, a wonder-slim app or a plain Maven library from the bundled templates, imports it into Eclipse, makes it launchable and can launch it — one call. /importProject brings an existing project into the workspace. The skill tells agents to start projects this way rather than hand-writing skeletons, and how to wire a library into an app through the workspace.
  • Port clashes, decided out loud. A held dev port is a refusal naming the holder; the house rule is to take the port (stopOthers=true), with port=N for running alongside.
  • Lessons from the field: a clean console with exit: 1 is usually a port clash, not a crash; a launch refused for errors nobody can find means the workspace was still settling; every-route-404 is the adaptor; a generated app on an older framework release has no app-side endpoints — use /console and /status.

Install

git clone https://github.com/undur/parslips-skill.git
ln -s "$PWD/parslips-skill/parslips-skill" ~/.claude/skills/parslips-skill

Requires Eclipse with the Parslips plugin 5.7.0. If your plugin is older, the dev server's own index (GET http://localhost:9485/) is the authority on what your build offers.