From 8c0ba48b6ab2d21e1ee0f75a3d1f951bed516ec2 Mon Sep 17 00:00:00 2001 From: John Lambert Date: Tue, 9 Jun 2026 17:09:28 -0400 Subject: [PATCH] Make GitHub and Claude Code compatible --- .../atlassian-readonly-skills/REFERENCE.md | 0 .../skills/atlassian-readonly-skills/SKILL.md | 6 +- .../requirements.txt | 0 .../scripts/__init__.py | 0 .../scripts/_common.py | 0 .../scripts/bitbucket_commits.py | 0 .../scripts/bitbucket_files.py | 0 .../scripts/bitbucket_projects.py | 0 .../scripts/bitbucket_pull_requests.py | 0 .../scripts/confluence_comments.py | 0 .../scripts/confluence_labels.py | 0 .../scripts/confluence_pages.py | 0 .../scripts/confluence_search.py | 0 .../scripts/jira_agile.py | 0 .../scripts/jira_issues.py | 0 .../scripts/jira_links.py | 0 .../scripts/jira_projects.py | 0 .../scripts/jira_search.py | 0 .../scripts/jira_users.py | 0 .../scripts/jira_workflow.py | 0 .../scripts/jira_worklog.py | 0 .../skills/atlassian-skills/REFERENCE.md | 0 .../skills/atlassian-skills/SKILL.md | 8 +- .../skills/atlassian-skills/requirements.txt | 0 .../atlassian-skills/scripts/__init__.py | 0 .../atlassian-skills/scripts/_common.py | 0 .../scripts/bitbucket_commits.py | 0 .../scripts/bitbucket_files.py | 0 .../scripts/bitbucket_projects.py | 0 .../scripts/bitbucket_pull_requests.py | 0 .../scripts/confluence_comments.py | 0 .../scripts/confluence_labels.py | 0 .../scripts/confluence_pages.py | 0 .../scripts/confluence_search.py | 0 .../atlassian-skills/scripts/jira_agile.py | 0 .../atlassian-skills/scripts/jira_issues.py | 0 .../atlassian-skills/scripts/jira_links.py | 0 .../atlassian-skills/scripts/jira_projects.py | 0 .../atlassian-skills/scripts/jira_search.py | 0 .../atlassian-skills/scripts/jira_users.py | 0 .../atlassian-skills/scripts/jira_workflow.py | 0 .../atlassian-skills/scripts/jira_worklog.py | 0 .../skills/execute-implement/SKILL.md | 0 .../skills/fieldworks-winapp/SKILL.md | 0 .../navigation/launch-or-attach.md | 0 .../navigation/project-loading.md | 0 .../navigation/screenshot-evidence.md | 0 .../navigation/styles-font-tab.md | 0 .../navigation/writing-system-font-options.md | 0 .../references/how-to-update.md | 0 .../references/mcp-selection.md | 0 .../fieldworks-winapp/references/research.md | 0 .../skills/grill-with-docs/SKILL.md | 0 .../skills/jira-bugfix/SKILL.md | 10 +-- .../skills/openspec-apply-change/SKILL.md | 0 .../skills/openspec-archive-change/SKILL.md | 0 .../openspec-bulk-archive-change/SKILL.md | 0 .../skills/openspec-continue-change/SKILL.md | 0 .../skills/openspec-explore/SKILL.md | 0 .../skills/openspec-ff-change/SKILL.md | 0 .../skills/openspec-new-change/SKILL.md | 0 .../skills/openspec-onboard/SKILL.md | 0 .../skills/openspec-propose-change/SKILL.md | 0 .../skills/openspec-sync-specs/SKILL.md | 0 .../skills/openspec-verify-change/SKILL.md | 0 .../skills/plan-design/SKILL.md | 0 .../skills/powershell/SKILL.md | 0 .../skills/pr-preflight/SKILL.md | 0 .../respond-to-review-comments/SKILL.md | 0 {.github => .claude}/skills/review/SKILL.md | 0 .../skills/rubric-verify/SKILL.md | 0 .../skills/sil-library-reuse/SKILL.md | 0 .../skills/smart-screenshot-capture/SKILL.md | 0 .../skills/verify-test/SKILL.md | 0 .github/AGENTS.md | 16 ++-- .github/AI_GOVERNANCE.md | 49 ++++++++---- .github/copilot-instructions.md | 5 ++ .github/prompts/pr-preflight.prompt.md | 2 +- .../respond-to-review-comments.prompt.md | 2 +- .../atlassian-readonly-skills/.env.example | 78 ------------------- .github/skills/atlassian-skills/.env.example | 78 ------------------- .gitignore | 2 +- AGENTS.md | 12 ++- CLAUDE.md | 9 +++ Docs/agent-docs-refresh.md | 9 ++- Docs/workflows/ai-pr-workflow.md | 14 ++-- ReadMe.md | 10 ++- openspec/AGENTS.md | 2 +- openspec/config.yaml | 2 +- 89 files changed, 103 insertions(+), 211 deletions(-) rename {.github => .claude}/skills/atlassian-readonly-skills/REFERENCE.md (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/SKILL.md (98%) rename {.github => .claude}/skills/atlassian-readonly-skills/requirements.txt (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/__init__.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/_common.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/bitbucket_commits.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/bitbucket_files.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/bitbucket_projects.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/bitbucket_pull_requests.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/confluence_comments.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/confluence_labels.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/confluence_pages.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/confluence_search.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/jira_agile.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/jira_issues.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/jira_links.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/jira_projects.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/jira_search.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/jira_users.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/jira_workflow.py (100%) rename {.github => .claude}/skills/atlassian-readonly-skills/scripts/jira_worklog.py (100%) rename {.github => .claude}/skills/atlassian-skills/REFERENCE.md (100%) rename {.github => .claude}/skills/atlassian-skills/SKILL.md (98%) rename {.github => .claude}/skills/atlassian-skills/requirements.txt (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/__init__.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/_common.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/bitbucket_commits.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/bitbucket_files.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/bitbucket_projects.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/bitbucket_pull_requests.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/confluence_comments.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/confluence_labels.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/confluence_pages.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/confluence_search.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/jira_agile.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/jira_issues.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/jira_links.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/jira_projects.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/jira_search.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/jira_users.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/jira_workflow.py (100%) rename {.github => .claude}/skills/atlassian-skills/scripts/jira_worklog.py (100%) rename {.github => .claude}/skills/execute-implement/SKILL.md (100%) rename {.github => .claude}/skills/fieldworks-winapp/SKILL.md (100%) rename {.github => .claude}/skills/fieldworks-winapp/navigation/launch-or-attach.md (100%) rename {.github => .claude}/skills/fieldworks-winapp/navigation/project-loading.md (100%) rename {.github => .claude}/skills/fieldworks-winapp/navigation/screenshot-evidence.md (100%) rename {.github => .claude}/skills/fieldworks-winapp/navigation/styles-font-tab.md (100%) rename {.github => .claude}/skills/fieldworks-winapp/navigation/writing-system-font-options.md (100%) rename {.github => .claude}/skills/fieldworks-winapp/references/how-to-update.md (100%) rename {.github => .claude}/skills/fieldworks-winapp/references/mcp-selection.md (100%) rename {.github => .claude}/skills/fieldworks-winapp/references/research.md (100%) rename {.github => .claude}/skills/grill-with-docs/SKILL.md (100%) rename {.github => .claude}/skills/jira-bugfix/SKILL.md (97%) rename {.github => .claude}/skills/openspec-apply-change/SKILL.md (100%) rename {.github => .claude}/skills/openspec-archive-change/SKILL.md (100%) rename {.github => .claude}/skills/openspec-bulk-archive-change/SKILL.md (100%) rename {.github => .claude}/skills/openspec-continue-change/SKILL.md (100%) rename {.github => .claude}/skills/openspec-explore/SKILL.md (100%) rename {.github => .claude}/skills/openspec-ff-change/SKILL.md (100%) rename {.github => .claude}/skills/openspec-new-change/SKILL.md (100%) rename {.github => .claude}/skills/openspec-onboard/SKILL.md (100%) rename {.github => .claude}/skills/openspec-propose-change/SKILL.md (100%) rename {.github => .claude}/skills/openspec-sync-specs/SKILL.md (100%) rename {.github => .claude}/skills/openspec-verify-change/SKILL.md (100%) rename {.github => .claude}/skills/plan-design/SKILL.md (100%) rename {.github => .claude}/skills/powershell/SKILL.md (100%) rename {.github => .claude}/skills/pr-preflight/SKILL.md (100%) rename {.github => .claude}/skills/respond-to-review-comments/SKILL.md (100%) rename {.github => .claude}/skills/review/SKILL.md (100%) rename {.github => .claude}/skills/rubric-verify/SKILL.md (100%) rename {.github => .claude}/skills/sil-library-reuse/SKILL.md (100%) rename {.github => .claude}/skills/smart-screenshot-capture/SKILL.md (100%) rename {.github => .claude}/skills/verify-test/SKILL.md (100%) delete mode 100644 .github/skills/atlassian-readonly-skills/.env.example delete mode 100644 .github/skills/atlassian-skills/.env.example create mode 100644 CLAUDE.md diff --git a/.github/skills/atlassian-readonly-skills/REFERENCE.md b/.claude/skills/atlassian-readonly-skills/REFERENCE.md similarity index 100% rename from .github/skills/atlassian-readonly-skills/REFERENCE.md rename to .claude/skills/atlassian-readonly-skills/REFERENCE.md diff --git a/.github/skills/atlassian-readonly-skills/SKILL.md b/.claude/skills/atlassian-readonly-skills/SKILL.md similarity index 98% rename from .github/skills/atlassian-readonly-skills/SKILL.md rename to .claude/skills/atlassian-readonly-skills/SKILL.md index cc61df316b..4413ce7406 100644 --- a/.github/skills/atlassian-readonly-skills/SKILL.md +++ b/.claude/skills/atlassian-readonly-skills/SKILL.md @@ -33,13 +33,13 @@ Read-only Python utilities for Jira, Confluence, and Bitbucket integration, supp ```powershell # Get a single issue (inline Python one-liner) -python -c "import sys; sys.path.insert(0, '.github/skills/atlassian-readonly-skills/scripts'); from jira_issues import jira_get_issue; print(jira_get_issue('LT-22382'))" +python -c "import sys; sys.path.insert(0, '.claude/skills/atlassian-readonly-skills/scripts'); from jira_issues import jira_get_issue; print(jira_get_issue('LT-22382'))" # Search for issues (JQL query) -python -c "import sys; sys.path.insert(0, '.github/skills/atlassian-readonly-skills/scripts'); from jira_search import jira_search; print(jira_search('project = LT AND status = Open'))" +python -c "import sys; sys.path.insert(0, '.claude/skills/atlassian-readonly-skills/scripts'); from jira_search import jira_search; print(jira_search('project = LT AND status = Open'))" # Get issue workflow transitions -python -c "import sys; sys.path.insert(0, '.github/skills/atlassian-readonly-skills/scripts'); from jira_workflow import jira_get_transitions; print(jira_get_transitions('LT-22382'))" +python -c "import sys; sys.path.insert(0, '.claude/skills/atlassian-readonly-skills/scripts'); from jira_workflow import jira_get_transitions; print(jira_get_transitions('LT-22382'))" ``` Use the script modules in this skill directly. diff --git a/.github/skills/atlassian-readonly-skills/requirements.txt b/.claude/skills/atlassian-readonly-skills/requirements.txt similarity index 100% rename from .github/skills/atlassian-readonly-skills/requirements.txt rename to .claude/skills/atlassian-readonly-skills/requirements.txt diff --git a/.github/skills/atlassian-readonly-skills/scripts/__init__.py b/.claude/skills/atlassian-readonly-skills/scripts/__init__.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/__init__.py rename to .claude/skills/atlassian-readonly-skills/scripts/__init__.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/_common.py b/.claude/skills/atlassian-readonly-skills/scripts/_common.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/_common.py rename to .claude/skills/atlassian-readonly-skills/scripts/_common.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/bitbucket_commits.py b/.claude/skills/atlassian-readonly-skills/scripts/bitbucket_commits.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/bitbucket_commits.py rename to .claude/skills/atlassian-readonly-skills/scripts/bitbucket_commits.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/bitbucket_files.py b/.claude/skills/atlassian-readonly-skills/scripts/bitbucket_files.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/bitbucket_files.py rename to .claude/skills/atlassian-readonly-skills/scripts/bitbucket_files.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/bitbucket_projects.py b/.claude/skills/atlassian-readonly-skills/scripts/bitbucket_projects.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/bitbucket_projects.py rename to .claude/skills/atlassian-readonly-skills/scripts/bitbucket_projects.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/bitbucket_pull_requests.py b/.claude/skills/atlassian-readonly-skills/scripts/bitbucket_pull_requests.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/bitbucket_pull_requests.py rename to .claude/skills/atlassian-readonly-skills/scripts/bitbucket_pull_requests.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/confluence_comments.py b/.claude/skills/atlassian-readonly-skills/scripts/confluence_comments.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/confluence_comments.py rename to .claude/skills/atlassian-readonly-skills/scripts/confluence_comments.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/confluence_labels.py b/.claude/skills/atlassian-readonly-skills/scripts/confluence_labels.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/confluence_labels.py rename to .claude/skills/atlassian-readonly-skills/scripts/confluence_labels.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/confluence_pages.py b/.claude/skills/atlassian-readonly-skills/scripts/confluence_pages.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/confluence_pages.py rename to .claude/skills/atlassian-readonly-skills/scripts/confluence_pages.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/confluence_search.py b/.claude/skills/atlassian-readonly-skills/scripts/confluence_search.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/confluence_search.py rename to .claude/skills/atlassian-readonly-skills/scripts/confluence_search.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/jira_agile.py b/.claude/skills/atlassian-readonly-skills/scripts/jira_agile.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/jira_agile.py rename to .claude/skills/atlassian-readonly-skills/scripts/jira_agile.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/jira_issues.py b/.claude/skills/atlassian-readonly-skills/scripts/jira_issues.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/jira_issues.py rename to .claude/skills/atlassian-readonly-skills/scripts/jira_issues.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/jira_links.py b/.claude/skills/atlassian-readonly-skills/scripts/jira_links.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/jira_links.py rename to .claude/skills/atlassian-readonly-skills/scripts/jira_links.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/jira_projects.py b/.claude/skills/atlassian-readonly-skills/scripts/jira_projects.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/jira_projects.py rename to .claude/skills/atlassian-readonly-skills/scripts/jira_projects.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/jira_search.py b/.claude/skills/atlassian-readonly-skills/scripts/jira_search.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/jira_search.py rename to .claude/skills/atlassian-readonly-skills/scripts/jira_search.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/jira_users.py b/.claude/skills/atlassian-readonly-skills/scripts/jira_users.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/jira_users.py rename to .claude/skills/atlassian-readonly-skills/scripts/jira_users.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/jira_workflow.py b/.claude/skills/atlassian-readonly-skills/scripts/jira_workflow.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/jira_workflow.py rename to .claude/skills/atlassian-readonly-skills/scripts/jira_workflow.py diff --git a/.github/skills/atlassian-readonly-skills/scripts/jira_worklog.py b/.claude/skills/atlassian-readonly-skills/scripts/jira_worklog.py similarity index 100% rename from .github/skills/atlassian-readonly-skills/scripts/jira_worklog.py rename to .claude/skills/atlassian-readonly-skills/scripts/jira_worklog.py diff --git a/.github/skills/atlassian-skills/REFERENCE.md b/.claude/skills/atlassian-skills/REFERENCE.md similarity index 100% rename from .github/skills/atlassian-skills/REFERENCE.md rename to .claude/skills/atlassian-skills/REFERENCE.md diff --git a/.github/skills/atlassian-skills/SKILL.md b/.claude/skills/atlassian-skills/SKILL.md similarity index 98% rename from .github/skills/atlassian-skills/SKILL.md rename to .claude/skills/atlassian-skills/SKILL.md index f5efec7fd8..ed05cb53b7 100644 --- a/.github/skills/atlassian-skills/SKILL.md +++ b/.claude/skills/atlassian-skills/SKILL.md @@ -33,16 +33,16 @@ Python utilities for Jira, Confluence, and Bitbucket integration, supporting bot ```powershell # Create a new issue -python -c "import sys; sys.path.insert(0, '.github/skills/atlassian-skills/scripts'); from jira_issues import jira_create_issue; print(jira_create_issue('LT', 'Issue title', 'Bug'))" +python -c "import sys; sys.path.insert(0, '.claude/skills/atlassian-skills/scripts'); from jira_issues import jira_create_issue; print(jira_create_issue('LT', 'Issue title', 'Bug'))" # Update an existing issue -python -c "import sys; sys.path.insert(0, '.github/skills/atlassian-skills/scripts'); from jira_issues import jira_update_issue; print(jira_update_issue('LT-22382', summary='Updated title'))" +python -c "import sys; sys.path.insert(0, '.claude/skills/atlassian-skills/scripts'); from jira_issues import jira_update_issue; print(jira_update_issue('LT-22382', summary='Updated title'))" # Add a comment -python -c "import sys; sys.path.insert(0, '.github/skills/atlassian-skills/scripts'); from jira_issues import jira_add_comment; print(jira_add_comment('LT-22382', 'Comment text'))" +python -c "import sys; sys.path.insert(0, '.claude/skills/atlassian-skills/scripts'); from jira_issues import jira_add_comment; print(jira_add_comment('LT-22382', 'Comment text'))" # Transition issue status -python -c "import sys; sys.path.insert(0, '.github/skills/atlassian-skills/scripts'); from jira_workflow import jira_transition_issue; print(jira_transition_issue('LT-22382', 'In Progress'))" +python -c "import sys; sys.path.insert(0, '.claude/skills/atlassian-skills/scripts'); from jira_workflow import jira_transition_issue; print(jira_transition_issue('LT-22382', 'In Progress'))" ``` For read-only operations (get issue, search, get comments), use `atlassian-readonly-skills` instead. diff --git a/.github/skills/atlassian-skills/requirements.txt b/.claude/skills/atlassian-skills/requirements.txt similarity index 100% rename from .github/skills/atlassian-skills/requirements.txt rename to .claude/skills/atlassian-skills/requirements.txt diff --git a/.github/skills/atlassian-skills/scripts/__init__.py b/.claude/skills/atlassian-skills/scripts/__init__.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/__init__.py rename to .claude/skills/atlassian-skills/scripts/__init__.py diff --git a/.github/skills/atlassian-skills/scripts/_common.py b/.claude/skills/atlassian-skills/scripts/_common.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/_common.py rename to .claude/skills/atlassian-skills/scripts/_common.py diff --git a/.github/skills/atlassian-skills/scripts/bitbucket_commits.py b/.claude/skills/atlassian-skills/scripts/bitbucket_commits.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/bitbucket_commits.py rename to .claude/skills/atlassian-skills/scripts/bitbucket_commits.py diff --git a/.github/skills/atlassian-skills/scripts/bitbucket_files.py b/.claude/skills/atlassian-skills/scripts/bitbucket_files.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/bitbucket_files.py rename to .claude/skills/atlassian-skills/scripts/bitbucket_files.py diff --git a/.github/skills/atlassian-skills/scripts/bitbucket_projects.py b/.claude/skills/atlassian-skills/scripts/bitbucket_projects.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/bitbucket_projects.py rename to .claude/skills/atlassian-skills/scripts/bitbucket_projects.py diff --git a/.github/skills/atlassian-skills/scripts/bitbucket_pull_requests.py b/.claude/skills/atlassian-skills/scripts/bitbucket_pull_requests.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/bitbucket_pull_requests.py rename to .claude/skills/atlassian-skills/scripts/bitbucket_pull_requests.py diff --git a/.github/skills/atlassian-skills/scripts/confluence_comments.py b/.claude/skills/atlassian-skills/scripts/confluence_comments.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/confluence_comments.py rename to .claude/skills/atlassian-skills/scripts/confluence_comments.py diff --git a/.github/skills/atlassian-skills/scripts/confluence_labels.py b/.claude/skills/atlassian-skills/scripts/confluence_labels.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/confluence_labels.py rename to .claude/skills/atlassian-skills/scripts/confluence_labels.py diff --git a/.github/skills/atlassian-skills/scripts/confluence_pages.py b/.claude/skills/atlassian-skills/scripts/confluence_pages.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/confluence_pages.py rename to .claude/skills/atlassian-skills/scripts/confluence_pages.py diff --git a/.github/skills/atlassian-skills/scripts/confluence_search.py b/.claude/skills/atlassian-skills/scripts/confluence_search.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/confluence_search.py rename to .claude/skills/atlassian-skills/scripts/confluence_search.py diff --git a/.github/skills/atlassian-skills/scripts/jira_agile.py b/.claude/skills/atlassian-skills/scripts/jira_agile.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/jira_agile.py rename to .claude/skills/atlassian-skills/scripts/jira_agile.py diff --git a/.github/skills/atlassian-skills/scripts/jira_issues.py b/.claude/skills/atlassian-skills/scripts/jira_issues.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/jira_issues.py rename to .claude/skills/atlassian-skills/scripts/jira_issues.py diff --git a/.github/skills/atlassian-skills/scripts/jira_links.py b/.claude/skills/atlassian-skills/scripts/jira_links.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/jira_links.py rename to .claude/skills/atlassian-skills/scripts/jira_links.py diff --git a/.github/skills/atlassian-skills/scripts/jira_projects.py b/.claude/skills/atlassian-skills/scripts/jira_projects.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/jira_projects.py rename to .claude/skills/atlassian-skills/scripts/jira_projects.py diff --git a/.github/skills/atlassian-skills/scripts/jira_search.py b/.claude/skills/atlassian-skills/scripts/jira_search.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/jira_search.py rename to .claude/skills/atlassian-skills/scripts/jira_search.py diff --git a/.github/skills/atlassian-skills/scripts/jira_users.py b/.claude/skills/atlassian-skills/scripts/jira_users.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/jira_users.py rename to .claude/skills/atlassian-skills/scripts/jira_users.py diff --git a/.github/skills/atlassian-skills/scripts/jira_workflow.py b/.claude/skills/atlassian-skills/scripts/jira_workflow.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/jira_workflow.py rename to .claude/skills/atlassian-skills/scripts/jira_workflow.py diff --git a/.github/skills/atlassian-skills/scripts/jira_worklog.py b/.claude/skills/atlassian-skills/scripts/jira_worklog.py similarity index 100% rename from .github/skills/atlassian-skills/scripts/jira_worklog.py rename to .claude/skills/atlassian-skills/scripts/jira_worklog.py diff --git a/.github/skills/execute-implement/SKILL.md b/.claude/skills/execute-implement/SKILL.md similarity index 100% rename from .github/skills/execute-implement/SKILL.md rename to .claude/skills/execute-implement/SKILL.md diff --git a/.github/skills/fieldworks-winapp/SKILL.md b/.claude/skills/fieldworks-winapp/SKILL.md similarity index 100% rename from .github/skills/fieldworks-winapp/SKILL.md rename to .claude/skills/fieldworks-winapp/SKILL.md diff --git a/.github/skills/fieldworks-winapp/navigation/launch-or-attach.md b/.claude/skills/fieldworks-winapp/navigation/launch-or-attach.md similarity index 100% rename from .github/skills/fieldworks-winapp/navigation/launch-or-attach.md rename to .claude/skills/fieldworks-winapp/navigation/launch-or-attach.md diff --git a/.github/skills/fieldworks-winapp/navigation/project-loading.md b/.claude/skills/fieldworks-winapp/navigation/project-loading.md similarity index 100% rename from .github/skills/fieldworks-winapp/navigation/project-loading.md rename to .claude/skills/fieldworks-winapp/navigation/project-loading.md diff --git a/.github/skills/fieldworks-winapp/navigation/screenshot-evidence.md b/.claude/skills/fieldworks-winapp/navigation/screenshot-evidence.md similarity index 100% rename from .github/skills/fieldworks-winapp/navigation/screenshot-evidence.md rename to .claude/skills/fieldworks-winapp/navigation/screenshot-evidence.md diff --git a/.github/skills/fieldworks-winapp/navigation/styles-font-tab.md b/.claude/skills/fieldworks-winapp/navigation/styles-font-tab.md similarity index 100% rename from .github/skills/fieldworks-winapp/navigation/styles-font-tab.md rename to .claude/skills/fieldworks-winapp/navigation/styles-font-tab.md diff --git a/.github/skills/fieldworks-winapp/navigation/writing-system-font-options.md b/.claude/skills/fieldworks-winapp/navigation/writing-system-font-options.md similarity index 100% rename from .github/skills/fieldworks-winapp/navigation/writing-system-font-options.md rename to .claude/skills/fieldworks-winapp/navigation/writing-system-font-options.md diff --git a/.github/skills/fieldworks-winapp/references/how-to-update.md b/.claude/skills/fieldworks-winapp/references/how-to-update.md similarity index 100% rename from .github/skills/fieldworks-winapp/references/how-to-update.md rename to .claude/skills/fieldworks-winapp/references/how-to-update.md diff --git a/.github/skills/fieldworks-winapp/references/mcp-selection.md b/.claude/skills/fieldworks-winapp/references/mcp-selection.md similarity index 100% rename from .github/skills/fieldworks-winapp/references/mcp-selection.md rename to .claude/skills/fieldworks-winapp/references/mcp-selection.md diff --git a/.github/skills/fieldworks-winapp/references/research.md b/.claude/skills/fieldworks-winapp/references/research.md similarity index 100% rename from .github/skills/fieldworks-winapp/references/research.md rename to .claude/skills/fieldworks-winapp/references/research.md diff --git a/.github/skills/grill-with-docs/SKILL.md b/.claude/skills/grill-with-docs/SKILL.md similarity index 100% rename from .github/skills/grill-with-docs/SKILL.md rename to .claude/skills/grill-with-docs/SKILL.md diff --git a/.github/skills/jira-bugfix/SKILL.md b/.claude/skills/jira-bugfix/SKILL.md similarity index 97% rename from .github/skills/jira-bugfix/SKILL.md rename to .claude/skills/jira-bugfix/SKILL.md index 532b064490..daa0de36d3 100644 --- a/.github/skills/jira-bugfix/SKILL.md +++ b/.claude/skills/jira-bugfix/SKILL.md @@ -53,7 +53,7 @@ Then proceed through the steps below. Use the `atlassian-readonly-skills` scripts to get the issue: ```powershell -python -c "import sys; sys.path.insert(0, '.github/skills/atlassian-readonly-skills/scripts'); from jira_issues import jira_get_issue; print(jira_get_issue('LT-XXXXX'))" +python -c "import sys; sys.path.insert(0, '.claude/skills/atlassian-readonly-skills/scripts'); from jira_issues import jira_get_issue; print(jira_get_issue('LT-XXXXX'))" ``` Extract and present to the user: @@ -76,7 +76,7 @@ the user for their JIRA username and assign it: # Assign the issue (Data Center uses 'name' field) python -c " import sys, json -sys.path.insert(0, '.github/skills/atlassian-skills/scripts') +sys.path.insert(0, '.claude/skills/atlassian-skills/scripts') from jira_issues import jira_update_issue print(jira_update_issue('LT-XXXXX', assignee='username')) " @@ -94,7 +94,7 @@ print(jira_update_issue('LT-XXXXX', assignee='username')) # Get available transitions python -c " import sys -sys.path.insert(0, '.github/skills/atlassian-readonly-skills/scripts') +sys.path.insert(0, '.claude/skills/atlassian-readonly-skills/scripts') from jira_workflow import jira_get_transitions print(jira_get_transitions('LT-XXXXX')) " @@ -102,7 +102,7 @@ print(jira_get_transitions('LT-XXXXX')) # Transition (use the ID for "In Progress" from above) python -c " import sys -sys.path.insert(0, '.github/skills/atlassian-skills/scripts') +sys.path.insert(0, '.claude/skills/atlassian-skills/scripts') from jira_workflow import jira_transition_issue print(jira_transition_issue('LT-XXXXX', 'TRANSITION_ID')) " @@ -350,7 +350,7 @@ PR link: ```powershell python -c " import sys -sys.path.insert(0, '.github/skills/atlassian-skills/scripts') +sys.path.insert(0, '.claude/skills/atlassian-skills/scripts') from jira_issues import jira_add_comment comment = '''Fix implemented and PR created. diff --git a/.github/skills/openspec-apply-change/SKILL.md b/.claude/skills/openspec-apply-change/SKILL.md similarity index 100% rename from .github/skills/openspec-apply-change/SKILL.md rename to .claude/skills/openspec-apply-change/SKILL.md diff --git a/.github/skills/openspec-archive-change/SKILL.md b/.claude/skills/openspec-archive-change/SKILL.md similarity index 100% rename from .github/skills/openspec-archive-change/SKILL.md rename to .claude/skills/openspec-archive-change/SKILL.md diff --git a/.github/skills/openspec-bulk-archive-change/SKILL.md b/.claude/skills/openspec-bulk-archive-change/SKILL.md similarity index 100% rename from .github/skills/openspec-bulk-archive-change/SKILL.md rename to .claude/skills/openspec-bulk-archive-change/SKILL.md diff --git a/.github/skills/openspec-continue-change/SKILL.md b/.claude/skills/openspec-continue-change/SKILL.md similarity index 100% rename from .github/skills/openspec-continue-change/SKILL.md rename to .claude/skills/openspec-continue-change/SKILL.md diff --git a/.github/skills/openspec-explore/SKILL.md b/.claude/skills/openspec-explore/SKILL.md similarity index 100% rename from .github/skills/openspec-explore/SKILL.md rename to .claude/skills/openspec-explore/SKILL.md diff --git a/.github/skills/openspec-ff-change/SKILL.md b/.claude/skills/openspec-ff-change/SKILL.md similarity index 100% rename from .github/skills/openspec-ff-change/SKILL.md rename to .claude/skills/openspec-ff-change/SKILL.md diff --git a/.github/skills/openspec-new-change/SKILL.md b/.claude/skills/openspec-new-change/SKILL.md similarity index 100% rename from .github/skills/openspec-new-change/SKILL.md rename to .claude/skills/openspec-new-change/SKILL.md diff --git a/.github/skills/openspec-onboard/SKILL.md b/.claude/skills/openspec-onboard/SKILL.md similarity index 100% rename from .github/skills/openspec-onboard/SKILL.md rename to .claude/skills/openspec-onboard/SKILL.md diff --git a/.github/skills/openspec-propose-change/SKILL.md b/.claude/skills/openspec-propose-change/SKILL.md similarity index 100% rename from .github/skills/openspec-propose-change/SKILL.md rename to .claude/skills/openspec-propose-change/SKILL.md diff --git a/.github/skills/openspec-sync-specs/SKILL.md b/.claude/skills/openspec-sync-specs/SKILL.md similarity index 100% rename from .github/skills/openspec-sync-specs/SKILL.md rename to .claude/skills/openspec-sync-specs/SKILL.md diff --git a/.github/skills/openspec-verify-change/SKILL.md b/.claude/skills/openspec-verify-change/SKILL.md similarity index 100% rename from .github/skills/openspec-verify-change/SKILL.md rename to .claude/skills/openspec-verify-change/SKILL.md diff --git a/.github/skills/plan-design/SKILL.md b/.claude/skills/plan-design/SKILL.md similarity index 100% rename from .github/skills/plan-design/SKILL.md rename to .claude/skills/plan-design/SKILL.md diff --git a/.github/skills/powershell/SKILL.md b/.claude/skills/powershell/SKILL.md similarity index 100% rename from .github/skills/powershell/SKILL.md rename to .claude/skills/powershell/SKILL.md diff --git a/.github/skills/pr-preflight/SKILL.md b/.claude/skills/pr-preflight/SKILL.md similarity index 100% rename from .github/skills/pr-preflight/SKILL.md rename to .claude/skills/pr-preflight/SKILL.md diff --git a/.github/skills/respond-to-review-comments/SKILL.md b/.claude/skills/respond-to-review-comments/SKILL.md similarity index 100% rename from .github/skills/respond-to-review-comments/SKILL.md rename to .claude/skills/respond-to-review-comments/SKILL.md diff --git a/.github/skills/review/SKILL.md b/.claude/skills/review/SKILL.md similarity index 100% rename from .github/skills/review/SKILL.md rename to .claude/skills/review/SKILL.md diff --git a/.github/skills/rubric-verify/SKILL.md b/.claude/skills/rubric-verify/SKILL.md similarity index 100% rename from .github/skills/rubric-verify/SKILL.md rename to .claude/skills/rubric-verify/SKILL.md diff --git a/.github/skills/sil-library-reuse/SKILL.md b/.claude/skills/sil-library-reuse/SKILL.md similarity index 100% rename from .github/skills/sil-library-reuse/SKILL.md rename to .claude/skills/sil-library-reuse/SKILL.md diff --git a/.github/skills/smart-screenshot-capture/SKILL.md b/.claude/skills/smart-screenshot-capture/SKILL.md similarity index 100% rename from .github/skills/smart-screenshot-capture/SKILL.md rename to .claude/skills/smart-screenshot-capture/SKILL.md diff --git a/.github/skills/verify-test/SKILL.md b/.claude/skills/verify-test/SKILL.md similarity index 100% rename from .github/skills/verify-test/SKILL.md rename to .claude/skills/verify-test/SKILL.md diff --git a/.github/AGENTS.md b/.github/AGENTS.md index 6008ff8933..6f44658095 100644 --- a/.github/AGENTS.md +++ b/.github/AGENTS.md @@ -1,6 +1,7 @@ -# FieldWorks Agentic Instructions +# FieldWorks GitHub Compatibility -Short repo-level instructions for agents. +This folder exists for GitHub-required repository configuration and Copilot +entrypoints. ## Build and test @@ -10,8 +11,11 @@ Short repo-level instructions for agents. ## Documentation model -- Keep AGENTS guidance minimal and requirement-only. -- Source of prescriptive constraints is `.github/instructions/*.instructions.md`. +- Shared standing guidance lives in `../AGENTS.md`. +- GitHub-required custom instructions live in `.github/copilot-instructions.md` + and `.github/instructions/*.instructions.md`. +- Claude-only workflows live in `../.claude/skills/` and should not be + duplicated under `.github/`. ## Serena operating model @@ -32,6 +36,8 @@ Short repo-level instructions for agents. ## Relevant files +- `../AGENTS.md` +- `../CLAUDE.md` - `.github/instructions/build.instructions.md` - `.github/instructions/navigation.instructions.md` - `.github/instructions/testing.instructions.md` @@ -39,7 +45,7 @@ Short repo-level instructions for agents. - `.github/instructions/native.instructions.md` - `.github/instructions/installer.instructions.md` - `.github/rubrics/*.yaml` -- `.github/skills/rubric-verify/SKILL.md` +- `../.claude/skills/rubric-verify/SKILL.md` - `Src/AGENTS.md` - `FLExInstaller/AGENTS.md` diff --git a/.github/AI_GOVERNANCE.md b/.github/AI_GOVERNANCE.md index d826b40e71..fc932db8a9 100644 --- a/.github/AI_GOVERNANCE.md +++ b/.github/AI_GOVERNANCE.md @@ -1,33 +1,44 @@ # AI guidance governance ## Purpose -This repo uses a **tool-agnostic, agent-first** documentation strategy: -- Component knowledge lives with the component (`Src/**/AGENTS.md`). -- A small set of scoped instruction files in `.github/instructions/` provides **prescriptive, enforceable constraints**. -- `.github/AGENTS.md` is the short “front door” that links to the right places. -- Agent definitions in `.github/agents/` and role chatmodes in `.github/chatmodes/` describe **behavior/persona**, not system architecture. +This repo targets **GitHub Copilot** and **Claude Code** with a minimal, +two-tool documentation model: +- Shared standing guidance lives in root and nested `AGENTS.md` files. +- GitHub-required custom instructions stay in `.github/` only where GitHub + requires exact paths. +- Claude-only workflows live in `.claude/skills/`. +- Agent definitions in `.github/agents/` and role chatmodes in + `.github/chatmodes/` describe behavior/persona, not system architecture. ## Source of truth +- **Shared repo workflow**: `AGENTS.md` plus the nearest nested `AGENTS.md` - **Component architecture & entry points**: `Src//AGENTS.md` -- **Repo-wide workflow** (how to build/test, safety constraints): `.github/AGENTS.md` -- **Non-negotiable rules** (security, terminal restrictions, installer rules, etc.): `.github/instructions/*.instructions.md` +- **GitHub Copilot custom instructions**: `.github/copilot-instructions.md` and `.github/instructions/*.instructions.md` +- **Claude Code workflows**: `.claude/skills/*/SKILL.md` ## No duplication rule -- Do not copy component descriptions into `.github/instructions/`. -- Do not restate rules in multiple places. Prefer linking. -- If a rule must be enforced by agents for a subtree, add a scoped `.instructions.md`; otherwise document it in the relevant `AGENTS.md`. +- Do not duplicate shared standing guidance across `AGENTS.md`, `CLAUDE.md`, + and GitHub compatibility files. +- Keep each Claude skill in exactly one place: `.claude/skills/`. +- GitHub prompt files may reference Claude skill paths, but do not keep a + mirrored `.github/skills/` tree. +- If a rule must be auto-applied by GitHub Copilot, keep it in + `.github/instructions/*.instructions.md`; otherwise prefer the relevant + `AGENTS.md` or a Claude skill. ## What goes where -### `.github/AGENTS.md` +### `AGENTS.md` Use for: -- One-page onboarding for agents: build/test commands, repo constraints, and links. -- Pointers to the curated instruction set and the component docs. +- One-page onboarding for both tools: build/test commands, repo constraints, + and links. +- Stable, always-on guidance that should apply across sessions. ### `.github/instructions/*.instructions.md` Use for: - Prescriptive constraints that must be applied during editing/review. -- Cross-cutting rules that prevent expensive mistakes (security, terminal command restrictions, installer rules, managed/native boundary rules). +- Cross-cutting rules that GitHub Copilot needs through its official, + path-scoped instruction mechanism. **Curated keep set (intentionally small):** - `build.instructions.md` @@ -53,9 +64,14 @@ Baseline expectations for a component agent doc: - **Dependencies** (other components/layers) - **Tests** (test projects and the recommended `./test.ps1` invocation) +### `.claude/skills/` +Use for: +- Claude-only workflows, repeatable procedures, and task-specific guidance. +- Put multi-step procedures here instead of inflating `CLAUDE.md`. + ### `.github/agents/` and `.github/chatmodes/` Use for: -- Role definitions, boundaries, and tool preferences. +- GitHub Copilot role definitions, boundaries, and tool preferences. - Do not put component architecture here; link to the component `AGENTS.md`. ## External standards alignment (post-2025) @@ -68,5 +84,6 @@ Add a new `.github/instructions/.instructions.md` only when: - It applies broadly or to a subtree, and - It would be harmful if Copilot ignored it. -Otherwise, update the appropriate `Src/**/AGENTS.md`. +Otherwise, update the appropriate `AGENTS.md` or add a Claude skill under +`.claude/skills/`. diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index b378214a8b..8135eccb10 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,5 +1,10 @@ # FieldWorks Copilot Code Review Instructions +Prefer the shared repo guidance in `AGENTS.md` and the nearest nested +`AGENTS.md` first. Keep GitHub-specific, path-scoped constraints in +`.github/instructions/*.instructions.md`. Claude-only task workflows live in +`.claude/skills/` and should not be mirrored under `.github/skills/`. + ## Purpose Review FieldWorks pull requests for the project-specific risks most likely to diff --git a/.github/prompts/pr-preflight.prompt.md b/.github/prompts/pr-preflight.prompt.md index 9d7b436634..46f00ee183 100644 --- a/.github/prompts/pr-preflight.prompt.md +++ b/.github/prompts/pr-preflight.prompt.md @@ -4,6 +4,6 @@ agent: "agent" argument-hint: "Optional branch purpose or PR goal" --- -Use the `pr-preflight` skill from `.github/skills/pr-preflight/SKILL.md` for the current branch. +Use the `pr-preflight` skill from `.claude/skills/pr-preflight/SKILL.md` for the current branch. Treat any text supplied with this prompt as the optional branch purpose or PR goal. If no purpose is available, ask for it during the skill setup. Load `CONTEXT.md`, `.github/context/codebase.context.md`, and `.github/instructions/review-analyzer.instructions.md`, then follow the skill workflow through `.review/summary.md` creation and, when posting or updating a PR, a Quick Summary-first PR description. diff --git a/.github/prompts/respond-to-review-comments.prompt.md b/.github/prompts/respond-to-review-comments.prompt.md index 8d609da1b2..6b2dae0c5a 100644 --- a/.github/prompts/respond-to-review-comments.prompt.md +++ b/.github/prompts/respond-to-review-comments.prompt.md @@ -4,7 +4,7 @@ agent: "agent" argument-hint: "Optional PR URL, reviewer name, comment ID, or focus area" --- -Use the `respond-to-review-comments` skill from `.github/skills/respond-to-review-comments/SKILL.md`. +Use the `respond-to-review-comments` skill from `.claude/skills/respond-to-review-comments/SKILL.md`. Treat any text supplied with this prompt as optional input: a PR URL, PR number, reviewer name, comment ID, pasted review comments, or a focus area. diff --git a/.github/skills/atlassian-readonly-skills/.env.example b/.github/skills/atlassian-readonly-skills/.env.example deleted file mode 100644 index f8c506218d..0000000000 --- a/.github/skills/atlassian-readonly-skills/.env.example +++ /dev/null @@ -1,78 +0,0 @@ -# ============================================ -# Atlassian Skills Configuration -# ============================================ -# Choose ONE authentication method per service: -# - Option 1: PAT Token (for Data Center/Server) -# - Option 2: Username + API Token (for Cloud) -# If both are provided, PAT Token takes precedence. - -# ============================================ -# JIRA CONFIGURATION -# ============================================ - -# Base URL for your Jira instance (REQUIRED) -# For SIL's JIRA (LT-* tickets): https://jira.sil.org -JIRA_URL=https://jira.sil.org - -# --- Option 1: Data Center / Server (PAT Token) --- -# Personal Access Token for Jira Data Center/Server -# For SIL JIRA, generate at: https://jira.sil.org/secure/ViewProfile.jspa → Personal Access Tokens -JIRA_PAT_TOKEN=your_jira_pat_token_here - -# --- Option 2: Cloud (API Token) --- -# Your Jira username (usually your email) -# JIRA_USERNAME=your.email@sil.org -# Your Jira API token -# Generate at: https://id.atlassian.com/manage-profile/security/api-tokens -# JIRA_API_TOKEN=your_jira_api_token_here - -# --- SSL Verification (OPTIONAL) --- -# Enable SSL certificate verification (default: false) -# Set to 'true', '1', or 'yes' to enable SSL verification -# JIRA_SSL_VERIFY=false - -# ============================================ -# CONFLUENCE CONFIGURATION -# ============================================ - -# Base URL for your Confluence instance (REQUIRED) -# For Cloud: https://your-company.atlassian.net/wiki -# For Data Center: https://confluence.your-company.com -CONFLUENCE_URL=https://your-company.atlassian.net/wiki - -# --- Option 1: Data Center / Server (PAT Token) --- -# Personal Access Token for Confluence Data Center/Server -# Generate at: Profile → Personal Access Tokens → Create token -# CONFLUENCE_PAT_TOKEN=your_confluence_pat_token_here - -# --- Option 2: Cloud (API Token) --- -# Your Confluence username (usually your email) -CONFLUENCE_USERNAME=your.email@company.com -# Your Confluence API token -# Generate at: https://id.atlassian.com/manage-profile/security/api-tokens -CONFLUENCE_API_TOKEN=your_confluence_api_token_here - -# --- SSL Verification (OPTIONAL) --- -# Enable SSL certificate verification (default: false) -# Set to 'true', '1', or 'yes' to enable SSL verification -# CONFLUENCE_SSL_VERIFY=false - -# ============================================ -# BITBUCKET CONFIGURATION -# ============================================ - -# Base URL for your Bitbucket Server/Data Center instance (REQUIRED) -BITBUCKET_URL=https://bitbucket.your-company.com - -# --- Option 1: Data Center / Server (PAT Token) --- -# Personal Access Token for Bitbucket Server/Data Center -# Generate at: Profile → Manage Account → Personal Access Tokens -# BITBUCKET_PAT_TOKEN=your_bitbucket_pat_token_here - -# --- Option 2: Basic Auth (Username + Password) --- -BITBUCKET_USERNAME=your.username -BITBUCKET_API_TOKEN=your_password_or_token - -# --- SSL Verification (OPTIONAL) --- -# Enable SSL certificate verification (default: false) -# BITBUCKET_SSL_VERIFY=false diff --git a/.github/skills/atlassian-skills/.env.example b/.github/skills/atlassian-skills/.env.example deleted file mode 100644 index f8c506218d..0000000000 --- a/.github/skills/atlassian-skills/.env.example +++ /dev/null @@ -1,78 +0,0 @@ -# ============================================ -# Atlassian Skills Configuration -# ============================================ -# Choose ONE authentication method per service: -# - Option 1: PAT Token (for Data Center/Server) -# - Option 2: Username + API Token (for Cloud) -# If both are provided, PAT Token takes precedence. - -# ============================================ -# JIRA CONFIGURATION -# ============================================ - -# Base URL for your Jira instance (REQUIRED) -# For SIL's JIRA (LT-* tickets): https://jira.sil.org -JIRA_URL=https://jira.sil.org - -# --- Option 1: Data Center / Server (PAT Token) --- -# Personal Access Token for Jira Data Center/Server -# For SIL JIRA, generate at: https://jira.sil.org/secure/ViewProfile.jspa → Personal Access Tokens -JIRA_PAT_TOKEN=your_jira_pat_token_here - -# --- Option 2: Cloud (API Token) --- -# Your Jira username (usually your email) -# JIRA_USERNAME=your.email@sil.org -# Your Jira API token -# Generate at: https://id.atlassian.com/manage-profile/security/api-tokens -# JIRA_API_TOKEN=your_jira_api_token_here - -# --- SSL Verification (OPTIONAL) --- -# Enable SSL certificate verification (default: false) -# Set to 'true', '1', or 'yes' to enable SSL verification -# JIRA_SSL_VERIFY=false - -# ============================================ -# CONFLUENCE CONFIGURATION -# ============================================ - -# Base URL for your Confluence instance (REQUIRED) -# For Cloud: https://your-company.atlassian.net/wiki -# For Data Center: https://confluence.your-company.com -CONFLUENCE_URL=https://your-company.atlassian.net/wiki - -# --- Option 1: Data Center / Server (PAT Token) --- -# Personal Access Token for Confluence Data Center/Server -# Generate at: Profile → Personal Access Tokens → Create token -# CONFLUENCE_PAT_TOKEN=your_confluence_pat_token_here - -# --- Option 2: Cloud (API Token) --- -# Your Confluence username (usually your email) -CONFLUENCE_USERNAME=your.email@company.com -# Your Confluence API token -# Generate at: https://id.atlassian.com/manage-profile/security/api-tokens -CONFLUENCE_API_TOKEN=your_confluence_api_token_here - -# --- SSL Verification (OPTIONAL) --- -# Enable SSL certificate verification (default: false) -# Set to 'true', '1', or 'yes' to enable SSL verification -# CONFLUENCE_SSL_VERIFY=false - -# ============================================ -# BITBUCKET CONFIGURATION -# ============================================ - -# Base URL for your Bitbucket Server/Data Center instance (REQUIRED) -BITBUCKET_URL=https://bitbucket.your-company.com - -# --- Option 1: Data Center / Server (PAT Token) --- -# Personal Access Token for Bitbucket Server/Data Center -# Generate at: Profile → Manage Account → Personal Access Tokens -# BITBUCKET_PAT_TOKEN=your_bitbucket_pat_token_here - -# --- Option 2: Basic Auth (Username + Password) --- -BITBUCKET_USERNAME=your.username -BITBUCKET_API_TOKEN=your_password_or_token - -# --- SSL Verification (OPTIONAL) --- -# Enable SSL certificate verification (default: false) -# BITBUCKET_SSL_VERIFY=false diff --git a/.gitignore b/.gitignore index 8e17117da2..03fe15bf2e 100644 --- a/.gitignore +++ b/.gitignore @@ -79,7 +79,7 @@ _user.mak.lnx *.code-workspace .env .env.* -.github/skills/**/.env +.claude/skills/**/.env .dotest/ .depend diff --git a/AGENTS.md b/AGENTS.md index 757773468b..604c1a1931 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -17,9 +17,13 @@ Minimal, high-signal guidance for coding agents in this repository. ## Context model -- Use `.github/instructions/*.instructions.md` for prescriptive rules. -- Apply `.github/instructions/navigation.instructions.md` for structural navigation and hidden-dependency handling. -- Use `Src/AGENTS.md`, `.github/AGENTS.md`, `FLExInstaller/AGENTS.md`, and `openspec/AGENTS.md` for area-specific guidance. +- Keep shared repo guidance in this file plus the nearest nested `AGENTS.md`. +- GitHub Copilot custom instructions still require `.github/copilot-instructions.md` + and `.github/instructions/*.instructions.md`. +- Claude Code reads `CLAUDE.md`, which imports this file; keep Claude-only + workflows under `.claude/skills/`. +- Use `Src/AGENTS.md`, `FLExInstaller/AGENTS.md`, `openspec/AGENTS.md`, and + `.github/AGENTS.md` when touching GitHub-specific repo files. ## External Dependencies (LibLcm) @@ -32,7 +36,7 @@ FieldWorks is built upon the `liblcm` (Language & Culture Model) repository, whi ## Issue tracking and Jira - Use GitHub issues/PRs (and Jira when required) for issue workflow. -- For `LT-` Jira tickets, use the Atlassian Python skill scripts under `.github/skills/atlassian-readonly-skills/scripts`. +- For `LT-` Jira tickets, use the Atlassian Python skill scripts under `.claude/skills/atlassian-readonly-skills/scripts`. - Do not attempt direct web access to Jira pages from agent tooling. - GitHub Copilot for Jira may be used with authenticated Jira Data Center access when the approved service-user/API policy limits which issues are exposed. - See `.github/copilot-jira-setup.md` for setup and secret guidance. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000000..2f42fac780 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,9 @@ +@AGENTS.md + +## Claude Code + +- Keep repo-wide standing guidance in `AGENTS.md` and import it here. +- Put Claude-only workflows and task procedures under `.claude/skills/`. +- Keep `.github/` only for GitHub-required compatibility files such as + workflows, PR templates, `copilot-instructions.md`, and + `.github/instructions/*.instructions.md`. \ No newline at end of file diff --git a/Docs/agent-docs-refresh.md b/Docs/agent-docs-refresh.md index 219f505c6b..80d6f537e2 100644 --- a/Docs/agent-docs-refresh.md +++ b/Docs/agent-docs-refresh.md @@ -4,9 +4,14 @@ FieldWorks uses a minimal AGENTS model. There is no hash/frontmatter pipeline an ## Current model -- Keep only the core files: `AGENTS.md`, `.github/AGENTS.md`, `Src/AGENTS.md`, `FLExInstaller/AGENTS.md`, `openspec/AGENTS.md`. +- Keep only the core always-on files: `AGENTS.md`, `CLAUDE.md`, + `.github/AGENTS.md`, `Src/AGENTS.md`, `FLExInstaller/AGENTS.md`, + `openspec/AGENTS.md`. - Keep content requirement-only and short. -- Use `.github/instructions/*.instructions.md` for strict rules. +- Use `.github/instructions/*.instructions.md` only for GitHub-required, + path-scoped Copilot rules. +- Put Claude-only procedures under `.claude/skills/` instead of inflating the + always-on docs. ## Refresh process diff --git a/Docs/workflows/ai-pr-workflow.md b/Docs/workflows/ai-pr-workflow.md index 170051cb0e..2efaa6fd1b 100644 --- a/Docs/workflows/ai-pr-workflow.md +++ b/Docs/workflows/ai-pr-workflow.md @@ -21,10 +21,10 @@ Use this workflow with either: | Goal | GitHub Copilot | Claude Code | Repo anchor | |------|----------------|-------------|-------------| -| Read Jira issue | Atlassian VS Code extension or ask Copilot to use the Atlassian helpers | Use the Atlassian helper scripts or ask Claude to follow them | [../.github/copilot-jira-setup.md](../../.github/copilot-jira-setup.md), [../.github/skills/atlassian-readonly-skills/SKILL.md](../../.github/skills/atlassian-readonly-skills/SKILL.md) | +| Read Jira issue | Atlassian VS Code extension or ask Copilot to use the Atlassian helpers | Use the Atlassian helper scripts or ask Claude to follow them | [../.github/copilot-jira-setup.md](../../.github/copilot-jira-setup.md), [../.claude/skills/atlassian-readonly-skills/SKILL.md](../../.claude/skills/atlassian-readonly-skills/SKILL.md) | | Create isolated worktree | VS Code task: `Worktree: Create/Open from branch` | Use the same VS Code task, then start Claude inside that worktree | [../.vscode/tasks.json](../../.vscode/tasks.json), [../scripts/Worktree-CreateFromBranch.ps1](../../scripts/Worktree-CreateFromBranch.ps1) | -| Preflight branch before PR | `/pr-preflight` | Ask Claude to follow [../.github/skills/pr-preflight/SKILL.md](../../.github/skills/pr-preflight/SKILL.md) for the current branch | [../.github/prompts/pr-preflight.prompt.md](../../.github/prompts/pr-preflight.prompt.md) | -| Respond to review comments | `/respond-to-review-comments` | Ask Claude to follow [../.github/skills/respond-to-review-comments/SKILL.md](../../.github/skills/respond-to-review-comments/SKILL.md) | [../.github/prompts/respond-to-review-comments.prompt.md](../../.github/prompts/respond-to-review-comments.prompt.md) | +| Preflight branch before PR | `/pr-preflight` | Ask Claude to follow [../.claude/skills/pr-preflight/SKILL.md](../../.claude/skills/pr-preflight/SKILL.md) for the current branch | [../.github/prompts/pr-preflight.prompt.md](../../.github/prompts/pr-preflight.prompt.md) | +| Respond to review comments | `/respond-to-review-comments` | Ask Claude to follow [../.claude/skills/respond-to-review-comments/SKILL.md](../../.claude/skills/respond-to-review-comments/SKILL.md) | [../.github/prompts/respond-to-review-comments.prompt.md](../../.github/prompts/respond-to-review-comments.prompt.md) | | Build and test | VS Code `Build`, `Test`, and `CI: Full local check` tasks | Same tasks or `./build.ps1` and `./test.ps1` from the worktree root | [../ReadMe.md](../../ReadMe.md), [../AGENTS.md](../../AGENTS.md) | ## Phase 1: Pull The Jira Issue @@ -42,7 +42,7 @@ Recommended scriptable path: ```powershell # Read one Jira issue through the repo's read-only helper -python -c "import sys; sys.path.insert(0, '.github/skills/atlassian-readonly-skills/scripts'); from jira_issues import jira_get_issue; print(jira_get_issue('LT-22382'))" +python -c "import sys; sys.path.insert(0, '.claude/skills/atlassian-readonly-skills/scripts'); from jira_issues import jira_get_issue; print(jira_get_issue('LT-22382'))" ``` Best practice from Atlassian's linked-development docs: @@ -140,7 +140,7 @@ Run: Ask Claude to follow the repo skill directly. A good prompt is: ```text -Follow .github/skills/pr-preflight/SKILL.md for the current branch. +Follow .claude/skills/pr-preflight/SKILL.md for the current branch. Use CONTEXT.md, .github/context/codebase.context.md, and .github/instructions/review-analyzer.instructions.md. Write .review/summary.md. ``` @@ -196,7 +196,7 @@ Run: Ask Claude to follow the repo skill directly. A good prompt is: ```text -Follow .github/skills/respond-to-review-comments/SKILL.md for this PR. +Follow .claude/skills/respond-to-review-comments/SKILL.md for this PR. Classify each comment as Fix, Clarify, Reply only, or Defer. Verify each change with the narrowest FieldWorks check. ``` @@ -219,7 +219,7 @@ Before merge or immediately after it, make sure Jira reflects the actual state o Example: ```powershell -python -c "import sys; sys.path.insert(0, '.github/skills/atlassian-skills/scripts'); from jira_issues import jira_add_comment; print(jira_add_comment('LT-22382', 'PR ready for review: https://github.com/sillsdev/FieldWorks/pull/905'))" +python -c "import sys; sys.path.insert(0, '.claude/skills/atlassian-skills/scripts'); from jira_issues import jira_add_comment; print(jira_add_comment('LT-22382', 'PR ready for review: https://github.com/sillsdev/FieldWorks/pull/905'))" ``` ## Short Checklist diff --git a/ReadMe.md b/ReadMe.md index df00ac0d58..d964bd39ba 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -110,10 +110,12 @@ requirements and troubleshooting tips. ## Agent instruction files -We maintain a minimal AGENTS model (`AGENTS.md`, `.github/AGENTS.md`, -`Src/AGENTS.md`, `FLExInstaller/AGENTS.md`, `openspec/AGENTS.md`) and a -minimal, requirement-focused guidance model. +We maintain a shared AGENTS model (`AGENTS.md`, `CLAUDE.md`, +`.github/AGENTS.md`, `Src/AGENTS.md`, `FLExInstaller/AGENTS.md`, +`openspec/AGENTS.md`) and a minimal, requirement-focused guidance model. -Prescriptive constraints remain under `.github/instructions/*.instructions.md`. +GitHub Copilot custom instructions remain under +`.github/instructions/*.instructions.md` because GitHub requires those paths. +Claude Code workflows live under `.claude/skills/`. See [.github/AI_GOVERNANCE.md](.github/AI_GOVERNANCE.md) for the documentation taxonomy and “source of truth” rules. diff --git a/openspec/AGENTS.md b/openspec/AGENTS.md index f84d5c6ea3..86f9af1fce 100644 --- a/openspec/AGENTS.md +++ b/openspec/AGENTS.md @@ -6,7 +6,7 @@ These instructions are for AI assistants working with the OpenSpec workflow in F Use `openspec/AGENTS.md` when the request: - Mentions OpenSpec, proposals, specs, design, tasks, verification, sync, or archive work - References `/opsx:*` commands or asks to do the equivalent workflow from a non-Copilot agent such as Claude Code -- Touches `openspec/**`, `.github/prompts/opsx-*`, or `.github/skills/openspec-*` +- Touches `openspec/**`, `.github/prompts/opsx-*`, or `.claude/skills/openspec-*` Use `openspec/AGENTS.md` to learn: - The canonical OpenSpec workflow for this repository diff --git a/openspec/config.yaml b/openspec/config.yaml index 8696e1a426..d5e387c6b8 100644 --- a/openspec/config.yaml +++ b/openspec/config.yaml @@ -34,7 +34,7 @@ context: | ## Issue Tracking - Primary: GitHub issues/PRs - - Legacy: JIRA (LT-* tickets) via .github/skills/atlassian-* + - Legacy: JIRA (LT-* tickets) via .claude/skills/atlassian-* # Per-artifact rules rules: