[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71BC79Y4H2WK0DYFA41JWF9":3,"skill-same:01M71BC79Y4H2WK0DYFA41JWF9":63},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M71BC79Y4H2WK0DYFA41JWF9","confluence-connect",null,"Set up and verify Confluence integration. Use when the user says 'connect to Confluence', 'set up Confluence', or 'configure Confluence'.","superMLdev\u002Fsmart-sdlc","superMLdev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F214327565?v=4","01M71B92B8VKCZZ0YCSNAJ9CB1","superML.dev","01M71B92BVCWP4F23ANQ0ZKF6S",8,"MIT","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fconfluence\u002Fconnect\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34],"connect","confluence connect","confluence","SET","up","use","when","configure","verify","integration","user","2026-11-10 10:12:30",false,"---\nname: confluence-connect\ndescription: \"Set up and verify Confluence integration. Use when the user says 'connect to Confluence', 'set up Confluence', or 'configure Confluence'.\"\n---\n\n# Confluence — Connect and Verify\n\n## Goal\n\nValidate Confluence connectivity and store working credentials so push-doc and sync operations work without re-prompting.\n\nSupports two connection modes:\n- **REST API** — direct HTTP calls using email + API token\n- **MCP Server** — uses the Atlassian MCP server (same server as JIRA if already configured)\n\n---\n\n## Security Check First\n\nConfirm `_superml\u002Fconfig.yml` is in `.gitignore` before proceeding (same check as `jira-connect`).\n\n---\n\n## Step 1: Choose Connection Mode\n\nCheck `_superml\u002Fconfig.yml` for `jira.connection_mode`. If JIRA is already configured in MCP mode, suggest using the same MCP server:\n\n> \"JIRA is configured to use MCP Server. Would you like Confluence to use the same MCP server? (recommended — same Atlassian credentials)\n> 1. Yes, use the same MCP server\n> 2. No, use REST API for Confluence\"\n\nIf JIRA is not configured, ask:\n\n> \"How would you like to connect to Confluence?\n> 1. **REST API** — email + API token, direct HTTP calls\n> 2. **MCP Server** — Atlassian Remote MCP Server or a self-hosted MCP package\"\n\n---\n\n## Path A: REST API Connection\n\n### A1: Collect Confluence Details\n\nAsk:\n1. **Confluence base URL**: e.g., `https:\u002F\u002Fyourorg.atlassian.net\u002Fwiki`\n2. **Space key**: e.g., `ENG` or `PROD` — the key of the space to publish docs to\n3. **Email** (if not already in JIRA config, re-use it)\n4. **API token** (same Atlassian token as JIRA — share if already configured)\n\n### A2: Verify Connectivity\n\n```bash\ncurl -s \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fspace\u002F{space_key}\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Accept: application\u002Fjson\" | python3 -c \"\nimport sys, json\nd = json.load(sys.stdin)\nprint('✅ Connected to space:', d['name'])\nprint('Space key:', d['key'])\n\"\n```\n\nIf fails, list available spaces:\n```bash\ncurl -s \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fspace?type=global&limit=20\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Accept: application\u002Fjson\" | python3 -c \"\nimport sys, json\nresults = json.load(sys.stdin)['results']\n[print(s['key'], '-', s['name']) for s in results]\n\"\n```\n\n⏸️ **STOP** — connectivity must succeed before saving.\n\n### A3: Set Parent Page (Optional)\n\nAsk: \"Should published docs go under a specific parent page? (enter page title or leave blank for space root)\"\n\nIf provided, find the page ID:\n```bash\ncurl -s \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fcontent?title={encoded_title}&spaceKey={space_key}\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Accept: application\u002Fjson\" | python3 -c \"\nimport sys, json\nresults = json.load(sys.stdin)['results']\nprint('Page ID:', results[0]['id']) if results else print('Page not found')\n\"\n```\n\n### A4: Save to Config\n\nUpdate `{project-root}\u002F_superml\u002Fconfig.yml` under the `confluence:` key:\n\n```yaml\nconfluence:\n  enabled: true\n  connection_mode: rest\n  base_url: \"{confluence_url}\"\n  space_key: \"{space_key}\"\n  root_page_id: \"{page_id_or_empty}\"\n  email: \"{email}\"\n  api_token: \"{api_token}\"\n  prd_page_parent: \"Requirements\"\n  architecture_page_parent: \"Architecture\"\n  stories_page_parent: \"Stories\"\n```\n\n---\n\n## Path B: MCP Server Connection\n\nIf JIRA is already configured in MCP mode, the same server handles Confluence — no additional setup needed beyond confirming the space key.\n\n### B1: Get the Space Key\n\nAsk: \"What is your Confluence space key? (e.g. `ENG`, `PROJ`, `DOCS`)\"\n\nTest via MCP:\n> \"In a Copilot chat, type: `@atlassian list Confluence spaces`\n> Confirm your space key appears in the list.\"\n\n### B2: Set Parent Page (Optional)\n\nAsk: \"Should published docs go under a specific parent page title? (leave blank for space root)\"\n\n### B3: Save to Config\n\n```yaml\nconfluence:\n  enabled: true\n  connection_mode: mcp\n  space_key: \"{space_key}\"\n  root_page_title: \"{parent_page_title_or_empty}\"\n  mcp_server:\n    name: \"atlassian\"    # matches the server key in .vscode\u002Fmcp.json\n  prd_page_parent: \"Requirements\"\n  architecture_page_parent: \"Architecture\"\n  stories_page_parent: \"Stories\"\n```\n\n---\n\n## Completion\n\nShow summary appropriate to the connection mode:\n\n**REST mode:**\n> \"✅ Confluence connected (REST API).\n> Space: {space_name} ({space_key}) — {confluence_url}\"\n\n**MCP mode:**\n> \"✅ Confluence connected (MCP Server: atlassian).\n> Space: {space_key}\"\n\nEither way:\n> \"Available skills:\n> - `confluence-push-doc` — push any planning artifact as a Confluence page\n> - `confluence-sync` — keep docs in sync with local changes\n>\n> Skills will automatically use your configured connection mode.\"\n","# Confluence — Connect and Verify\n\n## Goal\n\nValidate Confluence connectivity and store working credentials so push-doc and sync operations work without re-prompting.\n\nSupports two connection modes:\n- **REST API** — direct HTTP calls using email + API token\n- **MCP Server** — uses the Atlassian MCP server (same server as JIRA if already configured)\n\n---\n\n## Security Check First\n\nConfirm `_superml\u002Fconfig.yml` is in `.gitignore` before proceeding (same check as `jira-connect`).\n\n---\n\n## Step 1: Choose Connection Mode\n\nCheck `_superml\u002Fconfig.yml` for `jira.connection_mode`. If JIRA is already configured in MCP mode, suggest using the same MCP server:\n\n> \"JIRA is configured to use MCP Server. Would you like Confluence to use the same MCP server? (recommended — same Atlassian credentials)\n> 1. Yes, use the same MCP server\n> 2. No, use REST API for Confluence\"\n\nIf JIRA is not configured, ask:\n\n> \"How would you like to connect to Confluence?\n> 1. **REST API** — email + API token, direct HTTP calls\n> 2. **MCP Server** — Atlassian Remote MCP Server or a self-hosted MCP package\"\n\n---\n\n## Path A: REST API Connection\n\n### A1: Collect Confluence Details\n\nAsk:\n1. **Confluence base URL**: e.g., `https:\u002F\u002Fyourorg.atlassian.net\u002Fwiki`\n2. **Space key**: e.g., `ENG` or `PROD` — the key of the space to publish docs to\n3. **Email** (if not already in JIRA config, re-use it)\n4. **API token** (same Atlassian token as JIRA — share if already configured)\n\n### A2: Verify Connectivity\n\n```bash\ncurl -s \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fspace\u002F{space_key}\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Accept: application\u002Fjson\" | python3 -c \"\nimport sys, json\nd = json.load(sys.stdin)\nprint('✅ Connected to space:', d['name'])\nprint('Space key:', d['key'])\n\"\n```\n\nIf fails, list available spaces:\n```bash\ncurl -s \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fspace?type=global&limit=20\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Accept: application\u002Fjson\" | python3 -c \"\nimport sys, json\nresults = json.load(sys.stdin)['results']\n[print(s['key'], '-', s['name']) for s in results]\n\"\n```\n\n⏸️ **STOP** — connectivity must succeed before saving.\n\n### A3: Set Parent Page (Optional)\n\nAsk: \"Should published docs go under a specific parent page? (enter page title or leave blank for space root)\"\n\nIf provided, find the page ID:\n```bash\ncurl -s \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fcontent?title={encoded_title}&spaceKey={space_key}\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Accept: application\u002Fjson\" | python3 -c \"\nimport sys, json\nresults = json.load(sys.stdin)['results']\nprint('Page ID:', results[0]['id']) if results else print('Page not found')\n\"\n```\n\n### A4: Save to Config\n\nUpdate `{project-root}\u002F_superml\u002Fconfig.yml` under the `confluence:` key:\n\n```yaml\nconfluence:\n  enabled: true\n  connection_mode: rest\n  base_url: \"{confluence_url}\"\n  space_key: \"{space_key}\"\n  root_page_id: \"{page_id_or_empty}\"\n  email: \"{email}\"\n  api_token: \"{api_token}\"\n  prd_page_parent: \"Requirements\"\n  architecture_page_parent: \"Architecture\"\n  stories_page_parent: \"Stories\"\n```\n\n---\n\n## Path B: MCP Server Connection\n\nIf JIRA is already configured in MCP mode, the same server handles Confluence — no additional setup needed beyond confirming the space key.\n\n### B1: Get the Space Key\n\nAsk: \"What is your Confluence space key? (e.g. `ENG`, `PROJ`, `DOCS`)\"\n\nTest via MCP:\n> \"In a Copilot chat, type: `@atlassian list Confluence spaces`\n> Confirm your space key appears in the list.\"\n\n### B2: Set Parent Page (Optional)\n\nAsk: \"Should published docs go under a specific parent page title? (leave blank for space root)\"\n\n### B3: Save to Config\n\n```yaml\nconfluence:\n  enabled: true\n  connection_mode: mcp\n  space_key: \"{space_key}\"\n  root_page_title: \"{parent_page_title_or_empty}\"\n  mcp_server:\n    name: \"atlassian\"    # matches the server key in .vscode\u002Fmcp.json\n  prd_page_parent: \"Requirements\"\n  architecture_page_parent: \"Architecture\"\n  stories_page_parent: \"Stories\"\n```\n\n---\n\n## Completion\n\nShow summary appropriate to the connection mode:\n\n**REST mode:**\n> \"✅ Confluence connected (REST API).\n> Space: {space_name} ({space_key}) — {confluence_url}\"\n\n**MCP mode:**\n> \"✅ Confluence connected (MCP Server: atlassian).\n> Space: {space_key}\"\n\nEither way:\n> \"Available skills:\n> - `confluence-push-doc` — push any planning artifact as a Confluence page\n> - `confluence-sync` — keep docs in sync with local changes\n>\n> Skills will automatically use your configured connection mode.\"\n",{"name":5,"description":7},"master","86f9b15bf32a913d78f2dce364b9fe56e53ddf12","skills\u002Fintegrations\u002Fconfluence\u002Fconnect",1,"https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc","https:\u002F\u002Fsupermldev.github.io\u002Fsmart-sdlc\u002F","https:\u002F\u002Fgithub.com\u002FsuperMLdev","https:\u002F\u002Fsuperml.dev","2026-05-12 11:55:28",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add superMLdev\u002Fsmart-sdlc --skill confluence-connect",{"tool":55,"command":56},"bunx","bunx skills add superMLdev\u002Fsmart-sdlc --skill confluence-connect",{"tool":58,"command":59},"pnpm","pnpm dlx skills add superMLdev\u002Fsmart-sdlc --skill confluence-connect","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fconfluence\u002Fconnect\u002FSKILL.md",true,[],[64,81,94,106,116,129],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":35},"01M71BD2HCRX8SP34Y37NZGVX2","jira-sync","Bulk sync all epics and stories from the local backlog to JIRA. Use when the user says 'sync to JIRA', 'push everything to JIRA', or 'create all JIRA tickets'.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fjira\u002Fsync\u002FSKILL.md",[],[71,72,73,34,74,75,76,77,29,30,78,79,80],"jira sync","jira","sync","bulk","push","backlog","local","stories","create","tickets",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":35},"01M71BD0C5A3A3J7WF4YCGJJPY","jira-create-story","Create a single story ticket in JIRA from a local story file. Use when the user says 'create this story in JIRA' or 'push story to JIRA'.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fjira\u002Fcreate-story\u002FSKILL.md",[],[88,72,79,89,90,75,91,77,92,29,30,93,34],"Story","create story","jira create story","ticket","single","file",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":35},"01M71BCYVDM32DNS0XJAKTHRZ1","jira-create-epic","Create an epic in JIRA from a planning artifact. Use when the user says 'create this epic in JIRA' or 'push epic to JIRA'.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fjira\u002Fcreate-epic\u002FSKILL.md",[],[79,101,72,102,103,34,30,29,104,75,105],"create epic","EPIC","jira create epic","planning","artifact",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":113,"publishedAt":35},"01M71BCWGYW8T1TD07JJ1G12G9","jira-connect","Set up and verify JIRA integration. Use when the user says 'connect to JIRA', 'set up JIRA', or 'configure JIRA'.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fjira\u002Fconnect\u002FSKILL.md",[112],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[114,72,24,27,28,29,30,31,32,115,33,34],"jira connect","jira integration",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":35},"01M71BCTZ1EW31JHP6AMBHEM9G","jira-conflict-detect","Check if a story is already being worked on by another team member. Use before starting any story implementation.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fjira\u002Fconflict-detect\u002FSKILL.md",[],[123,72,124,125,126,29,127,128,88],"jira conflict detect","detect","conflict","check","team","implementation",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":35},"01M71BCRX4ZHQ60DXGRAEECHB9","gitlab-create-mr","Create a GitLab Merge Request for the current story branch. Use when the user says 'create an MR', 'open a merge request', or 'ready for review' in a GitLab project.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fgitlab\u002Fcreate-mr\u002FSKILL.md",[],[79,136,137,138,139,140,141,142,143,144,29,30,145,146,147,88,34],"mr","gitlab create mr","create mr","gitlab","ready","branch","for","project","open","review","merge","request"]