Skip to main content

Project: License

Package: PyPI - Python Version PyPI - Version PyPI - Downloads

Development: uv ruff ty pytest CI Code Coverage GitHub commit activity

Contents

Overview

robotter composes GenAI "dotfiles" (the instruction/configuration files read by AI coding agents) from a single source template.

Different agents read their configuration from different locations under different filenames. robotter renders one Jinja2 template and writes the result to the appropriate location(s) for a target agent, at either global (user-level) or project scope:

Agent Value Project Configuration Global Configuration
Claude Code claude-code CLAUDE.md ~/.claude/CLAUDE.md
Cline cline .clinerules/main.md ~/Documents/Cline/Rules/main.md
Cursor cursor .cursor/rules/main.mdc ~/.cursor/rules/main.mdc
Gemini CLI gemini-cli GEMINI.md ~/.gemini/GEMINI.md
GitHub Copilot github-copilot .github/copilot-instructions.md <VS Code user>/prompts
Grok grok AGENTS.md ~/.grok/AGENTS.md
OpenAI Codex openai-codex AGENTS.md ~/.codex/AGENTS.md
OpenCode opencode AGENTS.md ~/.config/opencode/AGENTS.md

Some agents also support "skills" — reusable instruction sets stored under a per-skill location, keyed by a skill name. robotter writes rendered skills to the appropriate location(s) for those agents:

Agent Value Project Skill Global Skill
Claude Code claude-code .claude/skills/<name>/SKILL.md ~/.claude/skills/<name>/SKILL.md
Cline cline .cline/skills/<name>/SKILL.md ~/.cline/skills/<name>/SKILL.md
Cursor cursor .cursor/skills/<name>/SKILL.md ~/.cursor/skills/<name>/SKILL.md
Gemini CLI gemini-cli .gemini/skills/<name>/SKILL.md ~/.gemini/skills/<name>/SKILL.md
GitHub Copilot github-copilot .github/skills/<name>/SKILL.md ~/.copilot/skills/<name>/SKILL.md
Grok grok .grok/skills/<name>/SKILL.md ~/.grok/skills/<name>/SKILL.md
OpenAI Codex openai-codex .agents/skills/<name>/SKILL.md ~/.agents/skills/<name>/SKILL.md
OpenCode opencode .opencode/skills/<name>/SKILL.md ~/.config/opencode/skills/<name>/SKILL.md

Templates may include optional YAML frontmatter (preserved in the rendered output) and may compose other templates via the include_configuration("<relative path>") function, letting you maintain shared content once and assemble agent-specific files from it (see Example Configuration and Example Skill below).

How to use robotter

Render a template to an agent's configuration location(s):

uvx robotter render <template> <agent> [<dir>] [--verbose] [--debug]
Argument / Option Description
<template> Path to the template file to render.
<agent> Target agent: claude-code, cline, cursor, gemini-cli, github-copilot, grok, openai-codex, or opencode.
<dir> Render project-level configuration under this directory. When omitted, global (user-level) configuration is rendered.
--verbose Write verbose information to the terminal.
--debug Write debug information to the terminal.

Examples

Render instructions.md to the current user's global Claude Code configuration:

uvx robotter render instructions.md claude-code

Render instructions.md to the project-level OpenCode configuration under ./my-project:

uvx robotter render instructions.md opencode ./my-project

Example Configuration

A configuration file is a Jinja2 template with optional YAML frontmatter. Use the include_configuration("<relative path>") function to compose shared content from another configuration file, letting you maintain that content once and reuse it across multiple templates.

The following instructions.md template includes a shared shared/coding-standards.md file:

---
description: Instructions for AI coding agents
---
# Project Instructions

## Overview
This project composes GenAI dotfiles from a single source template.

## Coding Standards
{{ include_configuration("shared/coding-standards.md") }}

The included shared/coding-standards.md file (its frontmatter, if any, is ignored when included):

- Prefer clarity over cleverness.
- Write tests for all new functionality.
- Document public interfaces.

The path passed to include_configuration is resolved relative to the file that contains the call, so a template in one directory can include a file located in a subdirectory ("shared/coding-standards.md") or a parent directory ("../coding-standards.md"). Included files may themselves call include_configuration, allowing configuration to be composed from arbitrarily nested fragments.

