Skills
Build reusable agent capabilities with trigger patterns, HTTP actions, and org-wide sharing. Three skill types, a marketplace, and auto-extraction.
Skills are reusable capabilities you attach to agents. When a ticket's title or description matches a skill's trigger patterns, JuhJuh injects the skill's instructions into the agent's prompt automatically. No manual configuration per ticket.
A skill can be as simple as a checklist the agent follows ("always run linting before opening a PR") or as powerful as an HTTP action that calls an external API mid-execution. You create skills manually, or JuhJuh extracts them from successful autonomous sessions.
Skill types¶
Every skill is one of three types.
| Type | What it does | When to use |
|---|---|---|
| Knowledge | Injects instructions into the agent's prompt when trigger patterns match | Teaching agents patterns, checklists, coding standards, domain rules |
| Action | Calls an HTTP endpoint during execution and returns structured data | Connecting agents to external APIs, webhooks, third-party tools |
| Combo | Both knowledge injection and HTTP action in one skill | Skills that need context guidance and an external call |
Knowledge skills are prompt-only. They carry no endpoint. Action skills require an endpoint URL, HTTP method, and parameter schema. Combo skills combine both.
Creating a skill¶
- Go to Agents in the sidebar
- Click Skills
- Click Create Skill
- Enter a name (unique within your organization)
- Choose the skill type: Knowledge, Action, or Combo
- Write the instructions. These are injected verbatim into the agent's prompt when the skill matches.
- Add trigger patterns: keywords or phrases that activate this skill
- Pick a category to organize it in your skill library
- Save
Skills are org-level resources. Any agent in your organization can use them once attached.
Writing good instructions¶
Skill instructions work best when they are specific and actionable. Tell the agent what to do, not what to think about.
When handling database migration tasks:
1. Check for existing migrations that touch the same tables
2. Run the migration in a transaction
3. Add a rollback step
4. Test with a fresh database copy before applying to production
Vague instructions ("be careful with migrations") produce vague results. Concrete steps produce consistent behavior.
Choosing trigger patterns¶
Trigger patterns are keywords or short phrases stored as a list. JuhJuh matches them against the ticket title and description using token overlap scoring.
Good patterns are specific enough to avoid false matches but broad enough to catch relevant tickets.
| Pattern quality | Example | Why |
|---|---|---|
| Too broad | code |
Matches almost everything |
| Too narrow | fix postgres 16 vacuum deadlock |
Misses related tickets |
| Right level | database migration, schema change, alter table |
Catches the category without over-matching |
Exact phrase matches score higher than individual token overlap. A skill with the pattern "security audit" scores 2 points for a ticket containing that exact phrase, versus 1 point for a ticket that only contains "security" or "audit" separately.
Auto-extraction from sessions¶
When an autonomous agent completes a session, JuhJuh analyzes the execution steps and identifies patterns worth repeating. If the agent followed a successful approach that could apply to future tickets, JuhJuh creates a skill automatically.
Auto-extracted skills include: - A name derived from the task pattern - A description of what the agent did - Trigger patterns pulled from the ticket context - Basic instructions reconstructed from the execution steps
Auto-extracted skills are linked to their source session. You can review, edit, or deactivate them from the agent's Skills tab. They follow the same matching and injection rules as manually created skills.
Attaching skills to agents¶
Skills exist at the org level, but agents access them through attachments. Each attachment carries a priority value that controls injection order when multiple skills match.
- Open the agent's detail page
- Go to Skills
- Click Attach Skill
- Select skills from your organization's library
- Set priority (lower number = higher priority, injected first)
- Save
An agent can have multiple skills attached. When a ticket arrives, JuhJuh evaluates all of the agent's skills (own, attached, and shared) and injects the top matches into the prompt. The default limit is 5 skills per execution.
Matching priority¶
When multiple skills match a ticket, JuhJuh scores and ranks them:
- Trigger pattern score. Exact phrase matches score 2 points, individual token overlaps score 1 point.
- Ownership bonus. Skills owned by or directly attached to the agent get full score. Shared skills from other agents score at 50%.
- Usage count. Among equal scores, skills with higher usage counts rank first.
The top 5 matching skills (by default) are injected into the agent's prompt in priority order.
Sharing skills¶
By default, a skill is available only to agents it is attached to. Toggle Share on any skill to sync it to your organization's knowledge base. Shared skills become available to every agent in your org through the matching system.
Shared skills score at 50% of their trigger match value compared to directly attached skills. This prevents a shared skill from overriding an agent's own specialized skills unless the match is significantly stronger.
To stop sharing, toggle Share off. The skill stays intact but is no longer visible to other agents.
Action skills¶
Action skills turn agents into API clients. When an agent invokes an action skill during execution, JuhJuh makes an HTTP request to the configured endpoint and returns the response.
Configuring an action skill¶
- Set the skill type to Action or Combo
- Enter the Endpoint URL (HTTPS required)
- Choose the HTTP method: GET, POST, PUT, PATCH, or DELETE
- Define the Parameter schema as JSON Schema. This tells the agent what parameters the action accepts.
- Write a Request body template using placeholders:
{{param_name}} - Configure Response mapping to extract specific fields from the response
- Set a Timeout (default: 30 seconds)
- Choose an Auth type if the endpoint requires authentication
Execution types¶
| Type | Behavior | Timeout |
|---|---|---|
| HTTP | Sends request, waits for response, returns mapped data to the agent | Configurable (default 30s) |
| Webhook | Sends request, does not wait for response (fire-and-forget) | Fixed 3s |
Use HTTP when the agent needs the response to continue its work (e.g., fetching data from an API). Use Webhook when you only need to notify an external system (e.g., posting a message, triggering a pipeline).
Authentication¶
Four auth types are supported.
| Auth type | Required config | How it works |
|---|---|---|
| None | Nothing | No auth headers sent |
| Bearer | token |
Sends Authorization: Bearer {token} header |
| API Key | key |
Sends the key as a header |
| Basic | username, password |
Sends Authorization: Basic {base64} header |
Auth credentials are stored in the skill's configuration. For sensitive credentials, store the token in your vault and reference it.
Request body templates¶
Templates use double-brace placeholders that map to the parameter schema:
{
"repository": "{{repo_name}}",
"branch": "{{branch}}",
"commit_sha": "{{sha}}"
}
When the agent invokes the skill, JuhJuh renders the template with the parameter values and sends the result as the request body.
Response mapping¶
Response mapping extracts specific fields from the API response using dot-path notation:
json
{
"build_status": "$.data.status",
"build_url": "$.data.html_url",
"duration": "$.data.duration_ms"
}
The mapped fields are returned to the agent as structured data it can reference in subsequent steps.
Security constraints¶
Action skills enforce two safety rules:
- HTTPS required. HTTP endpoints are blocked in production.
- No private networks. Requests to loopback addresses (127.0.0.0/8), private ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), and link-local addresses are blocked. Action skills can only call public endpoints.
Skill chaining¶
Chain skills together so the output of one feeds into the next. A chained sequence runs in order, with each skill receiving the context from the previous step.
Chains have a maximum depth of 5 skills. Circular references (Skill A chains to Skill B, which chains back to A) are detected and blocked at save time.
Use chaining for multi-step workflows: a knowledge skill that gathers context, followed by an action skill that calls an API, followed by another knowledge skill that formats the result.
Versioning¶
Every time you edit a skill's instructions or description, JuhJuh saves a version snapshot. Each version records:
- The version number (sequential)
- The full instructions at that point
- The full description at that point
- A diff summary of what changed
- Who made the change
- When it was saved
Browse version history from the skill's detail page. If a recent edit degraded performance, you can review what changed and revert manually.
Marketplace¶
The skill marketplace lets organizations publish, discover, and install skill templates.
Publishing a skill¶
- Open the skill's detail page
- Click Publish to Marketplace
- Choose visibility:
- Private: only your organization can see it
- Public: discoverable by all organizations
- Add a long description explaining what the skill does, when to use it, and any setup required
- Publish
Published skills become templates. Installing a template creates a copy in the installing organization. Changes to the original do not propagate to installed copies.
Installing a skill template¶
- Go to Skills then Marketplace
- Browse or search by category, skill type, or keyword
- Click a template to see its full description, instructions, and ratings
- Click Install
- The skill appears in your organization's library, ready to attach to agents
Ratings¶
Rate any installed template from 1 to 5 stars. Ratings are aggregated across all organizations. Sort the marketplace by rating to find high-performing skills.
Curated templates¶
JuhJuh maintains a set of curated skill templates covering common categories: security review, code quality, testing patterns, performance optimization, CI/CD workflows, and more. Curated templates are verified by the JuhJuh team and appear with a curated badge in the marketplace.
Metrics¶
Every skill tracks two counters:
- Usage count: how many times the skill was loaded into an agent's context
- Success count: how many of those executions completed successfully
The success rate is the percentage of usages that succeeded. Use it to identify skills that consistently help agents complete tasks versus skills that match often but do not contribute to success.
Review metrics from the skill's detail page or the org-wide skills list. Deactivate underperforming skills to keep your library focused.
API access¶
Skills are fully manageable through the API.
Org-scoped endpoints:
- GET /api/v1/orgs/{slug}/skills/ lists all skills in your organization
- POST /api/v1/orgs/{slug}/skills/ creates a new skill
- GET /api/v1/orgs/{slug}/skills/{id}/ retrieves skill details
- PATCH /api/v1/orgs/{slug}/skills/{id}/ updates a skill
- DELETE /api/v1/orgs/{slug}/skills/{id}/ deletes a skill
Agent-scoped endpoints:
- GET /api/v1/orgs/{slug}/agents/{agent_id}/skills/ lists skills for a specific agent
- POST /api/v1/orgs/{slug}/agents/{agent_id}/skills/ creates a skill scoped to an agent
Marketplace endpoints:
- GET /api/v1/orgs/{slug}/marketplace/skills/ browses available templates
- POST /api/v1/orgs/{slug}/marketplace/skills/{id}/install/ installs a template
- POST /api/v1/orgs/{slug}/marketplace/skills/{id}/rate/ rates a template
Filter by skill_type, category, or search with q. Sort by -install_count, -created_at, or rating.
Related¶
- Agents: create and configure the agents that use skills
- Instructions: define org, project, team, and user-level rules that complement skills
- Prompt Templates: reusable prompt patterns that work alongside skill instructions
- Tickets: skills activate when ticket content matches trigger patterns
- Automation: broader automation patterns that chain with skill-powered agents
- API: manage skills programmatically through the REST API