Let your coding agent handle it: Automating recurring tasks with skills
A practical example showing how to turn repetitive dev tasks, like opening PRs, into a one-command workflow by building a reusable Claude Code skill.
Wishing someone else would do the recurring, zero-creativity tasks instead of you? Why not let your coding agent handle them? By the end of this post you’ll be equipped with all you need to build your first skill with Claude Code.

Creating your first skill
Not long ago when I started using coding agents at Zypp I was delighted to come across skills in Claude Code. A skill is a Claude Code extension that bundles a SKILL.md instruction file with optional scripts and templates. Skills can either be executed via slash commands or automatically by Claude based on context. What does this mean and how can you set it up?
Let’s imagine that you are typing a description for your fifth PR this week. You stop mid-sentence and think ‘Hey, what if I automated this with Claude?’. So, you navigate to ~/.claude/skills and create the following files:
~/.claude/skills/
open-pr/
SKILL.md ← required
templates/
pr-description.md ← optional supporting context
scripts/
prepare-branch.sh ← optional bundled script
There you have your open-pr skill! The skill lives in its own directory under skills. Because you placed it under ~/.claude/skills it is a ‘global skill’ available to all your projects. This is handy as you probably want to open PRs across different projects. Now, let’s see, what is the content of each file?
scripts/prepare-branch.sh
This file contains bash commands with which Claude can make sure that all commits are pushed to the remote branch.
#!/bin/bash
# Ensures remote branch exists and all commits are pushed
BRANCH=$(git branch --show-current)
REMOTE="origin"
# Check if remote branch exists
if git ls-remote --exit-code --heads $REMOTE $BRANCH > /dev/null 2>&1; then
echo "Remote branch exists. Pushing any unpushed commits..."
git push $REMOTE $BRANCH
else
echo "Remote branch does not exist. Creating and pushing..."
git push -u $REMOTE $BRANCH
fi
echo "Branch $BRANCH is up to date on $REMOTE."
templates/pr-description.md
This file contains the template Claude should fill in when writing the PR description.
## What
<!-- One or two sentences: what changed and why -->
## Changes
<!-- Key changes from the diff, as bullet points -->
## Notes
<!-- Caveats, follow-ups, or things the reviewer should pay attention to. Remove if not needed. -->
SKILL.md
This file contains the prompts that tell Claude what to do when it uses the open-pr skill. Note, that it also references the other two files in the open-pr directory: scripts/prepare-branch.sh and templates/pr-description.md. The name becomes the slash command you can call to invoke the skill: /open-pr. The description helps Claude decide when to load the skill automatically. Skill descriptions are loaded into Claude’s context so it knows what’s available. To make sure a specific skill is always loaded, mention it in your global ~/.claude/CLAUDE.md file so Claude surely has it in mind. The allowed-tools give permission to Claude to run specific commands, so you’re not prompted for manual approval.
---
name: open-pr
description: Prepare the remote branch and open a GitHub PR with a generated description based on the diff
allowed-tools: Bash(git *), Bash(gh *)
---
# Open PR
Follow these steps in order.
## 1. Prepare the branch
Run the preparation script:
```bash
bash ~/.claude/skills/open-pr/scripts/prepare-branch.sh
```
## 2. Get the diff
Run:
```bash
git diff main..HEAD
git log main..HEAD --oneline
```
## 3. Write the PR description
Read the template at `~/.claude/skills/open-pr/templates/pr-description.md`.
Fill it in based on the diff and commit log. Be concise and specific, avoid generic filler.
## 4. Open the PR
Use the description you wrote in step 3 as the --body value. Run:
```bash
gh pr create --title "<generated title>" --body "<filled-in description>" --base main
```
The title should be short and descriptive, derived from the branch name and commits, not generic.
Next time you want to open a PR just type /open-pr and Claude will do it for you. Or you can also tell Claude in natural language to open a PR using the open-pr skill. Once it’s done make sure to take a look at the result.
Taking skills to the next level
You’ve built your first skill, what now? Skills already give you a boost when used personally but they become even more powerful when shared with others. Which is why we at Zypp, besides setting up personal skills, make use of shared skills as well. We share skills for projects so that all project members use for example the same FastAPI, React or Supabase best-practices. But skills don’t stop at development related topics. Even the first reviewer of this blog was Claude using a shared blog-reviewer skill.
Skills are a super handy way to automate recurring, necessary but not particularly exciting tasks. Plus, they can even be shared with your team. The open-pr skill was a minimal example to demonstrate this powerful feature but I am sure you have plenty of other use cases where skills can be useful as well. So why not give them a try?
Did you find this article interesting?
📃 Check out our previous blog as well: Reworc x Zypp: Unlocking Workplace Analytics
✅ Make sure to follow us on LinkedIn for new content!