Rendering the instructions.md template above produces the following output (the frontmatter is preserved; the include_configuration call is replaced with the rendered content of the included file):

---
description: Instructions for AI coding agents
---
# Project Instructions

## Overview
This project composes GenAI dotfiles from a single source template.

## Coding Standards
- Prefer clarity over cleverness.
- Write tests for all new functionality.
- Document public interfaces.

Rendering a skill

Some agents support "skills" — reusable instruction sets stored under a per-skill location. Render a skill template to an agent's skill location(s):

uvx robotter render_skill <template> <agent> [<dir>] [--verbose] [--debug]
Argument / Option Description
<template> Path to the skill template file to render.
<agent> Target agent: claude-code, cline, cursor, gemini-cli, github-copilot, grok, openai-codex, or opencode.
<dir> Render the project-level skill under this directory. When omitted, the global (user-level) skill is rendered.
--verbose Write verbose information to the terminal.
--debug Write debug information to the terminal.

The skill name is taken from the template's frontmatter name attribute (required); the rendered output is written to the per-skill location derived from that name (see the table in the Overview above). Not every agent supports skills; render_skill fails for an agent that does not.

Example Skill

A skill template is a Jinja2 template with YAML frontmatter that must include a name attribute; that name determines the per-skill location the rendered output is written to. Like a configuration template, a skill template may compose shared content via include_configuration("<relative path>").

The following review_skill.md skill template declares its name in frontmatter and reuses the shared shared/coding-standards.md file from the Example Configuration above. Note that the template filename (review_skill.md) and the name attribute (review) are independent — the rendered output location is derived from name, not the filename:

---
name: review
description: Review changes before committing
---
# Review

Review the pending changes before committing, confirming they satisfy the project's coding standards:

{{ include_configuration("shared/coding-standards.md") }}

Rendering the template preserves the frontmatter and replaces the include_configuration call with the rendered content of the included file, producing the following SKILL.md:

---
name: review
description: Review changes before committing
---
# Review

Review the pending changes before committing, confirming they satisfy the project's coding standards:

- Prefer clarity over cleverness.
- Write tests for all new functionality.
- Document public interfaces.

Examples

Render review_skill.md to the current user's global Claude Code skill location (~/.claude/skills/review/SKILL.md):

uvx robotter render_skill review_skill.md claude-code

Render review_skill.md to the project-level Claude Code skill under ./my-project (./my-project/.claude/skills/review/SKILL.md):

uvx robotter render_skill review_skill.md claude-code ./my-project

Editing an agent's configuration

Open an agent's rendered configuration file in an editor:

uvx robotter edit <agent> [<dir>] [--verbose] [--debug]
Argument / Option Description
<agent> Target agent: claude-code, cline, cursor, gemini-cli, github-copilot, grok, openai-codex, or opencode.
<dir> Edit project-level configuration under this directory. When omitted, global (user-level) configuration is edited.
--verbose Write verbose information to the terminal.
--debug Write debug information to the terminal.

The configuration file must already exist (for example, produced by a prior render); edit fails if it does not. The editor is selected from the VISUAL or EDITOR environment variable when set, otherwise the operating system's default handler for the file is used.

Examples

Edit the current user's global Claude Code configuration:

uvx robotter edit claude-code

Edit the project-level OpenCode configuration under ./my-project:

uvx robotter edit opencode ./my-project

Editing a skill

Open an agent's rendered skill file in an editor:

