Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/jasonkneen/openclicky/llms.txt

Use this file to discover all available pages before exploring further.

OpenClicky’s GitHub integration is built on Composio MCP rather than a direct OAuth flow — Composio acts as the GitHub connector that Clicky’s agent loop talks to, giving it access to the full GitHub API without requiring you to store a personal access token inside OpenClicky itself. On top of that connector, OpenClicky ships five bundled skills that teach Clicky exactly how to authenticate, manage issues, review code, run PR workflows, and operate repositories. A sixth skill, openclicky-repo-operator, ties everything together for day-to-day development work on the OpenClicky repo itself.

How the Integration Works

When you ask Clicky to do something on GitHub — open a PR, triage issues, review a diff — it follows OpenClicky’s routing rules and reaches for the Composio GitHub integration first, before falling back to the gh CLI or raw curl calls against the GitHub REST API. The bundled skills document both paths so the agent can work on machines where only git is installed and no gh CLI is present.
GitHub integration works through Composio MCP. Connect or reconnect it from OpenClicky Settings → Integrations. The bundled skills also document a gh CLI path and a curl-based REST fallback for machines without Composio access.

Authentication — github-auth

The github-auth skill handles GitHub access setup. It covers two paths:
  • gh CLI — when gh is installed, gh auth login handles both API access and git credential management in a single step.
  • git-only — when gh is not available, the skill walks through HTTPS personal access token setup via git credential.helper store or SSH key generation, requiring no root access.

Auth detection pattern

# Check what's available and whether you're already authenticated
git --version
gh --version 2>/dev/null || echo "gh not installed"
gh auth status 2>/dev/null || echo "gh not authenticated"
git config --global credential.helper 2>/dev/null || echo "no git credential helper"

HTTPS token setup (git-only, no gh)

# Cache credentials persistently
git config --global credential.helper store

# Trigger a credential prompt — use your GitHub token as the password
git ls-remote https://github.com/<your-username>/<any-repo>.git

# Set git identity for commits
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

gh CLI login

# Interactive browser login (desktop)
gh auth login

# Token-based login (headless / SSH servers)
echo "<YOUR_TOKEN>" | gh auth login --with-token
gh auth setup-git
gh auth status

Troubleshooting auth

ProblemFix
git push asks for passwordGitHub disabled password auth. Use a personal access token as the password, or switch to SSH.
remote: Permission to X deniedToken may lack repo scope — regenerate with the correct scopes.
fatal: Authentication failedStale cached credentials. Run git credential reject then re-authenticate.
Credentials not persistingCheck git config --global credential.helper — must be store or cache.

Issues — github-issues

The github-issues skill covers the full issues lifecycle: viewing, searching, creating, labelling, assigning, commenting, closing, and bulk operations. The agent uses gh when available and falls back to the GitHub REST API via curl.

Viewing and searching

# With gh
gh issue list
gh issue list --state open --label "bug"
gh issue list --assignee @me
gh issue list --search "authentication error" --state all
gh issue view 42

# With curl (no gh)
curl -s \
  -H "Authorization: token $GITHUB_TOKEN" \
  "https://api.github.com/repos/$OWNER/$REPO/issues?state=open&per_page=20"

Creating an issue

# With gh
gh issue create \
  --title "Login redirect ignores ?next= parameter" \
  --body "## Description
After logging in, users always land on /dashboard.

## Steps to Reproduce
1. Navigate to /settings while logged out
2. Get redirected to /login?next=/settings
3. Log in

## Expected Behavior
Respect the ?next= query parameter." \
  --label "bug,backend" \
  --assignee "username"

Managing labels and assignment

gh issue edit 42 --add-label "priority:high,bug"
gh issue edit 42 --remove-label "needs-triage"
gh issue edit 42 --add-assignee @me
gh issue comment 42 --body "Root cause is in auth middleware. Fix incoming."
gh issue close 42

Trigger phrases

Say things like:
  • “Show me all open bugs”
  • “Create an issue for the login redirect problem”
  • “Assign issue 42 to me and add a priority:high label”
  • “Triage the needs-triage issues”

Code Review — github-code-review

The github-code-review skill handles both pre-push local review and formal PR reviews on GitHub, including inline comments and approve/request-changes verdicts.

Pre-push local review

# Scope of changes
git diff main...HEAD --stat
git log main..HEAD --oneline

# Full diff
git diff main...HEAD

# Common issue checks
git diff main...HEAD | grep -n "print(\|console\.log\|TODO\|FIXME\|HACK\|XXX\|debugger"
git diff main...HEAD | grep -in "password\|secret\|api_key\|token.*=\|private_key"
git diff main...HEAD | grep -n "<<<<<<\|>>>>>>\|======="

