agentsclimarketplace

Create template

Skill harness/harness-skills/skills/create-template

A collection of structured AI agent skills that enable Claude Code, Cursor, GitHub Copilot, and other AI coding assistants to create, operate, debug, and govern Harness CI/CD workflows through natural language.

Install
npx -y skills add harness/harness-skills --skill create-template

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

Generate Harness v0 Template YAML for reusable pipeline components (Step, Stage, Pipeline, StepGroup) and create them via MCP. Use when asked to create a template, build a step template, stage template, pipeline template, or reusable step. Do NOT use for checking template usage or references (use template-usage instead). Trigger phrases: create template, step template, stage template, pipeline template, reusable step, template YAML.

The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

6.2 KB, as published. Nobody here has run it

Create Template

Generate Harness v0 Template YAML for reusable components and push via MCP.

Instructions

  1. Determine template type - Step, Stage, Pipeline, or StepGroup
  2. Identify reusable parameters - Mark configurable fields with <+input> for runtime inputs
  3. Generate YAML using the structure below with a unique versionLabel
  4. Create via MCP using harness_create with resource_type template
  5. Verify creation using harness_list with resource_type template

Template Types

  • Step - Reusable step definitions
  • Stage - Reusable stage definitions
  • Pipeline - Complete reusable pipelines
  • StepGroup - Groups of related steps

Template Structure

template:
  name: My Template
  identifier: my_template
  versionLabel: "1.0.0"
  type: Step           # Step, Stage, Pipeline, StepGroup
  orgIdentifier: default
  projectIdentifier: my_project
  tags: {}
  spec: ...            # Content depends on type

Step Template

template:
  name: Docker Build Push
  identifier: docker_build_push
  versionLabel: "1.0.0"
  type: Step
  spec:
    type: BuildAndPushDockerRegistry
    spec:
      connectorRef: <+input>
      repo: <+input>
      tags: <+input>
      dockerfile: Dockerfile
      context: .
    timeout: 15m

Stage Template

template:
  name: K8s Deploy Stage
  identifier: k8s_deploy_stage
  versionLabel: "1.0.0"
  type: Stage
  spec:
    type: Deployment
    spec:
      deploymentType: Kubernetes
      service:
        serviceRef: <+input>
      environment:
        environmentRef: <+input>
        infrastructureDefinitions:
          - identifier: <+input>
      execution:
        steps:
          - step:
              identifier: rollout
              name: Rollout
              type: K8sRollingDeploy
              spec:
                skipDryRun: false
              timeout: 10m
        rollbackSteps:
          - step:
              identifier: rollback
              name: Rollback
              type: K8sRollingRollback
              spec: {}
              timeout: 10m
    failureStrategies:
      - onFailure:
          errors: [AllErrors]
          action:
            type: StageRollback

Pipeline Template

template:
  name: Standard CI/CD
  identifier: standard_cicd
  versionLabel: "1.0.0"
  type: Pipeline
  spec:
    stages:
      - stage:
          identifier: build
          name: Build
          type: CI
          spec:
            cloneCodebase: true
            platform:
              os: Linux
              arch: Amd64
            runtime:
              type: Cloud
              spec: {}
            execution:
              steps:
                - step:
                    identifier: build
                    name: Build
                    type: Run
                    spec:
                      shell: Bash
                      command: <+input>

StepGroup Template

template:
  name: Test Suite
  identifier: test_suite
  versionLabel: "1.0.0"
  type: StepGroup
  spec:
    steps:
      - step:
          identifier: unit_tests
          name: Unit Tests
          type: Run
          spec:
            shell: Bash
            command: <+input>
      - step:
          identifier: integration_tests
          name: Integration Tests
          type: Run
          spec:
            shell: Bash
            command: <+input>

Using Runtime Inputs

Mark configurable fields with <+input> so users provide values when using the template:

spec:
  connectorRef: <+input>          # User selects connector
  repo: <+input>                   # User provides repo name
  tags:
    - <+input>                     # User provides tag
    - <+pipeline.sequenceId>       # Fixed value

Creating via MCP

Call MCP tool: harness_create
Parameters:
  resource_type: "template"
  org_id: "<organization>"
  project_id: "<project>"
  body: <the template YAML>

To update a template version:

Call MCP tool: harness_update
Parameters:
  resource_type: "template"
  resource_id: "<template_identifier>"
  org_id: "<organization>"
  project_id: "<project>"
  body: <updated template YAML with new versionLabel>

To list existing templates:

Call MCP tool: harness_list
Parameters:
  resource_type: "template"
  org_id: "<organization>"
  project_id: "<project>"

Referencing Templates in Pipelines

- stage:
    identifier: deploy
    name: Deploy
    template:
      templateRef: k8s_deploy_stage
      versionLabel: "1.0.0"
      templateInputs:
        type: Deployment
        spec:
          service:
            serviceRef: my_service
          environment:
            environmentRef: prod

Examples

  • "Create a Docker build and push step template" - Generate Step template with BuildAndPushDockerRegistry
  • "Create a reusable K8s deployment stage" - Generate Stage template with Deployment type
  • "Make a standard CI/CD pipeline template" - Generate Pipeline template with CI + CD stages

Performance Notes

  • Mark all configurable fields with <+input> to maximize template reusability.
  • Verify the versionLabel is unique for each template update.
  • Test template references in a pipeline before distributing to other teams.

Troubleshooting

Template Creation Errors

  • DUPLICATE_IDENTIFIER - Template exists; update with new versionLabel
  • INVALID_VERSION - versionLabel must be unique per template
  • Identifiers must match ^[a-zA-Z_][0-9a-zA-Z_]{0,127}$

Template Usage Errors

  • TEMPLATE_NOT_FOUND - Check templateRef and scope (account/org/project)
  • VERSION_NOT_FOUND - Verify versionLabel exists
  • Missing templateInputs - Provide all <+input> values

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.