CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/plugin-creator

Create a Tessl plugin: wrap your existing skills into a versioned, shareable bundle, decide what else it needs (rules, commands, MCP servers), validate, and publish.

91

1.25x
Quality

88%

Does it follow best practices?

Impact

95%

1.25x

Average score across 5 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-3/

{
  "context": "Tests whether the agent correctly maps a set of team requirements to Tessl primitives (skill, rule, MCP server, hooks), justifies each choice, avoids padding with unneeded primitives, and correctly handles a not-GA primitive (hooks) by deferring rather than planning to ship it.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Skill for PR review",
      "description": "Recommends a skill (not a rule or command) for the task-specific, on-demand PR review workflow",
      "max_score": 10
    },
    {
      "name": "Rule for import convention",
      "description": "Recommends a rule (not a skill) for the always-on Python import ordering convention",
      "max_score": 10
    },
    {
      "name": "MCP server for metrics API",
      "description": "Recommends an MCP server (not a skill or rule) for the live metrics API query capability",
      "max_score": 10
    },
    {
      "name": "Hooks deferred, not shipped",
      "description": "Does NOT plan to ship hooks for the commit-triggered summaries; notes that hooks are not GA or unavailable, and defers the requirement as a follow-up",
      "max_score": 12
    },
    {
      "name": "Justification for each primitive",
      "description": "Provides a brief justification for each primitive choice (not just a list of types), explaining why that primitive fits the requirement",
      "max_score": 8
    },
    {
      "name": "No padding",
      "description": "Does NOT add extra primitives (e.g. a command, a second MCP server, additional rules/skills) that were not needed by the stated requirements",
      "max_score": 10
    },
    {
      "name": "Plan is concise",
      "description": "The composition-plan.md is structured as a short plan (not a full implementation or lengthy spec) — a few lines per component rather than detailed code or exhaustive prose",
      "max_score": 10
    },
    {
      "name": "Plugin shape stated",
      "description": "States the overall proposed shape — whether this is a single skill or a plugin — and names which primitives will be bundled together",
      "max_score": 10
    },
    {
      "name": "No secrets hard-coded for MCP",
      "description": "Does not hard-code the bearer token or API URL secret in the plan; notes that credentials should be provided via environment variable or configuration",
      "max_score": 10
    },
    {
      "name": "Skill vs rule distinction clear",
      "description": "The plan explicitly distinguishes between always-on (rule) and on-demand/task-specific (skill) as the reason for the primitive split, not just listing names",
      "max_score": 10
    }
  ]
}

README.md

tile.json