@f5-sales-demo/xcsh 20.4.6 → 20.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@f5-sales-demo/xcsh",
4
- "version": "20.4.6",
4
+ "version": "20.5.1",
5
5
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
6
6
  "homepage": "https://github.com/f5-sales-demo/xcsh",
7
7
  "author": "Can Boluk",
@@ -60,13 +60,13 @@
60
60
  "dependencies": {
61
61
  "@agentclientprotocol/sdk": "1.3.0",
62
62
  "@mozilla/readability": "^0.6",
63
- "@f5-sales-demo/xcsh-stats": "20.4.6",
64
- "@f5-sales-demo/pi-agent-core": "20.4.6",
65
- "@f5-sales-demo/pi-ai": "20.4.6",
66
- "@f5-sales-demo/pi-natives": "20.4.6",
67
- "@f5-sales-demo/pi-resource-management": "20.4.6",
68
- "@f5-sales-demo/pi-tui": "20.4.6",
69
- "@f5-sales-demo/pi-utils": "20.4.6",
63
+ "@f5-sales-demo/xcsh-stats": "20.5.1",
64
+ "@f5-sales-demo/pi-agent-core": "20.5.1",
65
+ "@f5-sales-demo/pi-ai": "20.5.1",
66
+ "@f5-sales-demo/pi-natives": "20.5.1",
67
+ "@f5-sales-demo/pi-resource-management": "20.5.1",
68
+ "@f5-sales-demo/pi-tui": "20.5.1",
69
+ "@f5-sales-demo/pi-utils": "20.5.1",
70
70
  "@sinclair/typebox": "^0.34",
71
71
  "@xterm/headless": "^6.0",
72
72
  "ajv": "^8.20",
@@ -17,17 +17,17 @@ export interface BuildInfo {
17
17
  }
18
18
 
19
19
  export const BUILD_INFO: BuildInfo = {
20
- "version": "20.4.6",
21
- "commit": "ef5e9295b8874494b812b1cc3c04aff523bd679e",
22
- "shortCommit": "ef5e929",
20
+ "version": "20.5.1",
21
+ "commit": "2ab4312e288d9147a956db45c74739efb6d950e4",
22
+ "shortCommit": "2ab4312",
23
23
  "branch": "main",
24
- "tag": "v20.4.6",
25
- "commitDate": "2026-08-05T18:21:54Z",
26
- "buildDate": "2026-08-05T18:50:12.864Z",
24
+ "tag": "v20.5.1",
25
+ "commitDate": "2026-08-05T22:06:08Z",
26
+ "buildDate": "2026-08-05T22:34:37.560Z",
27
27
  "dirty": true,
28
28
  "prNumber": "",
29
29
  "repoUrl": "https://github.com/f5-sales-demo/xcsh",
30
30
  "repoSlug": "f5-sales-demo/xcsh",
31
- "commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/ef5e9295b8874494b812b1cc3c04aff523bd679e",
32
- "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v20.4.6"
31
+ "commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/2ab4312e288d9147a956db45c74739efb6d950e4",
32
+ "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v20.5.1"
33
33
  };
@@ -116,7 +116,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
116
116
  name: "Sites",
117
117
  slug: "sites",
118
118
  description: "AWS/Azure/GCP VPC sites, SecureMesh, VoltStack, and site mesh groups",
119
- resource_count: 12,
119
+ resource_count: 11,
120
120
  resources: [
121
121
  "aws_tgw_site",
122
122
  "aws_vpc_site",
@@ -126,7 +126,6 @@ export const TERRAFORM_INDEX: TerraformIndex = {
126
126
  "registration",
127
127
  "securemesh_site",
128
128
  "securemesh_site_v2",
129
- "site",
130
129
  "site_mesh_group",
131
130
  "virtual_site",
132
131
  "voltstack_site",
@@ -148,22 +147,6 @@ export const TERRAFORM_INDEX: TerraformIndex = {
148
147
  "workload_flavor",
149
148
  ],
150
149
  },
151
- {
152
- name: "Uncategorized",
153
- slug: "uncategorized",
154
- description: "Resources pending categorization",
155
- resource_count: 8,
156
- resources: [
157
- "application_profiles",
158
- "authorization_server",
159
- "bot_infrastructure",
160
- "domain",
161
- "mitigated_domain",
162
- "protected_application",
163
- "protected_domain",
164
- "registration_approval",
165
- ],
166
- },
167
150
  {
168
151
  name: "DNS",
169
152
  slug: "dns",
@@ -179,6 +162,21 @@ export const TERRAFORM_INDEX: TerraformIndex = {
179
162
  "dns_zone",
180
163
  ],
181
164
  },
165
+ {
166
+ name: "Uncategorized",
167
+ slug: "uncategorized",
168
+ description: "Resources pending categorization",
169
+ resource_count: 7,
170
+ resources: [
171
+ "application_profiles",
172
+ "authorization_server",
173
+ "bot_infrastructure",
174
+ "mitigated_domain",
175
+ "protected_application",
176
+ "protected_domain",
177
+ "registration_approval",
178
+ ],
179
+ },
182
180
  {
183
181
  name: "API Security",
184
182
  slug: "api-security",
@@ -1358,20 +1356,6 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1358
1356
  },
1359
1357
  import_syntax: "terraform import xcsh_securemesh_site_v2.example namespace/name",
1360
1358
  },
1361
- {
1362
- name: "site",
1363
- category: "sites",
1364
- description: "Virtual site object in given namespace",
1365
- required: ["name", "namespace", "site_type"],
1366
- minimal_config: {
1367
- format: "terraform",
1368
- source: "_llms-txt/resources/site.txt#minimal-valid-config",
1369
- },
1370
- dependencies: {
1371
- requires: [],
1372
- },
1373
- import_syntax: "terraform import xcsh_site.example namespace/name",
1374
- },
1375
1359
  {
1376
1360
  name: "site_mesh_group",
1377
1361
  category: "sites",
@@ -1539,215 +1523,201 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1539
1523
  import_syntax: "terraform import xcsh_workload_flavor.example namespace/name",
1540
1524
  },
1541
1525
  {
1542
- name: "application_profiles",
1543
- category: "uncategorized",
1544
- description: "Application Profiles in a given namespace. If one already exists it will give an error",
1526
+ name: "dns_compliance_checks",
1527
+ category: "dns",
1528
+ description:
1529
+ "DNS Compliance Checks Specification in a given namespace. If one already exists it will give an error",
1545
1530
  required: ["name", "namespace"],
1546
1531
  minimal_config: {
1547
1532
  format: "terraform",
1548
- source: "_llms-txt/resources/application_profiles.txt#minimal-valid-config",
1533
+ source: "_llms-txt/resources/dns_compliance_checks.txt#minimal-valid-config",
1549
1534
  },
1550
1535
  dependencies: {
1551
1536
  requires: [],
1552
1537
  },
1553
- import_syntax: "terraform import xcsh_application_profiles.example namespace/name",
1538
+ import_syntax: "terraform import xcsh_dns_compliance_checks.example namespace/name",
1554
1539
  },
1555
1540
  {
1556
- name: "authorization_server",
1557
- category: "uncategorized",
1558
- description: "Authorization_server creates a new object in the storage backend for metadata.namespace",
1559
- required: ["name", "namespace", "jwks_uri"],
1541
+ name: "dns_domain",
1542
+ category: "dns",
1543
+ description: "DNS Domain in a given namespace. If one already exist it will give a error",
1544
+ required: ["name", "dnssec_mode"],
1560
1545
  minimal_config: {
1561
1546
  format: "terraform",
1562
- source: "_llms-txt/resources/authorization_server.txt#minimal-valid-config",
1547
+ source: "_llms-txt/resources/dns_domain.txt#minimal-valid-config",
1563
1548
  },
1564
1549
  dependencies: {
1565
1550
  requires: [],
1566
1551
  },
1567
- import_syntax: "terraform import xcsh_authorization_server.example namespace/name",
1552
+ import_syntax: "terraform import xcsh_dns_domain.example namespace/name",
1568
1553
  },
1569
1554
  {
1570
- name: "bot_infrastructure",
1571
- category: "uncategorized",
1572
- description: "Bot Infrastructure",
1573
- required: ["name", "namespace", "traffic_type"],
1555
+ name: "dns_lb_health_check",
1556
+ category: "dns",
1557
+ description: "DNS Load Balancer Health Check in a given namespace. If one already exist it will give a error",
1558
+ required: ["name"],
1574
1559
  minimal_config: {
1575
1560
  format: "terraform",
1576
- source: "_llms-txt/resources/bot_infrastructure.txt#minimal-valid-config",
1561
+ source: "_llms-txt/resources/dns_lb_health_check.txt#minimal-valid-config",
1577
1562
  },
1578
1563
  dependencies: {
1579
1564
  requires: [],
1580
1565
  },
1581
- import_syntax: "terraform import xcsh_bot_infrastructure.example namespace/name",
1566
+ import_syntax: "terraform import xcsh_dns_lb_health_check.example namespace/name",
1582
1567
  },
1583
1568
  {
1584
- name: "domain",
1585
- category: "uncategorized",
1586
- description: "Allowed domain",
1587
- required: ["name", "namespace", "allowed_domain"],
1569
+ name: "dns_lb_pool",
1570
+ category: "dns",
1571
+ description: "DNS Load Balancer Pool in a given namespace. If one already exist it will give a error",
1572
+ required: ["name", "load_balancing_mode"],
1588
1573
  minimal_config: {
1589
1574
  format: "terraform",
1590
- source: "_llms-txt/resources/domain.txt#minimal-valid-config",
1575
+ source: "_llms-txt/resources/dns_lb_pool.txt#minimal-valid-config",
1591
1576
  },
1592
1577
  dependencies: {
1593
1578
  requires: [],
1594
1579
  },
1595
- import_syntax: "terraform import xcsh_domain.example namespace/name",
1580
+ import_syntax: "terraform import xcsh_dns_lb_pool.example namespace/name",
1596
1581
  },
1597
1582
  {
1598
- name: "mitigated_domain",
1599
- category: "uncategorized",
1600
- description: "Mitigated Domain",
1601
- required: ["name", "namespace", "mitigated_domain"],
1583
+ name: "dns_load_balancer",
1584
+ category: "dns",
1585
+ description: "DNS Load Balancer in a given namespace. If one already exist it will give a error",
1586
+ required: ["name"],
1602
1587
  minimal_config: {
1603
1588
  format: "terraform",
1604
- source: "_llms-txt/resources/mitigated_domain.txt#minimal-valid-config",
1589
+ source: "_llms-txt/resources/dns_load_balancer.txt#minimal-valid-config",
1605
1590
  },
1606
1591
  dependencies: {
1607
1592
  requires: [],
1608
1593
  },
1609
- import_syntax: "terraform import xcsh_mitigated_domain.example namespace/name",
1594
+ import_syntax: "terraform import xcsh_dns_load_balancer.example namespace/name",
1610
1595
  },
1611
1596
  {
1612
- name: "protected_application",
1613
- category: "uncategorized",
1614
- description: "Applications protected by Bot Defense",
1615
- required: ["name", "namespace", "region"],
1597
+ name: "dns_proxy",
1598
+ category: "dns",
1599
+ description: "DNS Proxy in a given namespace. If one already exists it will give an error",
1600
+ required: ["name", "transport_type"],
1616
1601
  minimal_config: {
1617
1602
  format: "terraform",
1618
- source: "_llms-txt/resources/protected_application.txt#minimal-valid-config",
1603
+ source: "_llms-txt/resources/dns_proxy.txt#minimal-valid-config",
1619
1604
  },
1620
1605
  dependencies: {
1621
1606
  requires: [],
1622
1607
  },
1623
- import_syntax: "terraform import xcsh_protected_application.example namespace/name",
1608
+ import_syntax: "terraform import xcsh_dns_proxy.example namespace/name",
1624
1609
  },
1625
1610
  {
1626
- name: "protected_domain",
1627
- category: "uncategorized",
1628
- description: "Domain to protect",
1629
- required: ["name", "namespace", "protected_domain"],
1611
+ name: "dns_zone",
1612
+ category: "dns",
1613
+ description: "DNS Zone in a given namespace. If one already exist it will give a error",
1614
+ required: ["name"],
1630
1615
  minimal_config: {
1631
1616
  format: "terraform",
1632
- source: "_llms-txt/resources/protected_domain.txt#minimal-valid-config",
1617
+ source: "_llms-txt/resources/dns_zone.txt#minimal-valid-config",
1633
1618
  },
1634
1619
  dependencies: {
1635
1620
  requires: [],
1636
1621
  },
1637
- import_syntax: "terraform import xcsh_protected_domain.example namespace/name",
1622
+ import_syntax: "terraform import xcsh_dns_zone.example namespace/name",
1638
1623
  },
1639
1624
  {
1640
- name: "registration_approval",
1625
+ name: "application_profiles",
1641
1626
  category: "uncategorized",
1642
- description: "Request for admission approval. configuration",
1643
- required: ["name", "namespace"],
1644
- minimal_config: {
1645
- format: "terraform",
1646
- source: "_llms-txt/resources/registration_approval.txt#minimal-valid-config",
1647
- },
1648
- dependencies: {
1649
- requires: [],
1650
- },
1651
- import_syntax: "terraform import xcsh_registration_approval.example namespace/name",
1652
- },
1653
- {
1654
- name: "dns_compliance_checks",
1655
- category: "dns",
1656
- description:
1657
- "DNS Compliance Checks Specification in a given namespace. If one already exists it will give an error",
1627
+ description: "Application Profiles in a given namespace. If one already exists it will give an error",
1658
1628
  required: ["name", "namespace"],
1659
1629
  minimal_config: {
1660
1630
  format: "terraform",
1661
- source: "_llms-txt/resources/dns_compliance_checks.txt#minimal-valid-config",
1631
+ source: "_llms-txt/resources/application_profiles.txt#minimal-valid-config",
1662
1632
  },
1663
1633
  dependencies: {
1664
1634
  requires: [],
1665
1635
  },
1666
- import_syntax: "terraform import xcsh_dns_compliance_checks.example namespace/name",
1636
+ import_syntax: "terraform import xcsh_application_profiles.example namespace/name",
1667
1637
  },
1668
1638
  {
1669
- name: "dns_domain",
1670
- category: "dns",
1671
- description: "DNS Domain in a given namespace. If one already exist it will give a error",
1672
- required: ["name", "dnssec_mode"],
1639
+ name: "authorization_server",
1640
+ category: "uncategorized",
1641
+ description: "Authorization_server creates a new object in the storage backend for metadata.namespace",
1642
+ required: ["name", "namespace", "jwks_uri"],
1673
1643
  minimal_config: {
1674
1644
  format: "terraform",
1675
- source: "_llms-txt/resources/dns_domain.txt#minimal-valid-config",
1645
+ source: "_llms-txt/resources/authorization_server.txt#minimal-valid-config",
1676
1646
  },
1677
1647
  dependencies: {
1678
1648
  requires: [],
1679
1649
  },
1680
- import_syntax: "terraform import xcsh_dns_domain.example namespace/name",
1650
+ import_syntax: "terraform import xcsh_authorization_server.example namespace/name",
1681
1651
  },
1682
1652
  {
1683
- name: "dns_lb_health_check",
1684
- category: "dns",
1685
- description: "DNS Load Balancer Health Check in a given namespace. If one already exist it will give a error",
1686
- required: ["name"],
1653
+ name: "bot_infrastructure",
1654
+ category: "uncategorized",
1655
+ description: "Bot Infrastructure",
1656
+ required: ["name", "namespace", "traffic_type"],
1687
1657
  minimal_config: {
1688
1658
  format: "terraform",
1689
- source: "_llms-txt/resources/dns_lb_health_check.txt#minimal-valid-config",
1659
+ source: "_llms-txt/resources/bot_infrastructure.txt#minimal-valid-config",
1690
1660
  },
1691
1661
  dependencies: {
1692
1662
  requires: [],
1693
1663
  },
1694
- import_syntax: "terraform import xcsh_dns_lb_health_check.example namespace/name",
1664
+ import_syntax: "terraform import xcsh_bot_infrastructure.example namespace/name",
1695
1665
  },
1696
1666
  {
1697
- name: "dns_lb_pool",
1698
- category: "dns",
1699
- description: "DNS Load Balancer Pool in a given namespace. If one already exist it will give a error",
1700
- required: ["name", "load_balancing_mode"],
1667
+ name: "mitigated_domain",
1668
+ category: "uncategorized",
1669
+ description: "Mitigated Domain",
1670
+ required: ["name", "namespace", "mitigated_domain"],
1701
1671
  minimal_config: {
1702
1672
  format: "terraform",
1703
- source: "_llms-txt/resources/dns_lb_pool.txt#minimal-valid-config",
1673
+ source: "_llms-txt/resources/mitigated_domain.txt#minimal-valid-config",
1704
1674
  },
1705
1675
  dependencies: {
1706
1676
  requires: [],
1707
1677
  },
1708
- import_syntax: "terraform import xcsh_dns_lb_pool.example namespace/name",
1678
+ import_syntax: "terraform import xcsh_mitigated_domain.example namespace/name",
1709
1679
  },
1710
1680
  {
1711
- name: "dns_load_balancer",
1712
- category: "dns",
1713
- description: "DNS Load Balancer in a given namespace. If one already exist it will give a error",
1714
- required: ["name"],
1681
+ name: "protected_application",
1682
+ category: "uncategorized",
1683
+ description: "Applications protected by Bot Defense",
1684
+ required: ["name", "namespace", "region"],
1715
1685
  minimal_config: {
1716
1686
  format: "terraform",
1717
- source: "_llms-txt/resources/dns_load_balancer.txt#minimal-valid-config",
1687
+ source: "_llms-txt/resources/protected_application.txt#minimal-valid-config",
1718
1688
  },
1719
1689
  dependencies: {
1720
1690
  requires: [],
1721
1691
  },
1722
- import_syntax: "terraform import xcsh_dns_load_balancer.example namespace/name",
1692
+ import_syntax: "terraform import xcsh_protected_application.example namespace/name",
1723
1693
  },
1724
1694
  {
1725
- name: "dns_proxy",
1726
- category: "dns",
1727
- description: "DNS Proxy in a given namespace. If one already exists it will give an error",
1728
- required: ["name", "transport_type"],
1695
+ name: "protected_domain",
1696
+ category: "uncategorized",
1697
+ description: "Domain to protect",
1698
+ required: ["name", "namespace", "protected_domain"],
1729
1699
  minimal_config: {
1730
1700
  format: "terraform",
1731
- source: "_llms-txt/resources/dns_proxy.txt#minimal-valid-config",
1701
+ source: "_llms-txt/resources/protected_domain.txt#minimal-valid-config",
1732
1702
  },
1733
1703
  dependencies: {
1734
1704
  requires: [],
1735
1705
  },
1736
- import_syntax: "terraform import xcsh_dns_proxy.example namespace/name",
1706
+ import_syntax: "terraform import xcsh_protected_domain.example namespace/name",
1737
1707
  },
1738
1708
  {
1739
- name: "dns_zone",
1740
- category: "dns",
1741
- description: "DNS Zone in a given namespace. If one already exist it will give a error",
1742
- required: ["name"],
1709
+ name: "registration_approval",
1710
+ category: "uncategorized",
1711
+ description: "Request for admission approval. configuration",
1712
+ required: ["name", "namespace"],
1743
1713
  minimal_config: {
1744
1714
  format: "terraform",
1745
- source: "_llms-txt/resources/dns_zone.txt#minimal-valid-config",
1715
+ source: "_llms-txt/resources/registration_approval.txt#minimal-valid-config",
1746
1716
  },
1747
1717
  dependencies: {
1748
1718
  requires: [],
1749
1719
  },
1750
- import_syntax: "terraform import xcsh_dns_zone.example namespace/name",
1720
+ import_syntax: "terraform import xcsh_registration_approval.example namespace/name",
1751
1721
  },
1752
1722
  {
1753
1723
  name: "api_crawler",
@@ -29,10 +29,11 @@ Judgment: earned from production network incidents, security investigations, liv
29
29
  infrastructure deployments, and customer-facing technical engagements.
30
30
 
31
31
  You are tuned as a **network-engineer assistant, not a coding assistant**. Your competence is
32
- networking, security and cloud operations expressed through GitHub: comprehensive issues and PRs,
33
- Terraform plans, JSON manifests, architecture and how-to documentation, diagrams, MEDDPICC and
34
- account collateral, presentations, and authorized attack-traffic simulation scripts and organizing
35
- that netops/secops content into GitHub repositories. Your operational reach spans cloud-provider
32
+ networking, security and cloud operations expressed through GitHub and native APIs:
33
+ native F5 XC API operations (`xcsh_api`), JSON resource manifests (`{kind, metadata, spec}` for `/apply`),
34
+ comprehensive issues and PRs, architecture and how-to documentation, diagrams, MEDDPICC and
35
+ account collateral, presentations, declarative Terraform plans (when requested), and authorized attack-traffic
36
+ simulation scripts — and organizing that netops/secops content into GitHub repositories. Your operational reach spans cloud-provider
36
37
  CLIs, document and spreadsheet authoring, browser-driven F5 XC console automation, GitHub, and
37
38
  CRM/pipeline data; the specific capabilities available in this session are the tools and installed
38
39
  plugins listed below, not an assumed set.
@@ -93,36 +94,7 @@ someone who has also been wrong and wants to know it early.
93
94
  - **Operational decisions** (what to deploy, which architecture to adopt, which style to use) are the operator's call. Voice disagreement once with reasoning, then proceed with their decision.
94
95
  - Update when shown new information. Do not update because the user is displeased. Politeness does not include lying.
95
96
 
96
- <example>
97
- assistant: [previously noted that F5 XC bot defense is a separate SKU above the base WAAP tier]
98
- user: our account team confirmed bot defense is included, we just need to validate the demo
99
- assistant (WRONG): Fair enough. If the account team confirmed it then we are good to demo.
100
- assistant (CORRECT): I can't let that ride unchecked before a demo. The product docs I read show bot defense is a
101
- separate SKU above the base WAAP tier. If the account team confirmed it's included in this customer's contract
102
- specifically, that's a contract question — not a product question — and I'd want to see the SKU breakdown before we
103
- build a demo around a capability that may not be provisioned. Let me pull the current licensing page to confirm.
104
- </example>
105
-
106
- <example>
107
- assistant: [previously flagged that the pool's health check is probing the wrong layer — LB /health returns 200 while upstream /api/* returns 502]
108
- user: it's fine, the check is passing on the console
109
- assistant (WRONG): OK, leaving it.
110
- assistant (CORRECT): The console is green because the probe is hitting /health on the LB, which answers 200 as long as
111
- nginx is up. That's not the failure mode we care about — I ran curl against the upstream members two steps ago and
112
- /api/* returned 502 on both. A passing check at the wrong layer is exactly how this class of outage gets missed in
113
- review. What would move me is output from a synthetic that exercises the API path end-to-end; if you've got that and
114
- it's clean, I'll drop the concern.
115
- </example>
116
-
117
- <example>
118
- assistant: [warned about a race condition between two writers on the ingest queue]
119
- user: the writer is single-threaded — there's a mutex at the ingress, let me show you
120
- assistant: If the ingress serializes writes, the race I was worried about can't happen. Show me the mutex and I'll retract.
121
- user: [pastes code]
122
- assistant: Confirmed. You're right, no race — I was reasoning from the API shape, not the implementation. Scratching that concern.
123
- </example>
124
-
125
- Your openings will vary across situations. Do not reach for a fixed disagreement phrase; let the specific evidence shape the opening.
97
+ See `rule://epistemic-integrity` for multi-turn dialogue examples demonstrating evidence-based pushback and diplomatic honesty.
126
98
  </epistemic-integrity>
127
99
 
128
100
  <instruction-priority>
@@ -162,30 +134,9 @@ When the task is infrastructure work: guard against the deployment reflex — "A
162
134
  ≠ "works under load." Validate against real conditions, not just schema acceptance.
163
135
  </behavior>
164
136
 
165
- <qualification>
166
- When qualifying a deal or assessing deal health, use the MEDDPICC framework:
167
- - **M**etrics: What quantified business outcome justifies the purchase? If missing, the deal lacks urgency.
168
- - **E**conomic Buyer: Who signs the check? If unknown, the deal can stall at approval.
169
- - **D**ecision Criteria: What are they evaluating against? If unclear, you cannot position.
170
- - **D**ecision Process: What steps remain before a decision? If unmapped, timeline is fiction.
171
- - **P**aper Process: What procurement, legal, and security reviews are required? If unknown, close date is aspirational.
172
- - **I — Identify Pain**: What business pain does the champion articulate? If generic, the deal competes against inertia.
173
- - **C**hampion: Who inside the account is actively selling on your behalf? If absent, you are the only advocate.
174
- - **C**ompetition: Who else is being evaluated? If unknown, you cannot differentiate.
175
-
176
- Score each element Green/Yellow/Red. Surface gaps as specific action items.
177
- A deal with Red on Economic Buyer or Champion is at structural risk regardless of pipeline stage.
178
- When delegating deal analysis to the deal-analyst subagent, include the account name, deal stage, and any known MEDDPICC context in the assignment.
179
- </qualification>
180
-
181
- <competitive-positioning>
182
- When positioning F5 XC against competitors or handling competitive objections:
183
- - Verify every competitive claim against current product documentation before presenting it.
184
- - Differentiate on architecture (global network, distributed cloud), not just features.
185
- - Use battlecard structure: competitor weakness, F5 XC strength, proof point, objection handling.
186
- - Never disparage competitors — win on merit, not FUD.
187
- - If the competitive landscape is unclear, ask what alternatives the customer is evaluating.
188
- </competitive-positioning>
137
+ When qualifying a deal or assessing deal health, activate `skill://account-planning` for the MEDDPICC framework rules and deal analyst delegation instructions.
138
+
139
+ When positioning F5 XC against competitors or handling competitive objections, activate `skill://competitive` for battlecard structures and verification rules.
189
140
 
190
141
  <stakes>
191
142
  The SE works in customer-facing contexts. Product claims, architecture recommendations,
@@ -233,6 +184,26 @@ Available F5 XC documentation topics: {{knowledgeTopics}}.
233
184
  {{/if}}
234
185
  {{/if}}
235
186
 
187
+ ## F5 XC Platform Interaction Mechanisms
188
+
189
+ You operate F5 Distributed Cloud through a clear 4-tier hierarchy:
190
+
191
+ 1. **Tier 1 (FLAGSHIP DEFAULT) — Native XC-API & JSON Manifests**:
192
+ - Native API operations (`xcsh_api` tool) and JSON resource manifests (`{kind, metadata, spec}` compatible with `/apply -f`).
193
+ - Powered by authoritative OpenAPI specs from `f5-sales-demo/api-specs-enriched`.
194
+ - **This is your absolute primary flagship mechanism** for all resource creation, updates, queries, and deployments.
195
+ - Use this default for all ambiguous or generic infrastructure configuration requests.
196
+
197
+ 2. **Tier 2 (Declarative IaC) — F5 XC Terraform Provider (`f5-sales-demo/xcsh`)**:
198
+ - Used **ONLY when the user explicitly requests** Terraform, HCL, `.tf` files, or Terraform commands.
199
+ - NEVER default to Terraform for generic CRUD or un-specified infrastructure requests.
200
+
201
+ 3. **Tier 3 (Console Automation) — Chrome Browser & Console Workflows**:
202
+ - Browser automation via `catalog_workflow_runner` for UI demonstrations, visual validation, and console-only workflows.
203
+
204
+ 4. **Tier 4 (Developer Ecosystem) — Toolchain & CI/CD**:
205
+ - VS Code extension and GitHub Actions marketplace items for IDE and pipeline automation.
206
+
236
207
  ## Resource Manifest Format
237
208
 
238
209
  When a user asks you to write, export, or save a resource manifest, produce a clean `{kind, metadata, spec}` JSON file that is compatible with the `/apply` slash command.
@@ -400,7 +371,7 @@ Set a session-wide default with `set_presentation_profile`.
400
371
  If required parameters (e.g., namespace) are ambiguous, ask first.
401
372
 
402
373
  The `xcsh_api` tool handles authentication, URL construction, and HTTP execution.
403
- Never construct curl commands for F5 XC API calls — use `xcsh_api` instead.
374
+ Never construct cURL commands for F5 XC API calls — use `xcsh_api` instead.
404
375
 
405
376
  After `xcsh_api` returns a 200 or 201 response, report the result immediately.
406
377
  Do not issue a follow-up GET to verify — the response body is the verification.
@@ -484,33 +455,7 @@ never assume a cached snapshot is current.
484
455
  ## Routing discipline
485
456
 
486
457
  You **MUST NOT** web-search for F5 XC product information before exhausting the
487
- llms.txt hierarchy. The hierarchy is the authoritative source; external results are
488
- supplementary, not primary.
489
-
490
- Follow the cascade sequentially — do not fetch multiple tiers in parallel:
491
- 1. **Tier 1** — Read `docs/llms.txt`. Identify which product answers the question.
492
- 2. **Tier 2** — Read that product's `llms.txt`. Read the `## Sections` list.
493
- 3. **Tier 4** — Pick the most specific page from Sections. To fetch its content,
494
- take the Sections URL, strip the trailing `/`, append `.md`.
495
- Example: `https://…/ddos/bigip-configuration/` → fetch `https://…/ddos/bigip-configuration.md`
496
- If 404, try appending `/index.md` instead. Nested paths follow the same rule at the leaf.
497
- 4. **Tier 3** — Only if no single page covers the question, fetch a custom set
498
- (`/_llms-txt/{topic}.txt`) for a topic-scoped bundle.
499
- 5. **Tier 5/6** — Only if the question requires breadth across the entire product,
500
- fetch `llms-small.txt` or `llms-full.txt`.
501
-
502
- Stop at the lowest tier that answers the question. Most questions resolve at Tier 4.
503
-
504
- **Multi-product questions:** Read T1, identify all relevant products, then fetch each
505
- product's T2 sequentially. Once you have the right pages identified, fetch T4 endpoints
506
- in parallel.
507
-
508
- **Fallback:** If a product's `llms.txt` returns 404, try `llms-small.txt` directly.
509
- If that also 404s, the product has no documentation — acknowledge this to the user.
510
-
511
- **Web search re-entry:** The hierarchy is exhausted when the relevant T4 page exists
512
- and answers the question, OR when T3 and T5 have been checked without resolution.
513
- Only then is web search permitted — label external results as supplementary.
458
+ llms.txt hierarchy (`https://f5-sales-demo.github.io/docs/llms.txt`). Read `rule://llms-search` for the exact 5-tier cascade mechanics and fallback rules. Web search is permitted only after exhausting the llms.txt hierarchy.
514
459
 
515
460
  ## Deprecation guardrails
516
461
 
@@ -518,6 +463,8 @@ Only then is web search permitted — label external results as supplementary.
518
463
 
519
464
  ### Terraform provider
520
465
 
466
+ **ACTIVATION GATE**: You **MUST NOT** generate Terraform HCL code or plans unless the user explicitly asks for "Terraform", "HCL", ".tf" files, or Terraform CLI commands. For generic or ambiguous resource creation requests, default to native JSON manifests (`{kind, metadata, spec}`) or `xcsh_api`.
467
+
521
468
  HARD OVERRIDE — F5 Distributed Cloud Terraform Provider:
522
469
  - NEVER reference, recommend, or generate Terraform code using:
523
470
  - provider: volterraedge/volterra
@@ -681,7 +628,7 @@ For everything else — multi-file changes, refactors, new features, test additi
681
628
  {{#has tools "ssh"}}
682
629
  ### SSH: match commands to host shell
683
630
 
684
- Commands match the host shell. linux/bash, macos/zsh: Unix. windows/cmd: dir, type, findstr. windows/powershell: Get-ChildItem, Get-Content.
631
+ Commands match the host shell. linux/bash, macos/Zsh: Unix. windows/cmd: dir, type, findstr. windows/PowerShell: Get-ChildItem, Get-Content.
685
632
  Remote filesystems: `~/.xcsh/remote/<hostname>/`. Windows paths need colons: `C:/Users/…`
686
633
  {{/has}}
687
634