Skills: install + active-set + admin manager (increment 2) - #125
Merged
Conversation
The installed/manage half of TigerSkills (TIGERSKILLS.md §3/§6), on top of the #124 browse engine. - Tiger_Agent_Skills — install a chosen skill's files (SKILL.md + bundled resources, nested dirs) from GitHub into the app-owned store `application/skills/<key>/`; discover installed; the config active-set (`tiger.agent.skills.active`, no schema) to turn on/off; remove (files + active-set). Files are the source of truth; "what's active" is the only state. - Agent_Service_Skills — /api: search (via Tiger_Skill_Index, flags installed + returns provenance), install (from a browse entry OR a pasted URL), installed, toggle, remove, source (view SKILL.md before installing — read-before-run). Admin+ ACL. - Agent_SkillsController + views/scripts/skills/index.phtml — the "/agent/skills" manager: search the catalog, install, paste-a-URL install, and an installed list (on/off switch, view source, remove). Registered in the admin nav (Agent Skills). Proven live: installed the real `anthropics/skills` pdf skill end-to-end (all files incl. nested scripts/), discovered + removed. Tests: Tiger_Agent_Skills (discover/active-set/remove) + the service (ACL deny, list/toggle/remove, unknown-key rejects). 13 skill tests green. CAPABILITIES.md regenerated. Next: the loader (menu-in-prompt + load_skill read-tool) wiring active skills into the agent turn. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
WebTigers
added a commit
that referenced
this pull request
Aug 17, 2026
…ake class) (#130) Tiger_Uuid::v7() filled the sub-ms bits with pure randomness, so two IDs minted in the same millisecond had no deterministic order. Any v7-keyed append log that sorts by id (or falls back to id as a created_at tiebreak) could therefore re-order two rows written in the same tick — the AgentServiceTest transcript flake (expected 'user', got 'assistant'), which has recurred across #68/#125/#129. Fix at the root (RFC 9562 §6.2 "monotonic random", method 2): rand_a becomes a 12-bit counter that increments for each same-ms mint (seeded randomly per ms so it doesn't leak a mint count; rolls into the next ms if it exhausts 4096). rand_b stays fully random, so uniqueness and index locality are unchanged, and the ID is still a valid v7 whose embedded timestamp timeOf() reads. `ORDER BY id` is now a stable insertion order for same-process appends — the case that matters (a conversation's turns are appended within one request). - UuidTest: assert STRICT full-string monotonicity over 5000 tight-loop mints (forces same-ms collisions) — the direct regression guard, replacing the old "full-string order NOT guaranteed within a ms" assertion. - Verified: the previously ~1/20-flaky transcript test now passes 40/40; full unit (821) + integration (1094) green; v7 still unique over 20k and version/variant-valid. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The install / manage / turn on-off / remove half of TigerSkills, on top of the #124 browse engine.
Engine —
Tiger_Agent_Skillsapplication/skills/<key>/(survivescomposer update).tiger.agent.skills.active— no schema, live-override tier) to turn on/off; remove (files + active-set). Files are source-of-truth; "what's active" is the only state. Install ≠ activate ≠ remove.Service —
Agent_Service_Skills(admin+)search(viaTiger_Skill_Index, flags already-installed, returns provenance) ·install(from a browse entry or a pasted URL) ·installed·toggle·remove·source(view the SKILL.md before installing — read-before-run).Admin screen —
/agent/skillsSearch the catalog → Install / View source; paste-a-URL install; an Installed list with an on/off switch, view source, and remove. Registered in the admin nav (Agent Skills).
Proven + tested
anthropics/skillspdf skill end-to-end — fetched all files (SKILL.md 8KB, forms.md, reference.md, nestedscripts/, LICENSE), discovered + removed it.Tiger_Agent_Skillsdiscover / active-set round-trip / remove, and the service (guest denied on all actions, list/toggle/remove round-trip, unknown-key rejects). CAPABILITIES.md regenerated.Next
The loader (increment 3): the active skills' menu in the system prompt + a
load_skillread-tool, wiring active skills into the agent turn. This PR is install + manage.🤖 Generated with Claude Code