diff --git a/.agents/plugins/api_marketplace.json b/.agents/plugins/api_marketplace.json
index 99fb0d41d..286db8da7 100644
--- a/.agents/plugins/api_marketplace.json
+++ b/.agents/plugins/api_marketplace.json
@@ -220,18 +220,6 @@
},
"category": "Developer Tools"
},
- {
- "name": "render",
- "source": {
- "source": "local",
- "path": "./plugins/render"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
{
"name": "temporal",
"source": {
@@ -558,6 +546,18 @@
"authentication": "ON_INSTALL"
},
"category": "Developer Tools"
+ },
+ {
+ "name": "product-design",
+ "source": {
+ "source": "local",
+ "path": "./plugins/product-design"
+ },
+ "policy": {
+ "installation": "AVAILABLE",
+ "authentication": "ON_USE"
+ },
+ "category": "Creativity"
}
]
}
diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json
index 0fc9e7cf4..7a8c15e54 100644
--- a/.agents/plugins/marketplace.json
+++ b/.agents/plugins/marketplace.json
@@ -136,42 +136,6 @@
},
"category": "Creativity"
},
- {
- "name": "hugging-face",
- "source": {
- "source": "local",
- "path": "./plugins/hugging-face"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "jam",
- "source": {
- "source": "local",
- "path": "./plugins/jam"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "netlify",
- "source": {
- "source": "local",
- "path": "./plugins/netlify"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
{
"name": "stripe",
"source": {
@@ -226,18 +190,6 @@
},
"category": "Developer Tools"
},
- {
- "name": "box",
- "source": {
- "source": "local",
- "path": "./plugins/box"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
{
"name": "github",
"source": {
@@ -274,18 +226,6 @@
},
"category": "Productivity"
},
- {
- "name": "deepnote",
- "source": {
- "source": "local",
- "path": "./plugins/deepnote"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Data & Analytics"
- },
{
"name": "notion",
"source": {
@@ -454,18 +394,6 @@
},
"category": "Developer Tools"
},
- {
- "name": "neon-postgres",
- "source": {
- "source": "local",
- "path": "./plugins/neon-postgres"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
{
"name": "remotion",
"source": {
@@ -497,130 +425,127 @@
"category": "Developer Tools"
},
{
- "name": "alpaca",
- "source": {
- "source": "local",
- "path": "./plugins/alpaca"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "amplitude",
+ "name": "granola",
"source": {
"source": "local",
- "path": "./plugins/amplitude"
+ "path": "./plugins/granola"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
- "category": "Data & Analytics"
+ "category": "Productivity"
},
{
- "name": "attio",
+ "name": "monday-com",
"source": {
"source": "local",
- "path": "./plugins/attio"
+ "path": "./plugins/monday-com"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
- "category": "Business & Operations"
+ "category": "Productivity"
},
{
- "name": "binance",
+ "name": "temporal",
"source": {
"source": "local",
- "path": "./plugins/binance"
+ "path": "./plugins/temporal"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
- "category": "Finance"
+ "category": "Developer Tools"
},
{
- "name": "biorender",
+ "name": "hyperframes",
"source": {
"source": "local",
- "path": "./plugins/biorender"
+ "path": "./plugins/hyperframes"
},
"policy": {
"installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
+ "authentication": "ON_INSTALL",
+ "products": [
+ "CODEX"
+ ]
},
"category": "Creativity"
},
{
- "name": "brand24",
+ "name": "supabase",
"source": {
"source": "local",
- "path": "./plugins/brand24"
+ "path": "./plugins/supabase"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
- "category": "Productivity"
+ "category": "Developer Tools"
},
{
- "name": "brex",
+ "name": "codex-security",
"source": {
"source": "local",
- "path": "./plugins/brex"
+ "path": "./plugins/codex-security"
},
"policy": {
"installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
+ "authentication": "ON_USE",
+ "products": [
+ "CODEX"
+ ]
},
- "category": "Finance"
+ "category": "Security"
},
{
- "name": "carta-crm",
+ "name": "twilio-developer-kit",
"source": {
"source": "local",
- "path": "./plugins/carta-crm"
+ "path": "./plugins/twilio-developer-kit"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
- "category": "Business & Operations"
+ "category": "Developer Tools"
},
{
- "name": "cb-insights",
+ "name": "openai-developers",
"source": {
"source": "local",
- "path": "./plugins/cb-insights"
+ "path": "./plugins/openai-developers"
},
"policy": {
"installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
+ "authentication": "ON_INSTALL",
+ "products": [
+ "CODEX"
+ ]
},
- "category": "Finance"
+ "category": "Developer Tools"
},
{
- "name": "channel99",
+ "name": "datadog",
"source": {
"source": "local",
- "path": "./plugins/channel99"
+ "path": "./plugins/datadog"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
- "category": "Productivity"
+ "category": "Developer Tools"
},
{
- "name": "circleback",
+ "name": "zoom",
"source": {
"source": "local",
- "path": "./plugins/circleback"
+ "path": "./plugins/zoom"
},
"policy": {
"installation": "AVAILABLE",
@@ -629,46 +554,22 @@
"category": "Communication"
},
{
- "name": "clickup",
- "source": {
- "source": "local",
- "path": "./plugins/clickup"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "cloudinary",
- "source": {
- "source": "local",
- "path": "./plugins/cloudinary"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "cogedim",
+ "name": "mixpanel-headless",
"source": {
"source": "local",
- "path": "./plugins/cogedim"
+ "path": "./plugins/mixpanel-headless"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
- "category": "Other"
+ "category": "Data & Analytics"
},
{
- "name": "common-room",
+ "name": "airtable",
"source": {
"source": "local",
- "path": "./plugins/common-room"
+ "path": "./plugins/airtable"
},
"policy": {
"installation": "AVAILABLE",
@@ -677,22 +578,22 @@
"category": "Productivity"
},
{
- "name": "conductor",
+ "name": "nvidia",
"source": {
"source": "local",
- "path": "./plugins/conductor"
+ "path": "./plugins/nvidia"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
- "category": "Productivity"
+ "category": "Developer Tools"
},
{
- "name": "coupler-io",
+ "name": "posthog",
"source": {
"source": "local",
- "path": "./plugins/coupler-io"
+ "path": "./plugins/posthog"
},
"policy": {
"installation": "AVAILABLE",
@@ -701,46 +602,22 @@
"category": "Data & Analytics"
},
{
- "name": "coveo",
- "source": {
- "source": "local",
- "path": "./plugins/coveo"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "cube",
- "source": {
- "source": "local",
- "path": "./plugins/cube"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "daloopa",
+ "name": "ngs-analysis",
"source": {
"source": "local",
- "path": "./plugins/daloopa"
+ "path": "./plugins/ngs-analysis"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
- "category": "Finance"
+ "category": "Education & Research"
},
{
- "name": "demandbase",
+ "name": "shopify",
"source": {
"source": "local",
- "path": "./plugins/demandbase"
+ "path": "./plugins/shopify"
},
"policy": {
"installation": "AVAILABLE",
@@ -749,58 +626,34 @@
"category": "Business & Operations"
},
{
- "name": "dnb-finance-analytics",
- "source": {
- "source": "local",
- "path": "./plugins/dnb-finance-analytics"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "docket",
- "source": {
- "source": "local",
- "path": "./plugins/docket"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "domotz-preview",
+ "name": "magicpath",
"source": {
"source": "local",
- "path": "./plugins/domotz-preview"
+ "path": "./plugins/magicpath"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
- "category": "Productivity"
+ "category": "Developer Tools"
},
{
- "name": "dovetail",
+ "name": "openai-ads-conversions",
"source": {
"source": "local",
- "path": "./plugins/dovetail"
+ "path": "./plugins/openai-ads-conversions"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
- "category": "Productivity"
+ "category": "Developer Tools"
},
{
- "name": "dow-jones-factiva",
+ "name": "boltz-api-cli",
"source": {
"source": "local",
- "path": "./plugins/dow-jones-factiva"
+ "path": "./plugins/boltz-api-cli"
},
"policy": {
"installation": "AVAILABLE",
@@ -809,10 +662,10 @@
"category": "Education & Research"
},
{
- "name": "egnyte",
+ "name": "dropbox",
"source": {
"source": "local",
- "path": "./plugins/egnyte"
+ "path": "./plugins/dropbox"
},
"policy": {
"installation": "AVAILABLE",
@@ -821,1405 +674,16 @@
"category": "Productivity"
},
{
- "name": "finn",
- "source": {
- "source": "local",
- "path": "./plugins/finn"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Travel"
- },
- {
- "name": "fireflies",
- "source": {
- "source": "local",
- "path": "./plugins/fireflies"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Communication"
- },
- {
- "name": "fyxer",
- "source": {
- "source": "local",
- "path": "./plugins/fyxer"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Communication"
- },
- {
- "name": "govtribe",
- "source": {
- "source": "local",
- "path": "./plugins/govtribe"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Education & Research"
- },
- {
- "name": "granola",
+ "name": "product-design",
"source": {
"source": "local",
- "path": "./plugins/granola"
+ "path": "./plugins/product-design"
},
"policy": {
"installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "happenstance",
- "source": {
- "source": "local",
- "path": "./plugins/happenstance"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "help-scout",
- "source": {
- "source": "local",
- "path": "./plugins/help-scout"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "hex",
- "source": {
- "source": "local",
- "path": "./plugins/hex"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Data & Analytics"
- },
- {
- "name": "highlevel",
- "source": {
- "source": "local",
- "path": "./plugins/highlevel"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "hostinger",
- "source": {
- "source": "local",
- "path": "./plugins/hostinger"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "hubspot",
- "source": {
- "source": "local",
- "path": "./plugins/hubspot"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "keybid-puls",
- "source": {
- "source": "local",
- "path": "./plugins/keybid-puls"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "marcopolo",
- "source": {
- "source": "local",
- "path": "./plugins/marcopolo"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "mem",
- "source": {
- "source": "local",
- "path": "./plugins/mem"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "monday-com",
- "source": {
- "source": "local",
- "path": "./plugins/monday-com"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "moody-s",
- "source": {
- "source": "local",
- "path": "./plugins/moody-s"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "morningstar",
- "source": {
- "source": "local",
- "path": "./plugins/morningstar"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "motherduck",
- "source": {
- "source": "local",
- "path": "./plugins/motherduck"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Data & Analytics"
- },
- {
- "name": "mt-newswires",
- "source": {
- "source": "local",
- "path": "./plugins/mt-newswires"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "myregistry-com",
- "source": {
- "source": "local",
- "path": "./plugins/myregistry-com"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Other"
- },
- {
- "name": "network-solutions",
- "source": {
- "source": "local",
- "path": "./plugins/network-solutions"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "omni-analytics",
- "source": {
- "source": "local",
- "path": "./plugins/omni-analytics"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Data & Analytics"
- },
- {
- "name": "otter-ai",
- "source": {
- "source": "local",
- "path": "./plugins/otter-ai"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Communication"
- },
- {
- "name": "particl-market-research",
- "source": {
- "source": "local",
- "path": "./plugins/particl-market-research"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Education & Research"
- },
- {
- "name": "pipedrive",
- "source": {
- "source": "local",
- "path": "./plugins/pipedrive"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "pitchbook",
- "source": {
- "source": "local",
- "path": "./plugins/pitchbook"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "policynote",
- "source": {
- "source": "local",
- "path": "./plugins/policynote"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Education & Research"
- },
- {
- "name": "pylon",
- "source": {
- "source": "local",
- "path": "./plugins/pylon"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "quartr",
- "source": {
- "source": "local",
- "path": "./plugins/quartr"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "quicknode",
- "source": {
- "source": "local",
- "path": "./plugins/quicknode"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "ranked-ai",
- "source": {
- "source": "local",
- "path": "./plugins/ranked-ai"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "razorpay",
- "source": {
- "source": "local",
- "path": "./plugins/razorpay"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "read-ai",
- "source": {
- "source": "local",
- "path": "./plugins/read-ai"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Communication"
- },
- {
- "name": "readwise",
- "source": {
- "source": "local",
- "path": "./plugins/readwise"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Education & Research"
- },
- {
- "name": "responsive",
- "source": {
- "source": "local",
- "path": "./plugins/responsive"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "scite",
- "source": {
- "source": "local",
- "path": "./plugins/scite"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Education & Research"
- },
- {
- "name": "semrush",
- "source": {
- "source": "local",
- "path": "./plugins/semrush"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "sendgrid",
- "source": {
- "source": "local",
- "path": "./plugins/sendgrid"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "setu-bharat-connect-billpay",
- "source": {
- "source": "local",
- "path": "./plugins/setu-bharat-connect-billpay"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "signnow",
- "source": {
- "source": "local",
- "path": "./plugins/signnow"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "skywatch",
- "source": {
- "source": "local",
- "path": "./plugins/skywatch"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "statsig",
- "source": {
- "source": "local",
- "path": "./plugins/statsig"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "streak",
- "source": {
- "source": "local",
- "path": "./plugins/streak"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "taxdown",
- "source": {
- "source": "local",
- "path": "./plugins/taxdown"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "teamwork-com",
- "source": {
- "source": "local",
- "path": "./plugins/teamwork-com"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "third-bridge",
- "source": {
- "source": "local",
- "path": "./plugins/third-bridge"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "tinman-ai",
- "source": {
- "source": "local",
- "path": "./plugins/tinman-ai"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "united-rentals",
- "source": {
- "source": "local",
- "path": "./plugins/united-rentals"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "vantage",
- "source": {
- "source": "local",
- "path": "./plugins/vantage"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "waldo",
- "source": {
- "source": "local",
- "path": "./plugins/waldo"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "weatherpromise",
- "source": {
- "source": "local",
- "path": "./plugins/weatherpromise"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Travel"
- },
- {
- "name": "windsor-ai",
- "source": {
- "source": "local",
- "path": "./plugins/windsor-ai"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Data & Analytics"
- },
- {
- "name": "yepcode",
- "source": {
- "source": "local",
- "path": "./plugins/yepcode"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "render",
- "source": {
- "source": "local",
- "path": "./plugins/render"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "temporal",
- "source": {
- "source": "local",
- "path": "./plugins/temporal"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "hyperframes",
- "source": {
- "source": "local",
- "path": "./plugins/hyperframes"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL",
- "products": [
- "CODEX"
- ]
- },
- "category": "Creativity"
- },
- {
- "name": "heygen",
- "source": {
- "source": "local",
- "path": "./plugins/heygen"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Creativity"
- },
- {
- "name": "supabase",
- "source": {
- "source": "local",
- "path": "./plugins/supabase"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "codex-security",
- "source": {
- "source": "local",
- "path": "./plugins/codex-security"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_USE",
- "products": [
- "CODEX"
- ]
- },
- "category": "Security"
- },
- {
- "name": "twilio-developer-kit",
- "source": {
- "source": "local",
- "path": "./plugins/twilio-developer-kit"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "openai-developers",
- "source": {
- "source": "local",
- "path": "./plugins/openai-developers"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL",
- "products": [
- "CODEX"
- ]
- },
- "category": "Developer Tools"
- },
- {
- "name": "asana",
- "source": {
- "source": "local",
- "path": "./plugins/asana"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "datadog",
- "source": {
- "source": "local",
- "path": "./plugins/datadog"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "zoom",
- "source": {
- "source": "local",
- "path": "./plugins/zoom"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Communication"
- },
- {
- "name": "similarweb",
- "source": {
- "source": "local",
- "path": "./plugins/similarweb"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Data & Analytics"
- },
- {
- "name": "lseg",
- "source": {
- "source": "local",
- "path": "./plugins/lseg"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "s-p",
- "source": {
- "source": "local",
- "path": "./plugins/s-p"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "datasite",
- "source": {
- "source": "local",
- "path": "./plugins/datasite"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "factset",
- "source": {
- "source": "local",
- "path": "./plugins/factset"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "zoominfo",
- "source": {
- "source": "local",
- "path": "./plugins/zoominfo"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "docusign",
- "source": {
- "source": "local",
- "path": "./plugins/docusign"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "mixpanel",
- "source": {
- "source": "local",
- "path": "./plugins/mixpanel"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Data & Analytics"
- },
- {
- "name": "mixpanel-headless",
- "source": {
- "source": "local",
- "path": "./plugins/mixpanel-headless"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Data & Analytics"
- },
- {
- "name": "aiera",
- "source": {
- "source": "local",
- "path": "./plugins/aiera"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "close",
- "source": {
- "source": "local",
- "path": "./plugins/close"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "apollo",
- "source": {
- "source": "local",
- "path": "./plugins/apollo"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "meticulate",
- "source": {
- "source": "local",
- "path": "./plugins/meticulate"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "thoughtspot",
- "source": {
- "source": "local",
- "path": "./plugins/thoughtspot"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Data & Analytics"
- },
- {
- "name": "midpage",
- "source": {
- "source": "local",
- "path": "./plugins/midpage"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Education & Research"
- },
- {
- "name": "clay",
- "source": {
- "source": "local",
- "path": "./plugins/clay"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "calendly",
- "source": {
- "source": "local",
- "path": "./plugins/calendly"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "rox",
- "source": {
- "source": "local",
- "path": "./plugins/rox"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "hg-insights",
- "source": {
- "source": "local",
- "path": "./plugins/hg-insights"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "airtable",
- "source": {
- "source": "local",
- "path": "./plugins/airtable"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "convex",
- "source": {
- "source": "local",
- "path": "./plugins/convex"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "outreach",
- "source": {
- "source": "local",
- "path": "./plugins/outreach"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "shutterstock",
- "source": {
- "source": "local",
- "path": "./plugins/shutterstock"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Creativity"
- },
- {
- "name": "replit",
- "source": {
- "source": "local",
- "path": "./plugins/replit"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "lovable",
- "source": {
- "source": "local",
- "path": "./plugins/lovable"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "quickbooks",
- "source": {
- "source": "local",
- "path": "./plugins/quickbooks"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "intercom",
- "source": {
- "source": "local",
- "path": "./plugins/intercom"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "chronograph-lp",
- "source": {
- "source": "local",
- "path": "./plugins/chronograph-lp"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "nvidia",
- "source": {
- "source": "local",
- "path": "./plugins/nvidia"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "posthog",
- "source": {
- "source": "local",
- "path": "./plugins/posthog"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Data & Analytics"
- },
- {
- "name": "actively",
- "source": {
- "source": "local",
- "path": "./plugins/actively"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "zoho",
- "source": {
- "source": "local",
- "path": "./plugins/zoho"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "fiscal-ai",
- "source": {
- "source": "local",
- "path": "./plugins/fiscal-ai"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "picsart",
- "source": {
- "source": "local",
- "path": "./plugins/picsart"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
+ "authentication": "ON_USE"
},
"category": "Creativity"
- },
- {
- "name": "alation",
- "source": {
- "source": "local",
- "path": "./plugins/alation"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Data & Analytics"
- },
- {
- "name": "fal",
- "source": {
- "source": "local",
- "path": "./plugins/fal"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Creativity"
- },
- {
- "name": "hebbia",
- "source": {
- "source": "local",
- "path": "./plugins/hebbia"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "wix",
- "source": {
- "source": "local",
- "path": "./plugins/wix"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "base44",
- "source": {
- "source": "local",
- "path": "./plugins/base44"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "ngs-analysis",
- "source": {
- "source": "local",
- "path": "./plugins/ngs-analysis"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Education & Research"
- },
- {
- "name": "superhuman",
- "source": {
- "source": "local",
- "path": "./plugins/superhuman"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Communication"
- },
- {
- "name": "shopify",
- "source": {
- "source": "local",
- "path": "./plugins/shopify"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Business & Operations"
- },
- {
- "name": "magicpath",
- "source": {
- "source": "local",
- "path": "./plugins/magicpath"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "brighthire",
- "source": {
- "source": "local",
- "path": "./plugins/brighthire"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "catalyst-by-zoho",
- "source": {
- "source": "local",
- "path": "./plugins/catalyst-by-zoho"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "glean",
- "source": {
- "source": "local",
- "path": "./plugins/glean"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- },
- {
- "name": "chronograph-gp",
- "source": {
- "source": "local",
- "path": "./plugins/chronograph-gp"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Finance"
- },
- {
- "name": "openai-ads-conversions",
- "source": {
- "source": "local",
- "path": "./plugins/openai-ads-conversions"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "boltz-api-cli",
- "source": {
- "source": "local",
- "path": "./plugins/boltz-api-cli"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Education & Research"
- },
- {
- "name": "replayio",
- "source": {
- "source": "local",
- "path": "./plugins/replayio"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "digitalocean",
- "source": {
- "source": "local",
- "path": "./plugins/digitalocean"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "dropbox",
- "source": {
- "source": "local",
- "path": "./plugins/dropbox"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
}
]
}
diff --git a/plugins/actively/.app.json b/plugins/actively/.app.json
deleted file mode 100644
index 2bb692df9..000000000
--- a/plugins/actively/.app.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "apps": {
- "actively": {
- "id": "asdk_app_6a15fca0d57c8191a204ffdd12fbbef2"
- }
- }
-}
diff --git a/plugins/actively/.codex-plugin/plugin.json b/plugins/actively/.codex-plugin/plugin.json
deleted file mode 100644
index 105498a22..000000000
--- a/plugins/actively/.codex-plugin/plugin.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "actively",
- "version": "1.0.3",
- "description": "Account agents for GTM intelligence",
- "author": {
- "name": "Actively",
- "url": "https://www.actively.ai"
- },
- "homepage": "https://www.actively.ai",
- "repository": "https://github.com/openai/plugins",
- "license": "MIT",
- "keywords": [],
- "apps": "./.app.json",
- "interface": {
- "displayName": "Actively",
- "shortDescription": "Account agents for GTM intelligence",
- "longDescription": "Win more deals with Actively by directly accessing your always-on per account agents that help you drive the next best action. Actively’s per-account agents are synthesizing across all of your internal context (ex. CRM data, call transcripts, emails) and external signals to drive actionable intelligence. Designed for SDRs, AEs, AMs, and revenue leaders who need deep, contextual account knowledge, from meeting prep and deal strategy to territory prioritization.",
- "developerName": "Actively",
- "category": "Business & Operations",
- "capabilities": [],
- "websiteURL": "https://www.actively.ai",
- "defaultPrompt": [
- "Find high-fit Actively accounts showing recent buying signals and summarize next steps.",
- "Search Actively for contacts at this target account and pull relevant prospect context.",
- "Build a prioritized Actively prospect list for this ICP and explain why each account fits."
- ],
- "brandColor": "#000000",
- "composerIcon": "./assets/logo.png",
- "logo": "./assets/logo.png",
- "screenshots": []
- }
-}
diff --git a/plugins/actively/assets/logo.png b/plugins/actively/assets/logo.png
deleted file mode 100644
index 5bf942c8d..000000000
Binary files a/plugins/actively/assets/logo.png and /dev/null differ
diff --git a/plugins/aiera/.app.json b/plugins/aiera/.app.json
deleted file mode 100644
index 2b93b0d2c..000000000
--- a/plugins/aiera/.app.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "apps": {
- "aiera": {
- "id": "asdk_app_6967ddccc88881918a3733322b6bdf1a"
- }
- }
-}
diff --git a/plugins/aiera/.codex-plugin/plugin.json b/plugins/aiera/.codex-plugin/plugin.json
deleted file mode 100644
index c939e3ff7..000000000
--- a/plugins/aiera/.codex-plugin/plugin.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "aiera",
- "version": "1.0.2",
- "description": "Institutional financial data and events",
- "author": {
- "name": "Aiera",
- "url": "https://www.aiera.com"
- },
- "repository": "https://github.com/openai/plugins",
- "license": "MIT",
- "keywords": [],
- "apps": "./.app.json",
- "interface": {
- "displayName": "Aiera",
- "developerName": "Aiera",
- "shortDescription": "Institutional financial data and events",
- "longDescription": "Access institutional-grade financial data from Aiera, including live corporate events, filings, company publications, broker research, and much more.",
- "category": "Finance",
- "capabilities": [],
- "brandColor": "#180830",
- "defaultPrompt": [
- "Find the latest earnings call transcript for a company in Aiera and summarize key themes.",
- "Search Aiera events for mentions of a topic across this sector this quarter.",
- "Compare management commentary from the last two calls for a company."
- ],
- "screenshots": [],
- "composerIcon": "./assets/logo.png",
- "logo": "./assets/logo.png",
- "websiteURL": "https://www.aiera.com"
- },
- "homepage": "https://www.aiera.com"
-}
diff --git a/plugins/aiera/assets/app-icon.svg b/plugins/aiera/assets/app-icon.svg
deleted file mode 100644
index 998f8d3e5..000000000
--- a/plugins/aiera/assets/app-icon.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/plugins/aiera/assets/logo.png b/plugins/aiera/assets/logo.png
deleted file mode 100644
index dafb46afe..000000000
Binary files a/plugins/aiera/assets/logo.png and /dev/null differ
diff --git a/plugins/airtable/.app.json b/plugins/airtable/.app.json
index c5750b57d..082735db4 100644
--- a/plugins/airtable/.app.json
+++ b/plugins/airtable/.app.json
@@ -1,8 +1,7 @@
{
"apps": {
"airtable": {
- "id": "asdk_app_693ca6ce2db08191bb52d66743c65184",
- "required": false
+ "id": "asdk_app_693ca6ce2db08191bb52d66743c65184"
}
}
}
diff --git a/plugins/airtable/.codex-plugin/plugin.json b/plugins/airtable/.codex-plugin/plugin.json
index 2ec861894..a2acbf9a4 100644
--- a/plugins/airtable/.codex-plugin/plugin.json
+++ b/plugins/airtable/.codex-plugin/plugin.json
@@ -1,69 +1,25 @@
{
- "name": "airtable",
- "version": "0.1.3",
- "description": "Airtable is the database and operations layer for your agents — whether running product, marketing, sales, ops, HR, or a custom business app. It combines structured data with multiplayer visual surfaces (grid, kanban, calendar, gallery, timeline) humans and agents share — plus sync integrations to Jira, Salesforce, Zendesk, Google Drive, Databricks, and the rest of your stack, all backed by enterprise governance. This plugin makes Codex fluent in Airtable: creating bases and schema, working with records, and sharing UI for collaboration. Uses the Airtable app connector.",
+ "apps": "./.app.json",
"author": {
- "name": "Airtable",
- "url": "https://www.airtable.com"
+ "name": "Airtable"
},
- "homepage": "https://www.airtable.com",
- "repository": "https://github.com/airtable/skills",
- "license": "MIT",
- "keywords": [
- "airtable",
- "database",
- "relational-database",
- "application-database",
- "data-store",
- "persistence",
- "crud",
- "product",
- "product-ops",
- "crm",
- "sales",
- "marketing",
- "operations",
- "hr",
- "hiring",
- "project-management",
- "roadmap",
- "customer-success",
- "nocode",
- "low-code",
- "spreadsheet",
- "collaboration",
- "real-time",
- "governance",
- "workflow",
- "automation",
- "internal-tools",
- "mcp",
- "content"
- ],
- "skills": "./skills/",
- "apps": "./.app.json",
+ "description": "Bring operational data and context into the flow of your ChatGPT conversations. You can ask questions, create and update records, and analyze your data\u2014all through conversation. Use the data in Airtable as input to the work you\u2019re doing in ChatGPT, like building a landing page using content you\u2019ve organized in Airtable. Make quick updates to Airtable without leaving the chat. Airtable for ChatGPT is ideal anytime you need quick access to structured internal data to inform your conversation.\n\nAirtable's App connects ChatGPT directly to your Airtable bases, so you can ask questions, create and update records, and analyze your data\u2014all through conversation",
"interface": {
- "displayName": "Airtable",
- "shortDescription": "Database and operations layer for your agents.",
- "longDescription": "Airtable is the database and operations layer for your agents — whether running product, marketing, sales, ops, HR, or a custom business app. It combines structured data with multiplayer visual surfaces (grid, kanban, calendar, gallery, timeline) humans and agents share — plus sync integrations to Jira, Salesforce, Zendesk, Google Drive, Databricks, and the rest of your stack, all backed by enterprise governance. This plugin makes Codex fluent in your Airtable bases: creating bases and schema, working with records, and sharing UI for collaboration. Uses the Airtable app connector.",
- "developerName": "Airtable",
+ "capabilities": [],
"category": "Productivity",
- "capabilities": [
- "Read",
- "Write"
- ],
- "websiteURL": "https://www.airtable.com",
- "privacyPolicyURL": "https://www.airtable.com/privacy",
- "termsOfServiceURL": "https://www.airtable.com/company/tos",
"defaultPrompt": [
- "Set up a system to manage my team's operations.",
- "Track my product roadmap, feedback, and releases.",
- "I need a simple database for my project."
+ "show me a kanban of the product roadmap. What\u2019s at risk? What\u2019s up next?",
+ "which roadmap initiatives should I discuss with the enterprise sales team today?"
],
- "brandColor": "#18BFFF",
- "composerIcon": "./assets/icon.svg",
- "logo": "./assets/logo.png",
- "logoDark": "./assets/logo-dark.png",
- "screenshots": []
- }
+ "developerName": "Airtable",
+ "displayName": "Airtable",
+ "longDescription": "Bring operational data and context into the flow of your ChatGPT conversations. You can ask questions, create and update records, and analyze your data\u2014all through conversation. Use the data in Airtable as input to the work you\u2019re doing in ChatGPT, like building a landing page using content you\u2019ve organized in Airtable. Make quick updates to Airtable without leaving the chat. Airtable for ChatGPT is ideal anytime you need quick access to structured internal data to inform your conversation.\n\nAirtable's App connects ChatGPT directly to your Airtable bases, so you can ask questions, create and update records, and analyze your data\u2014all through conversation",
+ "privacyPolicyURL": "https://www.airtable.com/company/privacy",
+ "shortDescription": "Add structured data to ChatGPT",
+ "supportURL": "https://support.airtable.com/docs/contacting-airtable-support",
+ "termsOfServiceURL": "https://www.airtable.com/company/tos",
+ "websiteURL": "https://airtable.com"
+ },
+ "name": "airtable",
+ "version": "6.0.1"
}
diff --git a/plugins/airtable/agents/openai.yaml b/plugins/airtable/agents/openai.yaml
deleted file mode 100644
index d13ba87a5..000000000
--- a/plugins/airtable/agents/openai.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-interface:
- display_name: "Airtable"
- short_description: "Database and operations layer for your agents"
- icon_small: "./assets/icon.svg"
- icon_large: "./assets/logo.png"
- default_prompt: "Use Airtable to create bases, manage records, and organize structured workflows."
diff --git a/plugins/airtable/assets/icon.svg b/plugins/airtable/assets/icon.svg
deleted file mode 100644
index 70dd0037e..000000000
--- a/plugins/airtable/assets/icon.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
diff --git a/plugins/airtable/assets/logo-dark.png b/plugins/airtable/assets/logo-dark.png
deleted file mode 100644
index 0f3660518..000000000
Binary files a/plugins/airtable/assets/logo-dark.png and /dev/null differ
diff --git a/plugins/airtable/assets/logo.png b/plugins/airtable/assets/logo.png
deleted file mode 100644
index 7f40cbb53..000000000
Binary files a/plugins/airtable/assets/logo.png and /dev/null differ
diff --git a/plugins/alation/.app.json b/plugins/alation/.app.json
deleted file mode 100644
index 8e3f9dc34..000000000
--- a/plugins/alation/.app.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "apps": {
- "alation": {
- "id": "asdk_app_6a0f9ab98bf4819197de479522d5367b"
- }
- }
-}
diff --git a/plugins/alation/.codex-plugin/plugin.json b/plugins/alation/.codex-plugin/plugin.json
deleted file mode 100644
index 24cfca8fc..000000000
--- a/plugins/alation/.codex-plugin/plugin.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "alation",
- "version": "1.0.3",
- "description": "Trusted enterprise data context and governance",
- "author": {
- "name": "Alation",
- "url": "https://www.alation.com"
- },
- "homepage": "https://www.alation.com",
- "repository": "https://github.com/openai/plugins",
- "license": "MIT",
- "keywords": [],
- "apps": "./.app.json",
- "interface": {
- "displayName": "Alation",
- "shortDescription": "Trusted enterprise data context and governance",
- "longDescription": "Alation brings trusted enterprise data context into ChatGPT.\n\nConnect ChatGPT to Alation’s enterprise data catalog, governance, and trusted business context so users can discover, understand, and use data with confidence.\n\nThe Alation Intelligence Operating System (AIOS) helps AI ground responses in trusted enterprise context, including catalog metadata, governance policies, semantic definitions, lineage, data quality, and documentation. The app is designed for enterprise teams that need AI-led data discovery without losing trust, context, or governance.",
- "developerName": "Alation",
- "category": "Data & Analytics",
- "capabilities": [],
- "websiteURL": "https://www.alation.com",
- "defaultPrompt": [
- "Search Alation for data assets related to this metric and summarize owners and definitions.",
- "Find certified Alation tables for this analysis and explain lineage, quality, and caveats.",
- "Review Alation documentation for this dataset and draft a query-ready data brief."
- ],
- "brandColor": "#FF7A1A",
- "composerIcon": "./assets/logo.png",
- "logo": "./assets/logo.png",
- "screenshots": []
- }
-}
diff --git a/plugins/alation/assets/logo.png b/plugins/alation/assets/logo.png
deleted file mode 100644
index abf4845da..000000000
Binary files a/plugins/alation/assets/logo.png and /dev/null differ
diff --git a/plugins/alpaca/.app.json b/plugins/alpaca/.app.json
deleted file mode 100644
index a8cfadda1..000000000
--- a/plugins/alpaca/.app.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "apps": {
- "alpaca": {
- "id": "connector_691f721a77bc8191be115b65c85075c0"
- }
- }
-}
diff --git a/plugins/alpaca/.codex-plugin/plugin.json b/plugins/alpaca/.codex-plugin/plugin.json
deleted file mode 100644
index e4fc68c48..000000000
--- a/plugins/alpaca/.codex-plugin/plugin.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "name": "alpaca",
- "version": "1.0.2",
- "description": "Stop watching the markets.",
- "author": {
- "url": "https://alpaca.markets/",
- "name": "Alpaca"
- },
- "homepage": "https://alpaca.markets/",
- "repository": "https://github.com/openai/plugins",
- "license": "MIT",
- "keywords": [],
- "apps": "./.app.json",
- "interface": {
- "displayName": "Alpaca",
- "shortDescription": "Stop watching the markets.",
- "longDescription": "Stop watching the markets. Turn your words into insights with Alpaca.\nAsk Codex real market questions and get live answers you can act on, including historical data, snapshots, quotes, and option chain information. Stock, options, and crypto market data embedded right into your conversation so you can turn analysis into automated actions.\n\"How has AAPL's stock performed this quarter vs GOOG?\"\n\"Show me the SPY option chain that expires next Friday.\"\n\"When has BTC's price reached $100k USD this year?\"",
- "category": "Finance",
- "capabilities": [],
- "websiteURL": "https://alpaca.markets/",
- "privacyPolicyURL": "https://s3.amazonaws.com/files.alpaca.markets/disclosures/PrivacyPolicy.pdf",
- "defaultPrompt": [
- "Use Alpaca to help with this task"
- ],
- "screenshots": [],
- "composerIcon": "./assets/app-icon.png",
- "logo": "./assets/app-icon.png",
- "developerName": "Alpaca"
- }
-}
diff --git a/plugins/alpaca/assets/app-icon.png b/plugins/alpaca/assets/app-icon.png
deleted file mode 100644
index e57f5c784..000000000
Binary files a/plugins/alpaca/assets/app-icon.png and /dev/null differ
diff --git a/plugins/amplitude/.app.json b/plugins/amplitude/.app.json
deleted file mode 100644
index 07b6ab1c3..000000000
--- a/plugins/amplitude/.app.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "apps": {
- "amplitude": {
- "id": "connector_690e2dabf430819196f8b3701ec838ec"
- }
- }
-}
diff --git a/plugins/amplitude/.codex-plugin/plugin.json b/plugins/amplitude/.codex-plugin/plugin.json
deleted file mode 100644
index ad275566f..000000000
--- a/plugins/amplitude/.codex-plugin/plugin.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "amplitude",
- "version": "1.0.2",
- "description": "Product analytics and funnels",
- "author": {
- "name": "Amplitude"
- },
- "repository": "https://github.com/openai/plugins",
- "license": "MIT",
- "keywords": [],
- "apps": "./.app.json",
- "interface": {
- "displayName": "Amplitude",
- "shortDescription": "Product analytics and funnels",
- "longDescription": "Product analytics and funnels",
- "developerName": "Amplitude",
- "category": "Data & Analytics",
- "capabilities": [],
- "defaultPrompt": [
- "Show the signup funnel trend in Amplitude"
- ],
- "screenshots": [],
- "composerIcon": "./assets/app-icon.png",
- "logo": "./assets/app-icon.png"
- }
-}
diff --git a/plugins/amplitude/assets/app-icon.png b/plugins/amplitude/assets/app-icon.png
deleted file mode 100644
index 14887f91b..000000000
Binary files a/plugins/amplitude/assets/app-icon.png and /dev/null differ
diff --git a/plugins/apollo/.app.json b/plugins/apollo/.app.json
deleted file mode 100644
index c7ead65e7..000000000
--- a/plugins/apollo/.app.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "apps": {
- "apollo": {
- "id": "asdk_app_69bd664f2a908191a3a0a47eca8559d1"
- }
- }
-}
diff --git a/plugins/apollo/.codex-plugin/plugin.json b/plugins/apollo/.codex-plugin/plugin.json
deleted file mode 100644
index 68c85126e..000000000
--- a/plugins/apollo/.codex-plugin/plugin.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "apollo",
- "version": "1.0.2",
- "description": "Prospecting and outbound execution in Apollo",
- "author": {
- "name": "Apollo",
- "url": "https://www.apollo.io"
- },
- "repository": "https://github.com/openai/plugins",
- "license": "MIT",
- "keywords": [],
- "apps": "./.app.json",
- "interface": {
- "displayName": "Apollo",
- "developerName": "Apollo",
- "shortDescription": "Prospecting and outbound execution in Apollo",
- "longDescription": "Apollo’s MCP connector lets ChatGPT safely work inside your Apollo workspace to accelerate prospecting and outbound execution. Search and qualify accounts and contacts using Apollo’s data, enrich records, summarize key context, and take action (e.g., create lists, log notes, generate tasks, and draft or assemble outbound using sequences) using your team’s rules and permissions. Designed for speed and control: ChatGPT can pull only what you ask for, respect workspace access, and produce outputs that are ready to review, personalize, and ship.",
- "category": "Business & Operations",
- "capabilities": [],
- "brandColor": "#E8F028",
- "defaultPrompt": [
- "Find verified contacts matching this ICP in Apollo and rank the best prospects.",
- "Research a company in Apollo and identify decision makers for this use case.",
- "Build an outreach list for this industry with recent growth or hiring signals."
- ],
- "screenshots": [],
- "composerIcon": "./assets/logo.png",
- "logo": "./assets/logo.png",
- "websiteURL": "https://www.apollo.io"
- },
- "homepage": "https://www.apollo.io"
-}
diff --git a/plugins/apollo/assets/app-icon.svg b/plugins/apollo/assets/app-icon.svg
deleted file mode 100644
index 9c7851b38..000000000
--- a/plugins/apollo/assets/app-icon.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/plugins/apollo/assets/logo.png b/plugins/apollo/assets/logo.png
deleted file mode 100644
index 898c171ae..000000000
Binary files a/plugins/apollo/assets/logo.png and /dev/null differ
diff --git a/plugins/asana/.app.json b/plugins/asana/.app.json
deleted file mode 100644
index e0b53ac13..000000000
--- a/plugins/asana/.app.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "apps": {
- "asana": {
- "id": "asdk_app_69616780bd208191b4fb44ba44f72b61",
- "required": false
- }
- }
-}
diff --git a/plugins/asana/.codex-plugin/plugin.json b/plugins/asana/.codex-plugin/plugin.json
deleted file mode 100644
index d121dc523..000000000
--- a/plugins/asana/.codex-plugin/plugin.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "name": "asana",
- "version": "0.1.4",
- "description": "Work with your Asana tasks, subtasks, comments, due dates, and project details to create summaries, understand priorities, and prepare clear status updates.",
- "author": {
- "name": "Asana, Inc.",
- "url": "https://asana.com"
- },
- "homepage": "https://asana.com",
- "repository": "https://github.com/openai/plugins",
- "license": "MIT",
- "keywords": [
- "asana",
- "tasks",
- "project-management",
- "productivity",
- "collaboration",
- "work-management"
- ],
- "apps": "./.app.json",
- "interface": {
- "displayName": "Asana",
- "shortDescription": "Read and manage Asana",
- "longDescription": "Work with your Asana tasks, subtasks, comments, due dates, and project details to create summaries, understand priorities, and prepare clear status updates.",
- "developerName": "Asana, Inc.",
- "category": "Productivity",
- "capabilities": [
- "Interactive",
- "Write"
- ],
- "websiteURL": "https://asana.com",
- "privacyPolicyURL": "https://asana.com/terms/privacy-statement",
- "termsOfServiceURL": "https://asana.com/terms",
- "defaultPrompt": [
- "Create a project to track creative requests",
- "Create a task to track follow up actions",
- "Show me what's on my plate in Asana today."
- ],
- "brandColor": "#FF584A",
- "composerIcon": "./assets/logo.png",
- "logo": "./assets/logo.png",
- "screenshots": []
- }
-}
diff --git a/plugins/asana/assets/logo.png b/plugins/asana/assets/logo.png
deleted file mode 100644
index c5c503a46..000000000
Binary files a/plugins/asana/assets/logo.png and /dev/null differ
diff --git a/plugins/atlassian-rovo/.app.json b/plugins/atlassian-rovo/.app.json
index f1c074724..eda6cbdab 100644
--- a/plugins/atlassian-rovo/.app.json
+++ b/plugins/atlassian-rovo/.app.json
@@ -1,8 +1,7 @@
{
"apps": {
"atlassian-rovo": {
- "id": "connector_692de805e3ec8191834719067174a384",
- "required": false
+ "id": "connector_692de805e3ec8191834719067174a384"
}
}
}
diff --git a/plugins/atlassian-rovo/.codex-plugin/plugin.json b/plugins/atlassian-rovo/.codex-plugin/plugin.json
index b4e4289ee..d4984c67b 100644
--- a/plugins/atlassian-rovo/.codex-plugin/plugin.json
+++ b/plugins/atlassian-rovo/.codex-plugin/plugin.json
@@ -1,6 +1,6 @@
{
"name": "atlassian-rovo",
- "version": "1.0.3",
+ "version": "1.0.6",
"description": "Manage Jira and Confluence fast",
"author": {
"name": "Atlassian",
@@ -10,26 +10,26 @@
"repository": "https://github.com/openai/plugins",
"license": "MIT",
"keywords": [
- "atlassian"
+ "atlassian",
+ "rovo",
+ "jira",
+ "confluence",
+ "issue tracking",
+ "project management",
+ "knowledge base"
],
- "skills": "./skills/",
"apps": "./.app.json",
"interface": {
"displayName": "Atlassian Rovo",
- "shortDescription": "Manage Jira and Confluence fast",
+ "shortDescription": "Manage Jira and Confluence",
"longDescription": "Manage Jira and Confluence fast",
"developerName": "Atlassian",
"category": "Productivity",
- "capabilities": [
- "Interactive",
- "Write"
- ],
+ "capabilities": ["Interactive", "Write"],
"websiteURL": "https://www.atlassian.com",
"privacyPolicyURL": "https://www.atlassian.com/legal/privacy-policy",
"termsOfServiceURL": "https://www.atlassian.com/legal/cloud-terms-of-service",
- "defaultPrompt": [
- "Create Jira tasks in project Vita MVP"
- ],
+ "defaultPrompt": ["Create Jira tasks in project Vita MVP"],
"screenshots": [],
"brandColor": "#0052CC",
"composerIcon": "./assets/app-icon.png",
diff --git a/plugins/atlassian-rovo/skills/capture-tasks-from-meeting-notes/SKILL.md b/plugins/atlassian-rovo/skills/capture-tasks-from-meeting-notes/SKILL.md
deleted file mode 100644
index 9bd7560a8..000000000
--- a/plugins/atlassian-rovo/skills/capture-tasks-from-meeting-notes/SKILL.md
+++ /dev/null
@@ -1,679 +0,0 @@
----
-name: capture-tasks-from-meeting-notes
-description: "Analyze meeting notes to find action items and create Jira tasks for assigned work. When an agent needs to: (1) Create Jira tasks or tickets from meeting notes, (2) Extract or find action items from notes or Confluence pages, (3) Parse meeting notes for assigned tasks, or (4) Analyze notes and generate tasks for team members. Identifies assignees, looks up account IDs, and creates tasks with proper context."
----
-
-# Capture Tasks from Meeting Notes
-
-## Keywords
-meeting notes, action items, create tasks, create tickets, extract tasks, parse notes, analyze notes, assigned work, assignees, from meeting, post-meeting, capture tasks, generate tasks, turn into tasks, convert to tasks, action item, to-do, task list, follow-up, assigned to, create Jira tasks, create Jira tickets, meeting action items, extract action items, find action items, analyze meeting
-
-## Overview
-
-Automatically extract action items from meeting notes and create Jira tasks with proper assignees. This skill parses unstructured meeting notes (from Confluence or pasted text), identifies action items with assignees, looks up Jira account IDs, and creates tasks—eliminating the tedious post-meeting ticket creation process.
-
-**Use this skill when:** Users have meeting notes with action items that need to become Jira tasks.
-
----
-
-## Workflow
-
-Follow this 7-step process to turn meeting notes into actionable Jira tasks:
-
-### Step 1: Get Meeting Notes
-
-Obtain the meeting notes from the user.
-
-#### Option A: Confluence Page URL
-
-If user provides a Confluence URL:
-
-```
-getConfluencePage(
- cloudId="...",
- pageId="[extracted from URL]",
- contentFormat="markdown"
-)
-```
-
-**URL patterns:**
-- `https://[site].atlassian.net/wiki/spaces/[SPACE]/pages/[PAGE_ID]/[title]`
-- Extract PAGE_ID from the numeric portion
-- Get cloudId from site name or use `getAccessibleAtlassianResources`
-
-#### Option B: Pasted Text
-
-If user pastes meeting notes directly:
-- Use the text as-is
-- No fetching needed
-
-#### If Unclear
-
-Ask: "Do you have a Confluence link to the meeting notes, or would you like to paste them directly?"
-
----
-
-### Step 2: Parse Action Items
-
-Scan the notes for action items with assignees.
-
-#### Common Patterns
-
-**Pattern 1: @mention format** (highest priority)
-```
-@Sarah to create user stories for chat feature
-@Mike will update architecture doc
-```
-
-**Pattern 2: Name + action verb**
-```
-Sarah to create user stories
-Mike will update architecture doc
-Lisa should review the mockups
-```
-
-**Pattern 3: Action: Name - Task**
-```
-Action: Sarah - create user stories
-Action Item: Mike - update architecture
-```
-
-**Pattern 4: TODO with assignee**
-```
-TODO: Create user stories (Sarah)
-TODO: Update docs - Mike
-```
-
-**Pattern 5: Bullet with name**
-```
-- Sarah: create user stories
-- Mike - update architecture
-```
-
-#### Extraction Logic
-
-**For each action item, extract:**
-
-1. **Assignee Name**
- - Text after @ symbol
- - Name before "to", "will", "should"
- - Name after "Action:" or in parentheses
- - First/last name or full name
-
-2. **Task Description**
- - Text after "to", "will", "should", "-", ":"
- - Remove markers (@, Action:, TODO:)
- - Keep original wording
- - Include enough context
-
-3. **Context** (optional but helpful)
- - Meeting title/date if available
- - Surrounding discussion context
- - Related decisions
-
-#### Example Parsing
-
-**Input:**
-```
-# Product Planning - Dec 3
-
-Action Items:
-- @Sarah to create user stories for chat feature
-- Mike will update the architecture doc
-- Lisa: review and approve design mockups
-```
-
-**Parsed:**
-```
-1. Assignee: Sarah
- Task: Create user stories for chat feature
- Context: Product Planning meeting - Dec 3
-
-2. Assignee: Mike
- Task: Update the architecture doc
- Context: Product Planning meeting - Dec 3
-
-3. Assignee: Lisa
- Task: Review and approve design mockups
- Context: Product Planning meeting - Dec 3
-```
-
----
-
-### Step 3: Ask for Project Key
-
-Before looking up users or creating tasks, identify the Jira project.
-
-**Ask:** "Which Jira project should I create these tasks in? (e.g., PROJ, PRODUCT, ENG)"
-
-#### If User is Unsure
-
-Call `getVisibleJiraProjects` to show options:
-
-```
-getVisibleJiraProjects(
- cloudId="...",
- action="create"
-)
-```
-
-Present: "I found these projects you can create tasks in: PROJ (Project Alpha), PRODUCT (Product Team), ENG (Engineering)"
-
----
-
-### Step 4: Lookup Account IDs
-
-For each assignee name, find their Jira account ID.
-
-#### Lookup Process
-
-```
-lookupJiraAccountId(
- cloudId="...",
- searchString="[assignee name]"
-)
-```
-
-**The search string can be:**
-- Full name: "Sarah Johnson"
-- First name: "Sarah"
-- Last name: "Johnson"
-- Email: "sarah@company.com"
-
-#### Handle Results
-
-**Scenario A: Exact Match (1 result)**
-```
-✅ Found: Sarah Johnson (sarah.johnson@company.com)
-→ Use accountId from result
-```
-
-**Scenario B: No Match (0 results)**
-```
-⚠️ Couldn't find user "Sarah" in Jira.
-
-Options:
-1. Create task unassigned (assign manually later)
-2. Skip this task
-3. Try different name format (e.g., "Sarah Johnson")
-
-Which would you prefer?
-```
-
-**Scenario C: Multiple Matches (2+ results)**
-```
-⚠️ Found multiple users named "Sarah":
-1. Sarah Johnson (sarah.johnson@company.com)
-2. Sarah Smith (sarah.smith@company.com)
-
-Which user should be assigned the task "Create user stories"?
-```
-
-#### Best Practices
-
-- Try full name first ("Sarah Johnson")
-- If no match, try first name only ("Sarah")
-- If still no match, ask user
-- Cache results (don't lookup same person twice)
-
----
-
-### Step 5: Present Action Items
-
-**CRITICAL:** Always show the parsed action items to the user BEFORE creating any tasks.
-
-#### Presentation Format
-
-```
-I found [N] action items from the meeting notes. Should I create these Jira tasks in [PROJECT]?
-
-1. [TASK] [Task description]
- Assigned to: [Name] ([email if found])
- Context: [Meeting title/date]
-
-2. [TASK] [Task description]
- Assigned to: [Name] ([email if found])
- Context: [Meeting title/date]
-
-[...continue for all tasks...]
-
-Would you like me to:
-1. Create all tasks
-2. Skip some tasks (which ones?)
-3. Modify any descriptions or assignees
-```
-
-#### Wait for Confirmation
-
-Do NOT create tasks until user confirms. Options:
-- "Yes, create all" → proceed
-- "Skip task 3" → create all except #3
-- "Change assignee for task 2" → ask for new assignee
-- "Edit description" → ask for changes
-
----
-
-### Step 6: Create Tasks
-
-Once confirmed, create each Jira task.
-
-#### Determine Issue Type
-
-Before creating tasks, check what issue types are available in the project:
-
-```
-getJiraProjectIssueTypesMetadata(
- cloudId="...",
- projectIdOrKey="PROJ"
-)
-```
-
-**Choose the appropriate issue type:**
-- Use "Task" if available (most common)
-- Use "Story" for user-facing features
-- Use "Bug" if it's a defect
-- If "Task" doesn't exist, use the first available issue type or ask the user
-
-#### For Each Action Item
-
-```
-createJiraIssue(
- cloudId="...",
- projectKey="PROJ",
- issueTypeName="[Task or available type]",
- summary="[Task description]",
- description="[Full description with context]",
- assignee_account_id="[looked up account ID]"
-)
-```
-
-#### Task Summary Format
-
-Use action verbs and be specific:
-- ✅ "Create user stories for chat feature"
-- ✅ "Update architecture documentation"
-- ✅ "Review and approve design mockups"
-- ❌ "Do the thing" (too vague)
-
-#### Task Description Format
-
-```markdown
-**Action Item from Meeting Notes**
-
-**Task:** [Original action item text]
-
-**Context:**
-[Meeting title/date]
-[Relevant discussion points or decisions]
-
-**Source:** [Link to Confluence meeting notes if available]
-
-**Original Note:**
-> [Exact quote from meeting notes]
-```
-
-**Example:**
-```markdown
-**Action Item from Meeting Notes**
-
-**Task:** Create user stories for chat feature
-
-**Context:**
-Product Planning Meeting - December 3, 2025
-Discussed Q1 roadmap priorities and new feature requirements
-
-**Source:** https://yoursite.atlassian.net/wiki/spaces/TEAM/pages/12345
-
-**Original Note:**
-> @Sarah to create user stories for chat feature
-```
-
----
-
-### Step 7: Provide Summary
-
-After all tasks are created, present a comprehensive summary.
-
-**Format:**
-```
-✅ Created [N] tasks in [PROJECT]:
-
-1. [PROJ-123] - [Task summary]
- Assigned to: [Name]
- https://yoursite.atlassian.net/browse/PROJ-123
-
-2. [PROJ-124] - [Task summary]
- Assigned to: [Name]
- https://yoursite.atlassian.net/browse/PROJ-124
-
-[...continue for all created tasks...]
-
-**Source:** [Link to meeting notes]
-
-**Next Steps:**
-- Review tasks in Jira for accuracy
-- Add any additional details or attachments
-- Adjust priorities if needed
-- Link related tickets if applicable
-```
-
----
-
-## Action Item Pattern Examples
-
-### Pattern 1: @Mentions (Most Explicit)
-
-```
-@john to update documentation
-@sarah will create the report
-@mike should review PR #123
-```
-
-**Parsed:**
-- Assignee: john/sarah/mike
-- Task: update documentation / create the report / review PR #123
-
----
-
-### Pattern 2: Name + Action Verb
-
-```
-John to update documentation
-Sarah will create the report
-Mike should review PR #123
-Lisa needs to test the feature
-```
-
-**Parsed:**
-- Assignee: name before action verb
-- Task: text after "to/will/should/needs to"
-
----
-
-### Pattern 3: Structured Action Format
-
-```
-Action: John - update documentation
-Action Item: Sarah - create the report
-AI: Mike - review PR #123
-```
-
-**Parsed:**
-- Assignee: name after "Action:" and before "-"
-- Task: text after "-"
-
----
-
-### Pattern 4: TODO Format
-
-```
-TODO: Update documentation (John)
-TODO: Create report - Sarah
-[ ] Mike: review PR #123
-```
-
-**Parsed:**
-- Assignee: name in parentheses or after ":"
-- Task: text between TODO and assignee
-
----
-
-### Pattern 5: Bullet Lists
-
-```
-- John: update documentation
-- Sarah - create the report
-* Mike will review PR #123
-```
-
-**Parsed:**
-- Assignee: name before ":" or "-" or action verb
-- Task: remaining text
-
----
-
-## Handling Edge Cases
-
-### No Action Items Found
-
-If no action items with assignees are detected:
-
-```
-I analyzed the meeting notes but couldn't find any action items with clear assignees.
-
-Action items typically follow patterns like:
-- @Name to do X
-- Name will do X
-- Action: Name - do X
-- TODO: X (Name)
-
-Options:
-1. I can search for TODO items without assignees
-2. You can point out specific action items to create
-3. I can create tasks for bullet points you specify
-
-What would you like to do?
-```
-
----
-
-### Mixed Formats
-
-If some action items have assignees and some don't:
-
-```
-I found [N] action items:
-- [X] with clear assignees
-- [Y] without assignees
-
-Should I:
-1. Create all [N] tasks ([X] assigned, [Y] unassigned)
-2. Only create the [X] tasks with assignees
-3. Ask you to assign the [Y] unassigned tasks
-
-Which option would you prefer?
-```
-
----
-
-### Assignee Name Variations
-
-If the same person is mentioned different ways:
-
-```
-Notes mention: @sarah, Sarah, Sarah J.
-
-These likely refer to the same person. I'll look up "Sarah" once and use
-that account ID for all three mentions. Is that correct?
-```
-
----
-
-### Duplicate Action Items
-
-If the same task appears multiple times:
-
-```
-I found what appears to be the same action item twice:
-1. "@Sarah to create user stories" (line 15)
-2. "Action: Sarah - create user stories" (line 42)
-
-Should I:
-1. Create one task (combine duplicates)
-2. Create two separate tasks
-3. Skip the duplicate
-
-What would you prefer?
-```
-
----
-
-### Long Task Descriptions
-
-If action item text is very long (>200 characters):
-
-```
-The task "[long text...]" is quite detailed.
-
-Should I:
-1. Use first sentence as summary, rest in description
-2. Use full text as summary
-3. Let you edit it to be more concise
-
-Which would you prefer?
-```
-
----
-
-## Tips for High-Quality Results
-
-### Do:
-✅ Use consistent @mention format in notes
-✅ Include full names when possible
-✅ Be specific in action item descriptions
-✅ Add context (why/what/when)
-✅ Review parsed tasks before confirming
-
-### Don't:
-❌ Mix multiple tasks for one person in one bullet
-❌ Use ambiguous names (just "John" if you have 5 Johns)
-❌ Skip action verbs (unclear what to do)
-❌ Forget to specify project
-
-### Best Meeting Notes Format
-
-```
-# Meeting Title - Date
-
-Attendees: [Names]
-
-## Decisions
-[What was decided]
-
-## Action Items
-- @FullName to [specific task with context]
-- @AnotherPerson will [specific task with context]
-- etc.
-```
-
----
-
-## When NOT to Use This Skill
-
-This skill is for **converting meeting action items to Jira tasks only**.
-
-**Don't use for:**
-❌ Summarizing meetings (no task creation)
-❌ Finding meeting notes (use search skill)
-❌ Creating calendar events
-❌ Sending meeting notes via email
-❌ General note-taking
-
-**Use only when:** Meeting notes exist and action items need to become Jira tasks.
-
----
-
-## Examples
-
-### Example 1: Simple @Mentions
-
-**Input:**
-```
-Team Sync - Dec 3, 2025
-
-Action Items:
-- @Sarah to create user stories for chat feature
-- @Mike will update the architecture doc
-- @Lisa should review design mockups
-```
-
-**Process:**
-1. Parse → 3 action items found
-2. Project → "PROJ"
-3. Lookup → Sarah (123), Mike (456), Lisa (789)
-4. Present → User confirms
-5. Create → PROJ-100, PROJ-101, PROJ-102
-
-**Output:**
-```
-✅ Created 3 tasks in PROJ:
-
-1. PROJ-100 - Create user stories for chat feature
- Assigned to: Sarah Johnson
-
-2. PROJ-101 - Update the architecture doc
- Assigned to: Mike Chen
-
-3. PROJ-102 - Review design mockups
- Assigned to: Lisa Park
-```
-
----
-
-### Example 2: Mixed Formats
-
-**Input:**
-```
-Product Review Meeting
-
-Discussed new features and priorities.
-
-Follow-ups:
-- Sarah will draft the PRD
-- Mike: implement API changes
-- TODO: Review security audit (Lisa)
-- Update stakeholders on timeline
-```
-
-**Process:**
-1. Parse → Found 4 items (3 with assignees, 1 without)
-2. Ask → "Found 3 with assignees, 1 without. Create all or only assigned?"
-3. User → "All, make the last one unassigned"
-4. Create → 4 tasks (3 assigned, 1 unassigned)
-
----
-
-### Example 3: Name Lookup Issue
-
-**Input:**
-```
-Sprint Planning
-
-Action Items:
-- @John to update tests
-- @Sarah to refactor code
-```
-
-**Process:**
-1. Parse → 2 action items
-2. Lookup "John" → Found 3 Johns!
-3. Ask → "Which John? (John Smith, John Doe, John Wilson)"
-4. User → "John Smith"
-5. Create → Both tasks assigned correctly
-
----
-
-## Quick Reference
-
-**Primary tool:** `getConfluencePage` (if URL) or use pasted text
-**Account lookup:** `lookupJiraAccountId(searchString)`
-**Task creation:** `createJiraIssue` with `assignee_account_id`
-
-**Action patterns to look for:**
-- `@Name to/will/should X`
-- `Name to/will/should X`
-- `Action: Name - X`
-- `TODO: X (Name)`
-- `Name: X`
-
-**Always:**
-- Present parsed tasks before creating
-- Handle name lookup failures gracefully
-- Include context in task descriptions
-- Provide summary with links
-
-**Remember:**
-- Human-in-loop is critical (show before creating)
-- Name lookup can fail (have fallback)
-- Be flexible with pattern matching
-- Context preservation is important
diff --git a/plugins/atlassian-rovo/skills/capture-tasks-from-meeting-notes/agents/openai.yaml b/plugins/atlassian-rovo/skills/capture-tasks-from-meeting-notes/agents/openai.yaml
deleted file mode 100644
index 3c0acf5ed..000000000
--- a/plugins/atlassian-rovo/skills/capture-tasks-from-meeting-notes/agents/openai.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-interface:
- display_name: "Capture Tasks From Meeting Notes"
- short_description: "Extract action items and create Jira tasks"
diff --git a/plugins/atlassian-rovo/skills/capture-tasks-from-meeting-notes/references/action-item-patterns.md b/plugins/atlassian-rovo/skills/capture-tasks-from-meeting-notes/references/action-item-patterns.md
deleted file mode 100644
index 02cbaf083..000000000
--- a/plugins/atlassian-rovo/skills/capture-tasks-from-meeting-notes/references/action-item-patterns.md
+++ /dev/null
@@ -1,445 +0,0 @@
-# Action Item Patterns Reference
-
-Common patterns found in meeting notes and how to parse them.
-
----
-
-## Pattern Categories
-
-### Category 1: @Mentions (Highest Confidence)
-
-**Format:** `@Name [action verb] [task]`
-
-**Examples:**
-```
-@john to update documentation
-@sarah will create the report
-@mike should review PR #123
-@lisa needs to test the feature
-```
-
-**Parsing:**
-- Assignee: Text immediately after @
-- Task: Everything after action verb (to/will/should/needs to)
-- Confidence: Very High (explicit assignment)
-
----
-
-### Category 2: Name + Action Verb (High Confidence)
-
-**Format:** `Name [action verb] [task]`
-
-**Examples:**
-```
-John to update documentation
-Sarah will create the report
-Mike should review PR #123
-Lisa needs to test the feature
-```
-
-**Parsing:**
-- Assignee: First word(s) before action verb
-- Task: Everything after action verb
-- Confidence: High (clear structure)
-
-**Action verbs to detect:**
-- to, will, should, needs to, must, has to, is to, going to
-
----
-
-### Category 3: Structured Action Format (High Confidence)
-
-**Format:** `Action: Name - [task]` or `AI: Name - [task]`
-
-**Examples:**
-```
-Action: John - update documentation
-Action Item: Sarah - create the report
-AI: Mike - review PR #123
-Task: Lisa - test the feature
-```
-
-**Parsing:**
-- Assignee: Between "Action:" and "-"
-- Task: After "-"
-- Confidence: High (structured format)
-
-**Variants:**
-- Action:
-- Action Item:
-- AI:
-- Task:
-- Assigned:
-
----
-
-### Category 4: TODO Format (Medium Confidence)
-
-**Format:** `TODO: [task] (Name)` or `TODO: [task] - Name`
-
-**Examples:**
-```
-TODO: Update documentation (John)
-TODO: Create report - Sarah
-[ ] Review PR #123 (Mike)
-- [ ] Test feature - Lisa
-```
-
-**Parsing:**
-- Assignee: In parentheses or after "-"
-- Task: Between TODO and assignee
-- Confidence: Medium (format varies)
-
-**Markers to detect:**
-- TODO:
-- [ ]
-- - [ ]
-- To-do:
-- Action item:
-
----
-
-### Category 5: Colon or Dash Format (Medium Confidence)
-
-**Format:** `Name: [task]` or `Name - [task]`
-
-**Examples:**
-```
-John: update documentation
-Sarah - create the report
-Mike: review PR #123
-Lisa - test the feature
-```
-
-**Parsing:**
-- Assignee: Before ":" or "-"
-- Task: After ":" or "-"
-- Confidence: Medium (could be other uses of colons/dashes)
-
-**Detection:**
-- Look for name-like word before ":" or "-"
-- Followed by action verb or imperative
-- Usually in bulleted lists
-
----
-
-## Complex Patterns
-
-### Multiple Assignees
-
-**Format:** `Name1 and Name2 to [task]`
-
-**Examples:**
-```
-John and Sarah to update documentation
-Mike, Lisa to review PR
-```
-
-**Handling:**
-- Create separate tasks for each person
-- OR create one task, ask user who should be assigned
-- Include both names in description
-
----
-
-### Conditional Actions
-
-**Format:** `Name to [task] if [condition]`
-
-**Examples:**
-```
-John to update docs if approved
-Sarah will create report pending review
-```
-
-**Handling:**
-- Include condition in task description
-- Note that it's conditional
-- User can adjust later
-
----
-
-### Time-Bound Actions
-
-**Format:** `Name to [task] by [date]`
-
-**Examples:**
-```
-John to update docs by EOD
-Sarah will finish report by Friday
-Mike to review before next meeting
-```
-
-**Handling:**
-- Extract deadline and add to task description
-- Could use due date field if available
-- Include urgency in task
-
----
-
-## Anti-Patterns (Not Action Items)
-
-### Discussion Notes
-
-**Not an action item:**
-```
-John mentioned the documentation needs updating
-Sarah suggested we create a report
-Mike talked about reviewing the code
-```
-
-**Why:** These are discussions, not assignments
-
----
-
-### General Statements
-
-**Not an action item:**
-```
-Documentation needs to be updated
-Someone should create a report
-The code requires review
-```
-
-**Why:** No specific assignee
-
----
-
-### Past Actions
-
-**Not an action item:**
-```
-John updated the documentation
-Sarah created the report
-Mike reviewed the code
-```
-
-**Why:** Already completed (past tense)
-
----
-
-## Context Extraction
-
-### Meeting Metadata
-
-**Look for:**
-```
-# [Meeting Title] - [Date]
-Meeting: [Title]
-Date: [Date]
-Subject: [Title]
-```
-
-**Extract:**
-- Meeting title
-- Date
-- Attendees (if listed)
-
----
-
-### Related Information
-
-**Look for:**
-```
-Related to: [project/epic/initiative]
-Context: [background info]
-Decision: [relevant decision]
-```
-
-**Include in task:**
-- Links to related work
-- Background context
-- Relevant decisions
-
----
-
-## Name Extraction Tips
-
-### Full Names
-
-**Preferred:**
-```
-@Sarah Johnson to create report
-Sarah Johnson will create report
-```
-
-**Extract:** "Sarah Johnson"
-
----
-
-### First Name Only
-
-**Common:**
-```
-@Sarah to create report
-Sarah will create report
-```
-
-**Extract:** "Sarah" (will need to lookup)
-
----
-
-### Nicknames or Short Forms
-
-**Handle carefully:**
-```
-@SJ to create report
-Sara (no h) will create report
-```
-
-**Strategy:** Ask user or try multiple lookups
-
----
-
-## Priority Indicators
-
-### Urgent/High Priority
-
-**Detect:**
-```
-URGENT: John to update docs
-HIGH PRIORITY: Sarah to create report
-ASAP: Mike to review code
-```
-
-**Handling:**
-- Note priority in task description
-- Could set priority field
-- Highlight in presentation
-
----
-
-### Low Priority
-
-**Detect:**
-```
-If time: John to update docs
-Nice to have: Sarah create report
-Eventually: Mike review code
-```
-
-**Handling:**
-- Note as lower priority
-- Could defer creation
-- User can decide
-
----
-
-## Confidence Scoring
-
-When parsing, assign confidence:
-
-**High Confidence (90%+):**
-- @Mentions with clear action
-- "Name to do X" format
-- "Action: Name - X" format
-
-**Medium Confidence (60-90%):**
-- Name: task format
-- TODO with name
-- Name without action verb but clear task
-
-**Low Confidence (<60%):**
-- Ambiguous wording
-- No clear assignee
-- Could be discussion not action
-
-**Handling:**
-- Present all to user
-- Flag low-confidence items
-- Let user confirm or skip
-
----
-
-## Special Cases
-
-### Group Actions
-
-```
-Everyone to review the document
-Team to provide feedback
-```
-
-**Handling:**
-- Ask user who specifically
-- OR create one task unassigned
-- Note it's for the whole team
-
----
-
-### Optional Actions
-
-```
-Sarah could create a report if needed
-Mike might review the code
-```
-
-**Handling:**
-- Flag as optional
-- Ask user if should create
-- Include "optional" in description
-
----
-
-### Delegated Actions
-
-```
-John will ask Sarah to create the report
-```
-
-**Handling:**
-- Assign to Sarah (the actual doer)
-- Note John is requestor
-- Include context
-
----
-
-## Testing Patterns
-
-Use these to validate pattern matching:
-
-```
-✅ @john to update tests
-✅ Sarah will write docs
-✅ Mike: review code
-✅ TODO: Deploy (Lisa)
-✅ Action: John - fix bug
-
-⚠️ Maybe John can help?
-⚠️ Documentation needs work
-⚠️ We should test this
-
-❌ John mentioned testing
-❌ Tests were updated
-❌ Someone needs to deploy
-```
-
----
-
-## Regular Expression Examples
-
-**@Mention pattern:**
-```regex
-@(\w+)\s+(to|will|should)\s+(.+)
-```
-
-**Name + action verb:**
-```regex
-([A-Z][\w\s]+?)\s+(to|will|should)\s+(.+)
-```
-
-**Action format:**
-```regex
-Action:\s*([A-Z][\w\s]+?)\s*-\s*(.+)
-```
-
-**TODO format:**
-```regex
-TODO:\s*(.+)\s*\((\w+)\)
-```
-
-**Note:** These patterns use `[A-Z][\w\s]+?` to match names flexibly:
-- Starts with a capital letter
-- Matches one or more word characters or spaces
-- Non-greedy (`+?`) to stop at action verbs
-- Handles single names ("Sarah"), two-part names ("Sarah Johnson"), and longer names ("Mary Jane Smith")
diff --git a/plugins/atlassian-rovo/skills/generate-status-report/SKILL.md b/plugins/atlassian-rovo/skills/generate-status-report/SKILL.md
deleted file mode 100644
index b02e8b578..000000000
--- a/plugins/atlassian-rovo/skills/generate-status-report/SKILL.md
+++ /dev/null
@@ -1,335 +0,0 @@
----
-name: generate-status-report
-description: "Generate project status reports from Jira issues and publish to Confluence. When an agent needs to: (1) Create a status report for a project, (2) Summarize project progress or updates, (3) Generate weekly/daily reports from Jira, (4) Publish status summaries to Confluence, or (5) Analyze project blockers and completion. Queries Jira issues, categorizes by status/priority, and creates formatted reports for delivery managers and executives."
----
-
-# Generate Status Report
-
-## Keywords
-status report, project status, weekly update, daily standup, Jira report, project summary, blockers, progress update, Confluence report, sprint report, project update, publish to Confluence, write to Confluence, post report
-
-Automatically query Jira for project status, analyze issues, and generate formatted status reports published to Confluence.
-
-**CRITICAL**: This skill should be **interactive**. Always clarify scope (time period, audience, Confluence destination) with the user before or after generating the report. Do not silently skip Confluence publishing—always offer it.
-
-## Workflow
-
-Generating a status report follows these steps:
-
-1. **Identify scope** - Determine project, time period, and target audience
-2. **Query Jira** - Fetch relevant issues using JQL queries
-3. **Analyze data** - Categorize issues and identify key insights
-4. **Format report** - Structure content based on audience and purpose
-5. **Publish to Confluence** - Create or update a page with the report
-
-## Step 1: Identify Scope
-
-**IMPORTANT**: If the user's request is missing key information, ASK before proceeding with queries. Do not assume defaults without confirmation for Confluence publishing.
-
-Clarify these details:
-
-**Project identification:**
-- Which Jira project key? (e.g., "PROJ", "ENG", "MKTG")
-- If the user mentions a project by name but not key, search Jira to find the project key
-
-**Time period:**
-- If not specified, ask: "What time period should this report cover? (default: last 7 days)"
-- Options: Weekly (7 days), Daily (24 hours), Sprint-based (2 weeks), Custom period
-
-**Target audience:**
-- If not specified, ask: "Who is this report for? (Executives/Delivery Managers, Team-level, or Daily standup)"
-- **Executives/Delivery Managers**: High-level summary with key metrics and blockers
-- **Team-level**: Detailed breakdown with issue-by-issue status
-- **Daily standup**: Brief update on yesterday/today/blockers
-
-**Report destination:**
-- **ALWAYS ASK** if not specified: "Would you like me to publish this report to Confluence? If so, which space should I use?"
-- If user says yes: Ask for space name or offer to list available spaces
-- Determine: New page or update existing page?
-- Ask about parent page if creating under a specific section
-
-## Step 2: Query Jira
-
-Use the `searchJiraIssuesUsingJql` tool to fetch issues. Build JQL queries based on report needs.
-
-### Common Query Patterns
-
-For comprehensive queries, use the `scripts/jql_builder.py` utility to programmatically build JQL strings. For quick queries, reference `references/jql-patterns.md` for examples.
-
-**All open issues in project:**
-```jql
-project = "PROJECT_KEY" AND status != Done ORDER BY priority DESC, updated DESC
-```
-
-**Issues updated in last week:**
-```jql
-project = "PROJECT_KEY" AND updated >= -7d ORDER BY priority DESC
-```
-
-**High priority and blocked issues:**
-```jql
-project = "PROJECT_KEY" AND (priority IN (Highest, High) OR status = Blocked) AND status != Done ORDER BY priority DESC
-```
-
-**Completed in reporting period:**
-```jql
-project = "PROJECT_KEY" AND status = Done AND resolved >= -7d ORDER BY resolved DESC
-```
-
-### Query Strategy
-
-For most reports, execute multiple targeted queries rather than one large query:
-
-1. **Completed issues**: Get recently resolved tickets
-2. **In-progress issues**: Get active work items
-3. **Blocked issues**: Get blockers requiring attention
-4. **High priority open**: Get critical upcoming work
-
-Use `maxResults: 100` for initial queries. If pagination is needed, use `nextPageToken` from results.
-
-### Data to Extract
-
-For each issue, capture:
-- `key` (e.g., "PROJ-123")
-- `summary` (issue title)
-- `status` (current state)
-- `priority` (importance level)
-- `assignee` (who's working on it)
-- `created` / `updated` / `resolved` dates
-- `description` (if needed for context on blockers)
-
-## Step 3: Analyze Data
-
-Process the retrieved issues to identify:
-
-**Metrics:**
-- Total issues by status (Done, In Progress, Blocked, etc.)
-- Completion rate (if historical data available)
-- Number of high priority items
-- Unassigned issue count
-
-**Key insights:**
-- Major accomplishments (recently completed high-value items)
-- Critical blockers (blocked high priority issues)
-- At-risk items (overdue or stuck in progress)
-- Resource bottlenecks (one assignee with many issues)
-
-**Categorization:**
-Group issues logically:
-- By status (Done, In Progress, Blocked)
-- By priority (Highest → Low)
-- By assignee or team
-- By component or epic (if relevant)
-
-## Step 4: Format Report
-
-Select the appropriate template based on audience. Templates are in `references/report-templates.md`.
-
-### For Executives and Delivery Managers
-
-Use **Executive Summary Format**:
-- Brief overall status (🟢 On Track / 🟡 At Risk / 🔴 Blocked)
-- Key metrics (total, completed, in progress, blocked)
-- Top 3 highlights (major accomplishments)
-- Critical blockers with impact
-- Upcoming priorities
-
-**Keep it concise** - 1-2 pages maximum. Focus on what matters to decision-makers.
-
-### For Team-Level Reports
-
-Use **Detailed Technical Format**:
-- Completed issues listed with keys
-- In-progress issues with assignee and priority
-- Blocked issues with blocker description and action needed
-- Risks and dependencies
-- Next period priorities
-
-**Include more detail** - Team needs issue-level visibility.
-
-### For Daily Updates
-
-Use **Daily Standup Format**:
-- What was completed yesterday
-- What's planned for today
-- Current blockers
-- Brief notes
-
-**Keep it brief** - This is a quick sync, not comprehensive analysis.
-
-## Step 5: Publish to Confluence
-
-**After generating the report, ALWAYS offer to publish to Confluence** (unless user explicitly said not to).
-
-If user hasn't specified Confluence details yet, ask:
-- "Would you like me to publish this report to Confluence?"
-- "Which Confluence space should I use?"
-- "Should this be nested under a specific parent page?"
-
-Use the `createConfluencePage` tool to publish the report.
-
-**Page creation:**
-```
-createConfluencePage(
- cloudId="[obtained from getConfluenceSpaces or URL]",
- spaceId="[numerical space ID]",
- title="[Project Name] - Status Report - [Date]",
- body="[formatted report in Markdown]",
- contentFormat="markdown",
- parentId="[optional - parent page ID if nesting under another page]"
-)
-```
-
-**Title format examples:**
-- "Project Phoenix - Weekly Status - Dec 3, 2025"
-- "Engineering Sprint 23 - Status Report"
-- "Q4 Initiatives - Status Update - Week 49"
-
-**Body formatting:**
-Write the report content in Markdown. The tool will convert it to Confluence format. Use:
-- Headers (`#`, `##`, `###`) for structure
-- Bullet points for lists
-- Bold (`**text**`) for emphasis
-- Tables for metrics if needed
-- Links to Jira issues: `[PROJ-123](https://yourinstance.atlassian.net/browse/PROJ-123)`
-
-**Best practices:**
-- Include the report date prominently
-- Link directly to relevant Jira issues
-- Use consistent naming conventions for recurring reports
-- Consider creating under a "Status Reports" parent page for organization
-
-### Finding the Right Space
-
-If the user doesn't specify a Confluence space:
-
-1. Use `getConfluenceSpaces` to list available spaces
-2. Look for spaces related to the project (matching project name or key)
-3. If unsure, ask the user which space to use
-4. Default to creating in the most relevant team or project space
-
-### Updating Existing Reports
-
-If updating an existing page instead of creating new:
-
-1. Get the current page content:
-```
-getConfluencePage(
- cloudId="...",
- pageId="123456",
- contentFormat="markdown"
-)
-```
-
-2. Update the page with new content:
-```
-updateConfluencePage(
- cloudId="...",
- pageId="123456",
- body="[updated report content]",
- contentFormat="markdown",
- versionMessage="Updated with latest status - Dec 8, 2025"
-)
-```
-
-## Complete Example Workflow
-
-**User request:** "Generate a status report for Project Phoenix and publish it to Confluence"
-
-**Step 1 - Identify scope:**
-- Project: Phoenix (need to find project key)
-- Time period: Last week (default)
-- Audience: Not specified, assume executive level
-- Destination: Confluence, need to find appropriate space
-
-**Step 2 - Query Jira:**
-```python
-# Find project key first
-searchJiraIssuesUsingJql(
- cloudId="...",
- jql='project = "PHOENIX" OR project = "PHX"',
- maxResults=1
-)
-
-# Query completed issues
-searchJiraIssuesUsingJql(
- cloudId="...",
- jql='project = "PHX" AND status = Done AND resolved >= -7d',
- maxResults=50
-)
-
-# Query blocked issues
-searchJiraIssuesUsingJql(
- cloudId="...",
- jql='project = "PHX" AND status = Blocked',
- maxResults=50
-)
-
-# Query in-progress high priority
-searchJiraIssuesUsingJql(
- cloudId="...",
- jql='project = "PHX" AND status IN ("In Progress", "In Review") AND priority IN (Highest, High)',
- maxResults=50
-)
-```
-
-**Step 3 - Analyze:**
-- 15 issues completed (metrics)
-- 3 critical blockers (key insight)
-- Major accomplishment: API integration completed (highlight)
-
-**Step 4 - Format:**
-Use Executive Summary Format from templates. Create concise report with metrics, highlights, and blockers.
-
-**Step 5 - Publish:**
-```python
-# Find appropriate space
-getConfluenceSpaces(cloudId="...")
-
-# Create page
-createConfluencePage(
- cloudId="...",
- spaceId="12345",
- title="Project Phoenix - Weekly Status - Dec 3, 2025",
- body="[formatted markdown report]",
- contentFormat="markdown"
-)
-```
-
-## Tips for Quality Reports
-
-**Be data-driven:**
-- Include specific numbers and metrics
-- Reference issue keys directly
-- Show trends when possible (e.g., "completed 15 vs 12 last week")
-
-**Highlight what matters:**
-- Lead with the most important information
-- Flag blockers prominently
-- Celebrate significant wins
-
-**Make it actionable:**
-- For blockers, state what action is needed and from whom
-- For risks, provide mitigation options
-- For priorities, be specific about next steps
-
-**Keep it consistent:**
-- Use the same format for recurring reports
-- Maintain predictable structure
-- Include comparable metrics week-over-week
-
-**Provide context:**
-- Link to Jira for details
-- Explain the impact of blockers
-- Connect work to business objectives when possible
-
-## Resources
-
-### scripts/jql_builder.py
-Python utility for programmatically building JQL queries. Use this when you need to construct complex or dynamic queries. Import and use the helper functions rather than manually concatenating JQL strings.
-
-### references/jql-patterns.md
-Quick reference of common JQL query patterns for status reports. Use this for standard queries or as a starting point for custom queries.
-
-### references/report-templates.md
-Detailed templates for different report types and audiences. Reference this to select the appropriate format and structure for your report.
diff --git a/plugins/atlassian-rovo/skills/generate-status-report/agents/openai.yaml b/plugins/atlassian-rovo/skills/generate-status-report/agents/openai.yaml
deleted file mode 100644
index 9820355c5..000000000
--- a/plugins/atlassian-rovo/skills/generate-status-report/agents/openai.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-interface:
- display_name: "Generate Status Report"
- short_description: "Create project status reports from Jira"
diff --git a/plugins/atlassian-rovo/skills/generate-status-report/references/jql-patterns.md b/plugins/atlassian-rovo/skills/generate-status-report/references/jql-patterns.md
deleted file mode 100644
index b71bb2599..000000000
--- a/plugins/atlassian-rovo/skills/generate-status-report/references/jql-patterns.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# JQL Query Patterns
-
-Common JQL patterns for status report generation.
-
-## Basic Project Queries
-
-**All open issues in a project:**
-```jql
-project = "PROJECT_KEY" AND status != Done
-```
-
-**Open issues by status:**
-```jql
-project = "PROJECT_KEY" AND status IN ("To Do", "In Progress", "In Review")
-```
-
-## Priority-Based Queries
-
-**High priority open issues:**
-```jql
-project = "PROJECT_KEY" AND status != Done AND priority IN ("Highest", "High")
-```
-
-**Blocked issues:**
-```jql
-project = "PROJECT_KEY" AND status = Blocked
-```
-
-## Time-Based Queries
-
-**Updated in last week:**
-```jql
-project = "PROJECT_KEY" AND updated >= -7d
-```
-
-**Completed in reporting period:**
-```jql
-project = "PROJECT_KEY" AND status = Done AND resolved >= -7d
-```
-
-**Created this sprint:**
-```jql
-project = "PROJECT_KEY" AND created >= -14d
-```
-
-## Assignee Queries
-
-**Unassigned issues:**
-```jql
-project = "PROJECT_KEY" AND assignee is EMPTY AND status != Done
-```
-
-**Issues by team member:**
-```jql
-project = "PROJECT_KEY" AND assignee = "user@example.com" AND status != Done
-```
-
-## Combined Queries for Reports
-
-**Current sprint overview:**
-```jql
-project = "PROJECT_KEY" AND status IN ("To Do", "In Progress", "In Review", "Done") AND updated >= -7d ORDER BY priority DESC, updated DESC
-```
-
-**Risk items (high priority blocked or overdue):**
-```jql
-project = "PROJECT_KEY" AND (status = Blocked OR (duedate < now() AND status != Done)) AND priority IN ("Highest", "High") ORDER BY priority DESC
-```
-
-## Epic and Component Queries
-
-**Issues by epic:**
-```jql
-parent = "EPIC_KEY" AND status != Done
-```
-
-Note: Older Jira instances may use `"Epic Link" = "EPIC_KEY"` instead of `parent`.
-
-**Issues by component:**
-```jql
-project = "PROJECT_KEY" AND component = "ComponentName" AND status != Done
-```
diff --git a/plugins/atlassian-rovo/skills/generate-status-report/references/report-templates.md b/plugins/atlassian-rovo/skills/generate-status-report/references/report-templates.md
deleted file mode 100644
index d6b835c84..000000000
--- a/plugins/atlassian-rovo/skills/generate-status-report/references/report-templates.md
+++ /dev/null
@@ -1,120 +0,0 @@
-# Status Report Templates
-
-This file provides templates for different report formats based on audience and context.
-
-## Executive Summary Format
-
-For delivery managers and executives who need high-level overview:
-
-```markdown
-# [Project Name] - Status Report
-**Date:** [Date]
-**Reporting Period:** [Period]
-
-## Executive Summary
-[2-3 sentences summarizing overall status, major accomplishments, and critical blockers]
-
-## Overall Status
-🟢 On Track | 🟡 At Risk | 🔴 Blocked | ⚪ Not Started
-
-## Key Metrics
-- **Total Issues:** [number]
-- **Completed This Period:** [number]
-- **In Progress:** [number]
-- **Blocked:** [number]
-
-## Highlights
-- [Major accomplishment 1]
-- [Major accomplishment 2]
-- [Major accomplishment 3]
-
-## Critical Blockers
-- **[Blocker Title]** - [Brief description and impact]
-- **[Blocker Title]** - [Brief description and impact]
-
-## Upcoming Priorities
-- [Priority 1]
-- [Priority 2]
-- [Priority 3]
-```
-
-## Detailed Technical Format
-
-For team-level reports with more technical detail:
-
-```markdown
-# [Project Name] - Status Report
-**Date:** [Date]
-**Reporting Period:** [Period]
-
-## Summary
-[Overall project status and key takeaways]
-
-## Progress This Period
-
-### Completed
-- [Issue Key] - [Summary]
-- [Issue Key] - [Summary]
-
-### In Progress
-- [Issue Key] - [Summary] ([Assignee], [Priority])
-- [Issue Key] - [Summary] ([Assignee], [Priority])
-
-### Blocked
-- [Issue Key] - [Summary]
- - **Blocker:** [Description of blocker]
- - **Impact:** [How this affects timeline/deliverables]
- - **Action Needed:** [What needs to happen to unblock]
-
-## Risks and Issues
-- [Risk/Issue description with mitigation plan]
-
-## Next Period Priorities
-- [Planned work item 1]
-- [Planned work item 2]
-
-## Dependencies
-- [External dependency description]
-```
-
-## Daily Standup Format
-
-For daily status updates:
-
-```markdown
-# Daily Status - [Date]
-**Project:** [Project Name]
-
-## Completed Yesterday
-- [Issue Key] - [Brief summary]
-
-## Planned for Today
-- [Issue Key] - [Brief summary]
-
-## Blockers
-- [Blocker description] (Assigned to: [name])
-
-## Notes
-[Any additional context or observations]
-```
-
-## By Priority Breakdown
-
-For priority-focused reporting:
-
-```markdown
-# [Project Name] - Status by Priority
-**Date:** [Date]
-
-## Highest Priority (P0/Blocker)
-- [Issue Key] - [Summary] - Status: [status]
-
-## High Priority (P1/Critical)
-- [Issue Key] - [Summary] - Status: [status]
-
-## Medium Priority (P2/Major)
-- [Issue Key] - [Summary] - Status: [status]
-
-## Low Priority (P3/Minor)
-[Summary count only unless specifically requested]
-```
diff --git a/plugins/atlassian-rovo/skills/generate-status-report/scripts/jql_builder.py b/plugins/atlassian-rovo/skills/generate-status-report/scripts/jql_builder.py
deleted file mode 100644
index 4d0f56a61..000000000
--- a/plugins/atlassian-rovo/skills/generate-status-report/scripts/jql_builder.py
+++ /dev/null
@@ -1,225 +0,0 @@
-#!/usr/bin/env python3
-"""
-JQL Query Builder Utility
-
-Helper functions for building common JQL queries for status reports.
-"""
-
-from typing import List, Optional
-import re
-
-
-def sanitize_jql_value(value: str) -> str:
- """
- Sanitize a value for use in JQL to prevent injection attacks.
-
- Args:
- value: The input value to sanitize
-
- Returns:
- Sanitized value safe for JQL queries
- """
- if not value:
- return value
-
- # Remove or escape potentially dangerous characters
- # Allow alphanumeric, spaces, hyphens, underscores, dots, @
- safe_pattern = re.compile(r'^[a-zA-Z0-9\s\-_.@]+$')
-
- if not safe_pattern.match(value):
- raise ValueError(
- f"Invalid characters in input: '{value}'. "
- f"Only alphanumeric characters, spaces, hyphens, underscores, dots, and @ are allowed."
- )
-
- # Escape double quotes by doubling them (JQL escaping)
- return value.replace('"', '""')
-
-
-def sanitize_jql_list(values: List[str]) -> List[str]:
- """
- Sanitize a list of values for use in JQL.
-
- Args:
- values: List of input values to sanitize
-
- Returns:
- List of sanitized values
- """
- return [sanitize_jql_value(v) for v in values]
-
-
-def build_project_query(
- project_key: str,
- statuses: Optional[List[str]] = None,
- exclude_done: bool = True,
- priorities: Optional[List[str]] = None,
- days_back: Optional[int] = None,
- assignee: Optional[str] = None,
- order_by: str = "priority DESC, updated DESC"
-) -> str:
- """
- Build a JQL query for project status.
-
- Args:
- project_key: The Jira project key
- statuses: List of statuses to include (e.g., ["To Do", "In Progress"])
- exclude_done: Whether to exclude Done status (default True)
- priorities: List of priorities to include (e.g., ["Highest", "High"])
- days_back: Number of days to look back for updates (e.g., 7)
- assignee: Specific assignee email or "EMPTY" for unassigned
- order_by: JQL order by clause (default: "priority DESC, updated DESC")
-
- Returns:
- JQL query string
- """
- # Sanitize inputs to prevent JQL injection
- project_key = sanitize_jql_value(project_key)
- conditions = [f'project = "{project_key}"']
-
- if statuses:
- statuses = sanitize_jql_list(statuses)
- status_list = '", "'.join(statuses)
- conditions.append(f'status IN ("{status_list}")')
- elif exclude_done:
- conditions.append('status != Done')
-
- if priorities:
- priorities = sanitize_jql_list(priorities)
- priority_list = '", "'.join(priorities)
- conditions.append(f'priority IN ("{priority_list}")')
-
- if days_back:
- if not isinstance(days_back, int) or days_back < 0:
- raise ValueError(f"days_back must be a non-negative integer, got: {days_back}")
- conditions.append(f'updated >= -{days_back}d')
-
- if assignee:
- if assignee.upper() == "EMPTY":
- conditions.append('assignee is EMPTY')
- else:
- assignee = sanitize_jql_value(assignee)
- conditions.append(f'assignee = "{assignee}"')
-
- query = " AND ".join(conditions)
-
- if order_by:
- # Validate order_by contains only safe keywords
- order_by = sanitize_jql_value(order_by)
- query += f' ORDER BY {order_by}'
-
- return query
-
-
-def build_blocked_query(
- project_key: str,
- high_priority_only: bool = False
-) -> str:
- """Build query for blocked issues."""
- project_key = sanitize_jql_value(project_key)
- query = f'project = "{project_key}" AND status = Blocked'
-
- if high_priority_only:
- query += ' AND priority IN (Highest, High)'
-
- query += ' ORDER BY priority DESC, created ASC'
- return query
-
-
-def build_completed_query(
- project_key: str,
- days_back: int = 7
-) -> str:
- """Build query for recently completed issues."""
- project_key = sanitize_jql_value(project_key)
-
- if not isinstance(days_back, int) or days_back < 0:
- raise ValueError(f"days_back must be a non-negative integer, got: {days_back}")
-
- return (
- f'project = "{project_key}" AND '
- f'status = Done AND '
- f'resolved >= -{days_back}d '
- f'ORDER BY resolved DESC'
- )
-
-
-def build_in_progress_query(
- project_key: str,
- priorities: Optional[List[str]] = None
-) -> str:
- """Build query for in-progress issues."""
- project_key = sanitize_jql_value(project_key)
- query = f'project = "{project_key}" AND status IN ("In Progress", "In Review")'
-
- if priorities:
- priorities = sanitize_jql_list(priorities)
- priority_list = '", "'.join(priorities)
- query += f' AND priority IN ("{priority_list}")'
-
- query += ' ORDER BY priority DESC, updated DESC'
- return query
-
-
-def build_risk_query(
- project_key: str,
- include_overdue: bool = True
-) -> str:
- """Build query for risk items (blocked or overdue high priority)."""
- project_key = sanitize_jql_value(project_key)
- conditions = [f'project = "{project_key}"']
-
- risk_conditions = ['status = Blocked']
- if include_overdue:
- risk_conditions.append('(duedate < now() AND status != Done)')
-
- conditions.append(f'({" OR ".join(risk_conditions)})')
- conditions.append('priority IN (Highest, High)')
-
- query = " AND ".join(conditions)
- query += ' ORDER BY priority DESC, duedate ASC'
- return query
-
-
-def build_unassigned_query(
- project_key: str,
- exclude_done: bool = True
-) -> str:
- """Build query for unassigned issues."""
- project_key = sanitize_jql_value(project_key)
- query = f'project = "{project_key}" AND assignee is EMPTY'
-
- if exclude_done:
- query += ' AND status != Done'
-
- query += ' ORDER BY priority DESC, created ASC'
- return query
-
-
-# Example usage
-if __name__ == "__main__":
- # Example queries
- project = "PROJ"
-
- print("Open Issues Query:")
- print(build_project_query(project))
- print()
-
- print("High Priority In Progress:")
- print(build_in_progress_query(project, priorities=["Highest", "High"]))
- print()
-
- print("Blocked Issues:")
- print(build_blocked_query(project, high_priority_only=True))
- print()
-
- print("Completed Last Week:")
- print(build_completed_query(project, days_back=7))
- print()
-
- print("Risk Items:")
- print(build_risk_query(project))
- print()
-
- print("Unassigned Open Issues:")
- print(build_unassigned_query(project))
diff --git a/plugins/atlassian-rovo/skills/search-company-knowledge/SKILL.md b/plugins/atlassian-rovo/skills/search-company-knowledge/SKILL.md
deleted file mode 100644
index 61f42ed09..000000000
--- a/plugins/atlassian-rovo/skills/search-company-knowledge/SKILL.md
+++ /dev/null
@@ -1,575 +0,0 @@
----
-name: search-company-knowledge
-description: "Search across company knowledge bases (Confluence, Jira, internal docs) to find and explain internal concepts, processes, and technical details. When an agent needs to: (1) Find or search for information about systems, terminology, processes, deployment, authentication, infrastructure, architecture, or technical concepts, (2) Search internal documentation, knowledge base, company docs, or our docs, (3) Explain what something is, how it works, or look up information, or (4) Synthesize information from multiple sources. Searches in parallel and provides cited answers."
----
-
-# Search Company Knowledge
-
-## Keywords
-find information, search company knowledge, look up, what is, explain, company docs, internal documentation, Confluence search, Jira search, our documentation, internal knowledge, knowledge base, search for, tell me about, get information about, company systems, terminology, find everything about, what do we know about, deployment, authentication, infrastructure, processes, procedures, how to, how does, our systems, our processes, internal systems, company processes, technical documentation, engineering docs, architecture, configuration, search our docs, search internal docs, find in our docs
-
-## Overview
-
-Search across siloed company knowledge systems (Confluence, Jira, internal documentation) to find comprehensive answers to questions about internal concepts, systems, and terminology. This skill performs parallel searches across multiple sources and synthesizes results with proper citations.
-
-**Use this skill when:** Users ask about internal company knowledge that might be documented in Confluence pages, Jira tickets, or internal documentation.
-
----
-
-## Workflow
-
-Follow this 5-step process to provide comprehensive, well-cited answers:
-
-### Step 1: Identify Search Query
-
-Extract the core search terms from the user's question.
-
-**Examples:**
-- User: "Find everything about Stratus minions" → Search: "Stratus minions"
-- User: "What do we know about the billing system?" → Search: "billing system"
-- User: "Explain our deployment process" → Search: "deployment process"
-
-**Consider:**
-- Main topic or concept
-- Any specific system/component names
-- Technical terms or jargon
-
----
-
-### Step 2: Execute Parallel Search
-
-Search across all available knowledge sources simultaneously for comprehensive coverage.
-
-#### Option A: Cross-System Search (Recommended First)
-
-Use the **`search`** tool (Rovo Search) to search across Confluence and Jira at once:
-
-```
-search(
- cloudId="...",
- query="[extracted search terms]"
-)
-```
-
-**When to use:**
-- Default approach for most queries
-- When you don't know which system has the information
-- Fastest way to get results from multiple sources
-
-**Example:**
-```
-search(
- cloudId="...",
- query="Stratus minions"
-)
-```
-
-This returns results from both Confluence pages and Jira issues.
-
-#### Option B: Targeted Confluence Search
-
-Use **`searchConfluenceUsingCql`** when specifically searching Confluence:
-
-```
-searchConfluenceUsingCql(
- cloudId="...",
- cql="text ~ 'search terms' OR title ~ 'search terms'"
-)
-```
-
-**When to use:**
-- User specifically mentions "in Confluence" or "in our docs"
-- Cross-system search returns too many Jira results
-- Looking for documentation rather than tickets
-
-**Example CQL patterns:**
-```
-text ~ "Stratus minions"
-text ~ "authentication" AND type = page
-title ~ "deployment guide"
-```
-
-#### Option C: Targeted Jira Search
-
-Use **`searchJiraIssuesUsingJql`** when specifically searching Jira:
-
-```
-searchJiraIssuesUsingJql(
- cloudId="...",
- jql="text ~ 'search terms' OR summary ~ 'search terms'"
-)
-```
-
-**When to use:**
-- User mentions "tickets", "issues", or "bugs"
-- Looking for historical problems or implementation details
-- Cross-system search returns mostly documentation
-
-**Example JQL patterns:**
-```
-text ~ "Stratus minions"
-summary ~ "authentication" AND type = Bug
-text ~ "deployment" AND created >= -90d
-```
-
-#### Search Strategy
-
-**For most queries, use this sequence:**
-
-1. Start with `search` (cross-system) - **always try this first**
-2. If results are unclear, follow up with targeted searches
-3. If results mention specific pages/tickets, fetch them for details
-
----
-
-### Step 3: Fetch Detailed Content
-
-After identifying relevant sources, fetch full content for comprehensive answers.
-
-#### For Confluence Pages
-
-When search results reference Confluence pages:
-
-```
-getConfluencePage(
- cloudId="...",
- pageId="[page ID from search results]",
- contentFormat="markdown"
-)
-```
-
-**Returns:** Full page content in Markdown format
-
-**When to fetch:**
-- Search result snippet is too brief
-- Need complete context
-- Page seems to be the primary documentation
-
-#### For Jira Issues
-
-When search results reference Jira issues:
-
-```
-getJiraIssue(
- cloudId="...",
- issueIdOrKey="PROJ-123"
-)
-```
-
-**Returns:** Full issue details including description, comments, status
-
-**When to fetch:**
-- Need to understand a reported bug or issue
-- Search result doesn't show full context
-- Issue contains important implementation notes
-
-#### Prioritization
-
-**Fetch in this order:**
-1. **Official documentation pages** (Confluence pages with "guide", "documentation", "overview" in title)
-2. **Recent/relevant issues** (Jira tickets that are relevant and recent)
-3. **Additional context** (related pages mentioned in initial results)
-
-**Don't fetch everything** - be selective based on relevance to user's question.
-
----
-
-### Step 4: Synthesize Results
-
-Combine information from multiple sources into a coherent answer.
-
-#### Synthesis Guidelines
-
-**Structure your answer:**
-
-1. **Direct Answer First**
- - Start with a clear, concise answer to the question
- - "Stratus minions are..."
-
-2. **Detailed Explanation**
- - Provide comprehensive details from all sources
- - Organize by topic, not by source
-
-3. **Source Attribution**
- - Note where each piece of information comes from
- - Format: "According to [source], ..."
-
-4. **Highlight Discrepancies**
- - If sources conflict, note it explicitly
- - Example: "The Confluence documentation states X, however Jira ticket PROJ-123 indicates that due to bug Y, the behavior is actually Z"
-
-5. **Provide Context**
- - Mention if information is outdated
- - Note if a feature is deprecated or in development
-
-#### Synthesis Patterns
-
-**Pattern 1: Multiple sources agree**
-```
-Stratus minions are background worker processes that handle async tasks.
-
-According to the Confluence documentation, they process jobs from the queue and
-can be scaled horizontally. This is confirmed by several Jira tickets (PROJ-145,
-PROJ-203) which discuss minion configuration and scaling strategies.
-```
-
-**Pattern 2: Sources provide different aspects**
-```
-The billing system has two main components:
-
-**Payment Processing** (from Confluence "Billing Architecture" page)
-- Handles credit card transactions
-- Integrates with Stripe API
-- Runs nightly reconciliation
-
-**Invoice Generation** (from Jira PROJ-189)
-- Creates monthly invoices
-- Note: Currently has a bug where tax calculation fails for EU customers
-- Fix planned for Q1 2024
-```
-
-**Pattern 3: Conflicting information**
-```
-There is conflicting information about the authentication timeout:
-
-- **Official Documentation** (Confluence) states: 30-minute session timeout
-- **Implementation Reality** (Jira PROJ-456, filed Oct 2023): Actual timeout is
- 15 minutes due to load balancer configuration
-- **Status:** Engineering team aware, fix planned but no timeline yet
-
-Current behavior: Expect 15-minute timeout despite docs saying 30 minutes.
-```
-
-**Pattern 4: Incomplete information**
-```
-Based on available documentation:
-
-[What we know about deployment process from Confluence and Jira]
-
-However, I couldn't find information about:
-- Rollback procedures
-- Database migration handling
-
-You may want to check with the DevOps team or search for additional documentation.
-```
-
----
-
-### Step 5: Provide Citations
-
-Always include links to source materials so users can explore further.
-
-#### Citation Format
-
-**For Confluence pages:**
-```
-**Source:** [Page Title](https://yoursite.atlassian.net/wiki/spaces/SPACE/pages/123456)
-```
-
-**For Jira issues:**
-```
-**Related Tickets:**
-- [PROJ-123](https://yoursite.atlassian.net/browse/PROJ-123) - Brief description
-- [PROJ-456](https://yoursite.atlassian.net/browse/PROJ-456) - Brief description
-```
-
-**Complete citation section:**
-```
-## Sources
-
-**Confluence Documentation:**
-- [Stratus Architecture Guide](https://yoursite.atlassian.net/wiki/spaces/DOCS/pages/12345)
-- [Minion Configuration](https://yoursite.atlassian.net/wiki/spaces/DEVOPS/pages/67890)
-
-**Jira Issues:**
-- [PROJ-145](https://yoursite.atlassian.net/browse/PROJ-145) - Minion scaling implementation
-- [PROJ-203](https://yoursite.atlassian.net/browse/PROJ-203) - Performance optimization
-
-**Additional Resources:**
-- [Internal architecture doc link if found]
-```
-
----
-
-## Search Best Practices
-
-### Effective Search Terms
-
-**Do:**
-- ✅ Use specific technical terms: "OAuth authentication flow"
-- ✅ Include system names: "Stratus minions"
-- ✅ Use acronyms if they're common: "API rate limiting"
-- ✅ Try variations if first search fails: "deploy process" → "deployment pipeline"
-
-**Don't:**
-- ❌ Be too generic: "how things work"
-- ❌ Use full sentences: Use key terms instead
-- ❌ Include filler words: "the", "our", "about"
-
-### Search Result Quality
-
-**Good results:**
-- Recent documentation (< 1 year old)
-- Official/canonical pages (titled "Guide", "Documentation", "Overview")
-- Multiple sources confirming same information
-- Detailed implementation notes
-
-**Questionable results:**
-- Very old tickets (> 2 years, may be outdated)
-- Duplicate or conflicting information
-- Draft pages or work-in-progress docs
-- Personal pages (may not be official)
-
-**When results are poor:**
-- Try different search terms
-- Expand search to include related concepts
-- Search for specific error messages or codes
-- Ask user for more context
-
----
-
-## Handling Common Scenarios
-
-### Scenario 1: No Results Found
-
-If searches return no results:
-
-```
-I searched across Confluence and Jira but couldn't find information about "[topic]".
-
-This could mean:
-- The concept hasn't been documented yet
-- It might be called something else (can you provide alternative names?)
-- Documentation might be in a different system I don't have access to
-
-Would you like me to:
-1. Try searching with different terms?
-2. Search for related concepts?
-3. Look for mentions in recent Jira tickets?
-```
-
-### Scenario 2: Too Many Results
-
-If search returns 50+ results:
-
-- Focus on most recent and most relevant (top 10-15)
-- Prioritize official documentation over random tickets
-- Group similar results: "I found 15 tickets related to authentication bugs..."
-- Offer to narrow search: "Would you like me to focus on [specific aspect]?"
-
-### Scenario 3: Ambiguous Query
-
-If the user's question is vague:
-
-```
-I found information about several topics related to "[term]":
-1. [Topic A] - from Confluence page X
-2. [Topic B] - from Jira tickets Y, Z
-3. [Topic C] - from documentation W
-
-Which aspect are you most interested in?
-```
-
-### Scenario 4: Outdated Information
-
-If you find information is old:
-
-```
-I found documentation about [topic], but note that it's from [date] and may be outdated.
-
-[Provide the information anyway]
-
-You may want to verify this is still current, especially if it's from more than
-a year ago.
-```
-
-### Scenario 5: Restricted/Private Content
-
-If search returns inaccessible content:
-
-```
-Search results mention [topic] in the following locations, but I don't have
-access to view the full content:
-- Confluence page: [title] (Space: [SPACE])
-- Jira issue: PROJ-123
-
-You may need to access these directly or check your permissions.
-```
-
----
-
-## Examples
-
-### Example 1: Clear Documentation Available
-
-**User:** "What are Stratus minions?"
-
-**Process:**
-1. Search: `search(cloudId="...", query="Stratus minions")`
-2. Find: Confluence page "Stratus Architecture" + 3 Jira tickets
-3. Fetch: Get full Confluence page content
-4. Synthesize: Combine architectural overview with implementation details from tickets
-5. Cite: Provide links to all sources
-
-**Answer:**
-```
-Stratus minions are background worker processes that handle asynchronous task
-processing in the Stratus system.
-
-**Key Characteristics:**
-- Run independently from web servers
-- Process jobs from a Redis queue
-- Can be scaled horizontally for increased throughput
-- Handle tasks like email sending, report generation, and data processing
-
-**Architecture:**
-According to the Stratus Architecture documentation, minions follow a
-worker-queue pattern where:
-1. Web application enqueues tasks
-2. Minions poll the queue for work
-3. Tasks are processed asynchronously
-4. Results are stored in the database
-
-**Implementation Notes:**
-From Jira ticket PROJ-203, the current deployment runs 5 minion instances,
-with plans to scale to 10 for handling increased load.
-
-## Sources
-- [Stratus Architecture Guide](link)
-- [PROJ-203](link) - Minion scaling implementation
-```
-
-### Example 2: Conflicting Information
-
-**User:** "How long is our session timeout?"
-
-**Process:**
-1. Search across Confluence and Jira
-2. Find: Docs say 30 min, but ticket reports actual timeout is 15 min
-3. Fetch both sources for complete context
-4. Clearly note the discrepancy
-
-**Answer:**
-```
-There is a discrepancy between documented and actual behavior:
-
-**Official Documentation** (Security Guidelines):
-Session timeout is configured for 30 minutes of inactivity.
-
-**Actual Behavior** (PROJ-456, reported Oct 2023):
-Users are being logged out after 15 minutes due to a load balancer configuration
-that overrides the application setting.
-
-**Current Status:**
-The engineering team is aware of this issue. The load balancer timeout needs to
-be adjusted to match the application setting. No fix timeline has been set.
-
-**Recommendation:** Plan for 15-minute timeout until this is resolved.
-
-## Sources
-- [Security Guidelines](link) - Official documentation
-- [PROJ-456](link) - Timeout discrepancy bug report
-```
-
-### Example 3: Partial Information
-
-**User:** "Explain our deployment process"
-
-**Process:**
-1. Search finds some information but not complete
-2. Synthesize what is available
-3. Note gaps in documentation
-
-**Answer:**
-```
-Based on available documentation, here's what I found about the deployment process:
-
-**Build Phase** (from Confluence "CI/CD Guide"):
-1. Code pushed to main branch triggers GitHub Actions
-2. Automated tests run (unit, integration)
-3. Docker image built and pushed to registry
-
-**Deployment Phase** (from Jira PROJ-789):
-4. Staging deployment happens automatically
-5. Manual approval required for production
-6. Blue-green deployment strategy used
-
-**Gaps in Documentation:**
-I couldn't find documented information about:
-- Rollback procedures
-- Database migration handling
-- Post-deployment verification steps
-
-These details may exist in tribal knowledge or need to be documented.
-
-## Sources
-- [CI/CD Guide](link)
-- [PROJ-789](link) - Deployment pipeline implementation
-
-Would you like me to search for more specific aspects of deployment?
-```
-
----
-
-## Tips for High-Quality Answers
-
-### Do:
-✅ Always search before answering (don't rely on general knowledge)
-✅ Cite all sources with links
-✅ Note discrepancies explicitly
-✅ Mention when information is old
-✅ Provide context and examples
-✅ Structure answers clearly with headers
-✅ Link to related documentation
-
-### Don't:
-❌ Assume general knowledge applies to this company
-❌ Make up information if search returns nothing
-❌ Ignore conflicting information
-❌ Quote entire documents (summarize instead)
-❌ Overwhelm with too many sources (curate top 5-10)
-❌ Forget to fetch details when snippets are insufficient
-
----
-
-## When NOT to Use This Skill
-
-This skill is for **internal company knowledge only**. Do NOT use for:
-
-❌ General technology questions (use your training knowledge)
-❌ External documentation (use web_search)
-❌ Company-agnostic questions
-❌ Questions about other companies
-❌ Current events or news
-
-**Examples of what NOT to use this skill for:**
-- "What is machine learning?" (general knowledge)
-- "How does React work?" (external documentation)
-- "What's the weather?" (not knowledge search)
-- "Find a restaurant" (not work-related)
-
----
-
-## Quick Reference
-
-**Primary tool:** `search(cloudId, query)` - Use this first, always
-
-**Follow-up tools:**
-- `getConfluencePage(cloudId, pageId, contentFormat)` - Get full page content
-- `getJiraIssue(cloudId, issueIdOrKey)` - Get full issue details
-- `searchConfluenceUsingCql(cloudId, cql)` - Targeted Confluence search
-- `searchJiraIssuesUsingJql(cloudId, jql)` - Targeted Jira search
-
-**Answer structure:**
-1. Direct answer
-2. Detailed explanation
-3. Source attribution
-4. Discrepancies (if any)
-5. Citations with links
-
-**Remember:**
-- Parallel search > Sequential search
-- Synthesize, don't just list
-- Always cite sources
-- Note conflicts explicitly
-- Be clear about gaps in documentation
diff --git a/plugins/atlassian-rovo/skills/search-company-knowledge/agents/openai.yaml b/plugins/atlassian-rovo/skills/search-company-knowledge/agents/openai.yaml
deleted file mode 100644
index 646480c78..000000000
--- a/plugins/atlassian-rovo/skills/search-company-knowledge/agents/openai.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-interface:
- display_name: "Search Company Knowledge"
- short_description: "Search Confluence, Jira, and internal Atlassian context"
diff --git a/plugins/atlassian-rovo/skills/spec-to-backlog/SKILL.md b/plugins/atlassian-rovo/skills/spec-to-backlog/SKILL.md
deleted file mode 100644
index fc9f5623a..000000000
--- a/plugins/atlassian-rovo/skills/spec-to-backlog/SKILL.md
+++ /dev/null
@@ -1,543 +0,0 @@
----
-name: spec-to-backlog
-description: "Automatically convert Confluence specification documents into structured Jira backlogs with Epics and implementation tickets. When an agent needs to: (1) Create Jira tickets from a Confluence page, (2) Generate a backlog from a specification, (3) Break down a spec into implementation tasks, or (4) Convert requirements into Jira issues. Handles reading Confluence pages, analyzing specifications, creating Epics with proper structure, and generating detailed implementation tickets linked to the Epic."
----
-
-# Spec to Backlog
-
-## Overview
-
-Transform Confluence specification documents into structured Jira backlogs automatically. This skill reads requirement documents from Confluence, intelligently breaks them down into logical implementation tasks, **creates an Epic first** to organize the work, then generates individual Jira tickets linked to that Epic—eliminating tedious manual copy-pasting.
-
-## Core Workflow
-
-**CRITICAL: Always follow this exact sequence:**
-
-1. **Fetch Confluence Page** → Get the specification content
-2. **Ask for Project Key** → Identify target Jira project
-3. **Analyze Specification** → Break down into logical tasks (internally, don't create yet)
-4. **Present Breakdown** → Show user the planned Epic and tickets
-5. **Create Epic FIRST** → Establish parent Epic and capture its key
-6. **Create Child Tickets** → Generate tickets linked to the Epic
-7. **Provide Summary** → Present all created items with links
-
-**Why Epic must be created first:** Child tickets need the Epic key to link properly during creation. Creating tickets first will result in orphaned tickets.
-
----
-
-## Step 1: Fetch Confluence Page
-
-When triggered, obtain the Confluence page content:
-
-### If user provides a Confluence URL:
-
-Extract the cloud ID and page ID from the URL pattern:
-- Standard format: `https://[site].atlassian.net/wiki/spaces/[SPACE]/pages/[PAGE_ID]/[title]`
-- The cloud ID can be extracted from `[site].atlassian.net` or by calling `getAccessibleAtlassianResources`
-- The page ID is the numeric value in the URL path
-
-### If user provides only a page title or description:
-
-Use the `search` tool to find the page:
-```
-search(
- cloudId="...",
- query="type=page AND title~'[search terms]'"
-)
-```
-
-If multiple pages match, ask the user to clarify which one to use.
-
-### Fetch the page:
-
-Call `getConfluencePage` with the cloudId and pageId:
-```
-getConfluencePage(
- cloudId="...",
- pageId="123456",
- contentFormat="markdown"
-)
-```
-
-This returns the page content in Markdown format, which you'll analyze in Step 3.
-
----
-
-## Step 2: Ask for Project Key
-
-**Before analyzing the spec**, determine the target Jira project:
-
-### Ask the user:
-"Which Jira project should I create these tickets in? Please provide the project key (e.g., PROJ, ENG, PRODUCT)."
-
-### If user is unsure:
-Call `getVisibleJiraProjects` to show available projects:
-```
-getVisibleJiraProjects(
- cloudId="...",
- action="create"
-)
-```
-
-Present the list: "I found these projects you can create issues in: PROJ (Project Alpha), ENG (Engineering), PRODUCT (Product Team)."
-
-### Once you have the project key:
-Call `getJiraProjectIssueTypesMetadata` to understand what issue types are available:
-```
-getJiraProjectIssueTypesMetadata(
- cloudId="...",
- projectIdOrKey="PROJ"
-)
-```
-
-**Identify available issue types:**
-- Which issue type is "Epic" (or similar parent type like "Initiative")
-- What child issue types are available: "Story", "Task", "Bug", "Sub-task", etc.
-
-**Select appropriate issue types for child tickets:**
-
-The skill should intelligently choose issue types based on the specification content:
-
-**Use "Bug" when the spec describes:**
-- Fixing existing problems or defects
-- Resolving errors or incorrect behavior
-- Addressing performance issues
-- Correcting data inconsistencies
-- Keywords: "fix", "resolve", "bug", "issue", "problem", "error", "broken"
-
-**Use "Story" when the spec describes:**
-- New user-facing features or functionality
-- User experience improvements
-- Customer-requested capabilities
-- Product enhancements
-- Keywords: "feature", "user can", "add ability to", "new", "enable users"
-
-**Use "Task" when the spec describes:**
-- Technical work without direct user impact
-- Infrastructure or DevOps work
-- Refactoring or optimization
-- Documentation or tooling
-- Configuration or setup
-- Keywords: "implement", "setup", "configure", "optimize", "refactor", "infrastructure"
-
-**Fallback logic:**
-1. If "Story" is available and content suggests new features → use "Story"
-2. If "Bug" is available and content suggests fixes → use "Bug"
-3. If "Task" is available → use "Task" for technical work
-4. If none of the above are available → use the first available non-Epic, non-Subtask issue type
-
-**Store the selected issue types for use in Step 6:**
-- Epic issue type name (e.g., "Epic")
-- Default child issue type (e.g., "Story" or "Task")
-- Bug issue type name if available (e.g., "Bug")
-
----
-
-## Step 3: Analyze Specification
-
-Read the Confluence page content and **internally** decompose it into:
-
-### Epic-Level Goal
-What is the overall objective or feature being implemented? This becomes your Epic.
-
-**Example Epic summaries:**
-- "User Authentication System"
-- "Payment Gateway Integration"
-- "Dashboard Performance Optimization"
-- "Mobile App Notifications Feature"
-
-### Implementation Tasks
-Break the work into logical, independently implementable tasks.
-
-**Breakdown principles:**
-- **Size:** 3-10 tasks per spec typically (avoid over-granularity)
-- **Clarity:** Each task should be specific and actionable
-- **Independence:** Tasks can be worked on separately when possible
-- **Completeness:** Include backend, frontend, testing, documentation, infrastructure as needed
-- **Grouping:** Related functionality stays in the same ticket
-
-**Consider these dimensions:**
-- Technical layers: Backend API, Frontend UI, Database, Infrastructure
-- Work types: Implementation, Testing, Documentation, Deployment
-- Features: Break complex features into sub-features
-- Dependencies: Identify prerequisite work
-
-**Common task patterns:**
-- "Design [component] database schema"
-- "Implement [feature] API endpoints"
-- "Build [component] UI components"
-- "Add [integration] to existing [system]"
-- "Write tests for [feature]"
-- "Update documentation for [feature]"
-
-**Use action verbs:**
-- Implement, Create, Build, Add, Design, Integrate, Update, Fix, Optimize, Configure, Deploy, Test, Document
-
----
-
-## Step 4: Present Breakdown to User
-
-**Before creating anything**, show the user your planned breakdown:
-
-**Format:**
-```
-I've analyzed the spec and here's the backlog I'll create:
-
-**Epic:** [Epic Summary]
-[Brief description of epic scope]
-
-**Implementation Tickets (7):**
-1. [Story] [Task 1 Summary]
-2. [Task] [Task 2 Summary]
-3. [Story] [Task 3 Summary]
-4. [Bug] [Task 4 Summary]
-5. [Task] [Task 5 Summary]
-6. [Story] [Task 6 Summary]
-7. [Task] [Task 7 Summary]
-
-Shall I create these tickets in [PROJECT KEY]?
-```
-
-**The issue type labels show what type each ticket will be created as:**
-- [Story] - New user-facing feature
-- [Task] - Technical implementation work
-- [Bug] - Fix or resolve an issue
-
-**Wait for user confirmation** before proceeding. This allows them to:
-- Request changes to the breakdown
-- Confirm the scope is correct
-- Adjust the number or focus of tickets
-
-If user requests changes, adjust the breakdown and re-present.
-
----
-
-## Step 5: Create Epic FIRST
-
-**CRITICAL:** The Epic must be created before any child tickets.
-
-### Create the Epic:
-
-Call `createJiraIssue` with:
-
-```
-createJiraIssue(
- cloudId="...",
- projectKey="PROJ",
- issueTypeName="Epic",
- summary="[Epic Summary from Step 3]",
- description="[Epic Description - see below]"
-)
-```
-
-### Epic Description Structure:
-
-```markdown
-## Overview
-[1-2 sentence summary of what this epic delivers]
-
-## Source
-Confluence Spec: [Link to Confluence page]
-
-## Objectives
-- [Key objective 1]
-- [Key objective 2]
-- [Key objective 3]
-
-## Scope
-[Brief description of what's included and what's not]
-
-## Success Criteria
-- [Measurable criterion 1]
-- [Measurable criterion 2]
-- [Measurable criterion 3]
-
-## Technical Notes
-[Any important technical context from the spec]
-```
-
-### Capture the Epic Key:
-
-The response will include the Epic's key (e.g., "PROJ-123"). **Save this key**—you'll need it for every child ticket.
-
-**Example response:**
-```json
-{
- "key": "PROJ-123",
- "id": "10001",
- "self": "https://yoursite.atlassian.net/rest/api/3/issue/10001"
-}
-```
-
-**Confirm Epic creation to user:**
-"✅ Created Epic: PROJ-123 - User Authentication System"
-
----
-
-## Step 6: Create Child Tickets
-
-Now create each implementation task as a child ticket linked to the Epic.
-
-### For each task:
-
-**Determine the appropriate issue type for this specific task:**
-- If the task involves fixing/resolving an issue → use "Bug" (if available)
-- If the task involves new user-facing features → use "Story" (if available)
-- If the task involves technical/infrastructure work → use "Task" (if available)
-- Otherwise → use the default child issue type from Step 2
-
-Call `createJiraIssue` with:
-
-```
-createJiraIssue(
- cloudId="...",
- projectKey="PROJ",
- issueTypeName="[Story/Task/Bug based on task content]",
- summary="[Task Summary]",
- description="[Task Description - see below]",
- parent="PROJ-123" # The Epic key from Step 5
-)
-```
-
-**Example issue type selection:**
-- "Fix authentication timeout bug" → Use "Bug"
-- "Build user dashboard UI" → Use "Story"
-- "Configure CI/CD pipeline" → Use "Task"
-- "Implement password reset API" → Use "Story" (new user feature)
-
-### Task Summary Format:
-
-Use action verbs and be specific:
-- ✅ "Implement user registration API endpoint"
-- ✅ "Design authentication database schema"
-- ✅ "Build login form UI components"
-- ❌ "Do backend work" (too vague)
-- ❌ "Frontend" (not actionable)
-
-### Task Description Structure:
-
-```markdown
-## Context
-[Brief context for this task from the Confluence spec]
-
-## Requirements
-- [Requirement 1]
-- [Requirement 2]
-- [Requirement 3]
-
-## Technical Details
-[Specific technical information relevant to this task]
-- Technologies: [e.g., Node.js, React, PostgreSQL]
-- Components: [e.g., API routes, database tables, UI components]
-- Dependencies: [e.g., requires PROJ-124 to be completed first]
-
-## Acceptance Criteria
-- [ ] [Testable criterion 1]
-- [ ] [Testable criterion 2]
-- [ ] [Testable criterion 3]
-
-## Related
-- Confluence Spec: [Link to relevant section if possible]
-- Epic: PROJ-123
-```
-
-### Acceptance Criteria Best Practices:
-
-Make them **testable** and **specific**:
-- ✅ "API returns 201 status on successful user creation"
-- ✅ "Password must be at least 8 characters and hashed with bcrypt"
-- ✅ "Login form validates email format before submission"
-- ❌ "User can log in" (too vague)
-- ❌ "It works correctly" (not testable)
-
-### Create all tickets sequentially:
-
-Track each created ticket key for the summary.
-
----
-
-## Step 7: Provide Summary
-
-After all tickets are created, present a comprehensive summary:
-
-```
-✅ Backlog created successfully!
-
-**Epic:** PROJ-123 - User Authentication System
-https://yoursite.atlassian.net/browse/PROJ-123
-
-**Implementation Tickets (7):**
-
-1. PROJ-124 - Design authentication database schema
- https://yoursite.atlassian.net/browse/PROJ-124
-
-2. PROJ-125 - Implement user registration API endpoint
- https://yoursite.atlassian.net/browse/PROJ-125
-
-3. PROJ-126 - Implement user login API endpoint
- https://yoursite.atlassian.net/browse/PROJ-126
-
-4. PROJ-127 - Build login form UI components
- https://yoursite.atlassian.net/browse/PROJ-127
-
-5. PROJ-128 - Build registration form UI components
- https://yoursite.atlassian.net/browse/PROJ-128
-
-6. PROJ-129 - Add authentication integration to existing features
- https://yoursite.atlassian.net/browse/PROJ-129
-
-7. PROJ-130 - Write authentication tests and documentation
- https://yoursite.atlassian.net/browse/PROJ-130
-
-**Source:** https://yoursite.atlassian.net/wiki/spaces/SPECS/pages/123456
-
-**Next Steps:**
-- Review tickets in Jira for accuracy and completeness
-- Assign tickets to team members
-- Estimate story points if your team uses them
-- Add any additional labels or custom field values
-- Schedule work for the upcoming sprint
-```
-
----
-
-## Edge Cases & Troubleshooting
-
-### Multiple Specs or Pages
-
-**If user references multiple Confluence pages:**
-- Process each separately, or ask which to prioritize
-- Consider creating separate Epics for distinct features
-- "I see you've provided 3 spec pages. Should I create separate Epics for each, or would you like me to focus on one first?"
-
-### Existing Epic
-
-**If user wants to add tickets to an existing Epic:**
-- Skip Epic creation (Step 5)
-- Ask for the existing Epic key: "What's the Epic key you'd like to add tickets to? (e.g., PROJ-100)"
-- Proceed with Step 6 using the provided Epic key
-
-### Custom Required Fields
-
-**If ticket creation fails due to required fields:**
-1. Use `getJiraIssueTypeMetaWithFields` to identify what fields are required:
- ```
- getJiraIssueTypeMetaWithFields(
- cloudId="...",
- projectIdOrKey="PROJ",
- issueTypeId="10001"
- )
- ```
-
-2. Ask user for values: "This project requires a 'Priority' field. What priority should I use? (e.g., High, Medium, Low)"
-
-3. Include in `additional_fields` when creating:
- ```
- additional_fields={
- "priority": {"name": "High"}
- }
- ```
-
-### Large Specifications
-
-**For specs that would generate 15+ tickets:**
-- Present the full breakdown to user
-- Ask: "This spec would create 18 tickets. Should I create all of them, or would you like to adjust the scope?"
-- Offer to create a subset first: "I can create the first 10 tickets now and wait for your feedback before creating the rest."
-
-### Subtasks vs Tasks
-
-**Some projects use "Subtask" issue types:**
-- If metadata shows "Subtask" is available, you can use it for more granular work
-- Subtasks link to parent tasks (not Epics directly)
-- Structure: Epic → Task → Subtasks
-
-### Ambiguous Specifications
-
-**If the Confluence page lacks detail:**
-- Create fewer, broader tickets
-- Note in ticket descriptions: "Detailed requirements need to be defined during refinement"
-- Ask user: "The spec is light on implementation details. Should I create high-level tickets that can be refined later?"
-
-### Failed API Calls
-
-**If `createJiraIssue` fails:**
-1. Check the error message for specific issues (permissions, required fields, invalid values)
-2. Use `getJiraProjectIssueTypesMetadata` to verify issue type availability
-3. Inform user: "I encountered an error creating tickets: [error message]. This might be due to project permissions or required fields."
-
----
-
-## Tips for High-Quality Breakdowns
-
-### Be Specific
-- ❌ "Do frontend work"
-- ✅ "Create login form UI with email/password inputs and validation"
-
-### Include Technical Context
-- Mention specific technologies when clear from spec
-- Reference components, services, or modules
-- Note integration points
-
-### Logical Grouping
-- Related work stays in the same ticket
-- Don't split artificially: "Build user profile page" includes both UI and API integration
-- Do split when different specialties: Separate backend API task from frontend UI task if worked on by different people
-
-### Avoid Duplication
-- Don't create redundant tickets for the same functionality
-- If multiple features need the same infrastructure, create one infrastructure ticket they all depend on
-
-### Explicit Testing
-- Include testing as part of feature tasks ("Implement X with unit tests")
-- OR create separate testing tasks for complex features ("Write integration tests for authentication flow")
-
-### Documentation Tasks
-- For user-facing features: Include "Update user documentation" or "Create help articles"
-- For developer tools: Include "Update API documentation" or "Write integration guide"
-
-### Dependencies
-- Note prerequisites in ticket descriptions
-- Use "Depends on" or "Blocks" relationships in Jira if available
-- Sequence tickets logically (infrastructure → implementation → testing)
-
----
-
-## Examples of Good Breakdowns
-
-### Example 1: New Feature - Search Functionality
-
-**Epic:** Product Search and Filtering
-
-**Tickets:**
-1. [Task] Design search index schema and data structure
-2. [Task] Implement backend search API with Elasticsearch
-3. [Story] Build search input and results UI components
-4. [Story] Add advanced filtering (price, category, ratings)
-5. [Story] Implement search suggestions and autocomplete
-6. [Task] Optimize search performance and add caching
-7. [Task] Write search integration tests and documentation
-
-### Example 2: Bug Fix - Performance Issue
-
-**Epic:** Resolve Dashboard Load Time Issues
-
-**Tickets:**
-1. [Task] Profile and identify performance bottlenecks
-2. [Bug] Optimize database queries with indexes and caching
-3. [Bug] Implement lazy loading for dashboard widgets
-4. [Bug] Add pagination to large data tables
-5. [Task] Set up performance monitoring and alerts
-
-### Example 3: Infrastructure - CI/CD Pipeline
-
-**Epic:** Automated Deployment Pipeline
-
-**Tickets:**
-1. [Task] Set up GitHub Actions workflow configuration
-2. [Task] Implement automated testing in CI pipeline
-3. [Task] Configure staging environment deployment
-4. [Task] Implement blue-green production deployment
-5. [Task] Add deployment rollback mechanism
-6. [Task] Create deployment runbook and documentation
-
diff --git a/plugins/atlassian-rovo/skills/spec-to-backlog/agents/openai.yaml b/plugins/atlassian-rovo/skills/spec-to-backlog/agents/openai.yaml
deleted file mode 100644
index bf1d48145..000000000
--- a/plugins/atlassian-rovo/skills/spec-to-backlog/agents/openai.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-interface:
- display_name: "Spec to Backlog"
- short_description: "Convert Confluence specs into Jira backlogs"
diff --git a/plugins/atlassian-rovo/skills/spec-to-backlog/references/breakdown-examples.md b/plugins/atlassian-rovo/skills/spec-to-backlog/references/breakdown-examples.md
deleted file mode 100644
index a40d326b7..000000000
--- a/plugins/atlassian-rovo/skills/spec-to-backlog/references/breakdown-examples.md
+++ /dev/null
@@ -1,327 +0,0 @@
-# Task Breakdown Examples
-
-This reference provides examples of effective task breakdowns for different types of specifications.
-
-## Principles of Good Breakdowns
-
-**DO:**
-- Create tasks that are independently testable
-- Group related frontend/backend work logically
-- Include explicit testing and documentation tasks
-- Use specific, actionable language
-- Size tasks for 1-3 days of work typically
-
-**DON'T:**
-- Create overly granular tasks (e.g., "Write one function")
-- Make tasks too large (e.g., "Build entire feature")
-- Duplicate work across multiple tickets
-- Use vague descriptions (e.g., "Do backend stuff")
-
-## Example 1: New Feature - User Notifications System
-
-### Spec Summary
-Add email and in-app notifications for user actions (comments, mentions, updates).
-
-### Good Breakdown (8 tasks)
-
-**Epic:** User Notifications System
-
-1. **Design notification data model and database schema**
- - Define notification types and attributes
- - Create database tables and indexes
- - Document schema in API docs
-
-2. **Implement notification service backend**
- - Create notification creation/retrieval APIs
- - Add notification storage logic
- - Implement marking notifications as read
-
-3. **Build email notification dispatcher**
- - Set up email template system
- - Implement async email sending queue
- - Add email preferences handling
-
-4. **Create notification preferences API**
- - User settings for notification types
- - Email vs in-app preferences
- - Frequency controls (immediate, digest)
-
-5. **Build notification UI components**
- - Notification bell icon with unread count
- - Notification dropdown panel
- - Individual notification cards
-
-6. **Implement notification settings page**
- - Frontend for user preferences
- - Connect to preferences API
- - Add toggle controls for notification types
-
-7. **Add notification triggers to existing features**
- - Hook into comment system
- - Hook into mention system
- - Hook into update/edit events
-
-8. **Write tests and documentation**
- - Unit tests for notification service
- - Integration tests for email delivery
- - Update user documentation
-
-### Why This Works
-- Each task is independently completable
-- Clear separation between backend, frontend, and integration
-- Testing is explicit
-- Tasks are sized appropriately (1-3 days each)
-
----
-
-## Example 2: Bug Fix - Payment Processing Errors
-
-### Spec Summary
-Users report intermittent payment failures. Investigation shows timeout issues with payment gateway and inadequate error handling.
-
-### Good Breakdown (5 tasks)
-
-**Epic:** Fix Payment Processing Reliability
-
-1. **Investigate and document payment failure patterns**
- - Analyze error logs and failure rates
- - Document specific error scenarios
- - Create reproduction steps
-
-2. **Implement payment gateway timeout handling**
- - Add configurable timeout settings
- - Implement retry logic with exponential backoff
- - Add circuit breaker pattern
-
-3. **Improve payment error messaging**
- - Enhance error categorization
- - Add user-friendly error messages
- - Log detailed errors for debugging
-
-4. **Add payment status reconciliation job**
- - Create background job to verify payment status
- - Handle stuck/pending payments
- - Send notifications for payment issues
-
-5. **Add monitoring and alerting**
- - Set up payment failure rate alerts
- - Add dashboard for payment health metrics
- - Document troubleshooting procedures
-
-### Why This Works
-- Starts with investigation (important for bugs)
-- Addresses root cause and symptoms
-- Includes monitoring to prevent recurrence
-- Each task delivers incremental value
-
----
-
-## Example 3: Infrastructure - Migration to New Database
-
-### Spec Summary
-Migrate from PostgreSQL 12 to PostgreSQL 15, update queries to use new features, ensure zero downtime.
-
-### Good Breakdown (7 tasks)
-
-**Epic:** PostgreSQL 15 Migration
-
-1. **Set up PostgreSQL 15 staging environment**
- - Provision new database instances
- - Configure replication from production
- - Verify data consistency
-
-2. **Audit and update database queries**
- - Identify queries using deprecated features
- - Update to PostgreSQL 15 syntax
- - Optimize queries for new planner
-
-3. **Update application connection pooling**
- - Upgrade database drivers
- - Adjust connection pool settings
- - Test connection handling under load
-
-4. **Create migration runbook**
- - Document step-by-step migration process
- - Define rollback procedures
- - List success criteria and validation steps
-
-5. **Perform dry-run migration in staging**
- - Execute full migration process
- - Validate data integrity
- - Measure downtime duration
- - Test rollback procedure
-
-6. **Execute production migration**
- - Follow migration runbook
- - Monitor system health during migration
- - Validate all services post-migration
-
-7. **Post-migration cleanup and monitoring**
- - Remove old database instances after verification period
- - Update monitoring dashboards
- - Document lessons learned
-
-### Why This Works
-- Emphasizes planning and validation
-- Includes explicit dry-run
-- Risk mitigation with rollback planning
-- Clear separation between prep, execution, and cleanup
-
----
-
-## Example 4: API Development - Public REST API
-
-### Spec Summary
-Create public REST API for third-party integrations. Include authentication, rate limiting, and documentation.
-
-### Good Breakdown (9 tasks)
-
-**Epic:** Public REST API v1
-
-1. **Design API specification**
- - Define endpoints and request/response schemas
- - Create OpenAPI/Swagger specification
- - Review with stakeholders
-
-2. **Implement API authentication system**
- - Add API key generation and management
- - Implement OAuth2 flow
- - Create authentication middleware
-
-3. **Build rate limiting infrastructure**
- - Implement token bucket algorithm
- - Add per-key rate limit tracking
- - Create rate limit headers and responses
-
-4. **Implement core API endpoints - Users**
- - GET /users endpoints
- - POST /users endpoints
- - PUT/DELETE /users endpoints
-
-5. **Implement core API endpoints - Resources**
- - GET /resources endpoints
- - POST /resources endpoints
- - PUT/DELETE /resources endpoints
-
-6. **Add API versioning support**
- - Implement version routing
- - Add deprecation headers
- - Document versioning strategy
-
-7. **Create developer portal and documentation**
- - Set up documentation site
- - Add interactive API explorer
- - Write getting started guide and examples
-
-8. **Build API monitoring and analytics**
- - Track API usage metrics
- - Add error rate monitoring
- - Create usage dashboards for customers
-
-9. **Write integration tests and SDK examples**
- - Create comprehensive API test suite
- - Write example code in Python/JavaScript
- - Document common integration patterns
-
-### Why This Works
-- Separates authentication and rate limiting (critical infrastructure)
-- Groups endpoints by resource type
-- Documentation is a first-class task
-- Monitoring and developer experience are explicit
-
----
-
-## Example 5: Frontend Redesign - Dashboard Modernization
-
-### Spec Summary
-Redesign main dashboard with modern UI framework, improve performance, maintain feature parity.
-
-### Good Breakdown (8 tasks)
-
-**Epic:** Dashboard UI Modernization
-
-1. **Create new component library foundation**
- - Set up new UI framework (e.g., React + Tailwind)
- - Build reusable component primitives
- - Establish design system tokens
-
-2. **Build dashboard layout and navigation**
- - Implement responsive grid layout
- - Create new navigation sidebar
- - Add breadcrumb and header components
-
-3. **Rebuild analytics widgets**
- - Port existing chart components
- - Implement new data visualization library
- - Add loading and error states
-
-4. **Rebuild data table components**
- - Create sortable/filterable table
- - Add pagination and search
- - Implement column customization
-
-5. **Implement user settings panel**
- - Dashboard customization options
- - Widget arrangement and visibility
- - Preferences persistence
-
-6. **Optimize performance and lazy loading**
- - Implement code splitting
- - Add lazy loading for heavy widgets
- - Optimize bundle size
-
-7. **Add responsive mobile views**
- - Create mobile-optimized layouts
- - Test on various screen sizes
- - Implement touch gestures
-
-8. **Migration and A/B testing setup**
- - Create feature flag for new dashboard
- - Set up A/B test framework
- - Plan gradual rollout strategy
-
-### Why This Works
-- Foundation first (component library)
-- Groups by feature area (analytics, tables)
-- Performance and mobile are explicit tasks
-- Includes rollout strategy
-
----
-
-## Anti-Patterns to Avoid
-
-### Too Granular
-❌ **Bad:**
-- "Create User model"
-- "Create User controller"
-- "Create User view"
-- "Write User tests"
-- "Update User documentation"
-
-✅ **Better:**
-- "Implement User management feature (model, controller, views, tests)"
-
-### Too Vague
-❌ **Bad:**
-- "Do backend work"
-- "Fix frontend issues"
-- "Update database"
-
-✅ **Better:**
-- "Implement user authentication API endpoints"
-- "Resolve navigation menu rendering bugs"
-- "Add indexes to orders table for query performance"
-
-### Missing Testing
-❌ **Bad:**
-- Only feature implementation tasks, no testing mentioned
-
-✅ **Better:**
-- Include explicit testing tasks or ensure testing is part of each feature task
-
-### No Clear Ownership
-❌ **Bad:**
-- Tasks that require both frontend and backend work without clear boundaries
-
-✅ **Better:**
-- Split into "Backend API for X" and "Frontend UI for X" when different people work on each
diff --git a/plugins/atlassian-rovo/skills/spec-to-backlog/references/epic-templates.md b/plugins/atlassian-rovo/skills/spec-to-backlog/references/epic-templates.md
deleted file mode 100644
index cddafd2cd..000000000
--- a/plugins/atlassian-rovo/skills/spec-to-backlog/references/epic-templates.md
+++ /dev/null
@@ -1,401 +0,0 @@
-# Epic Description Templates
-
-Effective Epic descriptions provide context, goals, and success criteria. Use these templates based on the type of work.
-
-## Template 1: New Feature Epic
-
-```markdown
-## Overview
-[1-2 sentence description of what this Epic delivers]
-
-## Source Specification
-[Link to Confluence page or design doc]
-
-## Business Value
-[Why we're building this - user impact, business goals]
-
-## Success Criteria
-- [ ] [Measurable outcome 1]
-- [ ] [Measurable outcome 2]
-- [ ] [Measurable outcome 3]
-
-## Technical Scope
-- **Frontend**: [High-level frontend work]
-- **Backend**: [High-level backend work]
-- **Infrastructure**: [Any infrastructure needs]
-- **Third-party**: [External integrations]
-
-## Out of Scope
-- [Explicitly list what's NOT included to prevent scope creep]
-
-## Dependencies
-- [List any blocking or related work]
-
-## Launch Plan
-- **Target completion**: [Date or sprint]
-- **Rollout strategy**: [All at once, gradual, A/B test, etc.]
-```
-
-### Example: User Notifications System
-
-```markdown
-## Overview
-Add comprehensive notification system supporting email and in-app notifications for user activity (comments, mentions, updates).
-
-## Source Specification
-https://company.atlassian.net/wiki/spaces/PRODUCT/pages/123456/Notifications-Spec
-
-## Business Value
-Users currently miss important updates, leading to delayed responses and reduced engagement. Notifications will increase daily active usage by an estimated 20% and improve user satisfaction scores.
-
-## Success Criteria
-- [ ] Users receive email notifications within 5 minutes of trigger event
-- [ ] In-app notifications appear in real-time (< 2 second delay)
-- [ ] 80% of users enable at least one notification type
-- [ ] Email delivery rate > 95%
-- [ ] System handles 10,000 notifications/minute at peak
-
-## Technical Scope
-- **Frontend**: Notification bell UI, preferences page, notification cards
-- **Backend**: Notification service, email dispatcher, real-time delivery
-- **Infrastructure**: Email service integration (SendGrid), websocket server
-- **Third-party**: SendGrid for email delivery
-
-## Out of Scope
-- Push notifications (mobile) - planned for Q2
-- SMS notifications - not in current roadmap
-- Notification history beyond 30 days
-
-## Dependencies
-- None - self-contained feature
-
-## Launch Plan
-- **Target completion**: Sprint 24 (March 15)
-- **Rollout strategy**: Gradual rollout, 10% → 50% → 100% over 1 week
-```
-
----
-
-## Template 2: Bug Fix Epic
-
-```markdown
-## Problem Statement
-[Clear description of the bug and its impact]
-
-## Source Documentation
-[Link to Confluence investigation, incident report, or bug analysis]
-
-## Current Impact
-- **Severity**: [Critical/High/Medium/Low]
-- **Users affected**: [Percentage or number]
-- **Frequency**: [How often it occurs]
-- **Business impact**: [Revenue, reputation, etc.]
-
-## Root Cause
-[Technical explanation of what's causing the issue]
-
-## Solution Approach
-[High-level approach to fixing the issue]
-
-## Success Criteria
-- [ ] [Bug no longer reproducible]
-- [ ] [Related edge cases handled]
-- [ ] [Monitoring in place to detect recurrence]
-
-## Verification Plan
-[How we'll confirm the fix works]
-```
-
-### Example: Payment Processing Failures
-
-```markdown
-## Problem Statement
-Users experiencing intermittent payment failures during checkout, resulting in abandoned transactions and support tickets. Error rate spiked to 8% on Nov 15, up from baseline 0.5%.
-
-## Source Documentation
-https://company.atlassian.net/wiki/spaces/ENG/pages/789012/Payment-Failure-Investigation
-
-## Current Impact
-- **Severity**: Critical
-- **Users affected**: ~800 customers per day
-- **Frequency**: 8% of all payment attempts
-- **Business impact**: $45K/day in lost revenue, customer trust erosion
-
-## Root Cause
-Payment gateway timeouts due to insufficient timeout settings (5s) and no retry logic. During high load, 3rd party payment API occasionally takes 6-8s to respond, causing failures.
-
-## Solution Approach
-1. Increase timeout to 15s with exponential backoff retry
-2. Implement circuit breaker to prevent cascade failures
-3. Add payment reconciliation job to handle stuck transactions
-4. Improve error messaging for users
-
-## Success Criteria
-- [ ] Payment failure rate below 1%
-- [ ] Zero timeout-related failures
-- [ ] 100% of stuck payments reconciled within 15 minutes
-- [ ] User-facing error messages are clear and actionable
-
-## Verification Plan
-- Load testing with simulated gateway delays
-- Monitor production metrics for 1 week post-deployment
-- Review support tickets for payment-related issues
-```
-
----
-
-## Template 3: Infrastructure/Technical Epic
-
-```markdown
-## Objective
-[What infrastructure change or technical improvement we're making]
-
-## Source Documentation
-[Link to technical design doc or RFC]
-
-## Current State
-[Description of existing system/approach]
-
-## Target State
-[Description of desired system/approach after completion]
-
-## Motivation
-[Why we need to make this change - performance, cost, maintainability, etc.]
-
-## Success Criteria
-- [ ] [Technical metric 1]
-- [ ] [Technical metric 2]
-- [ ] [Zero downtime or minimal disruption]
-
-## Risk Mitigation
-- **Rollback plan**: [How to revert if issues occur]
-- **Monitoring**: [What metrics we'll watch]
-- **Testing strategy**: [Dry runs, canary deployments, etc.]
-
-## Timeline Constraints
-[Any time-sensitive factors like deprecations, costs]
-```
-
-### Example: PostgreSQL Migration
-
-```markdown
-## Objective
-Migrate primary database from PostgreSQL 12 to PostgreSQL 15 to leverage performance improvements and new features before PostgreSQL 12 EOL.
-
-## Source Documentation
-https://company.atlassian.net/wiki/spaces/ENG/pages/345678/PG15-Migration-RFC
-
-## Current State
-Running PostgreSQL 12.8 on AWS RDS with 2TB data, 50K queries/minute at peak. Some queries use deprecated features.
-
-## Target State
-PostgreSQL 15.2 with optimized queries, improved query planner, and better connection pooling. Estimated 15-20% performance improvement on read-heavy queries.
-
-## Motivation
-- PostgreSQL 12 reaches EOL in November 2024
-- PG15 query planner improvements will reduce latency on dashboard queries
-- New features enable better monitoring and troubleshooting
-- Cost savings: ~$800/month from improved efficiency
-
-## Success Criteria
-- [ ] Zero data loss during migration
-- [ ] < 5 minutes of downtime during cutover
-- [ ] All application queries working correctly
-- [ ] Query performance same or better than PG12
-- [ ] Monitoring confirms system health for 2 weeks
-
-## Risk Mitigation
-- **Rollback plan**: Keep PG12 instance available for 2 weeks; can revert in < 15 minutes
-- **Monitoring**: Track query latency, error rates, connection pool health
-- **Testing strategy**: Full migration dry-run in staging, 24-hour soak test
-
-## Timeline Constraints
-Must complete by October 2024 (1 month before PG12 EOL). Testing requires 3 weeks.
-```
-
----
-
-## Template 4: API Development Epic
-
-```markdown
-## Overview
-[What API or integration we're building]
-
-## Source Specification
-[Link to API design doc or requirements]
-
-## Use Cases
-[Primary scenarios this API will enable]
-
-## API Design
-- **Authentication**: [Method - API keys, OAuth, etc.]
-- **Rate limiting**: [Limits and quotas]
-- **Versioning**: [Strategy]
-- **Base URL**: [Endpoint structure]
-
-## Endpoints Summary
-[High-level list of main endpoint categories]
-
-## Success Criteria
-- [ ] [API stability metric]
-- [ ] [Performance target]
-- [ ] [Documentation completeness]
-- [ ] [Developer adoption metric]
-
-## Documentation Deliverables
-- [ ] OpenAPI/Swagger spec
-- [ ] Getting started guide
-- [ ] Code examples (Python, JavaScript)
-- [ ] Interactive API explorer
-
-## Timeline
-- **Beta release**: [Date]
-- **GA release**: [Date]
-```
-
-### Example: Public REST API
-
-```markdown
-## Overview
-Launch v1 of public REST API enabling third-party developers to integrate with our platform for user management and resource access.
-
-## Source Specification
-https://company.atlassian.net/wiki/spaces/API/pages/456789/Public-API-v1-Spec
-
-## Use Cases
-- SaaS companies integrating our user management into their products
-- Data analytics tools pulling resource data
-- Automation platforms connecting workflows
-- Mobile app developers building custom clients
-
-## API Design
-- **Authentication**: OAuth 2.0 + API keys
-- **Rate limiting**: 1,000 requests/hour per API key (higher tiers available)
-- **Versioning**: URI-based (/v1/, /v2/)
-- **Base URL**: https://api.company.com/v1
-
-## Endpoints Summary
-- User management (CRUD operations)
-- Resource access (read-only initially)
-- Webhooks for event notifications
-- Account administration
-
-## Success Criteria
-- [ ] 99.9% uptime
-- [ ] p95 latency < 200ms
-- [ ] Complete OpenAPI documentation
-- [ ] 50+ developers signed up for beta
-- [ ] Zero security vulnerabilities in initial audit
-
-## Documentation Deliverables
-- [x] OpenAPI/Swagger spec
-- [ ] Getting started guide
-- [ ] Code examples (Python, JavaScript, Ruby)
-- [ ] Interactive API explorer (Swagger UI)
-- [ ] Authentication tutorial
-- [ ] Best practices guide
-
-## Timeline
-- **Beta release**: February 15 (invite-only, 10 partners)
-- **GA release**: March 30 (public availability)
-```
-
----
-
-## Template 5: Redesign/Modernization Epic
-
-```markdown
-## Overview
-[What's being redesigned and why]
-
-## Source Documentation
-[Link to design specs, mockups, or requirements]
-
-## Current Pain Points
-- [Problem 1 with existing implementation]
-- [Problem 2 with existing implementation]
-- [Problem 3 with existing implementation]
-
-## New Design Goals
-- [Goal 1]
-- [Goal 2]
-- [Goal 3]
-
-## Success Criteria
-- [ ] [User experience metric]
-- [ ] [Performance improvement]
-- [ ] [Feature parity or improvements]
-- [ ] [Accessibility standards met]
-
-## Migration Strategy
-[How users transition from old to new]
-
-## Rollout Plan
-[Phased rollout, A/B testing, feature flags]
-```
-
-### Example: Dashboard Modernization
-
-```markdown
-## Overview
-Redesign main analytics dashboard with modern UI framework, improved performance, and better mobile support while maintaining all existing functionality.
-
-## Source Documentation
-https://company.atlassian.net/wiki/spaces/DESIGN/pages/567890/Dashboard-Redesign
-
-## Current Pain Points
-- Slow initial load time (4-6 seconds)
-- Poor mobile experience (not responsive)
-- Outdated UI feels "legacy"
-- Difficult to customize widget layout
-- Accessibility issues (WCAG 2.1 violations)
-
-## New Design Goals
-- Modern, clean visual design aligned with brand refresh
-- < 2 second initial load time
-- Fully responsive (desktop, tablet, mobile)
-- Customizable dashboard layouts
-- WCAG 2.1 AA compliant
-- Improved data visualization clarity
-
-## Success Criteria
-- [ ] Initial load time < 2s (50% improvement)
-- [ ] Perfect Lighthouse score (90+)
-- [ ] Zero WCAG 2.1 AA violations
-- [ ] 80% user approval rating in beta test
-- [ ] Feature parity with legacy dashboard
-- [ ] Mobile usage increases by 30%
-
-## Migration Strategy
-- Side-by-side availability during transition
-- Users can switch between old/new with toggle
-- Preferences automatically migrated
-- 30-day sunset period for legacy dashboard
-
-## Rollout Plan
-1. Week 1: Internal beta (engineering team)
-2. Week 2-3: Customer beta (10% of users via feature flag)
-3. Week 4: Expand to 50% of users
-4. Week 5: 100% rollout, legacy available via toggle
-5. Week 9: Remove legacy dashboard
-```
-
----
-
-## Key Elements in Every Epic
-
-Regardless of template, ensure every Epic includes:
-
-1. **Clear objective** - Anyone should understand what's being built/fixed
-2. **Source link** - Always link to the Confluence spec or design doc
-3. **Success criteria** - Measurable outcomes that define "done"
-4. **Scope clarity** - What IS and ISN'T included
-5. **Context** - Enough background for someone new to understand why this matters
-
-## Common Mistakes to Avoid
-
-❌ **Too brief**: "Build notifications" - lacks context
-❌ **Too detailed**: Including implementation details that belong in tickets
-❌ **No success criteria**: How do we know when it's done?
-❌ **Missing source link**: Hard to trace back to requirements
-❌ **Vague scope**: Leads to scope creep and confusion
diff --git a/plugins/atlassian-rovo/skills/spec-to-backlog/references/ticket-writing-guide.md b/plugins/atlassian-rovo/skills/spec-to-backlog/references/ticket-writing-guide.md
deleted file mode 100644
index d381843e4..000000000
--- a/plugins/atlassian-rovo/skills/spec-to-backlog/references/ticket-writing-guide.md
+++ /dev/null
@@ -1,354 +0,0 @@
-# Ticket Writing Guide
-
-Guidelines for creating clear, actionable Jira tickets with effective summaries and descriptions.
-
-## Summary Guidelines
-
-The ticket summary should be a clear, concise action statement that immediately tells someone what needs to be done.
-
-### Formula
-
-**[Action Verb] + [Component/Feature] + [Optional: Context]**
-
-### Good Examples
-
-✅ "Implement user registration API endpoint"
-✅ "Fix pagination bug in search results"
-✅ "Add email validation to signup form"
-✅ "Optimize database query for dashboard load time"
-✅ "Create documentation for payment webhook"
-✅ "Design user preferences data schema"
-
-### Bad Examples
-
-❌ "Users" - Not actionable
-❌ "Do backend work" - Too vague
-❌ "Fix bug" - Lacks specificity
-❌ "API" - Not a task
-❌ "There's an issue with the login page that needs to be addressed" - Too wordy
-
-### Action Verbs by Task Type
-
-**Development:**
-- Implement, Build, Create, Add, Develop
-
-**Bug Fixes:**
-- Fix, Resolve, Correct, Debug
-
-**Design/Planning:**
-- Design, Plan, Research, Investigate, Define
-
-**Infrastructure:**
-- Set up, Configure, Deploy, Migrate, Upgrade
-
-**Documentation:**
-- Write, Document, Update, Create
-
-**Improvement:**
-- Optimize, Refactor, Improve, Enhance
-
-**Testing:**
-- Test, Verify, Validate
-
----
-
-## Description Structure
-
-A good ticket description provides context, requirements, and guidance without being overwhelming.
-
-### Recommended Template
-
-```markdown
-## Context
-[1-2 sentences: Why we're doing this, what problem it solves]
-
-## Requirements
-- [Specific requirement 1]
-- [Specific requirement 2]
-- [Specific requirement 3]
-
-## Technical Notes
-[Any technical constraints, preferred approaches, or implementation hints]
-
-## Acceptance Criteria
-- [ ] [Testable outcome 1]
-- [ ] [Testable outcome 2]
-- [ ] [Testable outcome 3]
-
-## Resources
-- [Link to design mockup if applicable]
-- [Link to API documentation]
-- [Link to related tickets]
-```
-
-### Example 1: Feature Implementation
-
-**Summary:** Implement user registration API endpoint
-
-**Description:**
-```markdown
-## Context
-Users need to create accounts through our REST API. This endpoint will be used by our web app and future mobile apps.
-
-## Requirements
-- Accept email, password, and name via POST request
-- Validate email format and uniqueness
-- Hash password using bcrypt
-- Return JWT token for immediate authentication
-- Send welcome email asynchronously
-
-## Technical Notes
-- Use existing email service for welcome emails
-- Follow authentication patterns from login endpoint
-- Rate limit: 5 registration attempts per IP per hour
-
-## Acceptance Criteria
-- [ ] Endpoint accepts valid registration data and returns 201 with JWT
-- [ ] Duplicate email returns 409 error
-- [ ] Invalid email format returns 400 error
-- [ ] Password must be 8+ characters
-- [ ] Welcome email sent within 1 minute
-- [ ] Unit tests cover happy path and error cases
-
-## Resources
-- API Spec: https://company.atlassian.net/wiki/API-Design
-- Related: AUTH-123 (Login endpoint)
-```
-
-### Example 2: Bug Fix
-
-**Summary:** Fix pagination bug in search results
-
-**Description:**
-```markdown
-## Context
-Users report that clicking "Next Page" in search results sometimes shows duplicate items from the previous page. This happens intermittently when search results are sorted by date.
-
-## Problem
-The pagination offset calculation doesn't account for items with identical timestamps, causing cursor position drift when using timestamp-based pagination.
-
-## Requirements
-- Ensure each search result appears exactly once
-- Maintain current sort order (date descending)
-- Fix applies to all search endpoints
-
-## Technical Notes
-- Current implementation uses timestamp as cursor: `?cursor=2024-01-15T10:30:00Z`
-- Suggested fix: Composite cursor using timestamp + ID
-- Consider adding unique index on (timestamp, id) for better query performance
-
-## Acceptance Criteria
-- [ ] No duplicate items appear across paginated results
-- [ ] Pagination works correctly with items having identical timestamps
-- [ ] All existing search API tests still pass
-- [ ] Added test case reproducing the original bug
-- [ ] Performance impact < 5ms per query
-
-## Resources
-- Bug Report: https://company.atlassian.net/wiki/BUG-456
-- Related: SEARCH-789 (Original search implementation)
-```
-
-### Example 3: Infrastructure Task
-
-**Summary:** Set up PostgreSQL 15 staging environment
-
-**Description:**
-```markdown
-## Context
-First step in database migration from PG12 to PG15. Need staging environment to validate migration process and test query compatibility.
-
-## Requirements
-- Provision PG15 instance matching production specs
-- Set up replication from production to staging
-- Configure backup retention (7 days)
-- Enable query logging for testing
-
-## Technical Notes
-- Use AWS RDS PostgreSQL 15.2
-- Instance type: db.r6g.2xlarge (same as prod)
-- Enable logical replication for zero-downtime testing
-- VPC: staging-vpc-us-east-1
-
-## Acceptance Criteria
-- [ ] PG15 instance running and accessible from staging apps
-- [ ] Replication lag < 30 seconds from production
-- [ ] Can connect using standard credentials
-- [ ] Query logs enabled and viewable
-- [ ] Monitoring dashboards created
-- [ ] Backup configured and tested (restore test)
-
-## Resources
-- Migration RFC: https://company.atlassian.net/wiki/PG15-Migration
-- Infrastructure docs: https://wiki/Database-Setup
-- Parent Epic: INFRA-100
-```
-
-### Example 4: Frontend Task
-
-**Summary:** Create notification bell UI component
-
-**Description:**
-```markdown
-## Context
-Part of notification system. Need UI component showing unread notification count and opening notification panel.
-
-## Requirements
-- Bell icon in top navigation bar
-- Display unread count badge (e.g., "5")
-- Click opens notification dropdown panel
-- Real-time updates via WebSocket
-- Badge turns red for urgent notifications
-
-## Technical Notes
-- Use existing Icon component library
-- WebSocket events: 'notification:new', 'notification:read'
-- State management: Context API or Zustand
-- Position: Right side of nav, left of user avatar
-
-## Acceptance Criteria
-- [ ] Bell icon displays in navigation bar
-- [ ] Unread count badge shows accurate count
-- [ ] Badge updates in real-time when new notification arrives
-- [ ] Click opens/closes notification panel
-- [ ] No badge shown when count is 0
-- [ ] Component is accessible (keyboard navigation, screen reader)
-- [ ] Responsive design (mobile, tablet, desktop)
-
-## Resources
-- Design mockup: [Figma link]
-- WebSocket docs: https://wiki/Notifications-API
-- Related: NOTIF-123 (Notification panel component)
-```
-
----
-
-## Descriptions by Task Type
-
-### Backend Development
-
-Focus on:
-- API contract (request/response format)
-- Data validation rules
-- Error handling requirements
-- Performance expectations
-- Security considerations
-
-### Frontend Development
-
-Focus on:
-- Visual design reference
-- User interactions
-- State management approach
-- Responsive behavior
-- Accessibility requirements
-
-### Bug Fixes
-
-Focus on:
-- Reproduction steps
-- Expected vs actual behavior
-- Root cause (if known)
-- Affected users/scenarios
-- Verification approach
-
-### Testing
-
-Focus on:
-- What needs testing (features, edge cases)
-- Test coverage targets
-- Types of tests (unit, integration, e2e)
-- Performance benchmarks
-- Test data requirements
-
-### Documentation
-
-Focus on:
-- Target audience
-- Required sections/topics
-- Examples to include
-- Existing docs to update
-- Review/approval process
-
----
-
-## Acceptance Criteria Best Practices
-
-Acceptance criteria should be:
-
-1. **Testable** - Can verify by testing or observation
-2. **Specific** - No ambiguity about what "done" means
-3. **Complete** - Covers all requirements in description
-4. **User-focused** - When possible, frame from user perspective
-
-### Good Acceptance Criteria
-
-✅ "User can submit form and receive confirmation email within 30 seconds"
-✅ "API returns 400 error when email field is empty"
-✅ "Dashboard loads in under 2 seconds on 3G connection"
-✅ "All text meets WCAG 2.1 AA contrast ratios"
-
-### Bad Acceptance Criteria
-
-❌ "Feature works well" - Not specific
-❌ "Code is clean" - Subjective, not testable
-❌ "Fast performance" - Not measurable
-❌ "No bugs" - Too broad
-
----
-
-## Technical Notes Guidelines
-
-Use "Technical Notes" section for:
-
-- **Architectural decisions**: "Use Redis for session caching"
-- **Implementation hints**: "Follow pattern from UserService class"
-- **Performance constraints**: "Query must complete in < 100ms"
-- **Security requirements**: "Use parameterized queries to prevent SQL injection"
-- **Dependencies**: "Requires AUTH-456 to be deployed first"
-- **Gotchas**: "Watch out for timezone handling in date comparisons"
-
-Keep it concise - detailed technical specs belong in Confluence or code comments.
-
----
-
-## Common Mistakes to Avoid
-
-### 1. Information Overload
-❌ Pages of requirements copied from spec doc
-✅ Summary with link to full spec
-
-### 2. Assuming Context
-❌ "Fix the bug we discussed"
-✅ Clear description of the bug with reproduction steps
-
-### 3. Implementation as Requirement
-❌ "Use React hooks for state management"
-✅ "Component updates in real-time" (let developer choose approach unless there's a specific reason)
-
-### 4. Vague Acceptance Criteria
-❌ "Everything works correctly"
-✅ Specific, testable outcomes
-
-### 5. Missing Links
-❌ No reference to designs, specs, or related work
-✅ Links to all relevant documentation
-
----
-
-## Length Guidelines
-
-**Summary:**
-- Target: 3-8 words
-- Max: 12 words
-
-**Description:**
-- Target: 100-300 words
-- Min: Include at minimum context and acceptance criteria
-- Max: 500 words (link to docs for more detail)
-
-**Acceptance Criteria:**
-- Target: 3-7 items
-- Each item: 1 sentence
-
-Remember: Ticket descriptions are not documentation. They're instructions for completing a specific task.
diff --git a/plugins/atlassian-rovo/skills/triage-issue/SKILL.md b/plugins/atlassian-rovo/skills/triage-issue/SKILL.md
deleted file mode 100644
index 3b8665da8..000000000
--- a/plugins/atlassian-rovo/skills/triage-issue/SKILL.md
+++ /dev/null
@@ -1,700 +0,0 @@
----
-name: triage-issue
-description: "Intelligently triage bug reports and error messages by searching for duplicates in Jira and offering to create new issues or add comments to existing ones. When an agent needs to: (1) Triage a bug report or error message, (2) Check if an issue is a duplicate, (3) Find similar past issues, (4) Create a new bug ticket with proper context, or (5) Add information to an existing ticket. Searches Jira for similar issues, identifies duplicates, checks fix history, and helps create well-structured bug reports."
----
-
-# Triage Issue
-
-## Keywords
-triage bug, check duplicate, is this a duplicate, search for similar issues, create bug ticket, file a bug, report this error, triage this error, bug report, error message, similar issues, duplicate bug, who fixed this, has this been reported, search bugs, find similar bugs, create issue, file issue
-
-## Overview
-
-Automatically triage bug reports and error messages by searching Jira for duplicates, identifying similar past issues, and helping create well-structured bug tickets or add context to existing issues. This skill eliminates manual duplicate checking and ensures bugs are properly documented with relevant historical context.
-
-**Use this skill when:** Users need to triage error messages, bug reports, or issues to determine if they're duplicates and take appropriate action.
-
----
-
-## Workflow
-
-Follow this 6-step process to effectively triage issues:
-
-### Step 1: Extract Key Information
-
-Analyze the bug report or error message to identify search terms.
-
-#### Extract These Elements:
-
-**Error signature:**
-- Error type or exception name (e.g., "NullPointerException", "TimeoutError")
-- Error code or status (e.g., "500", "404", "ERR_CONNECTION_REFUSED")
-- Specific error message text (key phrases, not full stack trace)
-
-**Context:**
-- Component or system affected (e.g., "authentication", "payment gateway", "API")
-- Environment (e.g., "production", "staging", "mobile app")
-- User actions leading to error (e.g., "during login", "when uploading file")
-
-**Symptoms:**
-- Observable behavior (e.g., "page blank", "infinite loading", "data not saving")
-- Impact (e.g., "users can't login", "payments failing")
-
-#### Example Extractions:
-
-**Input:** "Users getting 'Connection timeout' error when trying to login on mobile app"
-**Extracted:**
-- Error: "Connection timeout"
-- Component: "login", "mobile app"
-- Symptom: "can't login"
-
-**Input:** "NullPointerException in PaymentProcessor.processRefund() line 245"
-**Extracted:**
-- Error: "NullPointerException"
-- Component: "PaymentProcessor", "refund"
-- Location: "processRefund line 245"
-
----
-
-### Step 2: Search for Duplicates
-
-Search Jira using extracted keywords to find similar or duplicate issues.
-
-#### Search Strategy:
-
-Execute **multiple targeted searches** to catch duplicates that may use different wording:
-
-**Search 1: Error-focused**
-```
-searchJiraIssuesUsingJql(
- cloudId="...",
- jql='project = "PROJ" AND (text ~ "error signature" OR summary ~ "error signature") AND type = Bug ORDER BY created DESC',
- fields=["summary", "description", "status", "resolution", "created", "updated", "assignee"],
- maxResults=20
-)
-```
-
-**Search 2: Component-focused**
-```
-searchJiraIssuesUsingJql(
- cloudId="...",
- jql='project = "PROJ" AND text ~ "component keywords" AND type = Bug ORDER BY updated DESC',
- fields=["summary", "description", "status", "resolution", "created", "updated", "assignee"],
- maxResults=20
-)
-```
-
-**Search 3: Symptom-focused**
-```
-searchJiraIssuesUsingJql(
- cloudId="...",
- jql='project = "PROJ" AND summary ~ "symptom keywords" AND type = Bug ORDER BY priority DESC, updated DESC',
- fields=["summary", "description", "status", "resolution", "created", "updated", "assignee"],
- maxResults=20
-)
-```
-
-#### Search Tips:
-
-**Use key terms only:**
-- ✅ "timeout login mobile"
-- ✅ "NullPointerException PaymentProcessor refund"
-- ❌ "Users are getting a connection timeout error when..." (too verbose)
-
-**Search recent first:**
-- Order by `created DESC` or `updated DESC` to find recent similar issues
-- Recent bugs are more likely to be relevant duplicates
-
-**Don't over-filter:**
-- Include resolved issues (might have been reopened or regression)
-- Search across all bug statuses to find fix history
-
----
-
-### Step 3: Analyze Search Results
-
-Evaluate the search results to determine if this is a duplicate or a new issue.
-
-#### Duplicate Detection:
-
-**High confidence duplicate (>90%):**
-- Exact same error message in summary or description
-- Same component + same error type
-- Recent issue (< 30 days) with identical symptoms
-- **Action:** Strongly recommend adding comment to existing issue
-
-**Likely duplicate (70-90%):**
-- Similar error with slight variations
-- Same component but different context
-- Resolved issue with same root cause
-- **Action:** Present as possible duplicate, let user decide
-
-**Possibly related (40-70%):**
-- Similar symptoms but different error
-- Same component area but different specific error
-- Old issue (> 6 months) that might be unrelated
-- **Action:** Mention as potentially related
-
-**Likely new issue (<40%):**
-- No similar issues found
-- Different error signature and component
-- Unique symptom or context
-- **Action:** Recommend creating new issue
-
-#### Check Fix History:
-
-If similar resolved issues are found:
-
-**Extract relevant information:**
-- Who fixed it? (assignee on resolved issues)
-- How was it fixed? (resolution comment or linked PRs)
-- When was it fixed? (resolution date)
-- Has it regressed? (any reopened issues)
-
-**Present this context** to help with triage decision.
-
----
-
-### Step 4: Present Findings to User
-
-**CRITICAL:** Always present findings and wait for user decision before taking any action.
-
-#### Format for Likely Duplicate:
-
-```
-🔍 **Triage Results: Likely Duplicate**
-
-I found a very similar issue already reported:
-
-**PROJ-456** - Connection timeout during mobile login
-Status: Open | Priority: High | Created: 3 days ago
-Assignee: @john.doe
-https://yoursite.atlassian.net/browse/PROJ-456
-
-**Similarity:**
-- Same error: "Connection timeout"
-- Same component: Mobile app login
-- Same symptoms: Users unable to login
-
-**Difference:**
-- Original report mentioned iOS specifically, this report doesn't specify platform
-
-**Recommendation:** Add your details as a comment to PROJ-456
-
-Would you like me to:
-1. Add a comment to PROJ-456 with your error details
-2. Create a new issue anyway (if you think this is different)
-3. Show me more details about PROJ-456 first
-```
-
-#### Format for Possibly Related:
-
-```
-🔍 **Triage Results: Possibly Related Issues Found**
-
-I found 2 potentially related issues:
-
-**1. PROJ-789** - Mobile app authentication failures
-Status: Resolved | Fixed: 2 weeks ago | Fixed by: @jane.smith
-https://yoursite.atlassian.net/browse/PROJ-789
-
-**2. PROJ-234** - Login timeout on slow connections
-Status: Open | Priority: Medium | Created: 1 month ago
-https://yoursite.atlassian.net/browse/PROJ-234
-
-**Assessment:** Your error seems related but has unique aspects
-
-**Recommendation:** Create a new issue, but reference these related tickets
-
-Would you like me to create a new bug ticket?
-```
-
-#### Format for No Duplicates:
-
-```
-🔍 **Triage Results: No Duplicates Found**
-
-I searched Jira for:
-- "Connection timeout" errors
-- Mobile login issues
-- Authentication failures
-
-No similar open or recent issues found.
-
-**Recommendation:** Create a new bug ticket
-
-**Note:** I found 1 old resolved issue (PROJ-123 from 8 months ago) about login timeouts, but it was for web, not mobile, and was resolved as "configuration error."
-
-Would you like me to create a new bug ticket for this issue?
-```
-
----
-
-### Step 5: Execute User Decision
-
-Based on user's choice, either add a comment or create a new issue.
-
-#### Option A: Add Comment to Existing Issue
-
-If user wants to add to existing issue:
-
-**Fetch the full issue first** to understand context:
-```
-getJiraIssue(
- cloudId="...",
- issueIdOrKey="PROJ-456"
-)
-```
-
-**Then add the comment:**
-```
-addCommentToJiraIssue(
- cloudId="...",
- issueIdOrKey="PROJ-456",
- commentBody="[formatted comment - see below]"
-)
-```
-
-**Comment Structure:**
-```markdown
-## Additional Instance Reported
-
-**Reporter:** [User's name or context]
-**Date:** [Current date]
-
-**Error Details:**
-[Paste relevant error message or stack trace]
-
-**Context:**
-- Environment: [e.g., Production, iOS 16.5]
-- User Impact: [e.g., 50+ users affected in last hour]
-- Steps to Reproduce: [if provided]
-
-**Additional Notes:**
-[Any unique aspects of this instance]
-
----
-*Added via triage automation*
-```
-
-#### Option B: Create New Issue
-
-If user wants to create new issue:
-
-**First, check available issue types:**
-```
-getJiraProjectIssueTypesMetadata(
- cloudId="...",
- projectIdOrKey="PROJ"
-)
-```
-
-**Determine appropriate issue type:**
-- For bugs/errors → Use "Bug" (if available)
-- For issues without errors → Use "Task" or "Issue"
-- Fallback → First available non-Epic, non-Subtask type
-
-**Create the issue:**
-```
-createJiraIssue(
- cloudId="...",
- projectKey="PROJ",
- issueTypeName="Bug",
- summary="[Clear, specific summary - see below]",
- description="[Detailed description - see below]",
- additional_fields={
- "priority": {"name": "Medium"} # Adjust based on user input severity assessment
- }
-)
-```
-
-**Summary Format:**
-Use the pattern: `[Component] [Error Type] - [Brief Symptom]`
-
-**Examples:**
-- ✅ "Mobile Login: Connection timeout during authentication"
-- ✅ "Payment API: NullPointerException in refund processing"
-- ✅ "Dashboard: Infinite loading on reports page"
-- ❌ "Error in production" (too vague)
-- ❌ "Users experiencing issues" (not specific)
-
-**Description Structure:**
-```markdown
-## Issue Description
-[1-2 sentence summary of the problem]
-
-## Error Details
-```
-[Error message or stack trace]
-```
-
-## Environment
-- **Platform:** [e.g., Mobile iOS, Web, API]
-- **Version:** [if known]
-- **Environment:** [Production/Staging/etc]
-
-## Steps to Reproduce
-1. [Step 1]
-2. [Step 2]
-3. [Step 3]
-
-## Expected Behavior
-[What should happen]
-
-## Actual Behavior
-[What actually happens]
-
-## User Impact
-- **Frequency:** [e.g., Every time, Intermittent]
-- **Affected Users:** [e.g., All users, Mobile users only]
-- **Severity:** [e.g., Users cannot complete checkout]
-
-## Additional Context
-[Any other relevant information]
-
-## Related Issues
-[If applicable, reference similar issues found during triage]
-- See also: PROJ-123 (similar but resolved)
-
----
-*Created via automated triage*
-```
-
----
-
-### Step 6: Provide Summary
-
-After taking action, confirm what was done.
-
-#### If Comment Added:
-
-```
-✅ **Comment Added Successfully**
-
-Added details to existing issue: **PROJ-456**
-https://yoursite.atlassian.net/browse/PROJ-456
-
-**What I included:**
-- Your error details
-- Environment context
-- User impact information
-
-**Next Steps:**
-- The assignee (@john.doe) will be notified
-- Monitor PROJ-456 for updates
-- If this turns out to be different, we can still create a separate ticket
-```
-
-#### If New Issue Created:
-
-```
-✅ **New Issue Created**
-
-**PROJ-890** - Mobile Login: Connection timeout during authentication
-https://yoursite.atlassian.net/browse/PROJ-890
-
-Type: Bug | Priority: Medium | Status: Open
-
-**What's Included:**
-- Complete error details and stack trace
-- Environment and reproduction steps
-- User impact assessment
-- References to related issues (PROJ-123, PROJ-789)
-
-**Next Steps:**
-- Issue will be reviewed during next triage meeting
-- Consider setting priority based on user impact
-- Assign to appropriate team member
-```
-
----
-
-## Edge Cases & Troubleshooting
-
-### Multiple Potential Duplicates
-
-If you find 3+ very similar issues:
-
-```
-🔍 **Triage Results: Multiple Possible Duplicates**
-
-I found 3 issues that might be related:
-
-**Most Likely Duplicate:**
-**PROJ-456** - [summary] (Open, 2 days ago)
-Match: 95% - Same error and component
-
-**Also Possibly Related:**
-**PROJ-234** - [summary] (Open, 1 month ago)
-Match: 70% - Similar symptoms, different error
-
-**PROJ-123** - [summary] (Resolved, 8 months ago)
-Match: 60% - Related component, but was fixed
-
-**Recommendation:**
-1. Add to PROJ-456 (most similar)
-2. Reference PROJ-234 in your comment (might be related)
-3. Note PROJ-123 was previously fixed (possible regression)
-
-Which issue should I add your details to? (Or create new)
-```
-
-### Unclear Project Context
-
-If user doesn't specify which project:
-
-```
-Which Jira project should I search for similar issues?
-
-Available projects:
-- BACKEND (Backend Services)
-- MOBILE (Mobile Apps)
-- WEB (Web Platform)
-- INFRA (Infrastructure)
-
-Or tell me the project key directly (e.g., BACKEND, MOBILE)
-```
-
-### Insufficient Information
-
-If the bug report lacks critical details:
-
-```
-I need more information to effectively triage this issue:
-
-**What I have:**
-- Error: "Something went wrong"
-
-**What would help:**
-- Specific error message or code
-- Which part of the system (login, payment, etc.)
-- What the user was trying to do
-- Which environment (production, staging, mobile, web)
-
-Can you provide any of these details?
-```
-
-### Resolved Regression
-
-If you find a resolved issue that matches:
-
-```
-🔍 **Triage Results: Possible Regression**
-
-This looks like it might be a regression of a previously fixed issue:
-
-**PROJ-567** - [Same issue description]
-Status: Resolved (Fixed) | Fixed: 3 months ago | Fixed by: @jane.smith
-Resolution: [Brief description of fix]
-https://yoursite.atlassian.net/browse/PROJ-567
-
-**This suggests:**
-- The original fix may not have fully addressed the root cause
-- OR there's been a regression in recent changes
-- OR this is a different issue with similar symptoms
-
-**Recommendation:** Create a new issue and link it to PROJ-567 as "may be related to" or "regression of"
-
-Should I create a new issue with this context?
-```
-
-### Custom Required Fields
-
-If creating an issue fails due to required fields:
-
-1. **Check what fields are required:**
-```
-getJiraIssueTypeMetaWithFields(
- cloudId="...",
- projectIdOrKey="PROJ",
- issueTypeId="10001"
-)
-```
-
-2. **Ask user for values:**
-```
-This project requires additional fields to create a Bug:
-- Severity: [High/Medium/Low]
-- Affected Version: [Version number]
-
-Please provide these values so I can create the issue.
-```
-
-3. **Retry with additional fields:**
-```
-createJiraIssue(
- ...existing parameters...,
- additional_fields={
- "priority": {"name": "High"},
- "customfield_10001": {"value": "Production"}
- }
-)
-```
-
----
-
-## Tips for Effective Triage
-
-### For Search:
-
-**Do:**
-✅ Use multiple search queries with different angles
-✅ Include both open and resolved issues in search
-✅ Search for error signatures and symptoms separately
-✅ Look at recent issues first (last 30-90 days)
-✅ Check for patterns (multiple reports of same thing)
-
-**Don't:**
-❌ Search with entire error messages (too specific)
-❌ Only search open issues (miss fix history)
-❌ Ignore resolved issues (miss regressions)
-❌ Use too many keywords (reduces matches)
-
-### For Issue Creation:
-
-**Do:**
-✅ Write clear, specific summaries with component names
-✅ Include complete error messages in code blocks
-✅ Add environment and impact details
-✅ Reference related issues found during search
-✅ Use "Bug" issue type for actual bugs
-
-**Don't:**
-❌ Create vague summaries like "Error in production"
-❌ Paste entire stack traces in summary (use description)
-❌ Skip reproduction steps
-❌ Forget to mention user impact
-❌ Hard-code issue type without checking availability
-
-### For Duplicate Assessment:
-
-**High Confidence Duplicates:**
-- Exact same error + same component + recent (< 30 days)
-- Same root cause identified
-
-**Likely Different Issues:**
-- Different error signatures
-- Different components/systems
-- Significantly different contexts
-
-**When Unsure:**
-- Present both options to user
-- Lean toward creating new issue (can be closed as duplicate later)
-- Linking issues is better than hiding information
-
----
-
-## Examples
-
-### Example 1: Clear Duplicate Found
-
-**User Input:**
-```
-Triage this error: "Connection timeout error when users try to login on iOS app"
-```
-
-**Process:**
-1. Extract: "Connection timeout", "login", "iOS"
-2. Search: Find PROJ-456 (open, 2 days ago) with exact same error
-3. Analyze: 95% match - same error, component, symptom
-4. Present: Show PROJ-456 as duplicate, recommend adding comment
-5. Execute: User confirms, add comment with iOS-specific details
-6. Confirm: Comment added to PROJ-456
-
-**Output:**
-```
-✅ Comment added to PROJ-456
-
-Your iOS-specific error details have been added to the existing issue.
-The assignee will be notified.
-```
-
-### Example 2: New Issue with Related Context
-
-**User Input:**
-```
-Error: NullPointerException in PaymentProcessor.processRefund() at line 245
-Stack trace: [full stack trace]
-```
-
-**Process:**
-1. Extract: "NullPointerException", "PaymentProcessor", "processRefund", "line 245"
-2. Search: Find PROJ-789 (resolved, 3 weeks ago) about payment errors, but different line
-3. Analyze: Related component but different specific error
-4. Present: No duplicates, found related issue, recommend new ticket
-5. Execute: User confirms, create new Bug with context
-6. Confirm: PROJ-890 created
-
-**Output:**
-```
-✅ New Issue Created
-
-PROJ-890 - Payment API: NullPointerException in refund processing
-https://yoursite.atlassian.net/browse/PROJ-890
-
-References related issue PROJ-789 for context.
-```
-
-### Example 3: Possible Regression
-
-**User Input:**
-```
-Users can't upload files larger than 5MB, getting "Upload failed" error
-```
-
-**Process:**
-1. Extract: "Upload failed", "5MB", "file upload"
-2. Search: Find PROJ-234 (resolved 2 months ago) - exact same issue
-3. Analyze: Was fixed but now happening again
-4. Present: Possible regression, recommend new issue linked to old one
-5. Execute: Create new issue, link to PROJ-234 as "may be caused by"
-6. Confirm: PROJ-891 created with regression context
-
-**Output:**
-```
-✅ New Issue Created (Possible Regression)
-
-PROJ-891 - File Upload: Upload failed for files >5MB (Regression?)
-https://yoursite.atlassian.net/browse/PROJ-891
-
-This may be a regression of PROJ-234, which was resolved 2 months ago.
-Issue includes reference to original fix for investigation.
-```
-
----
-
-## When NOT to Use This Skill
-
-This skill is for **triaging bugs and errors only**. Do NOT use for:
-
-❌ Feature requests (use spec-to-backlog)
-❌ General task creation (use capture-tasks-from-meeting-notes)
-❌ Searching for information (use search-company-knowledge)
-❌ Generating status reports (use generate-status-report)
-
-**Use this skill specifically for:**
-✅ "Is this a duplicate bug?"
-✅ "Triage this error message"
-✅ "Has this been reported before?"
-✅ "Create a bug ticket for this"
-
----
-
-## Quick Reference
-
-**Primary workflow:** Extract → Search → Analyze → Present → Execute → Confirm
-
-**Search tool:** `searchJiraIssuesUsingJql(cloudId, jql, fields, maxResults)`
-
-**Action tools:**
-- `addCommentToJiraIssue(cloudId, issueIdOrKey, commentBody)` - Add to existing
-- `createJiraIssue(cloudId, projectKey, issueTypeName, summary, description)` - Create new
-
-**Issue type:** Always prefer "Bug" for error reports, check with `getJiraProjectIssueTypesMetadata`
-
-**Remember:**
-- Multiple searches catch more duplicates
-- Present findings before acting
-- Include error details and context
-- Reference related issues
-- Use "Bug" issue type when available
diff --git a/plugins/atlassian-rovo/skills/triage-issue/agents/openai.yaml b/plugins/atlassian-rovo/skills/triage-issue/agents/openai.yaml
deleted file mode 100644
index 653054018..000000000
--- a/plugins/atlassian-rovo/skills/triage-issue/agents/openai.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-interface:
- display_name: "Triage Issue"
- short_description: "Find duplicates and prepare Jira bug reports"
diff --git a/plugins/atlassian-rovo/skills/triage-issue/references/bug-report-templates.md b/plugins/atlassian-rovo/skills/triage-issue/references/bug-report-templates.md
deleted file mode 100644
index ff07c3119..000000000
--- a/plugins/atlassian-rovo/skills/triage-issue/references/bug-report-templates.md
+++ /dev/null
@@ -1,451 +0,0 @@
-# Bug Report Templates
-
-High-quality bug report templates for different types of issues.
-
----
-
-## Template 1: Backend Error
-
-**Summary Format:**
-```
-[Service/Component]: [Error Type] in [Functionality]
-```
-
-**Examples:**
-- Payment API: NullPointerException in refund processing
-- Auth Service: TimeoutError during token validation
-- Database: Connection pool exhausted in user queries
-
-**Description Template:**
-```markdown
-## Issue Description
-[Brief 1-2 sentence description]
-
-## Error Details
-```
-[Error message or exception]
-Stack trace:
-[Stack trace if available]
-```
-
-## Environment
-- **Service:** [e.g., Payment Service v2.3.4]
-- **Environment:** [Production/Staging]
-- **Server:** [e.g., us-east-1 pod-7]
-- **Timestamp:** [When it occurred]
-
-## Steps to Reproduce
-1. [Step 1]
-2. [Step 2]
-3. [Step 3]
-
-## Expected Behavior
-[What should happen]
-
-## Actual Behavior
-[What actually happens]
-
-## Impact
-- **Frequency:** [e.g., Every time, 10% of requests]
-- **Affected Requests:** [e.g., ~500 requests/hour]
-- **User Impact:** [e.g., Refunds cannot be processed]
-
-## Logs
-```
-[Relevant log excerpts]
-```
-
-## Related Issues
-[Any similar past issues]
-
----
-*Reported via automated triage*
-```
-
----
-
-## Template 2: Frontend/UI Issue
-
-**Summary Format:**
-```
-[Platform] [Component]: [Symptom]
-```
-
-**Examples:**
-- iOS App Login: Screen remains blank after successful auth
-- Web Dashboard: Infinite loading spinner on reports
-- Android App: Crash when uploading photos
-
-**Description Template:**
-```markdown
-## Issue Description
-[Brief description of the visible problem]
-
-## Environment
-- **Platform:** [iOS/Android/Web]
-- **Version:** [App/Browser version]
-- **OS:** [e.g., iOS 16.5, Windows 11, macOS 13]
-- **Device:** [e.g., iPhone 14 Pro, Chrome on Desktop]
-
-## Steps to Reproduce
-1. [Step 1]
-2. [Step 2]
-3. [Step 3]
-
-## Expected Behavior
-[What should happen]
-
-## Actual Behavior
-[What actually happens]
-
-## Visual Evidence
-[Screenshots or screen recording if available]
-
-## User Impact
-- **Frequency:** [e.g., Every time, Intermittent]
-- **Affected Users:** [e.g., All iOS users, Only Safari users]
-- **Severity:** [e.g., Cannot complete checkout, Minor visual glitch]
-
-## Console Errors
-```
-[Browser console errors if applicable]
-```
-
-## Additional Context
-[Network conditions, user permissions, etc.]
-
-## Related Issues
-[Any similar past issues]
-
----
-*Reported via automated triage*
-```
-
----
-
-## Template 3: Performance Issue
-
-**Summary Format:**
-```
-[Component]: [Performance Problem] - [Context]
-```
-
-**Examples:**
-- Dashboard: Slow page load (15+ seconds) on reports
-- API: Response time degradation under load
-- Database: Query timeout on user search
-
-**Description Template:**
-```markdown
-## Issue Description
-[Brief description of the performance problem]
-
-## Performance Metrics
-- **Current:** [e.g., 15 second load time]
-- **Expected:** [e.g., < 2 seconds]
-- **Baseline:** [e.g., Was 1.5s last week]
-
-## Environment
-- **Platform:** [Where observed]
-- **Environment:** [Production/Staging]
-- **Time Observed:** [When it was slow]
-- **Load:** [Concurrent users, request rate]
-
-## Steps to Reproduce
-1. [Step 1]
-2. [Step 2]
-3. Observe slow response
-
-## Performance Data
-```
-[Response times, profiling data, slow query logs]
-```
-
-## Impact
-- **Affected Users:** [e.g., All users during peak hours]
-- **Frequency:** [e.g., Consistently slow, Only during peak]
-- **Business Impact:** [e.g., Increased bounce rate, User complaints]
-
-## Suspected Cause
-[If you have a hypothesis]
-
-## Related Issues
-[Any similar past performance issues]
-
----
-*Reported via automated triage*
-```
-
----
-
-## Template 4: Data Issue
-
-**Summary Format:**
-```
-[Component]: [Data Problem] - [Scope]
-```
-
-**Examples:**
-- User Profile: Data not persisting after save
-- Orders: Missing order items in history
-- Reports: Incorrect calculations in revenue report
-
-**Description Template:**
-```markdown
-## Issue Description
-[Brief description of the data problem]
-
-## Data Issue Details
-- **What's Wrong:** [e.g., Orders missing from history]
-- **Expected Data:** [What should be there]
-- **Actual Data:** [What is actually there]
-- **Data Loss/Corruption:** [Scope of issue]
-
-## Environment
-- **Environment:** [Production/Staging]
-- **Affected Records:** [e.g., All orders from Dec 1-5]
-- **First Observed:** [When issue started]
-
-## Steps to Reproduce
-1. [Step 1]
-2. [Step 2]
-3. Observe incorrect/missing data
-
-## Examples
-**Affected Record:** Order #12345
-**Expected:** [Expected data state]
-**Actual:** [Actual data state]
-
-## Impact
-- **Affected Users:** [e.g., ~500 customers]
-- **Data Integrity:** [e.g., Historical data lost]
-- **Business Impact:** [e.g., Cannot fulfill orders]
-
-## Database Queries
-```sql
-[Queries showing the issue if applicable]
-```
-
-## Related Issues
-[Any similar past data issues]
-
----
-*Reported via automated triage*
-```
-
----
-
-## Template 5: Integration Issue
-
-**Summary Format:**
-```
-[Integration]: [Error] - [External Service]
-```
-
-**Examples:**
-- Stripe Integration: Payment processing fails
-- Auth0: Token validation timeout
-- Sendgrid: Email sending fails with 429 error
-
-**Description Template:**
-```markdown
-## Issue Description
-[Brief description of the integration problem]
-
-## Integration Details
-- **External Service:** [e.g., Stripe API]
-- **Integration Point:** [e.g., Payment processing endpoint]
-- **API Version:** [If known]
-
-## Error Response
-```
-HTTP Status: [e.g., 429, 500]
-Response Body:
-[Error response from external service]
-```
-
-## Environment
-- **Environment:** [Production/Staging]
-- **Our Version:** [Our service version]
-- **Time Observed:** [When it started failing]
-
-## Steps to Reproduce
-1. [Step that triggers integration]
-2. [Expected external service response]
-3. Observe failure
-
-## Expected Behavior
-[What should happen with external service]
-
-## Actual Behavior
-[What is actually happening]
-
-## Impact
-- **Frequency:** [e.g., 100% of payment attempts]
-- **Affected Transactions:** [e.g., ~200 failed payments/hour]
-- **User Impact:** [e.g., Cannot complete checkout]
-
-## External Service Status
-[Check if external service has known issues]
-
-## Logs
-```
-[Our logs showing the integration failure]
-```
-
-## Related Issues
-[Any past integration issues with this service]
-
----
-*Reported via automated triage*
-```
-
----
-
-## Template 6: Regression (Previously Fixed)
-
-**Summary Format:**
-```
-[Component]: [Issue] - Regression of PROJ-XXX
-```
-
-**Examples:**
-- Login: Session timeout after 15min - Regression of PROJ-234
-- Upload: File size limit error - Regression of PROJ-567
-
-**Description Template:**
-```markdown
-## Issue Description
-[Brief description - note this was previously fixed]
-
-⚠️ **This appears to be a regression of [PROJ-XXX]**, which was resolved on [date].
-
-## Original Issue
-**Original Ticket:** [PROJ-XXX](link)
-**Originally Fixed By:** @username
-**Fix Date:** [date]
-**Original Fix:** [Brief description of what was fixed]
-
-## Current Issue
-[Description of the current occurrence]
-
-## Environment
-- **Environment:** [Production/Staging]
-- **Version:** [Current version]
-- **First Observed:** [When regression appeared]
-
-## Steps to Reproduce
-1. [Step 1]
-2. [Step 2]
-3. Observe issue is back
-
-## Expected Behavior
-[Should remain fixed as per PROJ-XXX]
-
-## Actual Behavior
-[Issue has returned]
-
-## Impact
-[Current impact of regression]
-
-## Possible Causes
-[Speculation about what might have caused regression]
-- Recent deployment on [date]?
-- Configuration change?
-- Dependency update?
-
-## Investigation Needed
-- Review changes since original fix
-- Check if original fix was rolled back
-- Verify fix is still in codebase
-
-## Related Issues
-- **Original Issue:** [PROJ-XXX](link)
-[Any other related issues]
-
----
-*Reported via automated triage - Possible Regression*
-```
-
----
-
-## Summary Writing Best Practices
-
-### Good Summaries
-
-✅ **Specific and actionable:**
-- "Payment API: NullPointerException in refund processing"
-- "iOS App: Crash when uploading photos >5MB"
-- "Dashboard: 15s load time on revenue report"
-
-✅ **Includes component:**
-- Start with the affected component/system
-- Makes it easy to filter and assign
-
-✅ **Describes the problem:**
-- Use clear, technical language
-- Avoid vague terms
-
-### Bad Summaries
-
-❌ **Too vague:**
-- "Error in production"
-- "App crashes sometimes"
-- "Something is slow"
-
-❌ **Too long:**
-- "Users are reporting that when they try to login on the mobile app using their email and password, the app shows a connection timeout error and they cannot proceed"
-
-❌ **Missing component:**
-- "NullPointerException in refund" (what component?)
-- "Page won't load" (which page?)
-
----
-
-## Description Writing Best Practices
-
-### Good Practices
-
-✅ **Use structured format** with headers
-✅ **Include complete error messages** in code blocks
-✅ **Provide context** (environment, version, time)
-✅ **List concrete steps** to reproduce
-✅ **Quantify impact** (affected users, frequency)
-✅ **Add relevant logs** in code blocks
-✅ **Reference related issues** with links
-
-### What to Avoid
-
-❌ Pasting entire stack traces without context
-❌ Vague descriptions like "it doesn't work"
-❌ Missing environment information
-❌ No reproduction steps
-❌ Formatting errors/code without code blocks
-❌ Forgetting to mention user impact
-
----
-
-## Field Guidelines
-
-### Priority Selection
-
-**Highest:** System down, data loss, security issue
-**High:** Major functionality broken, large user impact
-**Medium:** Feature partially broken, moderate impact
-**Low:** Minor issue, cosmetic, workaround available
-
-### Component Selection
-
-Always specify the affected component if the project uses components:
-- Makes routing to correct team easier
-- Helps with duplicate detection
-- Improves searchability
-
-### Labels (If Available)
-
-Consider adding labels:
-- `regression` - Previously fixed issue
-- `production` - Occurring in production
-- `data-loss` - Involves data loss/corruption
-- `performance` - Performance related
-- `mobile-ios` / `mobile-android` - Platform specific
diff --git a/plugins/atlassian-rovo/skills/triage-issue/references/search-patterns.md b/plugins/atlassian-rovo/skills/triage-issue/references/search-patterns.md
deleted file mode 100644
index 8d70db65c..000000000
--- a/plugins/atlassian-rovo/skills/triage-issue/references/search-patterns.md
+++ /dev/null
@@ -1,261 +0,0 @@
-# Search Patterns for Duplicate Detection
-
-Effective JQL patterns for finding duplicate bugs and similar issues.
-
----
-
-## Error-Based Search Patterns
-
-### Exception Searches
-
-**For Java/Backend exceptions:**
-```jql
-project = "PROJ" AND text ~ "NullPointerException" AND type = Bug ORDER BY created DESC
-```
-
-**For specific class/method:**
-```jql
-project = "PROJ" AND text ~ "PaymentProcessor processRefund" AND type = Bug ORDER BY created DESC
-```
-
-**For HTTP errors:**
-```jql
-project = "PROJ" AND (text ~ "500 error" OR summary ~ "500") AND type = Bug ORDER BY updated DESC
-```
-
-### Timeout Searches
-
-**General timeout:**
-```jql
-project = "PROJ" AND (text ~ "timeout" OR summary ~ "timeout") AND type = Bug ORDER BY priority DESC
-```
-
-**Specific timeout type:**
-```jql
-project = "PROJ" AND text ~ "connection timeout" AND component = "API" ORDER BY created DESC
-```
-
----
-
-## Component-Based Search Patterns
-
-### By System Component
-
-**Authentication:**
-```jql
-project = "PROJ" AND text ~ "authentication login" AND type = Bug AND status != Done
-```
-
-**Payment:**
-```jql
-project = "PROJ" AND (component = "Payment" OR text ~ "payment checkout") AND type = Bug
-```
-
-**Mobile:**
-```jql
-project = "PROJ" AND (text ~ "mobile iOS" OR text ~ "mobile Android") AND type = Bug ORDER BY updated DESC
-```
-
-### By Functionality
-
-**Upload/Download:**
-```jql
-project = "PROJ" AND (text ~ "upload" OR text ~ "download") AND type = Bug
-```
-
-**Database:**
-```jql
-project = "PROJ" AND text ~ "database query SQL" AND type = Bug ORDER BY created DESC
-```
-
----
-
-## Symptom-Based Search Patterns
-
-### User-Facing Symptoms
-
-**Page/Screen issues:**
-```jql
-project = "PROJ" AND (summary ~ "blank page" OR summary ~ "white screen") AND type = Bug
-```
-
-**Loading issues:**
-```jql
-project = "PROJ" AND (summary ~ "infinite loading" OR summary ~ "stuck loading") AND type = Bug
-```
-
-**Data issues:**
-```jql
-project = "PROJ" AND (summary ~ "data not saving" OR summary ~ "data lost") AND type = Bug
-```
-
-### Performance Symptoms
-
-**Slow performance:**
-```jql
-project = "PROJ" AND (text ~ "slow" OR summary ~ "performance") AND type = Bug ORDER BY priority DESC
-```
-
-**Crashes:**
-```jql
-project = "PROJ" AND (summary ~ "crash" OR text ~ "application crash") AND type = Bug ORDER BY created DESC
-```
-
----
-
-## Time-Based Search Patterns
-
-### Recent Issues (Last 30 Days)
-
-```jql
-project = "PROJ" AND text ~ "error keywords" AND type = Bug AND created >= -30d ORDER BY created DESC
-```
-
-### Recently Updated
-
-```jql
-project = "PROJ" AND text ~ "error keywords" AND type = Bug AND updated >= -7d ORDER BY updated DESC
-```
-
-### Recently Resolved
-
-```jql
-project = "PROJ" AND text ~ "error keywords" AND type = Bug AND status = Done AND resolved >= -90d ORDER BY resolved DESC
-```
-
----
-
-## Combined Search Patterns
-
-### High-Priority Recent
-
-```jql
-project = "PROJ" AND text ~ "error" AND type = Bug AND priority IN ("Highest", "High") AND created >= -60d ORDER BY priority DESC, created DESC
-```
-
-### Component + Error Type
-
-```jql
-project = "PROJ" AND component = "API" AND text ~ "timeout" AND type = Bug ORDER BY updated DESC
-```
-
-### Environment-Specific
-
-```jql
-project = "PROJ" AND text ~ "production" AND text ~ "error keywords" AND type = Bug ORDER BY created DESC
-```
-
----
-
-## Advanced Patterns for Regression Detection
-
-### Previously Resolved
-
-```jql
-project = "PROJ" AND text ~ "error keywords" AND type = Bug AND status = Done AND resolution = Fixed ORDER BY resolved DESC
-```
-
-### Reopened Issues
-
-```jql
-project = "PROJ" AND text ~ "error keywords" AND type = Bug AND status = Reopened ORDER BY updated DESC
-```
-
-### Similar Fix History
-
-```jql
-project = "PROJ" AND text ~ "error keywords" AND type = Bug AND (status = Resolved OR status = Closed) AND resolved >= -180d ORDER BY resolved DESC
-```
-
----
-
-## Multi-Angle Search Strategy
-
-For thorough duplicate detection, run searches in this order:
-
-**1. Exact error signature (narrow):**
-```jql
-project = "PROJ" AND summary ~ "exact error text" AND type = Bug ORDER BY created DESC
-```
-
-**2. Error type + component (medium):**
-```jql
-project = "PROJ" AND text ~ "error type" AND component = "ComponentName" AND type = Bug ORDER BY updated DESC
-```
-
-**3. Symptom-based (broad):**
-```jql
-project = "PROJ" AND summary ~ "user symptom" AND type = Bug ORDER BY priority DESC
-```
-
-**4. Historical (regression check):**
-```jql
-project = "PROJ" AND text ~ "keywords" AND type = Bug AND status = Done ORDER BY resolved DESC
-```
-
----
-
-## Field Selection for Triage
-
-Always request these fields for effective analysis:
-
-```
-fields: ["summary", "description", "status", "resolution", "priority", "created", "updated", "resolved", "assignee", "reporter", "components"]
-```
-
-**Why each field matters:**
-- `summary` - Quick identification of duplicate
-- `description` - Detailed error matching
-- `status` - Know if open/resolved
-- `resolution` - How it was fixed (if resolved)
-- `priority` - Severity assessment
-- `created` - Age of issue
-- `updated` - Recent activity
-- `resolved` - When it was fixed
-- `assignee` - Who fixed it or is working on it
-- `reporter` - Original reporter
-- `components` - Affected system parts
-
----
-
-## Tips for Better Search Results
-
-### Use Key Terms Only
-
-✅ Good:
-- "timeout login"
-- "NullPointerException PaymentProcessor"
-- "500 error API"
-
-❌ Too Verbose:
-- "users are experiencing a timeout when trying to login"
-- "we got a NullPointerException in the PaymentProcessor class"
-
-### Combine Searches
-
-Don't rely on a single search. Run 2-3 searches with different angles:
-1. Error-focused
-2. Component-focused
-3. Symptom-focused
-
-### Order Strategically
-
-- Recent first: `ORDER BY created DESC`
-- Active first: `ORDER BY updated DESC`
-- Important first: `ORDER BY priority DESC, updated DESC`
-
-### Limit Results
-
-- Use `maxResults=20` for initial searches
-- Don't overwhelm with 100+ results
-- Focus on top 10-15 most relevant
-
----
-
-## Common Pitfalls to Avoid
-
-❌ Searching with full stack traces (too specific, no matches)
-❌ Using only exact text matching (miss paraphrased duplicates)
-❌ Ignoring resolved issues (miss regressions)
-❌ Not checking multiple projects (duplicate across teams)
-❌ Only searching summaries (miss details in descriptions)
diff --git a/plugins/attio/.app.json b/plugins/attio/.app.json
deleted file mode 100644
index 68c35c7dd..000000000
--- a/plugins/attio/.app.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "apps": {
- "attio": {
- "id": "asdk_app_6981f663d5cc8191ae0d5717a05ccc89"
- }
- }
-}
diff --git a/plugins/attio/.codex-plugin/plugin.json b/plugins/attio/.codex-plugin/plugin.json
deleted file mode 100644
index 7922304f7..000000000
--- a/plugins/attio/.codex-plugin/plugin.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name": "attio",
- "version": "1.0.3",
- "description": "Attio connects Codex directly to your CRM workspace, letting you manage customer relationships through na...",
- "author": {
- "name": "Attio Ltd",
- "url": "https://attio.com"
- },
- "repository": "https://github.com/openai/plugins",
- "license": "MIT",
- "keywords": [],
- "apps": "./.app.json",
- "interface": {
- "displayName": "Attio",
- "shortDescription": "Attio connects Codex directly to your CRM workspace, letting you manage customer relationships through na...",
- "longDescription": "Attio connects Codex directly to your CRM workspace, letting you manage customer relationships through natural conversation. \n\nSearch and filter contacts, companies, and deals with flexible queries. Create, update, and organize records without switching between screens. Add notes, manage tasks, and track your sales pipeline\u2014all through simple requests. \n\nKey capabilities: \n- Search records using powerful filters (find companies by size, industry, last contact date) \n- Create and update people, companies, and deal records \n- Manage notes attached to any record \n- Track and complete tasks \n- Navigate lists and organize your data \n\nWhether you're preparing for a meeting, updating deal stages, or researching prospects, Attio brings your CRM data into your conversation \u2014 no manual data entry required.",
- "developerName": "Attio Ltd",
- "category": "Business & Operations",
- "capabilities": [],
- "defaultPrompt": [
- "Find the latest notes and next steps in Attio"
- ],
- "screenshots": [],
- "websiteURL": "https://attio.com",
- "privacyPolicyURL": "https://attio.com/legal/privacy",
- "termsOfServiceURL": "https://attio.com/legal/terms-and-conditions",
- "composerIcon": "./assets/logo.png",
- "logo": "./assets/logo.png"
- },
- "homepage": "https://attio.com"
-}
diff --git a/plugins/attio/assets/logo.png b/plugins/attio/assets/logo.png
deleted file mode 100644
index 25b354f56..000000000
Binary files a/plugins/attio/assets/logo.png and /dev/null differ
diff --git a/plugins/base44/.app.json b/plugins/base44/.app.json
deleted file mode 100644
index bb07d0b1e..000000000
--- a/plugins/base44/.app.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "apps": {
- "base44": {
- "id": "asdk_app_6952514760dc8191ab148f77c5794d46"
- }
- }
-}
diff --git a/plugins/base44/.codex-plugin/plugin.json b/plugins/base44/.codex-plugin/plugin.json
deleted file mode 100644
index 5d79a4b52..000000000
--- a/plugins/base44/.codex-plugin/plugin.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "base44",
- "version": "1.0.3-beta.1",
- "description": "Build and deploy Base44 full-stack apps with CLI project management and JavaScript/TypeScript SDK development skills",
- "author": {
- "name": "base44",
- "url": "https://base44.com"
- },
- "homepage": "https://docs.base44.com",
- "repository": "https://github.com/base44/skills",
- "license": "MIT",
- "keywords": ["base44", "full-stack", "sdk", "cli", "deployment", "entities", "backend-functions", "javascript", "typescript"],
- "skills": "./skills/",
- "apps": "./.app.json",
- "interface": {
- "displayName": "Base44",
- "shortDescription": "Build and deploy Base44 full-stack apps from Codex",
- "longDescription": "Build and deploy Base44 full-stack apps with Codex. Includes CLI project management, JavaScript/TypeScript SDK development, and production troubleshooting skills.",
- "developerName": "base44",
- "category": "Developer Tools",
- "capabilities": ["Interactive", "Read", "Write"],
- "websiteURL": "https://base44.com",
- "defaultPrompt": [
- "Create a new Base44 app and deploy it.",
- "Build a feature in my existing Base44 app.",
- "Debug errors from my Base44 backend functions."
- ],
- "composerIcon": "./assets/logo-padded.png",
- "logo": "./assets/logo-padded.png",
- "screenshots": []
- }
-}
diff --git a/plugins/base44/assets/base44-logo.png b/plugins/base44/assets/base44-logo.png
deleted file mode 100644
index 6fed0a022..000000000
Binary files a/plugins/base44/assets/base44-logo.png and /dev/null differ
diff --git a/plugins/base44/assets/logo-padded.png b/plugins/base44/assets/logo-padded.png
deleted file mode 100644
index 6fddaf02c..000000000
Binary files a/plugins/base44/assets/logo-padded.png and /dev/null differ
diff --git a/plugins/base44/skills/base44-cli/SKILL.md b/plugins/base44/skills/base44-cli/SKILL.md
deleted file mode 100644
index b5d13dbd5..000000000
--- a/plugins/base44/skills/base44-cli/SKILL.md
+++ /dev/null
@@ -1,530 +0,0 @@
----
-name: base44-cli
-description: "The base44 CLI is used for EVERYTHING related to base44 projects: resource configuration (entities, backend functions, ai agents), initialization and actions (resource creation, deployment). This skill is the place for learning about how to configure resources. When you plan or implement a feature, you must learn this skill"
-metadata:
- sourcePackage:
- name: base44
- version: 0.0.50
----
-
-# Base44 CLI
-
-Create and manage Base44 apps (projects) using the Base44 CLI tool.
-
-## ⚡ IMMEDIATE ACTION REQUIRED - Read This First
-
-This skill activates on ANY mention of "base44" or when a `base44/` folder exists. **DO NOT read documentation files or search the web before acting.**
-
-**Your first action MUST be:**
-1. Check if `base44/config.jsonc` exists in the current directory
-2. If **NO** (new project scenario):
- - This skill (base44-cli) handles the request
- - Guide user through project initialization
- - Do NOT activate base44-sdk yet
-3. If **YES** (existing project scenario):
- - Transfer to base44-sdk skill for implementation
- - This skill only handles CLI commands (login, deploy, entities push)
-
-## Critical: Local Installation Only
-
-NEVER call `base44` directly. The CLI is installed locally as a dev dependency and must be accessed via a package manager:
-
-- `npx base44 ` (npm - recommended)
-- `yarn base44 ` (yarn)
-- `pnpm base44 ` (pnpm)
-
-WRONG: `base44 login`
-RIGHT: `npx base44 login`
-
-## MANDATORY: Authentication Check at Session Start
-
-**CRITICAL**: At the very start of every AI session when this skill is activated, you MUST:
-
-1. **Check authentication status** by running:
- ```bash
- npx base44 whoami
- ```
-
-2. **If the user is logged in** (command succeeds and shows an email):
- - Continue with the requested task
-
-3. **If the user is NOT logged in** (command fails or shows an error):
- - **STOP immediately**
- - **DO NOT proceed** with any CLI operations
- - **Ask the user to login manually** by running:
- ```bash
- npx base44 login
- ```
- - Wait for the user to confirm they have logged in before continuing
-
-**This check is mandatory and must happen before executing any other Base44 CLI commands.**
-
-## Overview
-
-The Base44 CLI provides command-line tools for authentication, creating projects, managing entities, and deploying Base44 applications. It is framework-agnostic and works with popular frontend frameworks like Vite, Next.js, and Create React App, Svelte, Vue, and more.
-
-## When to Use This Skill vs base44-sdk
-
-**Use base44-cli when:**
-- Creating a **NEW** Base44 project from scratch
-- Initializing a project in an empty directory
-- Directory is missing `base44/config.jsonc`
-- User mentions: "create a new project", "initialize project", "setup a project", "start a new Base44 app"
-- Deploying, pushing entities, or authenticating via CLI
-- Working with CLI commands (`npx base44 ...`)
-
-**Use base44-sdk when:**
-- Building features in an **EXISTING** Base44 project
-- `base44/config.jsonc` already exists
-- Writing JavaScript/TypeScript code using Base44 SDK
-- Implementing functionality, components, or features
-- User mentions: "implement", "build a feature", "add functionality", "write code"
-
-**Skill Dependencies:**
-- `base44-cli` is a **prerequisite** for `base44-sdk` in new projects
-- If user wants to "create an app" and no Base44 project exists, use `base44-cli` first
-- `base44-sdk` assumes a Base44 project is already initialized
-
-**State Check Logic:**
-Before selecting a skill, check:
-- IF (user mentions "create/build app" OR "make a project"):
- - IF (directory is empty OR no `base44/config.jsonc` exists):
- → Use **base44-cli** (project initialization needed)
- - ELSE:
- → Use **base44-sdk** (project exists, build features)
-
-## Project Structure
-
-A Base44 project combines a standard frontend project with a `base44/` configuration folder:
-
-```
-my-app/
-├── base44/ # Base44 configuration (created by CLI)
-│ ├── config.jsonc # Project settings, site config
-│ ├── .types/ # Auto-generated TypeScript types (created by `types generate`)
-│ │ └── types.d.ts # Module augmentation for @base44/sdk
-│ ├── entities/ # Entity schema definitions
-│ │ ├── task.jsonc
-│ │ └── board.jsonc
-│ ├── functions/ # Backend functions (optional); automations live in function.jsonc
-│ │ └── my-function/
-│ │ ├── function.jsonc
-│ │ └── index.ts
-│ ├── agents/ # Agent configurations (optional)
-│ │ └── support_agent.jsonc
-│ └── connectors/ # OAuth connector configurations (optional)
-│ └── googlecalendar.jsonc
-├── src/ # Frontend source code
-│ ├── api/
-│ │ └── base44Client.js # Base44 SDK client
-│ ├── pages/
-│ ├── components/
-│ └── main.jsx
-├── index.html # SPA entry point
-├── package.json
-└── vite.config.js # Or your framework's config
-```
-
-**Key files:**
-- `base44/config.jsonc` - Project name, description, site build settings
-- `base44/entities/*.jsonc` - Data model schemas (see Entity Schema section)
-- `base44/functions/*/function.jsonc` - Function config and optional `automations` (CRON, simple triggers, entity hooks)
-- `base44/agents/*.jsonc` - Agent configurations (optional)
-- `base44/.types/types.d.ts` - Auto-generated TypeScript types for entities, functions, and agents (created by `npx base44 types generate`)
-- `base44/connectors/*.jsonc` - OAuth connector configurations (optional)
-- `src/api/base44Client.js` - Pre-configured SDK client for frontend use
-
-**config.jsonc example:**
-```jsonc
-{
- "name": "My App", // Required: project name
- "description": "App description", // Optional: project description
- "entitiesDir": "./entities", // Optional: default "entities"
- "functionsDir": "./functions", // Optional: default "functions"
- "agentsDir": "./agents", // Optional: default "agents"
- "connectorsDir": "./connectors", // Optional: default "connectors"
- "site": { // Optional: site deployment config
- "installCommand": "npm install", // Optional: install dependencies
- "buildCommand": "npm run build", // Optional: build command
- "serveCommand": "npm run dev", // Optional: local dev server
- "outputDirectory": "./dist" // Optional: build output directory
- }
-}
-```
-
-**Config properties:**
-
-| Property | Description | Default |
-|----------|-------------|---------|
-| `name` | Project name (required) | - |
-| `description` | Project description | - |
-| `entitiesDir` | Directory for entity schemas | `"entities"` |
-| `functionsDir` | Directory for backend functions | `"functions"` |
-| `agentsDir` | Directory for agent configs | `"agents"` |
-| `connectorsDir` | Directory for connector configs | `"connectors"` |
-| `site.installCommand` | Command to install dependencies | - |
-| `site.buildCommand` | Command to build the project | - |
-| `site.serveCommand` | Command to run dev server | - |
-| `site.outputDirectory` | Build output directory for deployment | - |
-
-## Installation
-
-Install the Base44 CLI as a dev dependency in your project:
-
-```bash
-npm install --save-dev base44
-```
-
-**Important:** Never assume or hardcode the `base44` package version. Always install without a version specifier to get the latest version.
-
-Then run commands using `npx`:
-
-```bash
-npx base44
-```
-
-**Note:** All commands in this documentation use `npx base44`. You can also use `yarn base44`, or `pnpm base44` if preferred.
-
-## Available Commands
-
-### Authentication
-
-| Command | Description | Reference |
-| --------------- | ----------------------------------------------- | ------------------------------------------- |
-| `base44 login` | Authenticate with Base44 using device code flow | [auth-login.md](references/auth-login.md) |
-| `base44 logout` | Logout from current device | [auth-logout.md](references/auth-logout.md) |
-| `base44 whoami` | Display current authenticated user | [auth-whoami.md](references/auth-whoami.md) |
-
-### Project Management
-
-| Command | Description | Reference |
-|---------|-------------|-----------|
-| `base44 create` | Create a new Base44 project from a template | [create.md](references/create.md) ⚠️ **MUST READ** |
-| `base44 link` | Link an existing local project to Base44 | [link.md](references/link.md) |
-| `base44 eject` | Download the code for an existing Base44 project | [eject.md](references/eject.md) |
-| `base44 dashboard open` | Open the app dashboard in your browser | [dashboard.md](references/dashboard.md) |
-
-### Deployment
-
-| Command | Description | Reference |
-|---------|-------------|-----------|
-| `base44 deploy` | Deploy all resources (entities, functions, agents, connectors, auth config, and site) | [deploy.md](references/deploy.md) |
-
-### Entity Management
-
-| Action / Command | Description | Reference |
-| ---------------------- | ------------------------------------------- | --------------------------------------------------- |
-| Create Entities | Define entities in `base44/entities` folder | [entities-create.md](references/entities-create.md) |
-| `base44 entities push` | Push local entities to Base44 | [entities-push.md](references/entities-push.md) |
-| RLS Patterns | Row-level security examples and operators | [rls-examples.md](references/rls-examples.md) ⚠️ **READ FOR RLS** |
-
-#### Entity Schema (Quick Reference)
-
-ALWAYS follow this exact structure when creating entity files:
-
-**File naming:** `base44/entities/{kebab-case-name}.jsonc` (e.g., `team-member.jsonc` for `TeamMember`)
-
-**Schema template:**
-```jsonc
-{
- "name": "EntityName",
- "type": "object",
- "properties": {
- "field_name": {
- "type": "string",
- "description": "Field description"
- }
- },
- "required": ["field_name"]
-}
-```
-
-**Field types:** `string`, `number`, `integer`, `boolean`, `array`, `object`, `binary`
-**String formats:** `date`, `date-time`, `time`, `email`, `uri`, `hostname`, `ipv4`, `ipv6`, `uuid`, `file`, `regex`, `richtext`
-**For enums:** Add `"enum": ["value1", "value2"]` and optionally `"default": "value1"`
-**Entity names:** Must be alphanumeric only (pattern: `/^[a-zA-Z0-9]+$/`)
-
-For complete documentation, see [entities-create.md](references/entities-create.md).
-
-### Function Management
-
-| Action / Command | Description | Reference |
-| ------------------------- | --------------------------------------------- | ------------------------------------------------------- |
-| Create Functions | Define functions in `base44/functions` folder | [functions-create.md](references/functions-create.md) |
-| Configure Automations | CRON, simple triggers, entity hooks in `function.jsonc` | [automations.md](references/automations.md) |
-| `base44 functions deploy [names...] [--force]` | Deploy local functions (and automations) to Base44; optionally target specific functions or prune removed ones | [functions-deploy.md](references/functions-deploy.md) |
-| `base44 functions delete ` | Delete one or more deployed functions from Base44 | [functions-delete.md](references/functions-delete.md) |
-| `base44 functions list` | List all deployed functions on Base44 remote | [functions-list.md](references/functions-list.md) |
-| `base44 functions pull [name]` | Pull deployed functions from Base44 to local files | [functions-pull.md](references/functions-pull.md) |
-
-### Agent Management
-
-Agents are conversational AI assistants that can interact with users, access your app's entities, and call backend functions. Use these commands to manage agent configurations.
-
-| Action / Command | Description | Reference |
-| ----------------------- | --------------------------------------- | ----------------------------------------------- |
-| Create Agents | Define agents in `base44/agents` folder | See Agent Schema below |
-| `base44 agents pull` | Pull remote agents to local files | [agents-pull.md](references/agents-pull.md) |
-| `base44 agents push` | Push local agents to Base44 | [agents-push.md](references/agents-push.md) |
-
-**Note:** Agent commands perform full synchronization - pushing replaces all remote agents with local ones, and pulling replaces all local agents with remote ones.
-
-#### Agent Schema (Quick Reference)
-
-**File naming:** `base44/agents/{agent_name}.jsonc` (e.g., `support_agent.jsonc`)
-
-**Schema template:**
-```jsonc
-{
- "name": "agent_name",
- "description": "Brief description of what this agent does",
- "instructions": "Detailed instructions for the agent's behavior",
- "tool_configs": [
- // Entity tool - gives agent access to entity operations
- { "entity_name": "tasks", "allowed_operations": ["read", "create", "update", "delete"] },
- // Backend function tool - gives agent access to a function
- { "function_name": "send_email", "description": "Send an email notification" }
- ],
- "whatsapp_greeting": "Hello! How can I help you today?"
-}
-```
-
-**Naming rules:**
-- Agent names must match pattern: `/^[a-z0-9_]+$/` (lowercase alphanumeric with underscores, 1-100 chars)
-- Valid: `support_agent`, `order_bot`
-- Invalid: `Support-Agent`, `OrderBot`
-
-**Required fields:** `name`, `description`, `instructions`
-**Optional fields:** `tool_configs` (defaults to `[]`), `whatsapp_greeting`
-
-**Tool config types:**
-- **Entity tools**: `entity_name` + `allowed_operations` (array of: `read`, `create`, `update`, `delete`)
-- **Backend function tools**: `function_name` + `description`
-
-### Connector Management
-
-Connectors let your app connect to external services (Google Calendar, Slack, Stripe, etc.). Most connectors use OAuth to provide access tokens for backend functions to call external APIs. Stripe is the exception — it is provisioned automatically on the server side with no OAuth browser flow.
-
-| Action / Command | Description | Reference |
-| ---------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------- |
-| Create Connectors | Define connectors in `base44/connectors` folder | [connectors-create.md](references/connectors-create.md) |
-| `base44 connectors list-available` | List all available integration types from Base44 | [connectors-list-available.md](references/connectors-list-available.md) |
-| `base44 connectors pull` | Pull remote connectors to local files | [connectors-pull.md](references/connectors-pull.md) |
-| `base44 connectors push` | Push local connectors to Base44 | [connectors-push.md](references/connectors-push.md) |
-
-**Note:** Connector commands perform full synchronization - pushing replaces all remote connectors with local ones (and triggers OAuth for new OAuth connectors), and pulling replaces all local connectors with remote ones.
-
-#### Connector Schema (Quick Reference)
-
-**File naming:** `base44/connectors/{type}.jsonc` (e.g., `googlecalendar.jsonc`, `slack.jsonc`)
-
-**Schema template:**
-```jsonc
-{
- "type": "googlecalendar",
- "scopes": [
- "https://www.googleapis.com/auth/calendar.readonly",
- "https://www.googleapis.com/auth/calendar.events"
- ]
-}
-```
-
-**Required fields:** `type`
-**Optional fields:** `scopes` (defaults to `[]`)
-
-**Available connector types:** Run `npx base44 connectors list-available` to see all supported integration types.
-
-**Note:** `stripe` is also a valid connector type but is not returned by `list-available`. Treat it as a supported type — it is provisioned automatically by Base44 with no OAuth browser flow. See [connectors-create.md](references/connectors-create.md) for details.
-
-For complete documentation, see [connectors-create.md](references/connectors-create.md).
-
-#### Automation Quick Reference
-
-Automations are triggers defined in the `automations` array inside `function.jsonc`. They deploy with the function via `base44 functions deploy`. Four types:
-
-**Common fields (all types):** `name` (required), `description`, `function_args`, `is_active` (default: true)
-
-**Scheduled One-Time:** `type: "scheduled"`, `schedule_mode: "one-time"`, `one_time_date` (ISO string)
-
-**Scheduled CRON:** `type: "scheduled"`, `schedule_mode: "recurring"`, `schedule_type: "cron"`, `cron_expression`, optional `ends_type` / `ends_on_date` / `ends_after_count`
-
-**Scheduled Simple:** `type: "scheduled"`, `schedule_mode: "recurring"`, `schedule_type: "simple"`, `repeat_unit` (`"minutes"` \| `"hours"` \| `"days"` \| `"weeks"` \| `"months"`), optional `repeat_interval`, `start_time`, `repeat_on_days` (0–6), `repeat_on_day_of_month` (1–31), `ends_type` / `ends_on_date` / `ends_after_count`
-
-**Entity Hook:** `type: "entity"`, `entity_name` (matches entity schema name), `event_types`: array of `"create"` \| `"update"` \| `"delete"` (at least one)
-
-For full schemas and examples, see [automations.md](references/automations.md).
-
-### Auth Configuration
-
-Manage your app's authentication settings (e.g., username & password login). Auth config is stored in `base44/auth/` and synced with Base44 via `auth push`/`auth pull`.
-
-| Command | Description | Reference |
-|---------|-------------|-----------|
-| `base44 auth password-login ` | Enable or disable username & password authentication | [auth-password-login.md](references/auth-password-login.md) |
-| `base44 auth pull` | Pull auth config from Base44 to local files | [auth-pull.md](references/auth-pull.md) |
-| `base44 auth push` | Push local auth config to Base44 | [auth-push.md](references/auth-push.md) |
-
-**Note:** Auth config is also deployed as part of `base44 deploy`.
-
-### Secrets Management
-
-Manage project secrets (environment variables stored securely in Base44). These commands are hidden from `--help` output but are fully functional.
-
-| Command | Description | Reference |
-|---------|-------------|-----------|
-| `base44 secrets list` | List the names of all secrets | [secrets-list.md](references/secrets-list.md) |
-| `base44 secrets set` | Set one or more secrets (KEY=VALUE or --env-file) | [secrets-set.md](references/secrets-set.md) |
-| `base44 secrets delete ` | Delete a secret by name | [secrets-delete.md](references/secrets-delete.md) |
-
-### Script Execution
-
-Run one-off scripts against your app with the Base44 SDK pre-authenticated. Use it to perform CRUD operations on entities (`base44.entities.MyEntity.list/create/update/delete`), call backend functions (`base44.functions.invoke("myFunction", args)`), invoke agents, or access any other resource exposed by the SDK — without deploying a full function. Useful for data migrations, bulk operations, debugging, and automation scripts.
-
-| Command | Description | Reference |
-|---------|-------------|-----------|
-| `base44 exec` | Run a script (via stdin) with the Base44 SDK pre-authenticated | [exec.md](references/exec.md) |
-
-### Type Generation
-
-| Command | Description | Reference |
-|---------|-------------|-----------|
-| `base44 types generate` | Generate TypeScript types (`types.d.ts`) from entities, functions, agents, and connectors | [types-generate.md](references/types-generate.md) |
-
-**Output:** `base44/.types/types.d.ts` — augments `@base44/sdk` module with typed registries (`EntityTypeRegistry`, `FunctionNameRegistry`, `AgentNameRegistry`, `ConnectorTypeRegistry`).
-
-**No authentication required.** Runs entirely locally. Automatically updates `tsconfig.json` to include the generated types.
-
-### Site Management
-
-| Command | Description | Reference |
-| -------------------- | ----------------------------------------- | ------------------------------------------- |
-| `base44 site deploy` | Deploy built site files to Base44 hosting | [site-deploy.md](references/site-deploy.md) |
-| `base44 site open` | Open the deployed site in your browser | [site-open.md](references/site-open.md) |
-
-**SPA only**: Base44 hosting supports Single Page Applications with a single `index.html` entry point. All routes are served from `index.html` (client-side routing).
-
-## Quick Start
-
-1. Install the CLI in your project:
- ```bash
- npm install --save-dev base44
- ```
-
-2. Authenticate with Base44:
- ```bash
- npx base44 login
- ```
-
-3. Create a new project (ALWAYS provide name and `--path` flag):
- ```bash
- npx base44 create my-app -p .
- ```
-
-4. Build and deploy everything:
- ```bash
- npm run build
- npx base44 deploy -y
- ```
-
-Or deploy individual resources:
-- `npx base44 entities push` - Push entities only
-- `npx base44 functions deploy` - Deploy functions only
-- `npx base44 functions delete ` - Delete a deployed function
-- `npx base44 functions list` - List all deployed functions
-- `npx base44 functions pull` - Pull deployed functions to local files
-- `npx base44 agents push` - Push agents only
-- `npx base44 connectors pull` - Pull connectors from Base44
-- `npx base44 connectors push` - Push connectors only
-- `npx base44 auth pull` - Pull auth config from Base44
-- `npx base44 auth push` - Push auth config only
-- `npx base44 site deploy -y` - Deploy site only
-
-## Common Workflows
-
-### Creating a New Project
-
-**⚠️ MANDATORY: Before running `base44 create`, you MUST read [create.md](references/create.md) for:**
-- **Template selection** - Choose the correct template (`backend-and-client` vs `backend-only`)
-- **Correct workflow** - Different templates require different setup steps
-- **Common pitfalls** - Avoid folder creation errors that cause failures
-
-Failure to follow the create.md instructions will result in broken project scaffolding.
-
-### Linking an Existing Project
-```bash
-# If you have base44/config.jsonc but no .app.jsonc
-npx base44 link --create --name my-app
-```
-
-### Deploying All Changes
-```bash
-# Generate types (optional, for TypeScript projects)
-npx base44 types generate
-
-# Build your project first
-npm run build
-
-# Deploy everything (entities, functions, and site)
-npx base44 deploy -y
-```
-
-### Generating TypeScript Types
-```bash
-# Generate types from entities, functions, agents, and connectors
-npx base44 types generate
-```
-
-This creates `base44/.types/types.d.ts` with typed registries for the `@base44/sdk` module. Run this after changing entities, functions, agents, or connectors to keep your types in sync. No authentication required.
-
-### Deploying Individual Resources
-```bash
-# Push only entities
-npx base44 entities push
-
-# Deploy only functions (all)
-npx base44 functions deploy
-# Deploy specific functions
-npx base44 functions deploy my-function other-function
-# Deploy and prune removed functions
-npx base44 functions deploy --force
-
-# Push only agents
-npx base44 agents push
-
-# Pull connectors from Base44
-npx base44 connectors pull
-
-# Push only connectors
-npx base44 connectors push
-
-# Deploy only site
-npx base44 site deploy -y
-```
-
-### Opening the Dashboard
-```bash
-# Open app dashboard in browser
-npx base44 dashboard
-```
-
-## Authentication
-
-Most commands require authentication. If you're not logged in, the CLI will automatically prompt you to login. Your session is stored locally and persists across CLI sessions.
-
-## Troubleshooting
-
-| Error | Solution |
-| --------------------------- | ----------------------------------------------------------------------------------- |
-| Not authenticated | Run `npx base44 login` first |
-| No entities found | Ensure entities exist in `base44/entities/` directory |
-| Entity not recognized | Ensure file uses kebab-case naming (e.g., `team-member.jsonc` not `TeamMember.jsonc`) |
-| No functions found | Ensure functions exist in `base44/functions/` with valid `function.jsonc` configs |
-| No agents found | Ensure agents exist in `base44/agents/` directory with valid `.jsonc` configs |
-| Invalid agent name | Agent names must be lowercase alphanumeric with underscores only |
-| No connectors found | Ensure connectors exist in `base44/connectors/` directory with valid `.jsonc` configs |
-| Invalid connector type | Run `npx base44 connectors list-available` to see valid types |
-| Duplicate connector type | Each connector type can only be defined once per project |
-| Connector authorization timeout | Re-run `npx base44 connectors push` and complete the OAuth flow in your browser |
-| No site configuration found | Check that `site.outputDirectory` is configured in project config |
-| Site deployment fails | Ensure you ran `npm run build` first and the build succeeded |
-| Update available message | If prompted to update, run `npm install -g base44@latest` (or use npx for local installs) |
diff --git a/plugins/base44/skills/base44-cli/agents/openai.yaml b/plugins/base44/skills/base44-cli/agents/openai.yaml
deleted file mode 100644
index 1d09ded00..000000000
--- a/plugins/base44/skills/base44-cli/agents/openai.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-interface:
- display_name: "Base44 CLI"
- short_description: "Initialize, configure, deploy, and manage Base44 projects"
- default_prompt: "Use Base44 CLI guidance to initialize, configure, authenticate, and deploy this Base44 app."
diff --git a/plugins/base44/skills/base44-cli/references/agents-pull.md b/plugins/base44/skills/base44-cli/references/agents-pull.md
deleted file mode 100644
index eb10760ad..000000000
--- a/plugins/base44/skills/base44-cli/references/agents-pull.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# base44 agents pull
-
-Pull AI agent configurations from Base44 to local files. Agents are conversational AI assistants that can interact with users, access your app's entities, and call backend functions.
-
-## Syntax
-
-```bash
-npx base44 agents pull
-```
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-1. Fetches all agents from Base44
-2. Writes agent files to the `base44/agents/` directory
-3. Deletes local agent files that don't exist remotely
-4. Reports written and deleted agents
-
-## Prerequisites
-
-- Must be run from a Base44 project directory
-- Project must be linked to a Base44 app
-
-## Output
-
-```bash
-$ npx base44 agents pull
-
-Fetching agents from Base44...
-✓ Agents fetched successfully
-
-Syncing agent files...
-✓ Agent files synced successfully
-
-Written: support_agent, order_bot
-Deleted: old_agent
-
-Pulled 2 agents to base44/agents
-```
-
-When agents are already up to date (no changes):
-```bash
-$ npx base44 agents pull
-
-Fetching agents from Base44...
-✓ Agents fetched successfully
-
-Syncing agent files...
-✓ Agent files synced successfully
-
-All agents are already up to date
-
-Pulled 3 agents to base44/agents
-```
-
-## Agent Synchronization
-
-The pull operation synchronizes remote agents to your local files:
-
-- **Written**: Agent files created or updated from remote
-- **Deleted**: Local agent files removed (didn't exist remotely)
-
-**Warning**: This operation replaces all local agent configurations with remote versions. Any local changes not pushed to Base44 will be overwritten.
-
-## Use Cases
-
-- Sync agent configurations to a new development machine
-- Get the latest agent configurations from your team
-- Restore local agent files after accidental deletion
-- Start working on an existing project with agents
-
-## Notes
-
-- This command syncs agent configurations, not conversation data
-- Agent files are stored as `.jsonc` in the `base44/agents/` directory
-- The directory location is configurable via `agentsDir` in `config.jsonc`
-- Use `base44 agents push` to upload local changes to Base44
diff --git a/plugins/base44/skills/base44-cli/references/agents-push.md b/plugins/base44/skills/base44-cli/references/agents-push.md
deleted file mode 100644
index fa2795b4b..000000000
--- a/plugins/base44/skills/base44-cli/references/agents-push.md
+++ /dev/null
@@ -1,156 +0,0 @@
-# base44 agents push
-
-Push local AI agent configurations to Base44. Agents are conversational AI assistants that can interact with users, access your app's entities, and call backend functions.
-
-## Syntax
-
-```bash
-npx base44 agents push
-```
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-1. Reads all agent files from the `base44/agents/` directory
-2. Validates agent configurations
-3. Displays the count of agents to be pushed
-4. Uploads agents to the Base44 backend
-5. Reports the results: created, updated, and deleted agents
-
-## Prerequisites
-
-- Must be run from a Base44 project directory
-- Project must have agent definitions in the `base44/agents/` folder
-
-## Output
-
-```bash
-$ npx base44 agents push
-
-Found 2 agents to push
-Pushing agents to Base44...
-
-Created: support_agent
-Updated: order_bot
-Deleted: old_agent
-
-✓ Agents pushed to Base44
-```
-
-## Agent Synchronization
-
-The push operation synchronizes your local agents with Base44:
-
-- **Created**: New agents that didn't exist in Base44
-- **Updated**: Existing agents with modified configuration
-- **Deleted**: Agents that were removed from your local configuration
-
-**Warning**: This is a full sync operation. Agents removed locally will be deleted from Base44.
-
-## Error Handling
-
-If no agents are found in your project:
-```bash
-$ npx base44 agents push
-No local agents found - this will delete all remote agents
-```
-
-If an agent has an invalid name:
-```bash
-$ npx base44 agents push
-Error: Agent name must be lowercase alphanumeric with underscores
-```
-
-## Agent Configuration Schema
-
-Each agent file should be a `.jsonc` file in `base44/agents/` with this structure:
-
-```jsonc
-{
- "name": "agent_name", // Required: lowercase alphanumeric with underscores, 1-100 chars
- "description": "Brief description of what this agent does", // Required: min 1 char
- "instructions": "Detailed instructions for the agent's behavior", // Required: min 1 char
- "tool_configs": [ // Optional: defaults to []
- // Entity tool - gives agent access to entity operations
- { "entity_name": "Task", "allowed_operations": ["read", "create", "update", "delete"] },
- // Backend function tool - gives agent access to a function
- { "function_name": "send_email", "description": "Send an email notification" }
- ],
- "whatsapp_greeting": "Hello! How can I help you today?" // Optional
-}
-```
-
-**Naming rules:**
-- **Agent names** must match pattern: `/^[a-z0-9_]+$/` (lowercase alphanumeric with underscores only, 1-100 characters)
- - Valid: `support_agent`, `order_bot`, `task_helper`
- - Invalid: `Support-Agent`, `OrderBot`, `task helper`
-- **Agent file names** must use underscores (matching the agent name)
- - Valid: `support_agent.jsonc`, `order_bot.jsonc`
- - Invalid: `support-agent.jsonc` (hyphens not allowed)
-- **Entity names in `tool_configs`** must use PascalCase (matching the entity's `name` field)
- - Valid: `"entity_name": "Task"`, `"entity_name": "TeamMember"`
- - Invalid: `"entity_name": "task"`, `"entity_name": "team_member"`
-
-**Required fields:**
-- `name`: Required, must follow naming rules above
-- `description`: Required, minimum 1 character
-- `instructions`: Required, minimum 1 character
-- `tool_configs`: Optional, defaults to empty array
-- `whatsapp_greeting`: Optional
-
-### Common Mistake: Wrong tool_configs Format
-
-**WRONG** - Do NOT use `tools` with `type` and `entity`:
-```jsonc
-{
- "name": "my_agent",
- "tools": [ // ❌ WRONG
- { "type": "entity_query", "entity": "Task" }
- ]
-}
-```
-
-**CORRECT** - Use `tool_configs` with `entity_name` and `allowed_operations`:
-```jsonc
-{
- "name": "my_agent",
- "tool_configs": [ // ✅ CORRECT
- { "entity_name": "Task", "allowed_operations": ["read"] }
- ]
-}
-```
-
-### Best Practices for Agent Instructions
-
-When giving agents access to entities, be explicit in the instructions about using the tools:
-
-```jsonc
-{
- "name": "support_agent",
- "instructions": "You are a helpful support agent.\n\nIMPORTANT: You have access to customer data through entity tools. When users ask about their orders or account:\n1. ALWAYS use the Order entity tool to query their order history\n2. Use the Customer entity tool to look up account details\n3. Analyze the data and provide personalized responses\n\nAlways query the relevant entities first before answering questions about user data.",
- "tool_configs": [
- { "entity_name": "Order", "allowed_operations": ["read"] },
- { "entity_name": "Customer", "allowed_operations": ["read"] }
- ]
-}
-```
-
-Without explicit instructions to use the entity tools, the agent may not proactively query user data when asked.
-
-## Use Cases
-
-- After defining new agents in your project
-- When modifying existing agent configurations
-- To sync agent changes before testing
-- As part of your development workflow when agent behavior changes
-
-## Notes
-
-- This command syncs the agent configuration, not conversation data
-- Changes are applied to your Base44 project immediately
-- Make sure to test agent changes in a development environment first
-- Agent definitions are located in the `base44/agents/` directory
-- Use `base44 agents pull` to download agents from Base44
diff --git a/plugins/base44/skills/base44-cli/references/auth-login.md b/plugins/base44/skills/base44-cli/references/auth-login.md
deleted file mode 100644
index adebd275c..000000000
--- a/plugins/base44/skills/base44-cli/references/auth-login.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# base44 login
-
-Authenticate with Base44 using device code flow.
-
-## Syntax
-
-```bash
-npx base44 login
-```
-
-## Authentication
-
-**Required**: No (this is the login command itself)
-
-## How It Works
-
-The login command uses OAuth 2.0 device code flow for authentication:
-
-1. Generates a device code for authentication
-2. Displays a verification code and verification URI
-3. Directs you to visit the URI and enter the code
-4. Polls for authentication completion (up to device code expiration)
-5. Retrieves access and refresh tokens upon successful authentication
-6. Fetches and displays your user information
-7. Saves authentication data locally with expiration timestamp
-
-## Interactive Flow
-
-```bash
-$ npx base44 login
-
-Please visit: https://auth.base44.com/device
-Enter code: ABCD-EFGH
-
-Waiting for authentication...
-✓ Successfully authenticated!
-
-Logged in as: user@example.com
-```
-
-## Session Management
-
-- Authentication tokens are stored locally on your device
-- Tokens include expiration timestamps
-- The session persists across CLI sessions
-- Other commands will automatically use your stored credentials
-- Use `npx base44 logout` to clear your session
-- Use `npx base44 whoami` to check your current authentication status
-
-## Notes
-
-- You only need to login once per device
-- If your session expires, you'll be prompted to login again when running authenticated commands
-- The CLI automatically prompts for login when you run commands that require authentication
diff --git a/plugins/base44/skills/base44-cli/references/auth-logout.md b/plugins/base44/skills/base44-cli/references/auth-logout.md
deleted file mode 100644
index 33c2ddf47..000000000
--- a/plugins/base44/skills/base44-cli/references/auth-logout.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# base44 logout
-
-Logout from current device and clear stored authentication data.
-
-## Syntax
-
-```bash
-npx base44 logout
-```
-
-## Authentication
-
-**Required**: No
-
-## What It Does
-
-- Deletes stored authentication data from your device
-- Clears your local session
-- Removes access and refresh tokens
-
-## Output
-
-```bash
-$ npx base44 logout
-Logged out successfully
-```
-
-## Notes
-
-- You can logout even if you're not currently logged in (no error)
-- After logout, you'll need to run `npx base44 login` again to use authenticated commands
-- This only affects the current device; your Base44 account remains active
diff --git a/plugins/base44/skills/base44-cli/references/auth-password-login.md b/plugins/base44/skills/base44-cli/references/auth-password-login.md
deleted file mode 100644
index 66131f5e4..000000000
--- a/plugins/base44/skills/base44-cli/references/auth-password-login.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# base44 auth password-login
-
-Enable or disable username & password authentication for your Base44 app.
-
-## Syntax
-
-```bash
-npx base44 auth password-login
-```
-
-## Arguments
-
-| Argument | Description | Required |
-|----------|-------------|----------|
-| `` | Enable or disable password authentication | Yes |
-
-## Examples
-
-```bash
-# Enable username & password authentication
-npx base44 auth password-login enable
-
-# Disable username & password authentication
-npx base44 auth password-login disable
-```
-
-## Notes
-
-- Updates the local auth config file only — run `npx base44 auth push` or `npx base44 deploy` to apply the change to Base44.
-- Disabling password auth when no other login methods are enabled will warn you that users will be locked out.
diff --git a/plugins/base44/skills/base44-cli/references/auth-pull.md b/plugins/base44/skills/base44-cli/references/auth-pull.md
deleted file mode 100644
index cf3ba4230..000000000
--- a/plugins/base44/skills/base44-cli/references/auth-pull.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# base44 auth pull
-
-Pull the auth configuration from Base44 to local files.
-
-## Syntax
-
-```bash
-npx base44 auth pull
-```
-
-## Examples
-
-```bash
-npx base44 auth pull
-```
-
-## Notes
-
-- Overwrites the local auth config file with the remote configuration.
-- The auth config file is written to `base44/auth/` (the `authDir` configured in `config.jsonc`).
diff --git a/plugins/base44/skills/base44-cli/references/auth-push.md b/plugins/base44/skills/base44-cli/references/auth-push.md
deleted file mode 100644
index b539e3ecd..000000000
--- a/plugins/base44/skills/base44-cli/references/auth-push.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# base44 auth push
-
-Push the local auth configuration to Base44.
-
-## Syntax
-
-```bash
-npx base44 auth push [options]
-```
-
-## Options
-
-| Option | Description | Required |
-|--------|-------------|----------|
-| `-y, --yes` | Skip confirmation prompt | No |
-
-## Examples
-
-```bash
-# Push auth config (interactive confirmation)
-npx base44 auth push
-
-# Push auth config without confirmation (for CI/CD)
-npx base44 auth push -y
-```
-
-## Notes
-
-- Requires a local auth config file to exist. Run `npx base44 auth pull` first if you haven't set up a local auth config.
-- If the local config has no login methods enabled, the CLI will warn that pushing will lock out all users.
-- In non-interactive mode (CI/CD), `--yes` is required.
diff --git a/plugins/base44/skills/base44-cli/references/auth-whoami.md b/plugins/base44/skills/base44-cli/references/auth-whoami.md
deleted file mode 100644
index abe450cd1..000000000
--- a/plugins/base44/skills/base44-cli/references/auth-whoami.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# base44 whoami
-
-Display the currently authenticated user.
-
-## Syntax
-
-```bash
-npx base44 whoami
-```
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-- Reads stored authentication data
-- Displays the email of the currently logged-in user
-
-## Output
-
-```bash
-$ npx base44 whoami
-Logged in as: user@example.com
-```
-
-## Use Cases
-
-- Verify you're logged in before running other commands
-- Check which account you're currently using
-- Confirm authentication is working properly
-- Useful in scripts or automation to verify credentials
-
-## Notes
-
-- If you're not logged in, the command will prompt you to authenticate first
-- The email displayed matches your Base44 account email
diff --git a/plugins/base44/skills/base44-cli/references/automations.md b/plugins/base44/skills/base44-cli/references/automations.md
deleted file mode 100644
index 7028aa24b..000000000
--- a/plugins/base44/skills/base44-cli/references/automations.md
+++ /dev/null
@@ -1,343 +0,0 @@
-# Function Automations
-
-Automations are triggers attached to backend functions. They cause a function to run automatically on a schedule (CRON, simple interval, or one-time) or when entity data changes (create, update, delete). Automations are defined in the `automations` array inside each function's `function.jsonc` and are deployed together with the function via `npx base44 functions deploy`.
-
-## Overview
-
-- **Where**: `base44/functions//function.jsonc` — optional `automations` array
-- **Deploy**: Automations are deployed with the function; no separate command
-- **Types**: Scheduled (one-time, CRON, simple interval) and entity hooks
-
-## Common Fields (All Automation Types)
-
-Every automation shares these base fields:
-
-| Property | Type | Required | Description |
-|----------|------|----------|-------------|
-| `name` | string | Yes | Display name for the automation (min 1 char) |
-| `description` | string \| null | No | Optional description |
-| `function_args` | object \| null | No | Key-value args passed to the function when it runs |
-| `is_active` | boolean | No | Whether the automation is active (default: `true`) |
-
-## Automation Types
-
-### 1. Scheduled One-Time
-
-Runs the function once at a specific date/time.
-
-| Property | Type | Required | Description |
-|----------|------|----------|-------------|
-| `type` | `"scheduled"` | Yes | Must be `"scheduled"` |
-| `schedule_mode` | `"one-time"` | Yes | One-time execution |
-| `one_time_date` | string | Yes | ISO date/time when the function should run (e.g. `"2024-01-15T10:00:00"`) |
-
-**Example:**
-
-```jsonc
-{
- "name": "my-function",
- "entry": "index.ts",
- "automations": [
- {
- "name": "Launch reminder",
- "type": "scheduled",
- "schedule_mode": "one-time",
- "one_time_date": "2026-03-01T09:00:00.000Z",
- "description": "One-time reminder on launch day"
- }
- ]
-}
-```
-
-### 2. Scheduled CRON (Recurring)
-
-Runs the function on a cron schedule. **Minimum interval is 5 minutes.**
-
-| Property | Type | Required | Description |
-|----------|------|----------|-------------|
-| `type` | `"scheduled"` | Yes | Must be `"scheduled"` |
-| `schedule_mode` | `"recurring"` | Yes | Recurring execution |
-| `schedule_type` | `"cron"` | Yes | Use cron expression |
-| `cron_expression` | string | Yes | Standard cron: `minute hour day-of-month month day-of-week` |
-| `ends_type` | `"never"` \| `"on"` \| `"after"` | No | When the schedule stops (default: `"never"`) |
-| `ends_on_date` | string \| null | No | When `ends_type` is `"on"`, ISO date to stop |
-| `ends_after_count` | number \| null | No | When `ends_type` is `"after"`, number of runs then stop |
-
-**End conditions** (apply to both CRON and simple recurring):
-- `ends_type="never"` — Run indefinitely (default)
-- `ends_type="on"` — Run until a date: set `ends_on_date` (e.g. `"2024-12-31T23:59:59"`)
-- `ends_type="after"` — Run N times: set `ends_after_count` (e.g. `10`)
-
-**Cron format:** `minute hour day-of-month month day-of-week`
-
-**Examples:**
-- `"*/5 * * * *"` — every 5 minutes (minimum interval)
-- `"0 9 * * *"` — 9am daily
-- `"0 9 * * 1-5"` — 9am every weekday (Mon–Fri)
-
-**Example:**
-
-```jsonc
-{
- "name": "daily-report",
- "entry": "index.ts",
- "automations": [
- {
- "name": "Daily Report",
- "type": "scheduled",
- "schedule_mode": "recurring",
- "schedule_type": "cron",
- "cron_expression": "0 9 * * *",
- "description": "Run every day at 9:00 UTC",
- "is_active": true
- }
- ]
-}
-```
-
-### 3. Scheduled Simple (Recurring Interval)
-
-Runs the function on a simple repeat (every N minutes/hours/days/weeks/months). **Minimum interval for minutes is 5** (e.g. every 5 minutes).
-
-| Property | Type | Required | Description |
-|----------|------|----------|-------------|
-| `type` | `"scheduled"` | Yes | Must be `"scheduled"` |
-| `schedule_mode` | `"recurring"` | Yes | Recurring execution |
-| `schedule_type` | `"simple"` | Yes | Use simple interval |
-| `repeat_unit` | `"minutes"` \| `"hours"` \| `"days"` \| `"weeks"` \| `"months"` | Yes | Unit of repetition |
-| `repeat_interval` | number | No | Positive integer; interval within the unit (default 1). For minutes, minimum is 5. |
-| `start_time` | string \| null | No | Time of day (e.g. `"09:00"`, `"00:00"`) |
-| `repeat_on_days` | number[] \| null | No | For weeks: 0–6 (0 = Sunday, 6 = Saturday) |
-| `repeat_on_day_of_month` | number \| null | No | For months: 1–31 |
-| `ends_type` | `"never"` \| `"on"` \| `"after"` | No | When the schedule stops (default: `"never"`) |
-| `ends_on_date` | string \| null | No | When `ends_type` is `"on"`, ISO date to stop |
-| `ends_after_count` | number \| null | No | When `ends_type` is `"after"`, number of runs then stop |
-
-**End conditions:** Same as for CRON — `ends_type` / `ends_on_date` / `ends_after_count` (see Scheduled CRON above).
-
-**Simple schedule examples:**
-- Every 5 minutes: `repeat_interval=5`, `repeat_unit="minutes"` (minimum)
-- Hourly: `repeat_interval=1`, `repeat_unit="hours"`
-- Daily at specific time: `repeat_interval=1`, `repeat_unit="days"`, `start_time="09:00"`
-- Weekly on specific days: `repeat_unit="weeks"`, `repeat_on_days=[1, 5]`, `start_time="10:00"` (e.g. Mon and Fri)
-- Monthly on specific day: `repeat_unit="months"`, `repeat_on_day_of_month=15`, `start_time="00:00"`
-
-**Example:**
-
-```jsonc
-{
- "name": "weekly-cleanup",
- "entry": "index.ts",
- "automations": [
- {
- "name": "Weekly Cleanup",
- "type": "scheduled",
- "schedule_mode": "recurring",
- "schedule_type": "simple",
- "repeat_unit": "weeks",
- "repeat_interval": 1,
- "repeat_on_days": [1],
- "start_time": "02:00",
- "description": "Every Monday at 2:00"
- }
- ]
-}
-```
-
-### 4. Entity Hook
-
-Runs the function when entity records are created, updated, or deleted.
-
-**Required:** `entity_name`, `event_types` (array of `"create"`, `"update"`, `"delete"` — at least one).
-
-| Property | Type | Required | Description |
-|----------|------|----------|-------------|
-| `type` | `"entity"` | Yes | Must be `"entity"` |
-| `entity_name` | string | Yes | Entity name (matches entity schema name, e.g. `Order`, `Task`) |
-| `event_types` | `("create" \| "update" \| "delete")[]` | Yes | At least one; which events trigger the function |
-
-**Example use cases:**
-- Send email on new order: `entity_name="Order"`, `event_types=["create"]`
-- Track status changes: `entity_name="Order"`, `event_types=["update"]`
-- Cleanup on delete: `entity_name="User"`, `event_types=["delete"]`
-- Multiple events: `entity_name="Order"`, `event_types=["create", "update"]`
-
-**Example config:**
-
-```jsonc
-{
- "name": "on-order-created",
- "entry": "index.ts",
- "automations": [
- {
- "name": "On Order Created",
- "type": "entity",
- "entity_name": "Order",
- "event_types": ["create"],
- "description": "Run when a new order is created"
- },
- {
- "name": "On Order Update or Delete",
- "type": "entity",
- "entity_name": "Order",
- "event_types": ["update", "delete"]
- }
- ]
-}
-```
-
-**Note:** `entity_name` must match the entity schema `name` in `base44/entities/` (e.g. entity file `order.jsonc` with `"name": "Order"` → use `"entity_name": "Order"`).
-
-#### Entity hook payload
-
-The function receives a JSON body with:
-
-| Field | Description |
-|-------|-------------|
-| `event` | `{ type, entity_name, entity_id }` — event type, entity name, and record id |
-| `data` | Current entity data. `null` if `payload_too_large` is true |
-| `old_data` | Previous entity data (only for `"update"` events). `null` if `payload_too_large` is true or for create/delete |
-| `payload_too_large` | `true` when entity data exceeded 200KB and was omitted. Use the Base44 SDK to fetch: `await base44.entities..get(entity_id)` (or the dynamic API) to load the record. |
-
-**Authentication / user identity:** When an automation runs (scheduled or entity hook), the request is authenticated as the **user who created the automation**, not as the user who performed the action. So `await base44.auth.me()` returns the automation creator. **There is no way to get the user who triggered the entity change** (e.g. who created, updated, or deleted the record). If you need to attribute actions, store a user reference on the entity (e.g. `created_by`, `updated_by`) and read it from `data` / `old_data` in the payload.
-
-## Full Examples
-
-### Daily CRON report
-
-**base44/functions/daily-report/function.jsonc:**
-
-```jsonc
-{
- "name": "daily-report",
- "entry": "index.ts",
- "automations": [
- {
- "name": "Daily Report",
- "type": "scheduled",
- "schedule_mode": "recurring",
- "schedule_type": "cron",
- "cron_expression": "0 9 * * *",
- "is_active": true
- }
- ]
-}
-```
-
-**base44/functions/daily-report/index.ts:**
-
-```typescript
-import { createClientFromRequest } from "npm:@base44/sdk";
-
-Deno.serve(async (req) => {
- const base44 = createClientFromRequest(req);
- // Scheduled runs get auth context; use asServiceRole if you need full access
- const base44Admin = base44.asServiceRole;
-
- const orders = await base44Admin.entities.Orders.list({ limit: 100 });
- const summary = { total: orders.length, date: new Date().toISOString() };
-
- // e.g. send to Slack, email, or store in another entity
- return Response.json({ success: true, summary });
-});
-```
-
-### Entity hook: on order created
-
-**base44/functions/on-order-created/function.jsonc:**
-
-```jsonc
-{
- "name": "on-order-created",
- "entry": "index.ts",
- "automations": [
- {
- "name": "On Order Created",
- "type": "entity",
- "entity_name": "Order",
- "event_types": ["create"],
- "is_active": true
- }
- ]
-}
-```
-
-**base44/functions/on-order-created/index.ts:**
-
-```typescript
-import { createClientFromRequest } from "npm:@base44/sdk";
-
-Deno.serve(async (req) => {
- const base44 = createClientFromRequest(req);
- const payload = await req.json();
- const { event, data, old_data, payload_too_large } = payload;
-
- // event: { type, entity_name, entity_id }
- const entityId = event.entity_id;
- const eventType = event.type;
-
- // If payload was too large, data/old_data are null — fetch via SDK
- let current = data;
- if (payload_too_large && eventType !== "delete") {
- current = await base44.asServiceRole.entities.Orders.get(entityId);
- }
-
- // e.g. send confirmation email on create, or compare old_data vs data on update
- return Response.json({ success: true, orderId: entityId, eventType });
-});
-```
-
-### Weekly cleanup (simple schedule)
-
-**base44/functions/weekly-cleanup/function.jsonc:**
-
-```jsonc
-{
- "name": "weekly-cleanup",
- "entry": "index.ts",
- "automations": [
- {
- "name": "Weekly Cleanup",
- "type": "scheduled",
- "schedule_mode": "recurring",
- "schedule_type": "simple",
- "repeat_unit": "weeks",
- "repeat_interval": 1,
- "repeat_on_days": [1],
- "start_time": "02:00",
- "description": "Every Monday at 2:00"
- }
- ]
-}
-```
-
-## Common Patterns
-
-| Pattern | Use | Automation type |
-|--------|-----|------------------|
-| Daily report / digest | Email or Slack at 9am | CRON with `cron_expression`: `0 9 * * *` |
-| On new record | Notify, sync, or validate when entity is created | Entity hook with `event_types`: `["create"]` |
-| On update/delete | Audit, cache invalidation, or cleanup | Entity hook with `event_types`: `["update"]` or `["delete"]` |
-| Weekly job | Cleanup or aggregation every Monday | Simple with `repeat_unit`: `"weeks"`, `repeat_on_days`: `[1]` |
-| One-time run | Launch task or migration at a fixed time | One-time with `one_time_date` |
-
-## Deploying
-
-Automations are deployed with their function. There is no separate automation deploy command.
-
-```bash
-npx base44 functions deploy
-```
-
-This deploys all functions in `base44/functions/` and their `automations` arrays. For more on deployment, see [functions-deploy.md](functions-deploy.md).
-
-## Common Mistakes
-
-| Wrong | Correct | Why |
-|-------|---------|-----|
-| `entity_name: "order"` when schema name is `Order` | `entity_name: "Order"` | Entity name must match schema `name` exactly |
-| `event_types: []` or missing | `event_types: ["create"]` (at least one) | At least one event type is required for entity hooks |
-| Assuming `base44.auth.me()` is the user who triggered the entity change | Use `data` / `old_data` (e.g. `created_by`, `updated_by`) if you need who did the action | In automations, `auth.me()` is the user who **created the automation**. The triggering user is not available. |
-| `schedule_type: "cron"` without `cron_expression` | Always set `cron_expression` for cron | Cron schedules require a valid cron expression |
-| Putting automations in a separate file | Put `automations` inside `function.jsonc` | Automations are part of the function config |
-| Expecting a separate `base44 automations deploy` | Use `npx base44 functions deploy` | Automations deploy with the function |
diff --git a/plugins/base44/skills/base44-cli/references/connectors-create.md b/plugins/base44/skills/base44-cli/references/connectors-create.md
deleted file mode 100644
index 64a55a2db..000000000
--- a/plugins/base44/skills/base44-cli/references/connectors-create.md
+++ /dev/null
@@ -1,126 +0,0 @@
-# Creating Connectors
-
-Connectors are OAuth integrations that let your Base44 app connect to external services like Google Calendar, Slack, Notion, and more. Once connected, you can use access tokens in backend functions to call external APIs directly.
-
-## Key Concepts
-
-- **Direct API Access**: Connectors provide raw OAuth access tokens - you call the external APIs directly from backend functions
-- **App Builder's Account**: Connects your account (the app builder), not your end users' accounts
-- **Backend Functions Only**: Tokens are only accessible server-side for security
-
-## File Location
-
-Create connector files in the `base44/connectors/` directory (or the directory specified by `connectorsDir` in your config.jsonc).
-
-**File naming:** `{type}.jsonc` or `{type}.json`
-
-Examples:
-- `base44/connectors/googlecalendar.jsonc`
-- `base44/connectors/slack.jsonc`
-- `base44/connectors/notion.json`
-
-## Schema
-
-Each connector file must specify a `type` and optionally a list of `scopes`:
-
-```jsonc
-{
- "type": "googlecalendar",
- "scopes": [
- "https://www.googleapis.com/auth/calendar.readonly",
- "https://www.googleapis.com/auth/calendar.events"
- ]
-}
-```
-
-### Fields
-
-| Field | Type | Required | Description |
-|-------|------|----------|-------------|
-| `type` | string | Yes | The integration type (run `npx base44 connectors list-available` to see options) |
-| `scopes` | string[] | No | OAuth scopes to request (defaults to `[]`) |
-
-## Discovering Available Connector Types
-
-Run the following command to get the up-to-date list of supported connector types. Note: `stripe` is also a valid type but is not returned by this command — treat it as supported (see Stripe example below).
-
-```bash
-npx base44 connectors list-available
-```
-
-This returns a JSON object with all available integrations, their display names, descriptions, and any required connection config fields. Example output (trimmed):
-
-```json
-{
- "integrations": [
- {
- "integration_type": "googlecalendar",
- "display_name": "Google Calendar",
- "description": "Access and manage Google Calendar events",
- "connection_config_fields": []
- },
- {
- "integration_type": "slack",
- "display_name": "Slack User",
- "description": "Send messages and interact with Slack as yourself (user integration)",
- "connection_config_fields": []
- },
- {
- "integration_type": "share_point",
- "display_name": "SharePoint",
- "description": "Manage documents, lists, sites, and collaboration content in SharePoint",
- "connection_config_fields": [
- {
- "name": "subdomain",
- "display_name": "SharePoint Site",
- "description": "The name of your SharePoint site (e.g., sites/mysite)",
- "placeholder": "sites/mysite",
- "required": true,
- "validation_pattern": "^[a-zA-Z0-9/_-]+$",
- "validation_error": "Please enter a valid SharePoint site path"
- }
- ]
- }
- ]
-}
-```
-
-Use the `integration_type` value from this output as the `type` field in your connector file. Some connectors require additional `connection_config_fields` — check the output for details.
-
-### Stripe (Sandbox)
-
-```jsonc
-// base44/connectors/stripe.jsonc
-{
- "type": "stripe",
- "scopes": []
-}
-```
-
-Note: Stripe does not require an OAuth browser flow. When you push this connector, Base44 automatically provisions a Stripe sandbox account on the server side. You may receive a claim URL in the push output to link the sandbox to your Stripe account.
-
-## Rules and Constraints
-
-1. **One connector per type**: You cannot have multiple connectors of the same type (e.g., two `googlecalendar` connectors)
-
-2. **Type must be valid**: The `type` field must be a valid integration type (run `npx base44 connectors list-available` to see available types)
-
-3. **Scopes are provider-specific**: Each service has its own scope format - refer to the provider's documentation
-
-## Next Steps
-
-After creating connector files, push them to Base44:
-
-```bash
-npx base44 connectors push
-```
-
-This will prompt you to authorize each new OAuth connector in your browser. Stripe is the exception — it is provisioned automatically without a browser flow. See [connectors-push.md](connectors-push.md) for details.
-
-To pull existing connectors from Base44 to local files:
-
-```bash
-npx base44 connectors pull
-```
-
-See [connectors-pull.md](connectors-pull.md) for details.
diff --git a/plugins/base44/skills/base44-cli/references/connectors-list-available.md b/plugins/base44/skills/base44-cli/references/connectors-list-available.md
deleted file mode 100644
index 9e89acaa2..000000000
--- a/plugins/base44/skills/base44-cli/references/connectors-list-available.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# base44 connectors list-available
-
-List all integration types available in the Base44 connector catalog.
-
-## Syntax
-
-```bash
-npx base44 connectors list-available
-```
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-Fetches the catalog of available integration types from Base44 and displays each one with its display name, description, and any required configuration fields.
-
-## Output
-
-```bash
-$ npx base44 connectors list-available
-
-✓ Available integrations fetched successfully
-
-Google Calendar
- integrationType: googlecalendar
- description: Access Google Calendar events and schedules
- connectionConfigFields: []
-
-Slack
- integrationType: slack
- description: Send messages and interact with Slack workspaces
- connectionConfigFields: []
-
-Stripe
- integrationType: stripe
- description: Process payments and manage Stripe accounts
- connectionConfigFields: []
-
-Found 14 available integrations.
-```
-
-Each integration is displayed in YAML format showing the integration type, description, and any connection configuration fields required for setup.
-
-## Use Cases
-
-- Discover all supported connector types before creating connector files
-- Check if a specific integration is available in your Base44 plan
-- See what configuration fields (if any) a connector requires
-
-## Related Commands
-
-- [connectors-create.md](connectors-create.md) - How to create connector configuration files
-- [connectors-push.md](connectors-push.md) - Push local connectors to Base44
-- [connectors-pull.md](connectors-pull.md) - Pull connectors from Base44 to local files
diff --git a/plugins/base44/skills/base44-cli/references/connectors-pull.md b/plugins/base44/skills/base44-cli/references/connectors-pull.md
deleted file mode 100644
index 97502a545..000000000
--- a/plugins/base44/skills/base44-cli/references/connectors-pull.md
+++ /dev/null
@@ -1,78 +0,0 @@
-# base44 connectors pull
-
-Pull connector configurations from Base44 to local files. Replaces all local connector configs with the remote versions.
-
-## Syntax
-
-```bash
-npx base44 connectors pull
-```
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-1. Fetches all connectors from Base44
-2. Writes connector files to the `base44/connectors/` directory
-3. Deletes local connector files that don't exist remotely
-4. Reports written and deleted connectors
-
-## Prerequisites
-
-- Must be run from a Base44 project directory
-- Project must be linked to a Base44 app
-
-## Output
-
-```bash
-$ npx base44 connectors pull
-
-Fetching connectors from Base44...
-✓ Connectors fetched successfully
-
-Syncing connector files...
-✓ Connector files synced successfully
-
-Written: googlecalendar, slack
-Deleted: notion
-
-Pulled 2 connectors to base44/connectors
-```
-
-## Connector Synchronization
-
-The pull operation synchronizes remote connectors to your local files:
-
-- **Written**: Connector files created or updated from remote
-- **Deleted**: Local connector files removed (didn't exist remotely)
-- **Up to date**: If no changes needed, reports "All connectors are already up to date"
-
-**Warning**: This operation replaces all local connector configurations with remote versions. Any local changes not pushed to Base44 will be overwritten.
-
-## Error Handling
-
-If no connectors exist on Base44:
-```bash
-$ npx base44 connectors pull
-All connectors are already up to date
-```
-
-## Use Cases
-
-- Sync connector configurations to a new development machine
-- Get the latest connector configurations from your team
-- Restore local connector files after accidental deletion
-- Start working on an existing project with connectors
-
-## Notes
-
-- Connector files are stored as `.jsonc` in the `base44/connectors/` directory
-- The directory location is configurable via `connectorsDir` in `config.jsonc`
-- Use `base44 connectors push` to upload local changes to Base44
-
-## Related Commands
-
-- [connectors-create.md](connectors-create.md) - How to create connector configuration files
-- [connectors-push.md](connectors-push.md) - Push local connectors to Base44
diff --git a/plugins/base44/skills/base44-cli/references/connectors-push.md b/plugins/base44/skills/base44-cli/references/connectors-push.md
deleted file mode 100644
index b509512ff..000000000
--- a/plugins/base44/skills/base44-cli/references/connectors-push.md
+++ /dev/null
@@ -1,137 +0,0 @@
-# base44 connectors push
-
-Push local connector configurations to Base44, synchronizing scopes and handling OAuth authorization.
-
-## Usage
-
-```bash
-npx base44 connectors push
-```
-
-## What It Does
-
-1. **Reads local connectors** from your `base44/connectors/` directory
-2. **Syncs with Base44** - updates scopes for existing connectors
-3. **Adds new connectors** - new OAuth connector types trigger authorization; Stripe is provisioned automatically
-4. **Removes unlisted connectors** - connectors not in your local files are removed from Base44
-
-## OAuth Authorization Flow
-
-When you add a new connector, it needs to be authorized:
-
-1. The CLI detects which connectors need authorization
-2. You're prompted: "Open browser to authorize now?"
-3. If you accept, the browser opens to the OAuth provider (Google, Slack, etc.)
-4. You log into your account and approve the requested permissions
-5. The browser closes and the CLI confirms authorization
-
-**Important**: You choose which account to connect by logging into it during the OAuth flow. For example, if you have multiple Google accounts, you select which one to use in the Google login screen.
-
-## Example Output
-
-### Pushing connectors (no new authorization needed)
-
-```
-Found 2 connectors to push: googlecalendar, slack
-✓ Connectors pushed
-
-Summary:
- Synced: googlecalendar, slack
-```
-
-### Pushing new connectors (authorization required)
-
-```
-Found 3 connectors to push: googlecalendar, slack, notion
-✓ Connectors pushed
-
-2 connector(s) require authorization in your browser:
- slack: https://auth.base44.io/oauth/...
- notion: https://auth.base44.io/oauth/...
-
-? Open browser to authorize now? › Yes
-
-Opening browser for slack...
-✓ slack authorization complete
-
-Opening browser for notion...
-✓ notion authorization complete
-
-Summary:
- Synced: googlecalendar
- Added: slack, notion
-```
-
-### Pushing Stripe (no OAuth required)
-
-Stripe is provisioned automatically — no browser flow is needed:
-
-```
-Found 2 connectors to push: googlecalendar, stripe
-✓ Connectors pushed
-
-Summary:
- ✓ Stripe sandbox provisioned
- Claim your Stripe sandbox: https://dashboard.stripe.com/...
- Connectors dashboard: https://app.base44.com/...
- Synced: googlecalendar
-```
-
-### Removing connectors
-
-If you delete a connector file locally and push, it will be removed:
-
-```
-Found 1 connectors to push: googlecalendar
-✓ Connectors pushed
-
-Summary:
- Synced: googlecalendar
- Removed: slack
-```
-
-## CI/CD Environments
-
-In non-interactive environments (no TTY, such as CI/CD pipelines), the OAuth flow is skipped automatically:
-
-```
-Skipped OAuth in non-interactive mode. Run 'base44 connectors push' locally or open the links above to authorize.
-```
-
-You must run `npx base44 connectors push` locally to complete authorization for new connectors.
-
-## Skipping Authorization
-
-If you choose not to authorize immediately, the connectors remain in a pending state:
-
-```
-? Open browser to authorize now? › No
-
-Authorization skipped. Pending: slack, notion. Run 'base44 connectors push' again to complete.
-```
-
-Run the command again when you're ready to authorize.
-
-## Summary Status Meanings
-
-| Status | Meaning |
-|--------|---------|
-| Provisioned | Stripe sandbox was created automatically (no OAuth needed) |
-| Synced | Connector already existed, scopes updated if needed |
-| Added | New connector successfully authorized via OAuth |
-| Removed | Connector was deleted from Base44 (not in local files) |
-| Failed | Authorization timed out, failed, or was skipped |
-
-## Troubleshooting
-
-| Problem | Solution |
-|---------|----------|
-| Authorization timed out | Re-run `npx base44 connectors push` and complete OAuth faster |
-| Authorization failed | Check that you approved all requested permissions |
-| Wrong account connected | Remove the connector file, push to delete it, then add it back and authorize with the correct account |
-| Browser didn't open | Copy the URL shown in the terminal and open it manually |
-
-## Related Commands
-
-- [connectors-create.md](connectors-create.md) - How to create connector configuration files
-- [connectors-pull.md](connectors-pull.md) - Pull connectors from Base44 to local files
diff --git a/plugins/base44/skills/base44-cli/references/create.md b/plugins/base44/skills/base44-cli/references/create.md
deleted file mode 100644
index 75806453b..000000000
--- a/plugins/base44/skills/base44-cli/references/create.md
+++ /dev/null
@@ -1,111 +0,0 @@
-# base44 create
-
-Creates a new Base44 project from a template. This command is framework-agnostic and can either scaffold a complete project or add Base44 configuration to an existing project.
-
-## Critical: Non-Interactive Mode Required
-
-ALWAYS provide both the project name AND `--path` flag. Without both, the command opens an interactive TUI which agents cannot use properly.
-
-WRONG: `npx base44 create`
-WRONG: `npx base44 create my-app`
-RIGHT: `npx base44 create my-app -p ./my-app`
-
-## Syntax
-
-```bash
-npx base44 create [name] --path [options]
-```
-
-## Arguments & Options
-
-| Argument/Option | Description | Required |
-|--------|-------------|----------|
-| `name` | Project name (positional argument) | Yes* |
-| `-p, --path ` | Path where to create the project | Yes* |
-| `-t, --template ` | Template ID (see templates below) | No |
-| `--deploy` | Build and deploy the site (includes pushing entities) | No |
-| `--no-skills` | Skip AI agent skills installation (skills are added by default) | No |
-
-*Required for non-interactive mode. Both `name` and `--path` must be provided together.
-
-## Template Selection (CRITICAL - Choose Appropriately)
-
-**You MUST select the most appropriate template based on user requirements:**
-
-| Template ID | When to Use | Example Scenarios |
-|-------------|-------------|-------------------|
-| `backend-and-client` | Creating a NEW full-stack web app from scratch | "Create a task app", "Build me a dashboard", "Make a SaaS app" |
-| `backend-only` | Adding Base44 to an EXISTING project OR using a different framework (Next.js, Vue, Svelte, etc.) | "Add Base44 to my project", "I want to use Next.js", "I already have a frontend" |
-
-**Default Choice:** When the user asks to "create an app" or "build a project" without specifying a particular framework, use `backend-and-client` to provide a complete, production-ready application with Vite + React + Tailwind.
-
-## The `--path` Flag
-
-- **For `backend-and-client` template (new projects):** Use a new subfolder path
- ```bash
- npx base44 create my-app -p ./my-app -t backend-and-client
- ```
-- **For `backend-only` template (existing projects):** Use `-p .` in the current directory
- ```bash
- npx base44 create my-app -p .
- ```
-
-## Workflow: Using `backend-only` with External Frameworks
-
-**CRITICAL: The project folder MUST exist BEFORE running `base44 create` with `backend-only`**
-
-The `backend-only` template only adds Base44 configuration files - it does NOT create a frontend. If you need a frontend with a specific framework:
-
-```bash
-# Step 1: Initialize the frontend project FIRST
-npm create vite@latest my-app -- --template react # or vue, svelte, etc.
-# OR: npx create-next-app@latest my-app
-# OR: any other framework's init command
-
-# Step 2: Navigate into the created folder
-cd my-app
-
-# Step 3: Install Base44 CLI
-npm install --save-dev base44
-
-# Step 4: Add Base44 configuration
-npx base44 create my-app -p .
-```
-
-**WARNING:** Do NOT:
-- Create an empty folder manually, then try to run `npx create vite` inside it (will fail - folder exists)
-- Run `base44 create` with `backend-only` expecting it to create a frontend (it won't)
-
-**DO:**
-- Run the external framework's init command FIRST (it creates its own folder)
-- Then run `base44 create` inside that folder with `-p .`
-
-## Examples
-
-```bash
-# RECOMMENDED: Create full-stack project (for new apps)
-npx base44 create my-app -p ./my-app -t backend-and-client
-
-# Create full-stack and deploy in one step
-npx base44 create my-app -p ./my-app -t backend-and-client --deploy
-
-# Add Base44 to EXISTING project (must be inside the project folder)
-npx base44 create my-app -p .
-
-# Add Base44 to existing project and deploy
-npx base44 create my-app -p . --deploy
-
-# Create without adding AI agent skills
-npx base44 create my-app -p . --no-skills
-```
-
-## What It Does
-
-1. Applies the selected template to the target path
-2. Creates a `base44/` folder with configuration files
-3. Registers the project with Base44 backend
-4. Creates `base44/.app.jsonc` with the app ID
-5. If `--deploy` is used:
- - Pushes any entities defined in `base44/entities/`
- - Runs install and build commands (for templates with frontend)
- - Deploys the site to Base44 hosting
diff --git a/plugins/base44/skills/base44-cli/references/dashboard.md b/plugins/base44/skills/base44-cli/references/dashboard.md
deleted file mode 100644
index 834023399..000000000
--- a/plugins/base44/skills/base44-cli/references/dashboard.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# base44 dashboard open
-
-Opens the Base44 app dashboard in your default web browser.
-
-## Syntax
-
-```bash
-npx base44 dashboard open
-```
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-1. Reads the project's app ID from `base44/.app.jsonc`
-2. Opens the dashboard URL in your default browser
-3. Displays the dashboard URL in the terminal
-
-## Example
-
-```bash
-# Open dashboard for current project
-npx base44 dashboard open
-```
-
-## Output
-
-```bash
-$ npx base44 dashboard open
-
-Dashboard opened at https://base44.cloud/apps/your-app-id
-```
-
-## Requirements
-
-- Must be run from a linked Base44 project directory (contains `base44/.app.jsonc`)
-- Must be authenticated (run `npx base44 login` first)
-
-## Notes
-
-- The dashboard provides a web interface to manage your app's entities, functions, agents, users, and settings
-- If you're not in a project directory, the command will fail with an error
-- The command will not open a browser in CI environments (when `process.env.CI` is set)
diff --git a/plugins/base44/skills/base44-cli/references/deploy.md b/plugins/base44/skills/base44-cli/references/deploy.md
deleted file mode 100644
index ee66230d3..000000000
--- a/plugins/base44/skills/base44-cli/references/deploy.md
+++ /dev/null
@@ -1,101 +0,0 @@
-# base44 deploy
-
-Deploys all project resources (entities, functions, agents, connectors, and site) to Base44 in a single command.
-
-## Syntax
-
-```bash
-npx base44 deploy [options]
-```
-
-## Options
-
-| Option | Description |
-|--------|-------------|
-| `-y, --yes` | Skip confirmation prompt |
-
-## What It Deploys
-
-The command automatically detects and deploys:
-
-1. **Entities** - All `.jsonc` files in `base44/entities/`
-2. **Functions** - All functions in `base44/functions/`
-3. **Agents** - All agent configurations in `base44/agents/`
-4. **Connectors** - All connector configurations in `base44/connectors/`
-5. **Auth Config** - Authentication settings from `base44/auth/` (if present)
-6. **Site** - Built files from `site.outputDirectory` (if configured)
-
-## Examples
-
-```bash
-# Interactive mode - shows what will be deployed and asks for confirmation
-npx base44 deploy
-
-# Non-interactive - skip confirmation (for CI/CD or agent use)
-npx base44 deploy -y
-```
-
-## Typical Workflow
-
-```bash
-# 1. Make your changes (entities, functions, frontend code)
-
-# 2. Build the frontend (if you have one)
-npm run build
-
-# 3. Deploy everything
-npx base44 deploy -y
-```
-
-## What It Does
-
-1. Reads project configuration from `base44/config.jsonc`
-2. Detects available resources (entities, functions, agents, connectors, site)
-3. Shows a summary of what will be deployed
-4. Asks for confirmation (unless `-y` flag is used)
-5. Deploys all resources in sequence:
- - Pushes entity schemas
- - Deploys functions
- - Pushes agent configurations
- - Pushes connector configurations
- - Pushes auth configuration
- - Uploads site files
-6. Handles OAuth authorization for any new connectors that require it
-7. Displays the dashboard URL and app URL (if site was deployed)
-
-## Connector OAuth Flow
-
-If any connectors require authorization after deployment, the CLI will prompt you to open your browser to complete OAuth. In non-interactive environments (CI/CD, no TTY), OAuth prompts are skipped automatically.
-
-```
-Some connectors still require authorization. Run 'base44 connectors push' or open the links above in your browser.
-```
-
-## Requirements
-
-- Must be run from a linked Base44 project directory
-- Must be authenticated (run `npx base44 login` first)
-- For site deployment, must run `npm run build` first
-
-## Output
-
-After successful deployment:
-- **Dashboard**: Link to your app's management dashboard
-- **App URL**: Your deployed site's public URL (if site was included)
-
-## Notes
-
-- If no resources are found, the command exits with a message
-- Use individual commands (`entities push`, `functions deploy`, `connectors push`, `site deploy`) if you only want to deploy specific resources
-- The site must be built before deployment - this command does not run `npm run build` for you
-
-## Related Commands
-
-| Command | Description |
-|---------|-------------|
-| `base44 entities push` | Push only entities |
-| `base44 functions deploy` | Deploy only functions |
-| `base44 agents push` | Push only agents |
-| `base44 connectors push` | Push only connectors |
-| `base44 auth push` | Push only auth config |
-| `base44 site deploy` | Deploy only the site |
diff --git a/plugins/base44/skills/base44-cli/references/eject.md b/plugins/base44/skills/base44-cli/references/eject.md
deleted file mode 100644
index 99735706f..000000000
--- a/plugins/base44/skills/base44-cli/references/eject.md
+++ /dev/null
@@ -1,85 +0,0 @@
-# base44 eject
-
-Download the code for an existing Base44 project to your local machine.
-
-## Syntax
-
-```bash
-npx base44 eject [options]
-```
-
-## Options
-
-| Option | Description | Required |
-|--------|-------------|----------|
-| `-p, --path ` | Path where to write the project | No |
-| `--project-id ` | Project ID to eject (skips interactive selection) | No |
-| `-y, --yes` | Skip confirmation prompts | No |
-
-## What It Does
-
-The `eject` command allows you to download the source code of a Base44 project that was created or managed through the platform:
-
-1. Lists all ejectable projects (projects with managed source code)
-2. Lets you select a project interactively (or specify via `--project-id`)
-3. Downloads the project code to a local directory
-4. Creates a new project as a copy (named "{Original Name} Copy")
-5. Links the downloaded code to the new project
-6. Creates `.env.local` with the new project ID
-7. Optionally installs dependencies, builds, and deploys the project
-
-## Examples
-
-```bash
-# Interactive mode - select project from list and specify path
-npx base44 eject
-
-# Specify the output path
-npx base44 eject -p ./my-project
-
-# Non-interactive - specify project ID and skip confirmations
-npx base44 eject --project-id abc123 -p ./my-project -y
-```
-
-## Workflow
-
-When you run `eject`:
-
-1. **Project Selection**: Choose from available ejectable projects
-2. **Path Selection**: Specify where to create the project (defaults to `./{project-name}` or `./` if current directory is empty)
-3. **Download**: The project code is downloaded to the specified path
-4. **New Project Creation**: A copy of the project is created in Base44 (e.g., "My App Copy")
-5. **Linking**: The local code is linked to the new project
-6. **Optional Deployment**: If the project has build commands configured, you'll be asked if you want to deploy
- - Runs the install command (e.g., `npm install`)
- - Runs the build command (e.g., `npm run build`)
- - Deploys all resources with `base44 deploy`
-
-## Requirements
-
-- Must be authenticated (run `npx base44 login` first)
-- The project must be ejectable (have managed source code)
-
-## Use Cases
-
-- Download a project created through the Base44 dashboard
-- Clone a managed project for local development
-- Create a copy of an existing project to customize
-
-## Notes
-
-- The command creates a **new project** as a copy, preserving the original
-- The new project will be named "{Original Name} Copy"
-- The downloaded code is automatically linked to the new project
-- If the current directory is empty, the default path is `./`
-- If the current directory has files, the default path is `./{kebab-case-project-name}`
-- Only projects with `isManagedSourceCode !== false` can be ejected
-- If no ejectable projects exist, the command exits with "No projects available to eject."
-
-## Related Commands
-
-| Command | Description |
-|---------|-------------|
-| `base44 create` | Create a new Base44 project from a template |
-| `base44 link` | Link an existing directory to a Base44 project |
-| `base44 deploy` | Deploy all project resources |
diff --git a/plugins/base44/skills/base44-cli/references/entities-create.md b/plugins/base44/skills/base44-cli/references/entities-create.md
deleted file mode 100644
index 2ad894dbe..000000000
--- a/plugins/base44/skills/base44-cli/references/entities-create.md
+++ /dev/null
@@ -1,555 +0,0 @@
-# Creating Entities
-
-Base44 entities are defined locally in your project and then pushed to the Base44 backend.
-
-## Critical: File Naming
-
-Entity files MUST use kebab-case naming: `{kebab-case-name}.jsonc`
-
-| Entity Name | File Name |
-|-------------|-----------|
-| `Task` | `task.jsonc` |
-| `TeamMember` | `team-member.jsonc` |
-| `ActivityLog` | `activity-log.jsonc` |
-
-WRONG: `TeamMember.jsonc`, `teamMember.jsonc`
-RIGHT: `team-member.jsonc`
-
-## Table of Contents
-
-- [Creating Entities](#creating-entities)
- - [Entity Directory](#entity-directory)
- - [How to Create an Entity](#how-to-create-an-entity)
- - [Entity Schema Structure](#entity-schema-structure)
- - [Supported Field Types](#supported-field-types)
- - [Field Properties](#field-properties)
- - [Complete Example](#complete-example)
- - [Naming Conventions](#naming-conventions)
- - [Relationships Between Entities](#relationships-between-entities)
- - [Row Level Security (RLS)](#row-level-security-rls)
- - [Field Level Security (FLS)](#field-level-security-fls)
- - [Pushing Entities](#pushing-entities)
-
-## Entity Directory
-
-All entity definitions must be placed in the `base44/entities/` folder in your project root. Each entity is defined in its own `.jsonc` file.
-
-Example structure:
-```
-my-app/
- base44/
- entities/
- user.jsonc
- product.jsonc
- order.jsonc
-```
-
-## How to Create an Entity
-
-1. Create a new `.jsonc` file in the `base44/entities/` directory
-2. Define your entity schema following the structure below
-3. Push the changes to Base44 using the CLI
-
-## Entity Schema Structure
-
-Each entity file follows a JSON Schema-like structure:
-
-```jsonc
-{
- "name": "EntityName", // PascalCase entity name
- "type": "object", // Always "object"
- "properties": {
- // Define your fields here
- },
- "required": ["field1"] // Array of required field names
-}
-```
-
-### Common Mistake: Nested Schema Property
-
-**WRONG** - Do NOT wrap properties in a `schema` object:
-```jsonc
-{
- "name": "Task",
- "description": "A task entity",
- "schema": { // ❌ WRONG - don't use nested "schema"
- "type": "object",
- "properties": { ... }
- }
-}
-```
-
-**CORRECT** - Put `type` and `properties` at the top level:
-```jsonc
-{
- "name": "Task",
- "description": "A task entity",
- "type": "object", // ✅ CORRECT - top level
- "properties": { ... } // ✅ CORRECT - top level
-}
-```
-
-This is a common mistake that will cause "Invalid schema: Schema must have a 'type' field" errors when pushing entities.
-
-## Supported Field Types
-
-### String
-
-Basic text field:
-```jsonc
-{
- "title": {
- "type": "string",
- "description": "Task title"
- }
-}
-```
-
-With format:
-```jsonc
-{
- "due_date": {
- "type": "string",
- "format": "date",
- "description": "Due date"
- }
-}
-```
-
-Available formats: `date`, `date-time`, `time`, `email`, `uri`, `hostname`, `ipv4`, `ipv6`, `uuid`, `file`, `regex`, `richtext`
-
-### String with Enum
-
-Constrained to specific values:
-```jsonc
-{
- "status": {
- "type": "string",
- "enum": ["todo", "in_progress", "done"],
- "default": "todo",
- "description": "Current status"
- }
-}
-```
-
-### Number
-
-```jsonc
-{
- "position": {
- "type": "number",
- "description": "Position for ordering"
- }
-}
-```
-
-### Integer
-
-For whole numbers only:
-```jsonc
-{
- "quantity": {
- "type": "integer",
- "description": "Item quantity",
- "minimum": 0,
- "maximum": 1000
- }
-}
-```
-
-### Binary
-
-For file/blob data:
-```jsonc
-{
- "attachment": {
- "type": "binary",
- "description": "File attachment"
- }
-}
-```
-
-### Boolean
-
-```jsonc
-{
- "notify_on_change": {
- "type": "boolean",
- "default": true,
- "description": "Enable notifications"
- }
-}
-```
-
-### Array of Strings
-
-```jsonc
-{
- "labels": {
- "type": "array",
- "items": { "type": "string" },
- "description": "Task labels/tags"
- }
-}
-```
-
-### Array of Objects
-
-```jsonc
-{
- "attachments": {
- "type": "array",
- "description": "File attachments",
- "items": {
- "type": "object",
- "properties": {
- "name": { "type": "string" },
- "url": { "type": "string" },
- "type": { "type": "string" }
- }
- }
- }
-}
-```
-
-## Field Properties
-
-| Property | Description |
-| ------------- | ---------------------------------------------------------------------------------------- |
-| `type` | Data type: `string`, `number`, `integer`, `boolean`, `array`, `object`, `binary` |
-| `description` | Human-readable description of the field |
-| `enum` | Array of allowed values (for strings) |
-| `enumNames` | Human-readable labels for enum values (same order as `enum`) |
-| `default` | Default value when not provided |
-| `format` | Format hint: `date`, `date-time`, `time`, `email`, `uri`, `hostname`, `ipv4`, `ipv6`, `uuid`, `file`, `regex`, `richtext` |
-| `items` | Schema for array items |
-| `properties` | Nested properties for object types |
-| `$ref` | Reference to another schema definition |
-| `minLength` | Minimum string length |
-| `maxLength` | Maximum string length |
-| `pattern` | Regex pattern for string validation |
-| `minimum` | Minimum value for numbers |
-| `maximum` | Maximum value for numbers |
-| `rls` | Field-level security rules (see Field Level Security section) |
-
-## Complete Example
-
-Here's a complete entity definition for a Task:
-
-```jsonc
-{
- "name": "Task",
- "type": "object",
- "properties": {
- "title": {
- "type": "string",
- "description": "Task title"
- },
- "description": {
- "type": "string",
- "description": "Task description"
- },
- "status": {
- "type": "string",
- "enum": ["todo", "in_progress", "done"],
- "default": "todo",
- "description": "Current status of the task"
- },
- "board_id": {
- "type": "string",
- "description": "Board this task belongs to"
- },
- "assignee_email": {
- "type": "string",
- "description": "Email of assigned user"
- },
- "priority": {
- "type": "string",
- "enum": ["low", "medium", "high"],
- "default": "medium",
- "description": "Task priority"
- },
- "due_date": {
- "type": "string",
- "format": "date",
- "description": "Due date"
- },
- "labels": {
- "type": "array",
- "items": { "type": "string" },
- "description": "Task labels/tags"
- }
- },
- "required": ["title"]
-}
-```
-
-## Naming Conventions
-
-- **Entity name**: Use PascalCase with alphanumeric characters only (e.g., `Task`, `TeamMember`, `ActivityLog`)
- - Must match pattern: `/^[a-zA-Z0-9]+$/`
- - Valid: `Task`, `TeamMember`, `Order123`
- - Invalid: `Team_Member`, `Team-Member`, `Team Member`
-- **File name**: Use kebab-case matching the entity (e.g., `task.jsonc`, `team-member.jsonc`, `activity-log.jsonc`)
-- **Field names**: Use snake_case (e.g., `board_id`, `user_email`, `due_date`)
-
-## Relationships Between Entities
-
-To create relationships between entities, use ID reference fields:
-
-```jsonc
-{
- "board_id": {
- "type": "string",
- "description": "Board this task belongs to"
- },
- "team_id": {
- "type": "string",
- "description": "Associated team ID"
- }
-}
-```
-
-## Row Level Security (RLS)
-
-Row Level Security (RLS) controls which records users can access based on their identity and attributes. RLS rules are defined per entity inside the `rls` field of the schema.
-
-**Important:** If no RLS is defined, all records are accessible to all users.
-
-### RLS Operations
-
-RLS supports five operations:
-
-| Operation | Description |
-|-----------|-------------|
-| `create` | Control who can add new records |
-| `read` | Control who can view records |
-| `update` | Control who can modify records |
-| `delete` | Control who can remove records |
-| `write` | Shorthand for `create`, `update`, and `delete` combined |
-
-### Permission Values
-
-Each operation accepts one of the following values:
-
-1. **`true`** - Allow all users (including anonymous/unauthenticated)
-2. **`false`** - Block all users
-3. **Condition object** - Allow users matching the condition
-
-### Template Variables
-
-Use template variables to reference the current user's attributes:
-
-| Template | Description |
-|----------|-------------|
-| `{{user.id}}` | The user's ID |
-| `{{user.email}}` | The user's email |
-| `{{user.role}}` | The user's role |
-| `{{user.data.field_name}}` | Custom field from the user's `data` object |
-
-### Built-in Entity Attributes
-
-Every entity record has these built-in attributes available for RLS rules:
-
-| Attribute | Description |
-|-----------|-------------|
-| `id` | Unique record identifier |
-| `created_date` | Timestamp when record was created |
-| `updated_date` | Timestamp when record was last updated |
-| `created_by` | Email of the user who created the record |
-
-### Rule Types
-
-There are two condition types you can use:
-
-**1. Entity-to-user comparison** - Compare record fields to the current user's values:
-```jsonc
-{
- "created_by": "{{user.email}}"
-}
-```
-
-**2. User condition check** - Check user properties directly using `user_condition`:
-```jsonc
-{
- "user_condition": { "role": "admin" }
-}
-```
-
-**Important notes:**
-- `user_condition` only supports **simple equality** (e.g., `{ "role": "admin" }`)
-- **Entity field filtering requires `data.` prefix:** Use `{ "data.fieldname": value }` to filter by entity field values
-- For `data.*` field comparisons, you can use operators: `$in`, `$nin`, `$ne`, `$all`
-- Logical operators `$or`, `$and`, `$nor` are available for combining conditions
-
-⚠️ **For advanced RLS patterns and examples, see [rls-examples.md](rls-examples.md)**
-
-### RLS Examples
-
-**Owner-only access:**
-```jsonc
-{
- "created_by": "{{user.email}}"
-}
-```
-
-**Department-based access:**
-```jsonc
-{
- "data.department": "{{user.data.department}}"
-}
-```
-
-**Admin-only access:**
-```jsonc
-{
- "user_condition": { "role": "admin" }
-}
-```
-
-**Complete RLS configuration:**
-```jsonc
-{
- "name": "Task",
- "type": "object",
- "properties": {
- "title": {
- "type": "string",
- "description": "Task title"
- },
- "status": {
- "type": "string",
- "enum": ["todo", "in_progress", "done"],
- "default": "todo"
- }
- },
- "required": ["title"],
- "rls": {
- "create": true,
- "read": { "created_by": "{{user.email}}" },
- "update": { "created_by": "{{user.email}}" },
- "delete": { "created_by": "{{user.email}}" }
- }
-}
-```
-
-### Common RLS Patterns
-
-**Public create, admin-only management (e.g., contact forms, waitlists):**
-```jsonc
-{
- "rls": {
- "create": true,
- "read": { "user_condition": { "role": "admin" } },
- "update": { "user_condition": { "role": "admin" } },
- "delete": { "user_condition": { "role": "admin" } }
- }
-}
-```
-
-**Owner-only access:**
-```jsonc
-{
- "rls": {
- "create": true,
- "read": { "created_by": "{{user.email}}" },
- "update": { "created_by": "{{user.email}}" },
- "delete": { "created_by": "{{user.email}}" }
- }
-}
-```
-
-**Logged-in users only:**
-```jsonc
-{
- "rls": {
- "create": { "user_condition": { "id": "{{user.id}}" } },
- "read": true,
- "update": { "created_by": "{{user.email}}" },
- "delete": { "created_by": "{{user.email}}" }
- }
-}
-```
-
-### Limitations
-
-- **user_condition is equality only:** `user_condition` only supports exact match (e.g., `{ "role": "admin" }`) - no operators
-- **No comparison operators on user_condition:** `$gt`, `$lt`, `$regex`, `$expr`, `$where` are NOT supported for user conditions
-- **No deeply nested templates:** Templates like `{{user.data.profile.department}}` may not work
-
-**Supported operators:**
-- **Logical operators:** `$or`, `$and`, `$nor` for combining multiple conditions
-- **Field operators (for `data.*` fields only):** `$in`, `$nin`, `$ne`, `$all`
-- **Entity field filtering:** Use `data.` prefix to filter by entity field values (e.g., `{ "data.status": "published" }` or `{ "data.completed": true }`)
-
-⚠️ **See [rls-examples.md](rls-examples.md) for comprehensive RLS patterns and examples**
-
-### Complex Access Patterns
-
-For complex access patterns that require multiple conditions (e.g., "owner OR admin"), you have two options:
-
-1. **Use the Base44 Dashboard UI** - The dashboard allows adding multiple rules per operation with OR logic
-2. **Use separate entities** - Split data into multiple entities with different access rules
-3. **Use backend functions** - Implement custom access logic in backend functions
-
-## Field Level Security (FLS)
-
-Field Level Security allows you to control access to individual fields within an entity. FLS rules are defined within each field's schema using the `rls` property.
-
-### FLS Operations
-
-FLS supports the same operations as entity-level RLS:
-
-| Operation | Description |
-|-----------|-------------|
-| `create` | Control who can set this field when creating records |
-| `read` | Control who can view this field |
-| `update` | Control who can modify this field |
-| `delete` | Control who can clear this field |
-| `write` | Shorthand for `create`, `update`, and `delete` combined |
-
-### FLS Example
-
-```jsonc
-{
- "name": "Employee",
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "description": "Employee name"
- },
- "salary": {
- "type": "number",
- "description": "Employee salary",
- "rls": {
- "read": { "user_condition": { "role": "hr" } },
- "update": { "user_condition": { "role": "hr" } }
- }
- },
- "department": {
- "type": "string",
- "description": "Department name"
- }
- },
- "required": ["name"]
-}
-```
-
-In this example, only users with the `hr` role can read or update the `salary` field. All users with access to the entity can read/update other fields.
-
-### FLS Notes
-
-- If no field-level RLS is defined, the field inherits the entity-level RLS rules
-- FLS rules follow the same condition format as entity-level RLS
-- Use FLS for sensitive fields like salary, SSN, or internal notes
-
-## Pushing Entities
-
-The `entities push` command will push all entities that exist in the `base44/entities` folder.
-
-```bash
-npx base44 entities push
-```
-
-For more details on the push command, see [entities-push.md](entities-push.md).
diff --git a/plugins/base44/skills/base44-cli/references/entities-push.md b/plugins/base44/skills/base44-cli/references/entities-push.md
deleted file mode 100644
index 63b92d7b1..000000000
--- a/plugins/base44/skills/base44-cli/references/entities-push.md
+++ /dev/null
@@ -1,71 +0,0 @@
-# base44 entities push
-
-Push local entity definitions to Base44.
-
-## Syntax
-
-```bash
-npx base44 entities push
-```
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-1. Pushes all entities that exist in the `base44/entities` folder
-2. Validates that entities exist in the folder
-3. Displays the count of entities to be pushed
-4. Uploads entities to the Base44 backend
-5. Reports the results: created, updated, and deleted entities
-
-## Prerequisites
-
-- Must be run from a Base44 project directory
-- Project must have entity definitions in the `base44/entities` folder
-
-## Output
-
-```bash
-$ npx base44 entities push
-
-Found 3 entities to push
-Pushing entities to Base44...
-
-Created: User, Post
-Updated: Comment
-Deleted: OldEntity
-
-✓ Entities pushed successfully
-```
-
-## Entity Synchronization
-
-The push operation synchronizes your local entity schema with Base44:
-
-- **Created**: New entities that didn't exist in Base44
-- **Updated**: Existing entities with modified schema or configuration
-- **Deleted**: Entities that were removed from your local configuration
-
-## Error Handling
-
-If no entities are found in your project:
-```bash
-$ npx base44 entities push
-No entities found in project
-```
-
-## Use Cases
-
-- After defining new entities in your project
-- When modifying existing entity schemas
-- To sync entity changes before deploying
-- As part of your development workflow when data models change
-
-## Notes
-
-- This command syncs the entity schema/structure, not the actual data
-- Changes are applied to your Base44 project immediately
-- Make sure to test entity changes in a development environment first
-- Entity definitions are located in the `base44/entities/` directory
diff --git a/plugins/base44/skills/base44-cli/references/exec.md b/plugins/base44/skills/base44-cli/references/exec.md
deleted file mode 100644
index 68b477f0a..000000000
--- a/plugins/base44/skills/base44-cli/references/exec.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# base44 exec
-
-Run a script with the Base44 SDK pre-authenticated as the current user. Reads the script from stdin.
-
-## Syntax
-
-```bash
-cat ./script.ts | npx base44 exec
-echo "" | npx base44 exec
-```
-
-## How It Works
-
-The `exec` command reads a script from stdin and runs it server-side with the Base44 SDK pre-authenticated as the currently logged-in user. This allows you to run one-off scripts against your app's data without writing a full function.
-
-## Available Globals
-
-> **`base44`** — a preinitialized SDK client, available as a global variable in every exec script. You do not need to import or configure it — it is ready to use immediately.
-
-Use it to interact with your app's resources:
-
-- `base44.entities.` — CRUD operations on entities (`.list()`, `.get(id)`, `.create(data)`, `.update(id, data)`, `.delete(id)`)
-- `base44.functions.invoke(name, data?)` — call a backend function
-- `base44.agents.` — invoke AI agents
-- For more available resources and methods, see the [Base44 SDK reference](../../base44-sdk/SKILL.md)
-
-## Examples
-
-```bash
-# Run a script file
-cat ./script.ts | npx base44 exec
-
-# Inline script
-echo "const users = await base44.entities.User.list(); console.log(users)" | npx base44 exec
-```
-
-## Requirements
-
-- Must be authenticated (`npx base44 login`)
-- Must be run from a linked Base44 project directory
-- Script must be piped via stdin (non-interactive mode)
-
-## Notes
-
-- The script runs with the Base44 SDK pre-authenticated — you can use `base44.entities`, `base44.functions`, etc. directly
-- Exit code from the script is forwarded as the CLI process exit code
-- This command requires stdin to be piped (it does not accept input in interactive TTY mode)
diff --git a/plugins/base44/skills/base44-cli/references/functions-create.md b/plugins/base44/skills/base44-cli/references/functions-create.md
deleted file mode 100644
index 8efeb4555..000000000
--- a/plugins/base44/skills/base44-cli/references/functions-create.md
+++ /dev/null
@@ -1,244 +0,0 @@
-# Creating Functions
-
-Base44 functions are serverless backend functions that run on Deno. They are defined locally in your project and deployed to the Base44 backend.
-
-## Function Directory
-
-All function definitions must be placed in the `base44/functions/` folder in your project. Each function lives in its own subdirectory with a configuration file and entry point.
-
-Example structure:
-```
-my-app/
- base44/
- functions/
- process-order/
- function.jsonc
- index.ts
- send-notification/
- function.jsonc
- index.ts
-```
-
-## How to Create a Function
-
-1. Create a new directory in `base44/functions/` with your function name (use kebab-case)
-2. Create a `function.jsonc` configuration file in the directory
-3. Create the entry point file (e.g., `index.ts`)
-4. Deploy the function using the CLI
-
-## Function Configuration
-
-Each function requires a `function.jsonc` configuration file:
-
-```jsonc
-{
- "name": "my-function",
- "entry": "index.ts",
- // Optionally add automations
- "automations": [
- {
- "name": "Daily run",
- "type": "scheduled",
- "schedule_mode": "recurring",
- "schedule_type": "cron",
- "cron_expression": "0 9 * * *"
- }
- ]
-}
-```
-
-### Configuration Properties
-
-| Property | Description | Required |
-|----------|-------------|----------|
-| `name` | Function name (must match `/^[^.]+$/` - no dots allowed) | Yes |
-| `entry` | Entry point file path relative to the function directory (min 1 char) | Yes |
-| `automations` | Array of triggers (CRON, simple schedule, one-time, entity hooks); deployed with the function | No |
-
-## Automations
-
-Functions can define automations (triggers) so they run on a schedule or when entity data changes. Add an optional `automations` array to `function.jsonc`. Supported types: **scheduled** (one-time, CRON, or simple interval) and **entity hooks** (on entity create/update/delete). Automations are deployed with the function via `npx base44 functions deploy`. For full schemas and examples, see [automations.md](automations.md).
-
-## Entry Point File
-
-Functions run on Deno and must export using `Deno.serve()`. Use `npm:` prefix for npm packages.
-
-```typescript
-import { createClientFromRequest } from "npm:@base44/sdk";
-
-Deno.serve(async (req) => {
- // Get authenticated client from request
- const base44 = createClientFromRequest(req);
-
- // Parse input
- const { orderId, action } = await req.json();
-
- // Your logic here
- const order = await base44.entities.Orders.get(orderId);
-
- // Return response
- return Response.json({
- success: true,
- order: order
- });
-});
-```
-
-### Request Object
-
-The function receives a standard Deno `Request` object:
-- `req.json()` - Parse JSON body
-- `req.text()` - Get raw text body
-- `req.headers` - Access request headers
-- `req.method` - HTTP method
-
-### Response Object
-
-Return using `Response.json()` for JSON responses:
-
-```typescript
-// Success response
-return Response.json({ data: result });
-
-// Error response with status code
-return Response.json({ error: "Something went wrong" }, { status: 400 });
-
-// Not found
-return Response.json({ error: "Order not found" }, { status: 404 });
-```
-
-## Complete Example
-
-### Directory Structure
-```
-base44/
- functions/
- process-order/
- function.jsonc
- index.ts
-```
-
-### function.jsonc
-```jsonc
-{
- "name": "process-order",
- "entry": "index.ts"
-}
-```
-
-### index.ts
-```typescript
-import { createClientFromRequest } from "npm:@base44/sdk";
-
-Deno.serve(async (req) => {
- try {
- const base44 = createClientFromRequest(req);
- const { orderId } = await req.json();
-
- // Validate input
- if (!orderId) {
- return Response.json(
- { error: "Order ID is required" },
- { status: 400 }
- );
- }
-
- // Fetch and process the order
- const order = await base44.entities.Orders.get(orderId);
- if (!order) {
- return Response.json(
- { error: "Order not found" },
- { status: 404 }
- );
- }
-
- return Response.json({
- success: true,
- orderId: order.id,
- processedAt: new Date().toISOString()
- });
-
- } catch (error) {
- return Response.json(
- { error: error.message },
- { status: 500 }
- );
- }
-});
-```
-
-## Using Service Role Access
-
-For admin-level operations, use `asServiceRole`:
-
-```typescript
-import { createClientFromRequest } from "npm:@base44/sdk";
-
-Deno.serve(async (req) => {
- const base44 = createClientFromRequest(req);
-
- // Check user is authenticated
- const user = await base44.auth.me();
- if (!user) {
- return Response.json({ error: "Unauthorized" }, { status: 401 });
- }
-
- // Use service role for admin operations
- const allOrders = await base44.asServiceRole.entities.Orders.list();
-
- return Response.json({ orders: allOrders });
-});
-```
-
-## Using Secrets
-
-Access environment variables configured in the app dashboard:
-
-```typescript
-Deno.serve(async (req) => {
- // Access environment variables (configured in app settings)
- const apiKey = Deno.env.get("STRIPE_API_KEY");
-
- const response = await fetch("https://api.stripe.com/v1/charges", {
- headers: {
- "Authorization": `Bearer ${apiKey}`
- }
- });
-
- return Response.json(await response.json());
-});
-```
-
-## Naming Conventions
-
-- **Directory name**: Use kebab-case (e.g., `process-order`, `send-notification`)
-- **Function name**: Match the directory name, must match pattern `/^[^.]+$/` (no dots allowed)
- - Valid: `process-order`, `send_notification`, `myFunction`
- - Invalid: `process.order`, `send.notification.v2`
-- **Entry file**: Typically `index.ts` or `index.js`
-
-## Deploying Functions
-
-After creating your function, deploy it to Base44:
-
-```bash
-npx base44 functions deploy
-```
-
-For more details on deploying, see [functions-deploy.md](functions-deploy.md).
-
-## Notes
-
-- Functions run on Deno runtime, not Node.js
-- Use `npm:` prefix for npm packages (e.g., `npm:@base44/sdk`)
-- Use `createClientFromRequest(req)` to get a client that inherits the caller's auth context
-- Configure secrets via app dashboard for API keys
-- Make sure to handle errors gracefully and return appropriate HTTP status codes
-
-## Common Mistakes
-
-| Wrong | Correct | Why |
-|-------|---------|-----|
-| `functions/myFunction.js` (single file) | `functions/my-function/index.ts` + `function.jsonc` | Functions require subdirectory with config |
-| `import { ... } from "@base44/sdk"` | `import { ... } from "npm:@base44/sdk"` | Deno requires `npm:` prefix for npm packages |
-| `MyFunction` or `myFunction` directory | `my-function` directory | Use kebab-case for directory names |
diff --git a/plugins/base44/skills/base44-cli/references/functions-delete.md b/plugins/base44/skills/base44-cli/references/functions-delete.md
deleted file mode 100644
index f426a055f..000000000
--- a/plugins/base44/skills/base44-cli/references/functions-delete.md
+++ /dev/null
@@ -1,81 +0,0 @@
-# base44 functions delete
-
-Delete one or more deployed functions from Base44.
-
-## Syntax
-
-```bash
-npx base44 functions delete
-```
-
-## Arguments
-
-| Argument | Description | Required |
-|----------|-------------|----------|
-| `` | One or more function names to delete (comma-separated values also accepted) | Yes |
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-1. Takes one or more function names as arguments
-2. Deletes each function from Base44 remotely
-3. Reports success, not-found, or error for each function
-
-## Examples
-
-```bash
-# Delete a single function
-npx base44 functions delete process-order
-
-# Delete multiple functions (space-separated)
-npx base44 functions delete process-order send-notification
-
-# Delete multiple functions (comma-separated)
-npx base44 functions delete process-order,send-notification
-```
-
-## Output
-
-Single function:
-```bash
-$ npx base44 functions delete process-order
-◇ Deleting process-order...
-✓ process-order deleted
-
-└ Function "process-order" deleted
-```
-
-Multiple functions:
-```bash
-$ npx base44 functions delete process-order send-notification
-◇ Deleting process-order...
-✓ process-order deleted
-◇ Deleting send-notification...
-✓ send-notification deleted
-
-└ 2/2 deleted
-```
-
-## Error Handling
-
-If a function is not found on remote:
-```bash
-$ npx base44 functions delete nonexistent
-✓ Function "nonexistent" not found
-```
-
-If no names are provided:
-```bash
-$ npx base44 functions delete
-error: At least one function name is required
-```
-
-## Notes
-
-- This command deletes functions from Base44 (remote only); it does not remove local files
-- To remove a function and clean up remote state, delete the local files then use `npx base44 functions deploy --force`
-- Not-found functions are reported without raising an error (exit 0 for single-function case)
-- Comma-separated names are supported: `delete func1,func2` is equivalent to `delete func1 func2`
diff --git a/plugins/base44/skills/base44-cli/references/functions-deploy.md b/plugins/base44/skills/base44-cli/references/functions-deploy.md
deleted file mode 100644
index 7481dee32..000000000
--- a/plugins/base44/skills/base44-cli/references/functions-deploy.md
+++ /dev/null
@@ -1,116 +0,0 @@
-# base44 functions deploy
-
-Deploy local function definitions to Base44.
-
-## Syntax
-
-```bash
-npx base44 functions deploy [names...] [options]
-```
-
-## Options
-
-| Option | Description | Required |
-|--------|-------------|----------|
-| `[names...]` | One or more function names to deploy (deploys all if omitted) | No |
-| `--force` | Delete remote functions not found locally (cannot be combined with `[names...]`) | No |
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-1. Scans the `base44/functions/` directory for function definitions
-2. Validates that functions exist and have valid configurations
-3. Displays the count of functions to be deployed
-4. Uploads function code and configuration to Base44 sequentially
-5. Reports the results: deployed, unchanged, and failed counts
-6. If `--force` is used: also deletes remote functions that no longer exist locally
-
-## Prerequisites
-
-- Must be run from a Base44 project directory
-- Project must have function definitions in the `base44/functions/` folder
-- Each function subdirectory should contain a `function.jsonc` config and an entry point file, or just an `entry.ts` for zero-config functions
-
-## Examples
-
-```bash
-# Deploy all functions
-npx base44 functions deploy
-
-# Deploy specific functions
-npx base44 functions deploy process-order send-notification
-
-# Deploy all and delete functions removed locally
-npx base44 functions deploy --force
-```
-
-## Output
-
-```bash
-$ npx base44 functions deploy
-
-◆ Found 2 functions to deploy
-◇ [1/2] Deploying process-order...
-✓ process-order deployed
-◇ [2/2] Deploying send-notification...
-✓ send-notification deployed
-
-└ 2 deployed
-```
-
-With `--force`:
-```bash
-$ npx base44 functions deploy --force
-
-◆ Found 2 functions to deploy
-...
-
-◆ Found 1 remote function to delete
-◇ [1/1] Deleting old-function...
-✓ old-function deleted
-
-◆ 1 deleted
-
-└ 2 deployed
-```
-
-## Error Handling
-
-If no functions are found in your project:
-```bash
-$ npx base44 functions deploy
-No functions found. Create functions in the 'functions' directory.
-```
-
-If `--force` is combined with function names:
-```bash
-$ npx base44 functions deploy my-func --force
-error: --force cannot be used when specifying function names
-```
-
-If a specified function name doesn't exist locally:
-```bash
-$ npx base44 functions deploy nonexistent
-error: Function not found in project: nonexistent
-```
-
-## Use Cases
-
-- After creating new functions in your project
-- When modifying existing function code or configuration
-- To sync function changes before testing
-- As part of your development workflow when backend logic changes
-- Use `--force` to clean up remote functions that have been removed locally
-
-## Notes
-
-- This command deploys the function code and configuration
-- Changes are applied to your Base44 project immediately
-- Deploy results per function: `deployed`, `unchanged`, or `error`
-- `--force` cannot be combined with specific function names
-- Make sure to test functions in a development environment first
-- Function definitions are located in the `base44/functions/` directory
-- For how to create functions, see [functions-create.md](functions-create.md)
diff --git a/plugins/base44/skills/base44-cli/references/functions-list.md b/plugins/base44/skills/base44-cli/references/functions-list.md
deleted file mode 100644
index 67d7f6d30..000000000
--- a/plugins/base44/skills/base44-cli/references/functions-list.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# base44 functions list
-
-List all deployed functions on Base44 remote.
-
-## Syntax
-
-```bash
-npx base44 functions list
-```
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-1. Fetches all deployed functions from Base44
-2. Displays each function name and its automation count (if any)
-3. Reports the total count of functions on remote
-
-## Output
-
-```bash
-$ npx base44 functions list
- process-order
- send-notification (2 automations)
- daily-report (1 automation)
-
-✓ 3 functions on remote
-```
-
-If no functions are deployed:
-```bash
-$ npx base44 functions list
-✓ No functions on remote
-```
-
-## Notes
-
-- Lists functions currently deployed on Base44, not local function files
-- Shows automation count next to each function that has automations configured
-- To see local function definitions, look in the `base44/functions/` directory
-- Use `npx base44 functions deploy` to sync local functions to remote
-- Use `npx base44 functions pull` to download remote functions to local files
diff --git a/plugins/base44/skills/base44-cli/references/functions-pull.md b/plugins/base44/skills/base44-cli/references/functions-pull.md
deleted file mode 100644
index 88ad7379b..000000000
--- a/plugins/base44/skills/base44-cli/references/functions-pull.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# base44 functions pull
-
-Pull deployed functions from Base44 to local files.
-
-## Syntax
-
-```bash
-npx base44 functions pull [name]
-```
-
-## Arguments
-
-| Argument | Description | Required |
-|----------|-------------|----------|
-| `[name]` | Function name to pull (pulls all if omitted) | No |
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-1. Fetches deployed functions from Base44
-2. Filters to the specified function if `[name]` is provided
-3. Writes function files to the local `functions/` directory (configured in `base44/config.jsonc`)
-4. Reports each file as `written` (new/updated) or `unchanged`
-
-## Examples
-
-```bash
-# Pull all deployed functions
-npx base44 functions pull
-
-# Pull a specific function
-npx base44 functions pull process-order
-```
-
-## Output
-
-```bash
-$ npx base44 functions pull
-✓ Functions fetched successfully
-✓ Function files written successfully
-✓ process-order written
-◆ send-notification unchanged
-
-✓ Pulled 2 functions to base44/functions
-```
-
-Single function:
-```bash
-$ npx base44 functions pull process-order
-✓ Functions fetched successfully
-✓ Function files written successfully
-✓ process-order written
-
-✓ Pulled 1 function to base44/functions
-```
-
-## Error Handling
-
-If the specified function is not found on remote:
-```bash
-$ npx base44 functions pull nonexistent
-✓ Function "nonexistent" not found on remote
-```
-
-If no functions exist on remote:
-```bash
-$ npx base44 functions pull
-✓ No functions found on remote
-```
-
-## Notes
-
-- Files are written to the `functionsDir` configured in `base44/config.jsonc` (defaults to `functions/`)
-- Files already matching remote content are skipped (reported as `unchanged`)
-- This overwrites existing local function files with remote versions — commit local changes first
-- Use `npx base44 functions deploy` to push local changes back to Base44
-- Use `npx base44 functions list` to see what functions are deployed on remote
diff --git a/plugins/base44/skills/base44-cli/references/link.md b/plugins/base44/skills/base44-cli/references/link.md
deleted file mode 100644
index 0b009ce37..000000000
--- a/plugins/base44/skills/base44-cli/references/link.md
+++ /dev/null
@@ -1,81 +0,0 @@
-# base44 link
-
-Links an existing local Base44 project to a Base44 app in the cloud. Use this when you have a `base44/config.jsonc` but haven't connected it to a Base44 app yet.
-
-## Critical: When to Use Link vs Create
-
-| Scenario | Command |
-|----------|---------|
-| Starting fresh, no `base44/` folder | `npx base44 create` |
-| Have `base44/config.jsonc` but no `.app.jsonc` | `npx base44 link` |
-| Project already linked (has `.app.jsonc`) | Already done, use `deploy` |
-
-## Syntax
-
-```bash
-npx base44 link [options]
-```
-
-## Options
-
-| Option | Description | Required |
-|--------|-------------|----------|
-| `-c, --create` | Create a new project (skip selection prompt) | No |
-| `-n, --name ` | Project name (required when `--create` is used) | With `--create` |
-| `-d, --description ` | Project description | No |
-| `-p, --projectId ` | Project ID to link to an existing project (skip selection prompt) | No |
-
-## Non-Interactive Mode
-
-For CI/CD or agent use:
-
-**Create a new project:**
-```bash
-npx base44 link --create --name my-app
-```
-
-**Link to an existing project:**
-```bash
-npx base44 link --projectId
-```
-
-WRONG: `npx base44 link --create` (missing --name)
-WRONG: `npx base44 link --create --projectId ` (cannot use both)
-RIGHT: `npx base44 link --create --name my-app`
-RIGHT: `npx base44 link --projectId `
-
-## Examples
-
-```bash
-# Interactive mode - prompts for project details
-npx base44 link
-
-# Non-interactive - create and link in one step
-npx base44 link --create --name my-app
-
-# With description
-npx base44 link --create --name my-app --description "My awesome app"
-
-# Link to a specific existing project by ID
-npx base44 link --projectId abc123
-```
-
-## What It Does
-
-1. Finds the `base44/config.jsonc` in the current directory (or parent directories)
-2. Verifies no `.app.jsonc` exists (project not already linked)
-3. Either:
- - Creates a new Base44 app in the cloud (with `--create`), OR
- - Links to an existing project (with `--projectId` or interactive selection)
-4. Writes the app ID to `base44/.app.jsonc`
-
-## Requirements
-
-- Must have `base44/config.jsonc` in the project
-- Must NOT have `base44/.app.jsonc` (use `deploy` if already linked)
-- Must be authenticated (run `npx base44 login` first)
-
-## Notes
-
-- After linking, you can deploy resources with `npx base44 deploy`
-- The `.app.jsonc` file should be git-ignored (contains your app ID)
diff --git a/plugins/base44/skills/base44-cli/references/rls-examples.md b/plugins/base44/skills/base44-cli/references/rls-examples.md
deleted file mode 100644
index 7d3ef42ce..000000000
--- a/plugins/base44/skills/base44-cli/references/rls-examples.md
+++ /dev/null
@@ -1,463 +0,0 @@
-# RLS Examples
-
-Practical Row-Level Security patterns for common application types.
-
-**Important:** Base44 RLS supports:
-- **Logical operators:** `$or`, `$and`, `$nor` for combining conditions
-- **Field operators (for `data.*` fields):** `$in`, `$nin`, `$ne`, `$all`
-- **user_condition:** Equality only (no operators)
-
-## Contents
-- [Simple Patterns (JSON Schema)](#simple-patterns-json-schema)
-- [Using Operators](#using-operators)
-- [Field-Level Security Examples](#field-level-security-examples)
-- [Complex Patterns (Dashboard UI or Backend)](#complex-patterns-dashboard-ui-or-backend)
-- [Best Practices](#best-practices)
-
----
-
-## Simple Patterns (JSON Schema)
-
-These patterns work with the JSON schema RLS format.
-
-### Todo App - Owner-only access
-
-Users see and manage only their own tasks.
-
-```jsonc
-{
- "name": "Task",
- "type": "object",
- "properties": {
- "title": { "type": "string" },
- "description": { "type": "string" },
- "completed": { "type": "boolean" },
- "priority": { "type": "string", "enum": ["low", "medium", "high"] },
- "due_date": { "type": "string", "format": "date" }
- },
- "rls": {
- "create": true,
- "read": { "created_by": "{{user.email}}" },
- "update": { "created_by": "{{user.email}}" },
- "delete": { "created_by": "{{user.email}}" }
- }
-}
-```
-
-### Contact Form - Public create, admin-only read
-
-Anyone can submit, only admins can view submissions.
-
-```jsonc
-{
- "name": "ContactSubmission",
- "type": "object",
- "properties": {
- "name": { "type": "string" },
- "email": { "type": "string", "format": "email" },
- "message": { "type": "string" }
- },
- "rls": {
- "create": true,
- "read": { "user_condition": { "role": "admin" } },
- "update": { "user_condition": { "role": "admin" } },
- "delete": { "user_condition": { "role": "admin" } }
- }
-}
-```
-
-### User Profile - Self-management
-
-Users can only access their own profile.
-
-```jsonc
-{
- "name": "UserProfile",
- "type": "object",
- "properties": {
- "name": { "type": "string" },
- "avatar_url": { "type": "string" },
- "bio": { "type": "string" },
- "preferences": { "type": "object" }
- },
- "rls": {
- "create": true,
- "read": { "created_by": "{{user.email}}" },
- "update": { "created_by": "{{user.email}}" },
- "delete": { "created_by": "{{user.email}}" }
- }
-}
-```
-
-### Department Data - Same department access
-
-Users can only see records from their department.
-
-```jsonc
-{
- "name": "DepartmentAnnouncement",
- "type": "object",
- "properties": {
- "title": { "type": "string" },
- "content": { "type": "string" },
- "department": { "type": "string" }
- },
- "rls": {
- "create": { "user_condition": { "role": "manager" } },
- "read": { "data.department": "{{user.data.department}}" },
- "update": { "user_condition": { "role": "manager" } },
- "delete": { "user_condition": { "role": "admin" } }
- }
-}
-```
-
-### Subscription - Admin-managed, user-readable via email field
-
-```jsonc
-{
- "name": "Subscription",
- "type": "object",
- "properties": {
- "user_email": { "type": "string" },
- "tier": { "type": "string", "enum": ["free", "basic", "pro", "enterprise"] },
- "credits": { "type": "number" },
- "renewal_date": { "type": "string", "format": "date" }
- },
- "rls": {
- "create": { "user_condition": { "role": "admin" } },
- "read": { "data.user_email": "{{user.email}}" },
- "update": { "user_condition": { "role": "admin" } },
- "delete": { "user_condition": { "role": "admin" } }
- }
-}
-```
-
-**Note:** This pattern only allows users to read their own subscription. Admins need to use the Dashboard UI to configure additional read access for themselves.
-
-### Private Data - Owner-only
-
-```jsonc
-{
- "name": "PrivateNotes",
- "type": "object",
- "properties": {
- "title": { "type": "string" },
- "content": { "type": "string" },
- "tags": { "type": "array", "items": { "type": "string" } }
- },
- "rls": {
- "create": true,
- "read": { "created_by": "{{user.email}}" },
- "update": { "created_by": "{{user.email}}" },
- "delete": { "created_by": "{{user.email}}" }
- }
-}
-```
-
-### Public Read, Authenticated Write
-
-Anyone can read, only logged-in users can create/edit their own records.
-
-```jsonc
-{
- "name": "BlogPost",
- "type": "object",
- "properties": {
- "title": { "type": "string" },
- "content": { "type": "string" },
- "author_email": { "type": "string" }
- },
- "rls": {
- "create": true,
- "read": true,
- "update": { "created_by": "{{user.email}}" },
- "delete": { "created_by": "{{user.email}}" }
- }
-}
-```
-
----
-
-## Using Operators
-
-### Logical Operators
-
-Combine multiple conditions using `$or`, `$and`, or `$nor`:
-
-**Owner OR Admin access:**
-```jsonc
-{
- "name": "Document",
- "type": "object",
- "properties": {
- "title": { "type": "string" },
- "content": { "type": "string" }
- },
- "rls": {
- "create": true,
- "read": {
- "$or": [
- { "created_by": "{{user.email}}" },
- { "user_condition": { "role": "admin" } }
- ]
- },
- "update": {
- "$or": [
- { "created_by": "{{user.email}}" },
- { "user_condition": { "role": "admin" } }
- ]
- },
- "delete": { "user_condition": { "role": "admin" } }
- }
-}
-```
-
-**Multiple roles with $or:**
-```jsonc
-{
- "rls": {
- "read": {
- "$or": [
- { "user_condition": { "role": "admin" } },
- { "user_condition": { "role": "manager" } },
- { "user_condition": { "role": "hr" } }
- ]
- }
- }
-}
-```
-
-### Field Operators for data.* Fields
-
-Use `$in`, `$nin`, `$ne`, `$all` for comparing entity data fields:
-
-**Access based on tags ($in):**
-```jsonc
-{
- "rls": {
- "read": {
- "data.category": { "$in": ["public", "shared"] }
- }
- }
-}
-```
-
-**Exclude specific statuses ($nin):**
-```jsonc
-{
- "rls": {
- "read": {
- "data.status": { "$nin": ["archived", "deleted"] }
- }
- }
-}
-```
-
-**Not equal ($ne):**
-```jsonc
-{
- "rls": {
- "read": {
- "data.visibility": { "$ne": "private" }
- }
- }
-}
-```
-
-**All tags must match ($all):**
-```jsonc
-{
- "rls": {
- "read": {
- "data.required_tags": { "$all": ["approved", "reviewed"] }
- }
- }
-}
-```
-
-### Combining Logical and Field Operators
-
-```jsonc
-{
- "rls": {
- "read": {
- "$and": [
- { "data.status": { "$ne": "draft" } },
- {
- "$or": [
- { "created_by": "{{user.email}}" },
- { "data.visibility": "public" }
- ]
- }
- ]
- }
- }
-}
-```
-
----
-
-## Field-Level Security Examples
-
-Control access to specific fields within an entity.
-
-### Sensitive Salary Field
-
-```jsonc
-{
- "name": "Employee",
- "type": "object",
- "properties": {
- "name": { "type": "string" },
- "email": { "type": "string", "format": "email" },
- "salary": {
- "type": "number",
- "description": "Annual salary",
- "rls": {
- "read": { "user_condition": { "role": "hr" } },
- "write": { "user_condition": { "role": "hr" } }
- }
- },
- "performance_notes": {
- "type": "string",
- "description": "Manager notes",
- "rls": {
- "read": {
- "$or": [
- { "user_condition": { "role": "manager" } },
- { "user_condition": { "role": "hr" } }
- ]
- },
- "write": { "user_condition": { "role": "manager" } }
- }
- }
- }
-}
-```
-
-### Admin-Only Internal Fields
-
-```jsonc
-{
- "name": "Order",
- "type": "object",
- "properties": {
- "order_number": { "type": "string" },
- "total": { "type": "number" },
- "internal_notes": {
- "type": "string",
- "description": "Internal processing notes",
- "rls": {
- "read": { "user_condition": { "role": "admin" } },
- "write": { "user_condition": { "role": "admin" } }
- }
- },
- "profit_margin": {
- "type": "number",
- "description": "Profit margin percentage",
- "rls": {
- "read": { "user_condition": { "role": "admin" } },
- "write": false
- }
- }
- }
-}
-```
-
----
-
-## Complex Patterns (Dashboard UI or Backend)
-
-Some patterns may still require the Dashboard UI or backend functions.
-
-### Bidirectional Relationships (e.g., Friendships, Matches)
-
-**Requirement:** Either party in a relationship should have access.
-
-**Now possible with $or:**
-```jsonc
-{
- "rls": {
- "read": {
- "$or": [
- { "data.user_a_email": "{{user.email}}" },
- { "data.user_b_email": "{{user.email}}" }
- ]
- }
- }
-}
-```
-
-**Alternative solutions:**
-1. **Entity redesign:** Store two records per relationship (one for each party)
-2. **Backend function:** Query with custom logic
-
-### Complex Business Logic
-
-**Requirement:** Access depends on multiple entity fields with complex conditions.
-
-**JSON Schema limitation:** While operators help, very complex business logic may still be hard to express.
-
-**Solution options:**
-1. **Backend function:** Implement custom access logic
-2. **Combine simpler rules:** Break complex rules into simpler entity-level and field-level rules
-
----
-
-## Best Practices
-
-### Security Strategy
-
-Use a combination of entity-level RLS and field-level security:
-
-| Data Type | Approach | Example |
-|-----------|----------|---------|
-| User-editable | Entity RLS: Owner-only | UserProfile with `created_by` check |
-| Sensitive fields | Field-level RLS | Salary field with HR role check |
-| Multi-role access | `$or` with user_condition | Admin OR Manager access |
-| Conditional access | Field operators | `$in`, `$ne` on data fields |
-| Public content | Entity RLS: `read: true` | PublicPost |
-| Private content | Entity RLS: Owner-only | PrivateNote |
-
-### When to Use Each Approach
-
-| Requirement | Approach |
-|-------------|----------|
-| Single condition (owner, admin, department) | JSON Schema RLS |
-| Multiple OR/AND conditions | JSON Schema RLS with `$or`/`$and` |
-| Field value checks with `$in`/`$ne`/etc. | JSON Schema RLS for `data.*` fields |
-| Field-level access control | JSON Schema FLS (field-level `rls`) |
-| Complex comparison operators (`$gt`, `$lt`) | Backend functions |
-| Very complex business logic | Backend functions |
-
-### Common Role Patterns
-
-| Role | Typical Access |
-|------|----------------|
-| `admin` | Full access to all records |
-| `moderator` | Read/update access, limited delete |
-| `manager` | Department-scoped access |
-| `user` | Own records only |
-
-### Supported Operators Summary
-
-| Operator | Supported | Notes |
-|----------|-----------|-------|
-| `$or` | Yes | Combine multiple conditions |
-| `$and` | Yes | All conditions must match |
-| `$nor` | Yes | None of the conditions match |
-| `$in` | Yes | For `data.*` fields only |
-| `$nin` | Yes | For `data.*` fields only |
-| `$ne` | Yes | For `data.*` fields only |
-| `$all` | Yes | For `data.*` fields only |
-| `$gt`, `$lt`, `$gte`, `$lte` | No | Use backend functions |
-| `$regex` | No | Use backend functions |
-
-### Limitations Summary
-
-| Not Supported | Alternative |
-|---------------|-------------|
-| Operators on `user_condition` | Use equality only for user checks |
-| Comparison operators (`$gt`, `$lt`) | Backend functions |
-| Regex matching (`$regex`) | Backend functions |
-| Cross-entity relationships | Backend functions |
diff --git a/plugins/base44/skills/base44-cli/references/secrets-delete.md b/plugins/base44/skills/base44-cli/references/secrets-delete.md
deleted file mode 100644
index c0187ab89..000000000
--- a/plugins/base44/skills/base44-cli/references/secrets-delete.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# base44 secrets delete
-
-Delete a secret from the current project.
-
-## Syntax
-
-```bash
-npx base44 secrets delete
-```
-
-## Arguments
-
-| Argument | Description | Required |
-|----------|-------------|----------|
-| `` | Name of the secret to delete | Yes |
-
-## Options
-
-No options.
-
-## Examples
-
-```bash
-npx base44 secrets delete API_KEY
-```
-
-## Notes
-
-- The secret is permanently removed from Base44
-- Requires authentication
diff --git a/plugins/base44/skills/base44-cli/references/secrets-list.md b/plugins/base44/skills/base44-cli/references/secrets-list.md
deleted file mode 100644
index f17fc1bd8..000000000
--- a/plugins/base44/skills/base44-cli/references/secrets-list.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# base44 secrets list
-
-List the names of all secrets configured for the current project.
-
-## Syntax
-
-```bash
-npx base44 secrets list
-```
-
-## Options
-
-No options. The command takes no arguments or flags.
-
-## Examples
-
-```bash
-npx base44 secrets list
-```
-
-## Notes
-
-- Only secret **names** are listed (values are never displayed)
-- Returns "No secrets configured." if there are none
-- Requires authentication
diff --git a/plugins/base44/skills/base44-cli/references/secrets-set.md b/plugins/base44/skills/base44-cli/references/secrets-set.md
deleted file mode 100644
index e39975e36..000000000
--- a/plugins/base44/skills/base44-cli/references/secrets-set.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# base44 secrets set
-
-Set one or more project secrets (environment variables stored in Base44).
-
-## Syntax
-
-```bash
-npx base44 secrets set [entries...] [options]
-```
-
-## Arguments
-
-| Argument | Description | Required |
-|----------|-------------|----------|
-| `entries...` | One or more `KEY=VALUE` pairs (e.g. `KEY1=val1 KEY2=val2`) | Yes (unless `--env-file` is used) |
-
-## Options
-
-| Option | Description | Required |
-|--------|-------------|----------|
-| `--env-file ` | Path to a `.env` file to bulk-import secrets from | No |
-
-## Examples
-
-```bash
-# Set one secret
-npx base44 secrets set API_KEY=my-secret-value
-
-# Set multiple secrets at once
-npx base44 secrets set API_KEY=abc123 DB_PASSWORD=secret
-
-# Import from a .env file
-npx base44 secrets set --env-file .env.production
-```
-
-## Notes
-
-- Provide `KEY=VALUE` pairs **or** `--env-file`, not both
-- Keys must be non-empty; values may be empty strings
-- Overwrites existing secrets with the same name
-- Requires authentication
diff --git a/plugins/base44/skills/base44-cli/references/site-deploy.md b/plugins/base44/skills/base44-cli/references/site-deploy.md
deleted file mode 100644
index 929d30236..000000000
--- a/plugins/base44/skills/base44-cli/references/site-deploy.md
+++ /dev/null
@@ -1,118 +0,0 @@
-# base44 site deploy
-
-Deploy built site files to Base44 hosting.
-
-## Table of Contents
-
-- [Syntax](#syntax)
-- [Authentication](#authentication)
-- [Prerequisites](#prerequisites)
-- [How It Works](#how-it-works)
-- [Interactive Flow](#interactive-flow)
-- [Typical Workflow](#typical-workflow)
-- [Configuration](#configuration)
-- [Error Handling](#error-handling)
-- [Use Cases](#use-cases)
-- [Notes](#notes)
-
-## Syntax
-
-```bash
-npx base44 site deploy [options]
-```
-
-## Options
-
-| Option | Description |
-| ------------ | ------------------------- |
-| `-y, --yes` | Skip confirmation prompt |
-
-Use `-y` flag for non-interactive/automated deployments:
-
-```bash
-npx base44 site deploy -y
-```
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## Prerequisites
-
-- Must be run from a Base44 project directory
-- Project must have `site.outputDirectory` configured in project config
-- Site must be built before deploying (run your build command first)
-- **SPA only**: Base44 hosting supports Single Page Applications with a single `index.html` entry point. All routes are served from `index.html` (client-side routing).
-
-## How It Works
-
-1. Reads project configuration
-2. Validates that site configuration exists
-3. Prompts for deployment confirmation showing the output directory
-4. Creates an archive of site files from the output directory
-5. Deploys to Base44 hosting
-6. Returns the app URL
-
-## Interactive Flow
-
-```bash
-$ npx base44 site deploy
-
-Deploy site from ./dist? (yes/no) yes
-
-Creating archive...
-Uploading to Base44...
-Deploying...
-
-✓ Deployment successful!
-
-Visit your site at: https://my-app.base44.app
-```
-
-## Typical Workflow
-
-```bash
-# 1. Build your site using your framework's build command
-npm run build
-
-# 2. Deploy to Base44
-npx base44 site deploy
-```
-
-## Configuration
-
-The `site.outputDirectory` in your project configuration should point to where your framework outputs built files:
-
-- Vite: typically `./dist`
-- Next.js: typically `./.next` or `./out`
-- Create React App: typically `./build`
-- Custom: whatever your build tool outputs to
-
-## Error Handling
-
-If site configuration is missing:
-```bash
-$ npx base44 site deploy
-Error: No site configuration found in project
-```
-
-If you cancel the deployment:
-```bash
-Deploy site from ./dist? (yes/no) no
-Deployment cancelled
-```
-
-## Use Cases
-
-- Deploy your site after making changes
-- Push new versions of your application
-- Deploy after updating content or functionality
-- Part of your CI/CD pipeline
-
-## Notes
-
-- Always build your site before deploying
-- The command deploys whatever is in your output directory
-- Make sure your build completed successfully before deploying
-- Previous deployments are preserved (versioned) in Base44
-- Deployment is immediate and updates your live site
diff --git a/plugins/base44/skills/base44-cli/references/site-open.md b/plugins/base44/skills/base44-cli/references/site-open.md
deleted file mode 100644
index b3d5641f1..000000000
--- a/plugins/base44/skills/base44-cli/references/site-open.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# base44 site open
-
-Opens the published site in your default web browser.
-
-## Syntax
-
-```bash
-npx base44 site open
-```
-
-## Authentication
-
-**Required**: Yes. If not authenticated, you'll be prompted to login first.
-
-## What It Does
-
-1. Fetches the site URL from Base44
-2. Opens the site in your default browser
-3. Displays the site URL in the terminal
-
-## Example
-
-```bash
-$ npx base44 site open
-
-Site opened at https://my-app.base44.app
-```
-
-## Requirements
-
-- Must be run from a linked Base44 project directory
-- Must be authenticated (run `npx base44 login` first)
-- Site must have been deployed at least once
-
-## Notes
-
-- The command will not open a browser in CI environments (when `process.env.CI` is set)
-- Use this command to quickly view your deployed site
-- The site URL is also displayed after deploying with `base44 site deploy` or `base44 deploy`
diff --git a/plugins/base44/skills/base44-cli/references/types-generate.md b/plugins/base44/skills/base44-cli/references/types-generate.md
deleted file mode 100644
index ba4cd611d..000000000
--- a/plugins/base44/skills/base44-cli/references/types-generate.md
+++ /dev/null
@@ -1,104 +0,0 @@
-# `base44 types generate`
-
-Generate TypeScript declaration file (`types.d.ts`) from project resources (entities, functions, agents, connectors).
-
-## Usage
-
-```bash
-npx base44 types generate
-```
-
-## What It Does
-
-1. **Reads project configuration** — Scans `base44/entities/`, `base44/functions/`, `base44/agents/`, and `base44/connectors/` for all defined resources
-2. **Generates `base44/.types/types.d.ts`** — Creates a TypeScript declaration file that augments the `@base44/sdk` module with typed registries
-3. **Updates `tsconfig.json`** (if present) — Automatically adds `base44/.types/*.d.ts` to the `include` array so TypeScript picks up the generated types
-
-## Authentication
-
-**Not required.** This command runs entirely locally and does not need authentication.
-
-## Output File
-
-The generated file is placed at:
-
-```
-base44/.types/types.d.ts
-```
-
-### Generated Content
-
-The declaration file augments the `@base44/sdk` module with four registries:
-
-- **`EntityTypeRegistry`** — Maps entity names to their TypeScript interfaces (compiled from entity JSON schemas)
-- **`FunctionNameRegistry`** — Lists all backend function names
-- **`AgentNameRegistry`** — Lists all agent names
-- **`ConnectorTypeRegistry`** — Lists all connector types
-
-**Example output:**
-
-```typescript
-// Auto-generated by Base44 CLI - DO NOT EDIT
-// Regenerate with: base44 types generate
-
-export interface Task {
- title: string;
- status: "todo" | "in_progress" | "done";
- assignee?: string;
-}
-
-export interface Board {
- name: string;
- description?: string;
-}
-
-declare module '@base44/sdk' {
- interface EntityTypeRegistry {
- "Task": Task;
- "Board": Board;
- }
-
- interface FunctionNameRegistry {
- "send_email": true;
- }
-
- interface AgentNameRegistry {
- "support_agent": true;
- }
-
- interface ConnectorTypeRegistry {
- "googlecalendar": true;
- }
-}
-```
-
-If no resources are found, the file contains a placeholder with instructions on how to add resources.
-
-## tsconfig.json Integration
-
-If a `tsconfig.json` exists in the project root, the command automatically adds `base44/.types/*.d.ts` to the `include` array:
-
-```json
-{
- "include": [
- "src",
- "base44/.types/*.d.ts"
- ]
-}
-```
-
-If the path is already included, or no `tsconfig.json` exists, this step is silently skipped.
-
-## When to Run
-
-- After creating or modifying entity schemas in `base44/entities/`
-- After adding or removing backend functions in `base44/functions/`
-- After adding or removing agents in `base44/agents/`
-- After adding or removing connectors in `base44/connectors/`
-- When setting up a TypeScript project for the first time with Base44
-
-## Notes
-
-- The generated file should **not** be manually edited — it will be overwritten on the next run
-- Consider adding `base44 types generate` to your build pipeline or as a pre-build script
-- The `.types` directory is created automatically inside the `base44/` folder
diff --git a/plugins/base44/skills/base44-sdk/SKILL.md b/plugins/base44/skills/base44-sdk/SKILL.md
deleted file mode 100644
index c4cfbacdf..000000000
--- a/plugins/base44/skills/base44-sdk/SKILL.md
+++ /dev/null
@@ -1,305 +0,0 @@
----
-name: base44-sdk
-description: "The base44 SDK is the library to communicate with base44 services. In projects, you use it to communicate with remote resources (entities, backend functions, ai agents) and to write backend functions. This skill is the place for learning about available modules and types. When you plan or implement a feature, you must learn this skill"
----
-
-# Base44 Coder
-
-Build apps on the Base44 platform using the Base44 JavaScript SDK.
-
-## ⚡ IMMEDIATE ACTION REQUIRED - Read This First
-
-This skill activates on ANY mention of "base44" or when a `base44/` folder exists. **DO NOT read documentation files or search the web before acting.**
-
-**Your first action MUST be:**
-1. Check if `base44/config.jsonc` exists in the current directory
-2. If **YES** (existing project scenario):
- - This skill (base44-sdk) handles the request
- - Implement features using Base44 SDK
- - Do NOT use base44-cli unless user explicitly requests CLI commands
-3. If **NO** (new project scenario):
- - Transfer to base44-cli skill for project initialization
- - This skill cannot help until project is initialized
-
-## When to Use This Skill vs base44-cli
-
-**Use base44-sdk when:**
-- Building features in an **EXISTING** Base44 project
-- `base44/config.jsonc` already exists in the project
-- Base44 SDK imports are present (`@base44/sdk`)
-- Writing JavaScript/TypeScript code using Base44 SDK modules
-- Implementing functionality, components, or features
-- User mentions: "implement", "build a feature", "add functionality", "write code for"
-- User says "create a [type] app" **and** a Base44 project already exists
-
-**DO NOT USE base44-sdk for:**
-- ❌ Initializing new Base44 projects (use `base44-cli` instead)
-- ❌ Empty directories without Base44 configuration
-- ❌ When user says "create a new Base44 project/app/site" and no project exists
-- ❌ CLI commands like `npx base44 create`, `npx base44 deploy`, `npx base44 login` (use `base44-cli`)
-
-**Skill Dependencies:**
-- `base44-sdk` assumes a Base44 project is **already initialized**
-- `base44-cli` is a **prerequisite** for `base44-sdk` in new projects
-- If user wants to "create an app" and no Base44 project exists, use `base44-cli` first
-
-**State Check Logic:**
-Before selecting this skill, verify:
-- IF (user mentions "create/build app" OR "make a project"):
- - IF (directory is empty OR no `base44/config.jsonc` exists):
- → Use **base44-cli** (project initialization needed)
- - ELSE:
- → Use **base44-sdk** (project exists, build features)
-
-## Quick Start
-
-```javascript
-// In Base44-generated apps, base44 client is pre-configured and available
-
-// CRUD operations
-const task = await base44.entities.Task.create({ title: "New task", status: "pending" });
-const tasks = await base44.entities.Task.list();
-await base44.entities.Task.update(task.id, { status: "done" });
-
-// Get current user
-const user = await base44.auth.me();
-```
-
-```javascript
-// External apps
-import { createClient } from "@base44/sdk";
-
-// IMPORTANT: Use 'appId' (NOT 'clientId' or 'id')
-const base44 = createClient({ appId: "your-app-id" });
-await base44.auth.loginViaEmailPassword("user@example.com", "password");
-```
-
-## ⚠️ CRITICAL: Do Not Hallucinate APIs
-
-**Before writing ANY Base44 code, verify method names against this table or [QUICK_REFERENCE.md](references/QUICK_REFERENCE.md).**
-
-Base44 SDK has unique method names. Do NOT assume patterns from Firebase, Supabase, or other SDKs.
-
-### Authentication - WRONG vs CORRECT
-
-| ❌ WRONG (hallucinated) | ✅ CORRECT |
-|------------------------|-----------|
-| `signInWithGoogle()` | `loginWithProvider('google')` |
-| `signInWithProvider('google')` | `loginWithProvider('google')` |
-| `auth.google()` | `loginWithProvider('google')` |
-| `signInWithEmailAndPassword(email, pw)` | `loginViaEmailPassword(email, pw)` |
-| `signIn(email, pw)` | `loginViaEmailPassword(email, pw)` |
-| `createUser()` / `signUp()` | `register({email, password})` |
-| `onAuthStateChanged()` | `me()` (no listener, call when needed) |
-| `currentUser` | `await auth.me()` |
-
-### Functions - WRONG vs CORRECT
-
-| ❌ WRONG (hallucinated) | ✅ CORRECT |
-|------------------------|-----------|
-| `functions.call('name', data)` | `functions.invoke('name', data)` |
-| `functions.run('name', data)` | `functions.invoke('name', data)` |
-| `callFunction('name', data)` | `functions.invoke('name', data)` |
-| `httpsCallable('name')(data)` | `functions.invoke('name', data)` |
-
-### Integrations - WRONG vs CORRECT
-
-| ❌ WRONG (hallucinated) | ✅ CORRECT |
-|------------------------|-----------|
-| `ai.generate(prompt)` | `integrations.Core.InvokeLLM({prompt})` |
-| `openai.chat(prompt)` | `integrations.Core.InvokeLLM({prompt})` |
-| `llm(prompt)` | `integrations.Core.InvokeLLM({prompt})` |
-| `sendEmail(to, subject, body)` | `integrations.Core.SendEmail({to, subject, body})` |
-| `email.send()` | `integrations.Core.SendEmail({to, subject, body})` |
-| `uploadFile(file)` | `integrations.Core.UploadFile({file})` |
-| `storage.upload(file)` | `integrations.Core.UploadFile({file})` |
-
-### Entities - WRONG vs CORRECT
-
-| ❌ WRONG (hallucinated) | ✅ CORRECT |
-|------------------------|-----------|
-| `entities.Task.find({...})` | `entities.Task.filter({...})` |
-| `entities.Task.findOne(id)` | `entities.Task.get(id)` |
-| `entities.Task.insert(data)` | `entities.Task.create(data)` |
-| `entities.Task.remove(id)` | `entities.Task.delete(id)` |
-| `entities.Task.onChange(cb)` | `entities.Task.subscribe(cb)` |
-
-## SDK Modules
-
-| Module | Purpose | Reference |
-|--------|---------|-----------|
-| `entities` | CRUD operations on data models | [entities.md](references/entities.md) |
-| `auth` | Login, register, user management | [auth.md](references/auth.md) |
-| `agents` | AI conversations and messages | [base44-agents.md](references/base44-agents.md) |
-| `functions` | Backend function invocation | [functions.md](references/functions.md) |
-| `integrations` | AI, email, file uploads, custom APIs | [integrations.md](references/integrations.md) |
-| `analytics` | Track custom events and user activity | [analytics.md](references/analytics.md) |
-| `appLogs` | Log user activity in app | [app-logs.md](references/app-logs.md) |
-| `users` | Invite users to the app | [users.md](references/users.md) |
-| `asServiceRole.connectors` | App-scoped OAuth tokens (service role only) | [connectors.md](references/connectors.md) |
-| `asServiceRole.sso` | SSO token generation (service role only) | [sso.md](references/sso.md) |
-
-For client setup and authentication modes, see [client.md](references/client.md).
-
-### TypeScript and type registries
-
-Each reference file includes a "Type Definitions" section with TypeScript interfaces and types for the module's methods, parameters, and return values.
-
-**Getting typed entities, functions, and agents:** The Base44 CLI generates types from your project resources (entities, functions, agents), including augmentations to `EntityTypeRegistry`, `FunctionNameRegistry`, and `AgentNameRegistry`, and wires them into your project so you get autocomplete and type checking without manual setup. For how to generate types, use the **base44-cli** skill.
-
-**Manual augmentation:** You can instead augment the registries yourself in a `.d.ts` file; see the Type Definitions sections in [entities.md](references/entities.md), [functions.md](references/functions.md), and [base44-agents.md](references/base44-agents.md).
-
-## Installation
-
-Install the Base44 SDK:
-
-```bash
-npm install @base44/sdk
-```
-
-**Important:** Never assume or hardcode the `@base44/sdk` package version. Always install without a version specifier to get the latest version.
-
-## Creating a Client (External Apps)
-
-When creating a client in external apps, **ALWAYS use `appId` as the parameter name**:
-
-```javascript
-import { createClient } from "@base44/sdk";
-
-// ✅ CORRECT
-const base44 = createClient({ appId: "your-app-id" });
-
-// ❌ WRONG - Do NOT use these:
-// const base44 = createClient({ clientId: "your-app-id" }); // WRONG
-// const base44 = createClient({ id: "your-app-id" }); // WRONG
-```
-
-**Required parameter:** `appId` (string) - Your Base44 application ID
-
-**Optional parameters:**
-- `token` (string) - Pre-authenticated user token
-- `options` (object) - Configuration options
- - `options.onError` (function) - Global error handler
-
-**Example with error handler:**
-```javascript
-const base44 = createClient({
- appId: "your-app-id",
- options: {
- onError: (error) => {
- console.error("Base44 error:", error);
- }
- }
-});
-```
-
-## Module Selection
-
-**Working with app data?**
-- Create/read/update/delete records → `entities`
-- Import data from file → `entities.importEntities()`
-- Realtime updates → `entities.EntityName.subscribe()`
-
-**User management?**
-- Login/register/logout → `auth`
-- Get current user → `auth.me()`
-- Update user profile → `auth.updateMe()`
-- Invite users → `users.inviteUser()`
-
-**AI features?**
-- Chat with AI agents → `agents` (requires logged-in user)
-- Create new conversation → `agents.createConversation()`
-- Manage conversations → `agents.getConversations()`
-- Generate text/JSON with AI → `integrations.Core.InvokeLLM()`
-- Generate images → `integrations.Core.GenerateImage()`
-
-**Custom backend logic?**
-- Run server-side code → `functions.invoke()`
-- Need admin access → `base44.asServiceRole.functions.invoke()`
-
-**External services?**
-- Send emails → `integrations.Core.SendEmail()`
-- Upload files → `integrations.Core.UploadFile()`
-- Custom APIs → `integrations.custom.call()`
-- App-scoped OAuth (app builder's account) → `asServiceRole.connectors.getConnection()` (backend only)
-
-**Tracking and analytics?**
-- Track custom events → `analytics.track()`
-- Log page views/activity → `appLogs.logUserInApp()`
-
-## Common Patterns
-
-### Filter and Sort Data
-
-```javascript
-const pendingTasks = await base44.entities.Task.filter(
- { status: "pending", assignedTo: userId }, // query
- "-created_date", // sort (descending)
- 10, // limit
- 0 // skip
-);
-```
-
-### Protected Routes (check auth)
-
-```javascript
-const user = await base44.auth.me();
-if (!user) {
- // Navigate to your custom login page
- navigate('/login', { state: { returnTo: window.location.pathname } });
- return;
-}
-```
-
-### Backend Function Call
-
-```javascript
-// Frontend
-const result = await base44.functions.invoke("processOrder", {
- orderId: "123",
- action: "ship"
-});
-
-// Backend function (Deno)
-import { createClientFromRequest } from "npm:@base44/sdk";
-
-Deno.serve(async (req) => {
- const base44 = createClientFromRequest(req);
- const { orderId, action } = await req.json();
- // Process with service role for admin access
- const order = await base44.asServiceRole.entities.Orders.get(orderId);
- return Response.json({ success: true });
-});
-```
-
-### Service Role Access
-
-Use `asServiceRole` in backend functions for admin-level operations:
-
-```javascript
-// User mode - respects permissions
-const myTasks = await base44.entities.Task.list();
-
-// Service role - full access (backend only)
-const allTasks = await base44.asServiceRole.entities.Task.list();
-const token = await base44.asServiceRole.connectors.getAccessToken("slack");
-```
-
-## Frontend vs Backend
-
-| Capability | Frontend | Backend |
-|------------|----------|---------|
-| `entities` (user's data) | Yes | Yes |
-| `auth` | Yes | Yes |
-| `agents` | Yes | Yes |
-| `functions.invoke()` | Yes | Yes |
-| `functions.fetch()` | Yes | Yes |
-| `integrations` | Yes | Yes |
-| `analytics` | Yes | Yes |
-| `appLogs` | Yes | Yes |
-| `users` | Yes | Yes |
-| `asServiceRole.*` | No | Yes |
-| `asServiceRole.connectors` (app OAuth) | No | Yes |
-| `asServiceRole.sso` | No | Yes |
-
-Backend functions use `Deno.serve()` and `createClientFromRequest(req)` to get a properly authenticated client.
diff --git a/plugins/base44/skills/base44-sdk/agents/openai.yaml b/plugins/base44/skills/base44-sdk/agents/openai.yaml
deleted file mode 100644
index 898aa4541..000000000
--- a/plugins/base44/skills/base44-sdk/agents/openai.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-interface:
- display_name: "Base44 SDK"
- short_description: "Build features with the Base44 JavaScript and TypeScript SDK"
- default_prompt: "Use Base44 SDK guidance to implement this feature against entities, functions, auth, and integrations."
diff --git a/plugins/base44/skills/base44-sdk/references/QUICK_REFERENCE.md b/plugins/base44/skills/base44-sdk/references/QUICK_REFERENCE.md
deleted file mode 100644
index 0d2271a49..000000000
--- a/plugins/base44/skills/base44-sdk/references/QUICK_REFERENCE.md
+++ /dev/null
@@ -1,178 +0,0 @@
-# Base44 SDK Quick Reference
-
-Compact method signatures for all SDK modules. **Verify against this before writing code.**
-
----
-
-## Auth (`base44.auth.*`)
-
-```
-loginViaEmailPassword(email, password, turnstileToken?) → Promise<{access_token, user}>
-loginWithProvider('google' | 'microsoft' | 'facebook', fromUrl?) → void
-me() → Promise
-updateMe(data) → Promise
-isAuthenticated() → Promise
-logout(redirectUrl?) → void
-redirectToLogin(nextUrl) → void # ⚠️ Avoid - prefer custom login UI
-register({email, password, turnstile_token?, referral_code?}) → Promise
-verifyOtp({email, otpCode}) → Promise
-resendOtp(email) → Promise
-inviteUser(userEmail, role) → Promise
-resetPasswordRequest(email) → Promise
-resetPassword({resetToken, newPassword}) → Promise
-changePassword({userId, currentPassword, newPassword}) → Promise
-setToken(token, saveToStorage?) → void
-```
-
----
-
-## Entities (`base44.entities.EntityName.*`)
-
-```
-create(data) → Promise
-bulkCreate(dataArray) → Promise
-list(sort?, limit?, skip?, fields?) → Promise[]>
-filter(query, sort?, limit?, skip?, fields?) → Promise[]>
-get(id) → Promise
-update(id, data) → Promise
-updateMany(query, mongoUpdateOp) → Promise // e.g. { $set: { field: val } }
-bulkUpdate(dataArray) → Promise // each item must have id
-delete(id) → Promise
-deleteMany(query) → Promise
-importEntities(file) → Promise> // frontend only
-subscribe(callback) → () => void // returns unsubscribe fn
-```
-
-**Sort:** Use `SortField`: `-fieldName` for descending (e.g., `-created_date`). Max 5,000 per request for list/filter.
-
----
-
-## Functions (`base44.functions.*`)
-
-```
-invoke(functionName, data?) → Promise
-fetch(path, init?) → Promise // low-level, for streaming/custom methods
-```
-
-**Backend:** Use `base44.asServiceRole.functions.invoke()` for admin access.
-
----
-
-## Integrations (`base44.integrations.Core.*`)
-
-```
-InvokeLLM({prompt, add_context_from_internet?, response_json_schema?, file_urls?}) → Promise
-GenerateImage({prompt}) → Promise<{url}>
-SendEmail({to, subject, body, from_name?}) → Promise
-UploadFile({file}) → Promise<{file_url}>
-UploadPrivateFile({file}) → Promise<{file_uri}>
-CreateFileSignedUrl({file_uri, expires_in?}) → Promise<{signed_url}>
-ExtractDataFromUploadedFile({file_url, json_schema}) → Promise