uvx robotter edit_skill <name> <agent> [<dir>] [--verbose] [--debug]
Argument / Option Description
<name> Name of the skill to edit (the same name declared in the skill template's frontmatter).
<agent> Target agent: claude-code, cline, cursor, gemini-cli, github-copilot, grok, openai-codex, or opencode.
<dir> Edit the project-level skill under this directory. When omitted, the global (user-level) skill is edited.
--verbose Write verbose information to the terminal.
--debug Write debug information to the terminal.

The skill file must already exist (for example, produced by a prior render_skill); edit_skill fails if it does not. The editor is selected from the VISUAL or EDITOR environment variable when set, otherwise the operating system's default handler for the file is used. Not every agent supports skills; edit_skill fails for an agent that does not.

Examples

Edit the current user's global Claude Code review skill (~/.claude/skills/review/SKILL.md):

uvx robotter edit_skill review claude-code

Edit the project-level Claude Code review skill under ./my-project (./my-project/.claude/skills/review/SKILL.md):

uvx robotter edit_skill review claude-code ./my-project

Browsing an agent's global configuration

Open an agent's global (user-level) configuration directory in a file browser:

uvx robotter browse <agent> [--verbose] [--debug]
Argument / Option Description
<agent> Target agent: claude-code, cline, cursor, gemini-cli, github-copilot, grok, openai-codex, or opencode.
--verbose Write verbose information to the terminal.
--debug Write debug information to the terminal.

The directory is opened using the operating system's default file browser. The directory must already exist (for example, produced by a prior render); browse fails if it does not.

Example

Browse the current user's global Claude Code configuration directory:

uvx robotter browse claude-code

Browsing an agent's skills

Open an agent's skills directory in a file browser:

uvx robotter browse_skills <agent> [<dir>] [--verbose] [--debug]
Argument / Option Description
<agent> Target agent: claude-code, cline, cursor, gemini-cli, github-copilot, grok, openai-codex, or opencode.
<dir> Browse the project-level skills directory under this directory. When omitted, the global (user-level) skills directory is browsed.
--verbose Write verbose information to the terminal.
--debug Write debug information to the terminal.

The directory is opened using the operating system's default file browser. The directory must already exist (for example, produced by a prior render_skill); browse_skills fails if it does not. Not every agent supports skills; browse_skills fails for an agent that does not.

Examples

Browse the current user's global Claude Code skills directory (~/.claude/skills):

uvx robotter browse_skills claude-code

Browse the project-level Claude Code skills directory under ./my-project (./my-project/.claude/skills):

uvx robotter browse_skills claude-code ./my-project

Installation

Note that it isn't necessary to install robotter when running via uvx.

Installation Method Command
Via uv uv add robotter
Via pip pip install robotter

Verifying Signed Artifacts

Artifacts are signed and verified using py-minisign and the public key in the file ./minisign_key.pub.

To verify that an artifact is valid, visit the latest release and download the .minisign signature file that corresponds to the artifact, then run the following command, replacing <filename> with the name of the artifact to be verified:

uv run --with py-minisign python -c "import minisign; minisign.PublicKey.from_file('minisign_key.pub').verify_file('<filename>'); print('The file has been verified.')"

Development

Please visit Contributing and Development for information on contributing to this project.

Additional Information

Additional information can be found at these locations.

Title Document Description
Code of Conduct CODE_OF_CONDUCT.md Information about the norms, rules, and responsibilities we adhere to when participating in this open source community.
Contributing CONTRIBUTING.md Information about contributing to this project.
Development DEVELOPMENT.md Information about development activities involved in making changes to this project.
Governance GOVERNANCE.md Information about how this project is governed.
Maintainers MAINTAINERS.md Information about individuals who maintain this project.
Security SECURITY.md Information about how to privately report security issues associated with this project.

License

robotter is licensed under the MIT license.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

robotter-0.17.2.tar.gz (13.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

robotter-0.17.2-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file robotter-0.17.2.tar.gz.

File metadata

  • Download URL: robotter-0.17.2.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for robotter-0.17.2.tar.gz
Algorithm Hash digest
SHA256 00dbcc5c1a2a754ad1ecb46c5f57975f44c91699b77ae5e23296afcaef5b8584
MD5 02fe8083bc9b127ec3dc4cd6b251f5a1
BLAKE2b-256 9056e28a3a647489f92054f48d93b5ba28d5c71964b37989a384ec91f2819e0c

See more details on using hashes here.

File details

Details for the file robotter-0.17.2-py3-none-any.whl.

File metadata

  • Download URL: robotter-0.17.2-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for robotter-0.17.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a701878d1df800f2bd31b726e671cea40b5af20101147270037437c86a0b9575
MD5 f10bb0e94ca61929ab9956a1b73936b4
BLAKE2b-256 ba64a77fc1c3141f3a331cad8cd02642710b7435a7f2d3f6d49c914c2a03348a

See more details on using hashes here.

Release history Release notifications | RSS feed

0.17.3

2 files

This release

0.17.2 This release

2 files

0.17.1

2 files

0.10.0

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.3

2 files

0.6.0

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page