Download the PHP package spora-ai/spora-plugin-custom-skills without Composer

On this page you can find all versions of the php package spora-ai/spora-plugin-custom-skills. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package spora-plugin-custom-skills

spora-plugin-custom-skills

Principal-scoped custom skills — a two-pane admin panel for authoring skills by hand, plus the manage_skill tool so an agent can write them too.

Custom skills are not a second read tool. They are served by core's skill tool, provider-agnostically: a custom skill appears in the same allowed_skills multi-select as a shipped one, and the agent reads it with the same skill(action: "read", …) call. What this plugin adds is the write side, which core deliberately has no opinion about.

This plugin contributes the Custom Skills admin panel to the host's Apps dropdown at /apps/custom-skills. The panel is a pre-built Vue SPA delivered as a separate Composer package (spora-ai/spora-plugin-custom-skills-frontend, type spora-plugin-frontend). The two-package split lets the frontend evolve on its own release cadence and lets backend-only operators skip the bundle entirely.

Install

The PHP package's require block pulls the frontend package in transitively — operators don't need to require it separately. The PHP package ships the migration, the provider, the CRUD services, the controller, and the manage_skill tool; the frontend package ships the Vue IIFE bundle the host SPA lazy-loads at runtime.

Requires spora-ai/spora-core ≥ 0.30.0 — the release that ships Spora\Search\SearchProviderInterface, which CustomSkillSearchProvider implements. Neither that nor Spora\Skills\SkillProviderInterface is in any tagged core (v0.29.0 is the newest tag, and it has no app/Search/ at all), so 0.30.0 is the next version rather than a real one; the constraint names where the seam has to land. CustomSkillsPlugin throws PluginLoadFailedException at boot on a core without SkillProviderInterface rather than loading silently. That guard is load-bearing: PluginLoader::dispatchWithTolerance() swallows listener exceptions, so without it an old core would load the CRUD routes and admin panel happily while the agent could never see a single custom skill.

Mind the cost of that guard: PluginLoader::boot() has no per-plugin tolerance, so the throw is caught by Kernel, which skips plugin boot for the whole request. On an incompatible core this plugin therefore takes every installed plugin down with it — a warning in storage/spora.log, no plugins, no app tile. That is deliberate (a half-working skills store is worse than none), but an operator who hits it should expect to disable the plugin, not just this feature.

What it does

Visibility

Custom skills belong to exactly one principal, and the read and write gates are deliberately asymmetric:

Caller relation to principal Read Write
Own user-principal ✅ ✅
Group they belong to, any role ✅ ❌
Group owner/admin ✅ ✅
Unrelated principal ❌ 404 ❌ 403

Reading a group's custom skills needs only membership. Writing into a group's instruction set needs owner or admin. A member can read a group's skills but cannot author into them — a skill is instructions the model will follow, not shared notes.

Shipped skills sit outside this entirely: core's FilesystemSkillProvider ignores $principalId, because operator-authored content is identical for everyone and per-principal scoping would mean a copy per user of a file the operator already controls.

Identity and precedence

Identity is the frontmatter name, not a directory slug. The writer forces name === slug at write time, so the two cannot diverge.

SkillProviderRegistry dedupes first-provider-wins across providers, and core's FilesystemSkillProvider is first in the static class list — so a custom skill can never shadow a shipped one, and installing this plugin can never change what an existing agent's allowed_skills resolves to. A write that collides with a shipped name is rejected up front (409 SKILL_NAME_RESERVED) rather than creating a row the model could never resolve.

Deleting a custom skill

DELETE /api/v1/custom-skills/{name} also scrubs the name from every allowed_skills array for that principal, in the same transaction, and the response names the affected agents in scrubbed_agents. Without that, a deleted skill is silently dropped from the tool definition and every agent that used it loses a capability with no signal. The scrub is scoped to principal-owned custom skills — filesystem skills are not deletable through this plugin, so a shipped skill can never be removed from an agent's config.

Caps

Enforced as errors with named codes, not warnings. SkillValidator emits a soft SKILL_BODY_OVERSIZE warning and ValidationResult::isValid() checks errors only, so validator reuse alone would leave a user-authored body unbounded.

Cap Limit Code
Skills per principal 25 SKILL_LIMIT_REACHED
Sidecar files per skill 20 TOO_MANY_FILES
Total bytes per skill 200 000 TOTAL_SIZE_EXCEEDED
Bytes per file 50 000 FILE_TOO_LARGE
description length 1024 chars DESCRIPTION_TOO_LONG

The per-file read cap is core's SkillProviderInterface::MAX_FILE_BYTES, re-asserted by SkillTool on what a provider returns. It is enforced on the write side, by this plugin rather than by the provider: sidecars are checked as they are validated, and the synthesised SKILL.md is checked by composing it, because that file is built from columns and so never passes through the sidecar loop. The provider's own getSkillFile() does not cap it.

API surface

After install, 9 endpoints appear under /api/v1/custom-skills*. All require AuthMiddleware + CsrfMiddleware, and every one honours ?principal_id=N to pick the acting principal.

Pre-shipped skills are not re-exposed here. They come from the host's GET /api/v1/skills.

Uninstalling

composer remove spora-ai/spora-plugin-custom-skills removes the admin-panel metadata from the App Registry, drops the 9 routes, and the navbar tile disappears cleanly. The custom_skills and custom_skill_files tables are preserved — uninstalling does not drop them. Reinstalling is a no-op on the schema. This is intentional: data persists across plugin uninstall/reinstall cycles, the same as spora-plugin-memories.

Note that a leftover custom skill whose provider is gone becomes unresolvable: allowed_skills entries pointing at it are reported as (unavailable: <name>) in the tool definition rather than silently dropped.

Reference

The canonical reference lives on the docs site:

License

MIT — see LICENSE.


All versions of spora-plugin-custom-skills with dependencies

PHP Build Version
Package Version
Requires php Version ^8.4.1
spora-ai/spora-core Version >=0.30.0 <2.0.0
spora-ai/spora-plugin-custom-skills-frontend Version >=0.3.0 <2.0.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package spora-ai/spora-plugin-custom-skills contains the following files

Loading the files please wait ...