lfx-git-setup/SKILL.md
Interactive setup guide for LFX contributors to configure Git for DCO signoff and GPG-signed commits. Use this skill whenever someone asks about setting up Git signing, DCO signoff, GPG keys for commits, configuring `~/.gitconfig` for signing, adding a GPG key to GitHub, or any variation of “how do I sign my commits?”. Also trigger it when a user says their commits aren’t showing as “Verified” on GitHub, when they’re onboarding to an LFX project and need to meet contribution requirements, or when they ask about `git commit -s`, `--signoff`, `Signed-off-by`, or `commit.gpgSign`. This skill works for technical and non-technical users alike.
npx skillsauth add linuxfoundation/lfx-skills lfx-git-setupInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill walks contributors through two essential git contribution requirements used across linux foundation projects:
--signoff / -s) — adds a
Signed-off-by: your name <email> line to every commit, certifying you wrote
the code and have the right to contribute it under the project's license. This
is a legal agreement, not just a formality.-S) — cryptographically signs each commit with your
personal GPG key so GitHub can display a green "verified" badge, proving the
commit genuinely came from you.Before doing anything else, check what operating system the user is on. The steps are meaningfully different across platforms.
Ask the user (or check their context):
references/mac.md for the full walkthroughreferences/linux.mdreferences/windows.md — note this is a supported but less
common setup path; wsl2 (windows subsystem for linux) users should follow
linux stepsIf it's unclear which platform they're on, just ask: "what operating system are you using — mac, linux, or windows?"
The end goal is a ~/.gitconfig that looks roughly like this:
[user]
name = your full name
email = [email protected]
signingkey = abc123def456 # your gpg key id
[commit]
gpgSign = true # auto-sign every commit with -S (GPG signing)
[tag]
gpgSign = true # auto-sign tags too
and a GPG key that:
The DCO signoff (-s) is handled separately — see the DCO signoff section below.
~/.gitconfig.Each platform reference file covers all four phases with exact commands.
The DCO (--signoff or -s) flag is separate from gpg signing. it adds this line to your commit message:
Signed-off-by: your name <[email protected]>
git commit -s -S -m "your commit message"
Both flags together: -s for the DCO signoff, -S for GPG signature.
Add a c shortcut (or something you will remember) to ~/.gitconfig so git c -m "..." does both automatically:
An example would be:
git config --global alias.c 'commit -s -S'
Then use: git c -m "your commit message"
This approach automatically appends Signed-off-by to every commit message,
even in GUI tools:
# create global hooks directory
mkdir -p ~/.git-hooks
# create the hook script
cat > ~/.git-hooks/prepare-commit-msg << 'eof'
#!/bin/sh
# Auto-add DCO Signed-off-by line
sob=$(git var git_author_ident | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
grep -Fqs "^$sob" "$1" || echo "$sob" >> "$1"
eof
# Make the git hook executable
chmod +x ~/.git-hooks/prepare-commit-msg
# Tell git to use this global hooks directory
git config --global core.hookspath ~/.git-hooks
⚠️ Note: the global hook applies to ALL repositories on your machine. If you work on non-lfx projects, you may prefer option A or B instead.
Once setup is complete, do a test commit:
# in any git repository
git commit -s -S --allow-empty -m "test: verify DCO and gpg signing setup"
git log --show-signature -1
You should see:
gpg: good signature from "your name <email>" in the outputSigned-off-by: line in the commit messageOn GitHub, after pushing, the commit will show a green verified badge.
| problem | likely cause | fix |
| ------------------------------------------ | ------------------------------- | ------------------------------------------------- |
| error: gpg failed to sign the data | gpg agent issue | run export GPG_TTY=$(tty) and retry |
| no verified badge on github | key not uploaded or wrong email | check key email matches github verified email |
| secret key not available | key id mismatch | re-run git config --global user.signingkey <id> |
| DCO check failing in ci | missing signed-off-by | amend last commit: git commit --amend -s |
| gpg prompts not appearing | missing pinentry | see platform reference file for pinentry setup |
| gpg: signing failed: inappropriate ioctl | tty not set | add export GPG_TTY=$(tty) to your shell profile |
references/mac.mdreferences/linux.mdreferences/windows.mdRead the appropriate file based on the user's OS before walking them through setup.
This skill serves both technical and non-technical users. Adjust your tone:
~/.gitconfig are — briefly
define each on first mention.development
LFX cross-repo topology and ownership router. Use when the task spans more than one LFX repo, asks "which repo owns X", "where does Y live", "what repos does this touch", "what consumes Z", or needs a peer-repo file path from inside a single repo. Loads per-repo configs when invoked from the LFX workspace root with a full task prompt; gives targeted cross-repo guidance when invoked from inside a single repo. Also answers LFX glossary and topology questions, and performs read-only discovery when the user asks whether a contract, API, event, field, workflow, or repo capability exists. Do not fire for single-repo implementation tasks where the active repo's own CLAUDE.md already governs (those belong to the repo's local skills). Do not fire for V2 platform composition, service classes, or cross-service handoffs (use `/lfx-skills:lfx-platform-architecture`), ITX wrapper plumbing (`/lfx-skills:lfx-itx-integration`), or Intercom app/Fin workflows (`/lfx-skills:lfx-intercom`).
tools
Create a new ticket in the LFXV2 Jira project (linuxfoundation.atlassian.net). Guides the user through picking an issue type (Bug, Story, Task, Epic), writing a concise summary, and capturing the requirement, feature, or bug context, collecting reproduction steps for bugs. Optionally attaches a parent epic, labels, or priority if the user provides them. Submits the ticket via Atlassian MCP and returns the URL. Use this skill any time someone asks to "create a Jira ticket", "open an LFXV2 ticket", "file a bug", "log a story", "write up a feature request", "draft a ticket", or any variation of submitting work into LFXV2.
testing
Combine multiple feature branches across repos into worktrees for end-to-end journey testing. Create, refresh, and teardown integration environments that merge branches from multiple repos.
devops
Guide users through requesting Snowflake access at the Linux Foundation. Handles two request types: (1) individual user access, adding or modifying an entry in users.tf in the lfx-snowflake-terraform repo, and (2) service account creation, adding an entry in service_accounts.tf. For each, the skill collects the necessary details, generates the exact Terraform HCL block to add, explains where to place it, and guides the user through the PR process. Use this skill any time someone asks about Snowflake access, permissions, user provisioning, service accounts, or making changes to the lfx-snowflake-terraform repo, including phrases like "get access to Snowflake", "add me to Snowflake", "need a service account", "request Snowflake permissions", "I need to query Snowflake", or "how do I get Snowflake access".