The skills existed but sessions never leaned on them - grep+read wins
the tool-selection contest when descriptions are phrased as information
needs ("use when you need to know how to call...") rather than task
triggers, and grep 'succeeds' without revealing which of the repo's
coexisting module copies is loaded. Changes to convert them from
available options into workflow steps:
- SKILL.md descriptions rewritten task-first ("Use BEFORE reviewing,
testing, editing..." / "Use BEFORE writing any new Tcl helper..."),
with run-it-first wording, the multiple-module-copies rationale, and
cost stated up front (one sub-1s side-effect-free invocation).
- Invocations shortened to lib: script-path form (verified working,
~0.45s each): punk91 src script lib:developer/whatis|nslist.
- New caveat in both: prefer the Bash tool over PowerShell (attached
console can flip colour/terminal detection in punkshell children).
- AGENTS.md Repo-wide Notes entry converted from reference note to
DIRECTIVE: whatis/nslist first, grep reserved for full-text searches.
- .claude/settings.json: allow entries for both scripts (Bash +
PowerShell, punk91/bin/punk91/./bin/punk91 prefixes) so first use is
prompt-free.
.claude/skills copies re-synced from canonical .agents/skills
(diff-verified byte-identical).
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
New scriptlib/developer/nslist.tcl backing the new cross-framework tcl-nslist
agent skill (.agents/skills/ canonical, .claude/skills/ synced copy): the
discovery counterpart of whatis.tcl - lists what a namespace/package actually
exposes at runtime via punk::ns::get_ns_dicts (the n// machinery): child
namespaces with loadable-package markers, commands classified by kind,
punk::args-documented commands, -synopsis whole-namespace usage lines,
-pathcommands namespace-path resolution. Auto-package-requires unloaded
packages and follows ensemble commands to their implementation namespace.
The tcl-whatis skill/script cross-reference it (whatis redirects with a hint
when the queried name is a namespace, not a command).
punk::ns 0.9.1: get_ns_dicts packagetails/packageprefixes initialization moved
inside the per-namespace loop - with multiple matched namespaces (path globs,
trailing **) every dict after the first carried the union of all earlier
namespaces' entries, mis-marking non-package children in nslist/n// underline
styling and in the returned data; a child with several deeper packages below
it was appended to packageprefixes once per matching package (now once).
Pinned in nslist.test (nslist_classification_multins_package_buckets_reset).
Documentation-only PUNKARGS added for get_ns_dicts (returned dict keys
documented) and nslist_dict; parsing stays manual.
Root AGENTS.md: introspection note + scriptlib/developer inventory updated.
Project version 0.15.1 + CHANGELOG entry. punk::ns suite 102/102 pass.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com