@higrowth/cli 0.3.3 → 0.3.5

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.
Files changed (2) hide show
  1. package/dist/index.js +332 -28
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -703,7 +703,7 @@ just say which one \u2014 you don't have to redo the whole interview."*
703
703
  // src/skills/marketing-strategy.ts
704
704
  var MARKETING_STRATEGY = `---
705
705
  name: higrowth-marketing-strategy
706
- description: Helps the user interpret a Higrowth diagnostic, choose a bounded scoped-plan area, review imagination hypotheses, and shape the next 2-4 week sprint. Use when the user wants to talk through their report, decide what to ship, ask what can be fixed in an area, or plan.
706
+ description: Helps the user interpret a Higrowth diagnostic, choose a bounded scoped-plan or topic-roadmap area, review imagination hypotheses, and shape the next 2-4 week sprint. Use when the user wants to talk through their report, decide what to ship, ask what can be fixed in an area, create/update content from roadmap gaps, or plan.
707
707
  allowed-tools: mcp__higrowth__execute_typescript
708
708
  ---
709
709
 
@@ -717,7 +717,8 @@ measurable scoped plan that can move the needle.
717
717
 
718
718
  Trigger on: "what should I focus on", "walk me through my report",
719
719
  "prioritize this", "what's the move", "plan my sprint", "what can we
720
- fix in [area/topic/page]".
720
+ fix in [area/topic/page]", "what are the gaps in this topic", "plan this
721
+ roadmap", "what new pages or updates should we create".
721
722
 
722
723
  ## Mental model
723
724
 
@@ -725,20 +726,32 @@ Plans are not giant backlogs. A good plan is a scoped intervention:
725
726
  one topic area, page cluster, gap type, or conversion slice with enough
726
727
  evidence to act and narrow enough boundaries to avoid conflicting work.
727
728
 
728
- The planning stack has four layers:
729
+ The planning stack has six layers:
729
730
 
730
731
  1. **Answer map** \u2014 what questions the site answers for which persona
731
732
  and decision stage.
732
733
  2. **Decision candidates** \u2014 executable moves grounded in answer cells,
733
734
  gaps, GSC, GA, strategy, and conflict checks.
734
- 3. **Imagination candidates** \u2014 adjacent hypotheses HG can infer from
735
+ 3. **Topic roadmap** \u2014 the topic-area execution ledger: new pages to
736
+ create, pages to refresh, consolidation/removal, internal links, and
737
+ measurement/setup rows. When the user asks about a topic's gaps or
738
+ roadmap, these rows are a first-class planning source.
739
+ 4. **Imagination candidates** \u2014 adjacent hypotheses HG can infer from
735
740
  weak or missing answers. They are ideas only.
736
- 4. **Scoped plans** \u2014 a small selected scope that generates execution
737
- items from decision candidates.
741
+ 5. **Scoped plans** \u2014 a small selected scope that generates execution
742
+ items from roadmap rows, scoped gaps, pages, answer cells, or decision
743
+ candidates.
744
+ 6. **Authored plans** \u2014 when the harness can synthesize the right
745
+ strategic shape better than the built-in generator, it may write the
746
+ staging plan artifact directly into HG via the authored-plan API,
747
+ using HG signals as evidence.
738
748
 
739
749
  Rank by **leverage, evidence, and executability**, not raw opportunity count.
740
750
  Never create work orders directly from imagination candidates. Promote
741
751
  good imagination candidates into decision candidates first, then plan.
752
+ Roadmap rows do not need promotion: use them directly when the user's
753
+ intent is to execute a topic roadmap. Authored plans do not bypass
754
+ review or execution approval: they create/edit staging plan artifacts.
742
755
 
743
756
  ## The conversation
744
757
 
@@ -818,6 +831,31 @@ If answer-map compute still returns little or no signal, say so. The
818
831
  right prerequisite may be a scan, GSC/GA connection, KB population, or
819
832
  pillar analysis. Do not fabricate a strategic plan from thin data.
820
833
 
834
+ Also check the topic roadmap when the user asks about a topic, gaps,
835
+ new content, content updates, or comprehensiveness:
836
+
837
+ \`\`\`ts
838
+ const roadmap = topicId
839
+ ? await api.get(\`/api/topics/\${topicId}/roadmap\`)
840
+ : null;
841
+ const openRoadmapItems =
842
+ roadmap?.items?.filter(item => item.status === 'open') ?? [];
843
+
844
+ console.log(openRoadmapItems.map(item => ({
845
+ id: item.id,
846
+ actionType: item.actionType,
847
+ title: item.title,
848
+ targetPageUrl: item.targetPageUrl,
849
+ queries: item.queries?.slice(0, 5) ?? [],
850
+ existingCoverage: item.coverage?.length ?? 0,
851
+ })));
852
+ \`\`\`
853
+
854
+ Roadmap rows answer: what new pages to create, which pages to update,
855
+ what to consolidate or remove, where internal links are missing, and
856
+ what measurement/setup work blocks confidence. Treat open roadmap rows
857
+ as source evidence, not as loose suggestions.
858
+
821
859
  ### Step 4 \u2014 Use imagination only when useful
822
860
 
823
861
  When the user asks "what else could we do here?", "what are we missing?",
@@ -857,6 +895,97 @@ with observed-gap candidates.
857
895
 
858
896
  ### Step 5 \u2014 Choose a bounded scope
859
897
 
898
+ If the user explicitly asked to execute a topic roadmap, prefer a
899
+ roadmap-derived scope over a generic candidate. The open roadmap rows
900
+ are the scope thesis.
901
+
902
+ \`\`\`ts
903
+ function compactRoadmapSourceId(topicId, items) {
904
+ const key = (items ?? [])
905
+ .map(item => item.id)
906
+ .sort()
907
+ .join('_')
908
+ .replace(/[^a-zA-Z0-9_-]/g, '')
909
+ .slice(0, 96) || 'open';
910
+ return \`roadmap_topic_v6_\${topicId}_\${key}\`;
911
+ }
912
+
913
+ function analysisTypesFromRoadmap(items) {
914
+ const types = new Set(['supply_tactical']);
915
+ for (const item of items ?? []) {
916
+ if (item.actionType === 'new_content') types.add('demand_pull');
917
+ if (item.actionType === 'internal_linking') types.add('structural');
918
+ if (item.actionType === 'page_refresh') types.add('positioning');
919
+ if (item.actionType === 'measurement') types.add('conversion');
920
+ }
921
+ return [...types];
922
+ }
923
+
924
+ function roadmapScope(topicId, topicName, entityId, openItems) {
925
+ const analysisTypes = analysisTypesFromRoadmap(openItems);
926
+ return {
927
+ version: 1,
928
+ selectedAt: new Date().toISOString(),
929
+ selectedBy: 'agent',
930
+ sourceCandidateId: compactRoadmapSourceId(topicId, openItems),
931
+ entityId,
932
+ label: \`\${topicName ?? 'Topic'} roadmap execution scope\`,
933
+ scopeType: 'subtopic',
934
+ topicId,
935
+ subtopicIds: [],
936
+ pageIds: [],
937
+ gapIds: [],
938
+ answerCellIds: [],
939
+ decisionCandidateIds: [],
940
+ primaryPersonaIds: [],
941
+ decisionStages: [],
942
+ scopeThesis: [
943
+ \`Use the \${topicName ?? 'selected topic'} roadmap as the execution source of truth.\`,
944
+ ...openItems.slice(0, 8).map((item, index) =>
945
+ [
946
+ \`\${index + 1}. \${item.title}\`,
947
+ \`Action: \${item.actionType} (\${item.priority} priority).\`,
948
+ item.recommendedAction ? \`Recommended move: \${item.recommendedAction}\` : null,
949
+ item.targetPageUrl ? \`Target page: \${item.targetPageUrl}\` : null,
950
+ item.queries?.length ? \`Queries/questions: \${item.queries.join('; ')}\` : null,
951
+ item.why ? \`Why: \${item.why}\` : null,
952
+ ].filter(Boolean).join(' ')
953
+ ),
954
+ ].join('\\n'),
955
+ analysisTypes,
956
+ includedSignals: [
957
+ 'topic_roadmap',
958
+ 'gap_inventory',
959
+ 'question_pool',
960
+ 'page_summaries',
961
+ 'serp_opportunities',
962
+ ...analysisTypes,
963
+ ],
964
+ excludedAdjacentScopes: [],
965
+ reasonForScope:
966
+ 'The user requested a plan that executes the currently open roadmap gaps for this topic.',
967
+ expectedOutcome:
968
+ 'Generate concrete plan items to create, refresh, consolidate, remove, link, or measure the pages called out by the open roadmap rows without cannibalizing existing topic coverage.',
969
+ };
970
+ }
971
+
972
+ const useRoadmapScope = topicId && openRoadmapItems.length > 0 &&
973
+ /roadmap|gaps|gap|new pages|new content|updates|refresh|comprehensive/i.test(userIntent ?? '');
974
+
975
+ let selected = null;
976
+ let preview = null;
977
+ if (useRoadmapScope) {
978
+ const scope = roadmapScope(topicId, topicName, entityId, openRoadmapItems);
979
+ preview = await api.post(\`/api/entities/\${entityId}/plan-scopes/preview\`, {
980
+ selectedBy: 'agent',
981
+ userIntent: q,
982
+ scope,
983
+ });
984
+ }
985
+ \`\`\`
986
+
987
+ If you are not in roadmap mode, use ranked scoped candidates:
988
+
860
989
  \`\`\`ts
861
990
  const candidates = await api.get(
862
991
  \`/api/entities/\${entityId}/plan-scopes/candidates?q=\${encodeURIComponent(q)}&limit=8&maxItems=8\`
@@ -866,14 +995,14 @@ const candidates = await api.get(
866
995
  Show the top 3 candidates with:
867
996
  - label
868
997
  - scope type
869
- - pages, gaps, answer cells, and decision candidates included
998
+ - pages, gaps, answer cells, roadmap rows, and decision candidates included
870
999
  - personas and decision stages if present
871
1000
  - expected outcome
872
1001
  - conflict state and warnings
873
1002
  - why you prefer one
874
1003
 
875
1004
  Prefer scopes that are:
876
- - decision-backed
1005
+ - roadmap-backed or decision-backed
877
1006
  - page-bounded or small topic-bounded
878
1007
  - clear about persona x decision stage x question
879
1008
  - conflict-clear
@@ -881,17 +1010,18 @@ Prefer scopes that are:
881
1010
 
882
1011
  If every candidate is weak, broaden the query once. If candidates are
883
1012
  still thin, say the source data is missing and suggest the prerequisite
884
- connection, scan, or KB work.
1013
+ connection, scan, KB work, or roadmap generation.
885
1014
 
886
1015
  ### Step 6 \u2014 Inspect conflicts before committing
887
1016
 
888
1017
  Never stage a scope blindly. Use preview when the user is leaning toward
889
1018
  a candidate or asks why it is safe.
890
1019
 
891
- Convert the candidate to a full scope without dropping the evidence
892
- bindings:
1020
+ For non-roadmap scopes, convert the candidate to a full scope without
1021
+ dropping the evidence bindings:
893
1022
 
894
1023
  \`\`\`ts
1024
+ selected = candidates.candidates[0];
895
1025
  function toScope(selected) {
896
1026
  return {
897
1027
  version: 1,
@@ -923,12 +1053,13 @@ function toScope(selected) {
923
1053
  };
924
1054
  }
925
1055
 
926
- const selected = candidates.candidates[0];
927
- const preview = await api.post(\`/api/entities/\${entityId}/plan-scopes/preview\`, {
928
- selectedBy: 'agent',
929
- userIntent: q,
930
- scope: toScope(selected),
931
- });
1056
+ if (!preview) {
1057
+ preview = await api.post(\`/api/entities/\${entityId}/plan-scopes/preview\`, {
1058
+ selectedBy: 'agent',
1059
+ userIntent: q,
1060
+ scope: toScope(selected),
1061
+ });
1062
+ }
932
1063
  \`\`\`
933
1064
 
934
1065
  If preview returns blocked conflicts, do not create the plan. Explain
@@ -956,9 +1087,11 @@ Create from the selected scope. Do not use legacy topic-plan or
956
1087
  opportunity-basket endpoints.
957
1088
 
958
1089
  \`\`\`ts
1090
+ const planLabel = selected?.label ?? preview.scope.label;
1091
+ const planDescription = selected?.expectedOutcome ?? preview.scope.expectedOutcome;
959
1092
  const plan = await api.post(\`/api/entities/\${entityId}/plans/from-scope\`, {
960
- name: selected.label,
961
- description: selected.expectedOutcome,
1093
+ name: planLabel,
1094
+ description: planDescription,
962
1095
  scope: preview.scope,
963
1096
  conflictOverride:
964
1097
  preview.conflicts.some(c => c.severity === 'warn')
@@ -975,9 +1108,11 @@ console.log(generation);
975
1108
  \`\`\`
976
1109
 
977
1110
  Generation must stay inside the selected scope. It should claim only
978
- the gaps and pages in the scope, cite \`decisionCandidateIds\`, carry
979
- conflict warnings into the audit, and return deferred or not-recommended
980
- items instead of stretching the scope to look productive.
1111
+ the gaps and pages in the scope, cite the selected evidence spine
1112
+ (\`topic_roadmap\` rows, scoped gaps, pages, answer cells, or
1113
+ \`decisionCandidateIds\`), carry conflict warnings into the audit, and
1114
+ return deferred or not-recommended items instead of stretching the scope
1115
+ to look productive.
981
1116
 
982
1117
  After generation, read the plan and verify it stayed grounded:
983
1118
 
@@ -992,7 +1127,155 @@ console.log(detail.items.map(i => ({
992
1127
  Explain what to review and which first 1-3 items are safest to move into
993
1128
  execution.
994
1129
 
995
- ### Step 10 \u2014 Set expectations
1130
+ ### Step 10 \u2014 Or hand-author the plan when the harness can do better
1131
+
1132
+ If the user wants a specific strategic outcome and the built-in plan
1133
+ generator is producing the wrong shape, the harness may directly author
1134
+ the plan into HG. This is allowed. Do it only after reading enough HG
1135
+ context to make the plan useful: diagnostic narrative, topic/pillar ids,
1136
+ topic roadmap rows, decision candidates, gaps, page signals,
1137
+ strategy/KB facts, and user constraints from the conversation.
1138
+
1139
+ Use this path when the outcome is "get the right plan artifact into HG"
1140
+ rather than "let HG generate whatever it thinks is next." The import
1141
+ creates a staging plan with provenance; it does not dispatch work.
1142
+
1143
+ \`\`\`ts
1144
+ const imported = await api.post(\`/api/entities/\${entityId}/plans/import\`, {
1145
+ source: 'codex-harness',
1146
+ name: 'Decision-stage proof sprint',
1147
+ description: 'Tighten evaluation pages around buyer objections and proof gaps.',
1148
+ narrative: [
1149
+ 'The strategic bet is...',
1150
+ 'The evidence says...',
1151
+ 'The execution risk is...',
1152
+ 'The expected outcome is...',
1153
+ ].join('
1154
+
1155
+ '),
1156
+ kind: 'scoped_plan',
1157
+ topicId,
1158
+ mode: 'grow',
1159
+ contextManifest: {
1160
+ diagnosticId,
1161
+ topicId,
1162
+ roadmapItemIds: openRoadmapItems.map(item => item.id),
1163
+ decisionCandidateIds: selected?.decisionCandidateIds ?? [],
1164
+ gapIds: selected?.gapIds ?? [],
1165
+ pageIds: selected?.pageIds ?? [],
1166
+ },
1167
+ inputSnapshot: {
1168
+ userIntent: q,
1169
+ selectedScope: selected ?? null,
1170
+ preview: preview ?? null,
1171
+ openRoadmapItems,
1172
+ topDecisionCandidates: decisions.candidates.slice(0, 10),
1173
+ },
1174
+ items: [
1175
+ {
1176
+ type: 'manual',
1177
+ kind: 'page_overhaul',
1178
+ title: 'Rewrite the comparison proof section',
1179
+ description: 'Make the evaluation page answer the buyer objection directly.',
1180
+ rationale: 'Grounded in the decision-stage answer gap and weak proof coverage.',
1181
+ pillarId: topicId,
1182
+ pillarName: topicName,
1183
+ targetPageUrl: 'https://example.com/product/comparison',
1184
+ sequence: 1,
1185
+ addressesLenses: ['conversion', 'supply'],
1186
+ brief: {
1187
+ objective: 'Win evaluation-stage trust for the selected persona.',
1188
+ acceptance: [
1189
+ 'Lead with a direct answer in the first 100 words',
1190
+ 'Add proof points tied to the named persona',
1191
+ ],
1192
+ evidence: {
1193
+ roadmapItemIds: openRoadmapItems.map(item => item.id),
1194
+ decisionCandidateIds: selected?.decisionCandidateIds ?? [],
1195
+ gapIds: selected?.gapIds ?? [],
1196
+ },
1197
+ },
1198
+ },
1199
+ ],
1200
+ });
1201
+
1202
+ console.log(imported.plan.id, imported.itemIds);
1203
+ \`\`\`
1204
+
1205
+ If the user has delegated the strategy call and the imported plan is
1206
+ ready for the team to use, inspect it and accept it:
1207
+
1208
+ \`\`\`ts
1209
+ const accepted = await api.post(\`/api/plans/\${imported.plan.id}/accept\`, {});
1210
+
1211
+ console.log(accepted.plan.id, accepted.plan.status);
1212
+ \`\`\`
1213
+
1214
+ Accepting promotes the plan artifact to \`active\`. It still does not
1215
+ dispatch work orders; item execution remains on the normal review/status
1216
+ path.
1217
+
1218
+ Use follow-up authoring endpoints when the user wants refinement:
1219
+
1220
+ \`\`\`ts
1221
+ await api.patch(\`/api/plans/\${planId}/authoring\`, {
1222
+ narrative: revisedNarrative,
1223
+ mode: 'defend',
1224
+ });
1225
+
1226
+ await api.patch(\`/api/plans/\${planId}/items/\${itemId}/authoring\`, {
1227
+ title: revisedTitle,
1228
+ rationale: revisedRationale,
1229
+ addressesLenses: ['conversion'],
1230
+ });
1231
+
1232
+ await api.put(\`/api/plans/\${planId}/items/\${itemId}/brief\`, {
1233
+ brief: revisedBrief,
1234
+ });
1235
+ \`\`\`
1236
+
1237
+ Important boundaries:
1238
+ - Direct-authored plans are imported as \`staging\`. Accept them only when
1239
+ the user has delegated that decision or after the user reviews the
1240
+ artifact.
1241
+ - Only edit/delete authored items while they are \`todo\` or \`review\`.
1242
+ Once an item is in progress, treat it as execution state.
1243
+ - Do not bypass conflict thinking. If you skipped scoped generation
1244
+ because the harness authored the strategy, still read existing plans
1245
+ and explain overlap risks.
1246
+ - Do not create work orders directly from the authored plan. Work orders
1247
+ are projected by HG when plan items move through the normal approval path.
1248
+
1249
+ ### Step 11 \u2014 Generate content briefs when the plan item is ready
1250
+
1251
+ For roadmap new-page rows or plan items that need a writer-ready brief,
1252
+ use the brief generator only when you can resolve a source question id
1253
+ from the roadmap row or its covered opportunity keys. Let the user add a
1254
+ thesis, proof point, competitor angle, product workflow, related product,
1255
+ use case, benefit, or unique take as \`guidance\`.
1256
+
1257
+ \`\`\`ts
1258
+ const brief = await api.post(
1259
+ \`/api/diagnostics/\${diagnosticId}/questions/\${questionId}/generate-brief\`,
1260
+ {
1261
+ targetPlanItemId: planItemId ?? null,
1262
+ guidance: userBriefGuidance ?? null,
1263
+ previousFailure: previousBriefFailure ?? null,
1264
+ }
1265
+ );
1266
+ console.log(brief);
1267
+ \`\`\`
1268
+
1269
+ A useful brief should cover focus keyword, secondary keywords, target
1270
+ questions, competitor/SERP and AEO shape, related products, use cases,
1271
+ benefits to include, the company's unique angle or thesis, outline, and
1272
+ key facts/proof the writer can cite.
1273
+
1274
+ If the generator asks for missing inputs, do not invent them. Surface the
1275
+ open questions to the user and use the brief chat/context flow to fill
1276
+ only those blanks. Then regenerate with the user's guidance.
1277
+
1278
+ ### Step 12 \u2014 Set expectations
996
1279
 
997
1280
  End with reality:
998
1281
 
@@ -1004,7 +1287,11 @@ End with reality:
1004
1287
 
1005
1288
  - **One bounded scope per plan.** Always.
1006
1289
  - **Decision candidates are the execution menu.** If a plan ignores them,
1007
- stop and investigate.
1290
+ stop and investigate, unless this is a roadmap-derived scope whose
1291
+ execution menu is the open roadmap rows.
1292
+ - **Topic roadmap rows are execution evidence.** Use them directly for
1293
+ topic-gap, new-page, page-refresh, consolidation, internal-link, and
1294
+ measurement planning.
1008
1295
  - **Imagination is hypothesis generation.** Promote it before planning;
1009
1296
  never execute it directly.
1010
1297
  - **Prefer conflict-clear scopes.** Warning scopes require explicit user acceptance.
@@ -1019,13 +1306,18 @@ End with reality:
1019
1306
  ## What success looks like
1020
1307
 
1021
1308
  - Source signal checked
1309
+ - Topic roadmap checked when the user asks about topic gaps, new pages,
1310
+ updates, or comprehensiveness
1022
1311
  - Decision candidates refreshed
1023
1312
  - Imagination candidates reviewed when useful
1024
1313
  - One bounded scope picked
1025
1314
  - Conflicts reviewed
1026
1315
  - One scoped plan created
1027
- - Scoped generation run
1028
- - Generated items cite decision candidates
1316
+ - Scoped generation run, or a hand-authored staging plan imported when
1317
+ the harness can produce the better strategic shape
1318
+ - Generated or authored items cite the selected evidence spine
1319
+ - Content briefs generated only from resolvable roadmap/plan-item source
1320
+ questions, with user guidance captured when needed
1029
1321
  - First execution items are obvious
1030
1322
  - User knows when to come back: 14 days for outcomes, sooner for approvals
1031
1323
 
@@ -1037,10 +1329,22 @@ End with reality:
1037
1329
  or \`POST /api/plans/:id/generate-topic\`.
1038
1330
  - Don't sort opportunities by score and list the top 10. That's not strategy.
1039
1331
  - Don't let URLs alone classify scope. Use the evidence Higrowth gathered.
1332
+ - Don't ignore open topic roadmap rows when the user asks for topic gaps,
1333
+ comprehensiveness, new pages, or content updates.
1040
1334
  - Don't drop \`answerCellIds\`, \`decisionCandidateIds\`, \`primaryPersonaIds\`,
1041
1335
  \`decisionStages\`, or \`scopeThesis\` when previewing or creating a scope.
1336
+ For roadmap scopes, preserve the roadmap rows in \`scopeThesis\` and
1337
+ include \`topic_roadmap\` in \`includedSignals\`.
1042
1338
  - Don't create a plan that overlaps blocked active work.
1043
1339
  - Don't create work orders from imagination candidates.
1340
+ - Don't use the authored-plan API as a shortcut around evidence. It is
1341
+ for writing a better plan artifact into HG after reading HG context,
1342
+ not for making up work.
1343
+ - Don't edit in-progress/published/verified plan items through authoring
1344
+ endpoints. Those are execution state.
1345
+ - Don't hand-write content briefs when the brief generator has a source
1346
+ question. Generate, inspect open questions, collect guidance, then
1347
+ regenerate.
1044
1348
  - Don't run a new scan by default. Check answer map, decision candidates,
1045
1349
  GSC, GA, and KB first; scan only when source signal is missing or stale.
1046
1350
  - Don't gloss over the KB. If the KB is empty, stop and run the
@@ -1228,7 +1532,7 @@ var SKILLS = [
1228
1532
  {
1229
1533
  slug: "higrowth-marketing-strategy",
1230
1534
  title: "Marketing strategy chat",
1231
- description: "Walk a diagnostic, pick a pillar, build the sprint plan.",
1535
+ description: "Walk a diagnostic, pick a scoped topic or roadmap, generate or hand-author the staging plan.",
1232
1536
  body: MARKETING_STRATEGY
1233
1537
  },
1234
1538
  {
@@ -1473,7 +1777,7 @@ function beginUpdateCheck(currentVersion) {
1473
1777
  // package.json
1474
1778
  var package_default = {
1475
1779
  name: "@higrowth/cli",
1476
- version: "0.3.3",
1780
+ version: "0.3.5",
1477
1781
  description: "Higrowth CLI \u2014 log in via browser, install Claude Code / Codex skills, manage the MCP connection.",
1478
1782
  type: "module",
1479
1783
  license: "Apache-2.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@higrowth/cli",
3
- "version": "0.3.3",
3
+ "version": "0.3.5",
4
4
  "description": "Higrowth CLI — log in via browser, install Claude Code / Codex skills, manage the MCP connection.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",