Reviewing a PR on GitHub

# Check out the PR branch locally for full context
git fetch origin pull/123/head:pr-123
git checkout pr-123

# Or with gh
gh pr checkout 123
gh pr diff 123
gh pr view 123

Leaving an inline review

# Submit a formal review with inline comments (curl path)
HEAD_SHA=$(curl -s \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/pulls/123 \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['head']['sha'])")

curl -s -X POST \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/pulls/123/reviews \
  -d "{
    \"commit_id\": \"$HEAD_SHA\",
    \"event\": \"REQUEST_CHANGES\",
    \"body\": \"Found 2 issues. See inline comments.\",
    \"comments\": [
      {\"path\": \"src/auth.py\", \"line\": 45, \"body\": \"Use parameterized queries to prevent SQL injection.\"},
      {\"path\": \"src/models/user.py\", \"line\": 23, \"body\": \"Hash passwords with bcrypt before storing.\"}
    ]
  }"

# Or with gh
gh pr review 123 --request-changes --body "See inline comments."
gh pr review 123 --approve --body "LGTM!"

Trigger phrases

  • “Review the code before I push”
  • “Look at PR #42 and leave your feedback”
  • “Check for security issues in my diff”

PR Workflow — github-pr-workflow

The github-pr-workflow skill covers the complete PR lifecycle: branch creation, commits, pushing, opening PRs, monitoring CI, auto-fixing failures, and merging.

Branch and commit

git fetch origin
git checkout main && git pull origin main
git checkout -b feat/add-user-authentication

# After making changes
git add src/auth.py tests/test_auth.py
git commit -m "feat: add JWT-based user authentication

- Add login/register endpoints
- Add JWT token generation and validation
- Add unit tests for auth flow"
git push -u origin HEAD

Open a PR

# With gh
gh pr create \
  --title "feat: add JWT-based user authentication" \
  --body "## Summary
- Adds login and register API endpoints
- JWT token generation and validation

Closes #42"

# With curl
BRANCH=$(git branch --show-current)
curl -s -X POST \
  -H "Authorization: token $GITHUB_TOKEN" \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/$OWNER/$REPO/pulls \
  -d "{
    \"title\": \"feat: add JWT-based user authentication\",
    \"body\": \"Closes #42\",
    \"head\": \"$BRANCH\",
    \"base\": \"main\"
  }"

Monitor CI and merge

# Watch CI status
gh pr checks --watch

# Squash merge and delete branch
gh pr merge --squash --delete-branch

# Enable auto-merge (merges when all checks pass)
gh pr merge --auto --squash --delete-branch

Trigger phrases

  • “Create a PR for the current branch”
  • “Watch CI and fix any failures”
  • “Merge the PR when it goes green”

Repo Management — github-repo-management

The github-repo-management skill handles repository lifecycle operations: cloning, creating, forking, updating settings, branch protection, releases, GitHub Actions, and secrets.

Clone and create

# Clone
git clone https://github.com/owner/repo-name.git
gh repo clone owner/repo-name

# Create (public, with MIT license)
gh repo create my-new-project --public --description "A useful tool" --license MIT --clone

# Fork and keep upstream in sync
gh repo fork owner/repo-name --clone
git fetch upstream && git merge upstream/main && git push origin main

Branch protection

curl -s -X PUT \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/branches/main/protection \
  -d '{
    "required_status_checks": {"strict": true, "contexts": ["ci/test", "ci/lint"]},
    "enforce_admins": false,
    "required_pull_request_reviews": {"required_approving_review_count": 1},
    "restrictions": null
  }'

Create a release

gh release create v1.0.0 --title "v1.0.0" --generate-notes

# With curl
curl -s -X POST \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/releases \
  -d '{
    "tag_name": "v1.0.0",
    "name": "v1.0.0",
    "generate_release_notes": true,
    "draft": false,
    "prerelease": false
  }'

Trigger phrases

  • “Create a new private repo called my-tool”
  • “Set up branch protection on main”
  • “Cut a release for v2.0.0 with auto-generated notes”

The openclicky-repo-operator Skill

For development work on OpenClicky itself, the openclicky-repo-operator skill acts as a unified repo operator. It combines local git operations for branch/status/diff/stage/commit with Composio GitHub tools (or gh as a fallback) for remote PRs, issues, reviews, and CI log access. Use it when you ask Clicky to fix a bug in OpenClicky, review a PR, or explain the codebase structure.
The repo operator skill always checks your local checkout state first, then reaches out to GitHub only when it needs PR, issue, review, or Actions data that isn’t available locally.

Build docs developers (and LLMs) love