create-snipara 2.0.3 → 2.0.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 (3) hide show
  1. package/README.md +8 -0
  2. package/dist/index.js +339 -8
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -171,6 +171,7 @@ The advanced flow asks for:
171
171
 
172
172
  The generated agent templates cover:
173
173
 
174
+ - Snipara skill pack under `.snipara/templates/skills/`
174
175
  - Codex `AGENTS.md`
175
176
  - Claude Code `CLAUDE.md`
176
177
  - Cursor `.cursor/rules/snipara.mdc`
@@ -179,6 +180,13 @@ The generated agent templates cover:
179
180
  - Mistral Le Chat connector, Vibe config, and LangChain `ChatMistralAI.bindTools` snippets
180
181
  - Gemini, VS Code, Continue, and custom HTTP MCP reference snippets
181
182
 
183
+ The generated skill pack includes portable, client-neutral skills for Snipara
184
+ onboarding, context workflow, safe parallel work, agent security, and proof
185
+ gates. Clients with native skill support can copy each folder from
186
+ `.snipara/templates/skills/` into the client's skill location. Clients without
187
+ native skills should keep using `AGENTS.md`, `CLAUDE.md`, or project rules as the
188
+ shared instruction surface.
189
+
182
190
  For Codex, `SNIPARA_API_KEY` is the only generated bearer token environment
183
191
  variable. If Codex lazily exposes only a minimal Snipara MCP surface after
184
192
  restart, force exact discovery for `snipara_recall`, `snipara_context_query`,
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import { homedir } from "os";
13
13
  // package.json
14
14
  var package_default = {
15
15
  name: "create-snipara",
16
- version: "2.0.3",
16
+ version: "2.0.5",
17
17
  description: "Onboard Snipara Hosted MCP Context + Memory with auth, companion workflows, and optional Snipara Sandbox",
18
18
  main: "dist/index.js",
19
19
  type: "module",
@@ -1360,6 +1360,7 @@ async function createAgentTemplates(answers) {
1360
1360
  fs.writeFileSync(template.path, template.content);
1361
1361
  }
1362
1362
  console.log(chalk.green(" Created .snipara/templates agent snippets"));
1363
+ writeAgentSkillPackTemplates(path.join(templatesDir, "skills"), answers);
1363
1364
  writeIfMissing(
1364
1365
  path.join(process.cwd(), "AGENTS.md"),
1365
1366
  buildAgentsMdTemplate(answers),
@@ -1406,6 +1407,320 @@ function writeIfMissing(filePath, content, label) {
1406
1407
  function buildHostedMcpEndpoint(answers) {
1407
1408
  return `${API_URL}/mcp/${answers.projectSlug}`;
1408
1409
  }
1410
+ function writeAgentSkillPackTemplates(skillsDir, answers) {
1411
+ const skills = buildSniparaSkillPackTemplates(answers);
1412
+ for (const skill of skills) {
1413
+ const skillDir = path.join(skillsDir, skill.name);
1414
+ const agentsDir = path.join(skillDir, "agents");
1415
+ fs.mkdirSync(agentsDir, { recursive: true });
1416
+ fs.writeFileSync(path.join(skillDir, "SKILL.md"), skill.skillMd);
1417
+ fs.writeFileSync(path.join(agentsDir, "openai.yaml"), buildSkillOpenAiYaml(skill, answers));
1418
+ }
1419
+ console.log(chalk.green(" Created .snipara/templates/skills Snipara skill pack"));
1420
+ }
1421
+ function buildSkillOpenAiYaml(skill, answers) {
1422
+ return [
1423
+ "interface:",
1424
+ ` display_name: ${JSON.stringify(skill.displayName)}`,
1425
+ ` short_description: ${JSON.stringify(skill.shortDescription)}`,
1426
+ ` default_prompt: ${JSON.stringify(skill.defaultPrompt)}`,
1427
+ "",
1428
+ "dependencies:",
1429
+ " tools:",
1430
+ ' - type: "mcp"',
1431
+ ' value: "snipara"',
1432
+ ' description: "Snipara Hosted MCP"',
1433
+ ' transport: "streamable_http"',
1434
+ ` url: ${JSON.stringify(buildHostedMcpEndpoint(answers))}`,
1435
+ "",
1436
+ "policy:",
1437
+ " allow_implicit_invocation: true",
1438
+ ""
1439
+ ].join("\n");
1440
+ }
1441
+ function buildSniparaSkillPackTemplates(answers) {
1442
+ const endpoint = buildHostedMcpEndpoint(answers);
1443
+ const companionPrefix = answers.installCompanion ? "snipara-companion" : "npx -y snipara-companion@latest";
1444
+ return [
1445
+ {
1446
+ name: "snipara-onboarding",
1447
+ displayName: "Snipara Onboarding",
1448
+ shortDescription: "Connect agents to Snipara safely",
1449
+ defaultPrompt: "Use $snipara-onboarding to connect this project to Snipara Hosted MCP.",
1450
+ skillMd: buildSniparaOnboardingSkill(endpoint, companionPrefix)
1451
+ },
1452
+ {
1453
+ name: "snipara-context-workflow",
1454
+ displayName: "Snipara Context Workflow",
1455
+ shortDescription: "Use context, memory, and workflows",
1456
+ defaultPrompt: "Use $snipara-context-workflow to ground this task in Snipara context.",
1457
+ skillMd: buildSniparaContextWorkflowSkill(endpoint, companionPrefix)
1458
+ },
1459
+ {
1460
+ name: "snipara-safe-parallel-work",
1461
+ displayName: "Snipara Safe Parallel Work",
1462
+ shortDescription: "Coordinate agents without collisions",
1463
+ defaultPrompt: "Use $snipara-safe-parallel-work before editing shared files in parallel.",
1464
+ skillMd: buildSniparaSafeParallelWorkSkill(companionPrefix)
1465
+ },
1466
+ {
1467
+ name: "snipara-agent-security",
1468
+ displayName: "Snipara Agent Security",
1469
+ shortDescription: "Protect secrets, logs, and memory",
1470
+ defaultPrompt: "Use $snipara-agent-security to review this agent workflow for secret and auth risks.",
1471
+ skillMd: buildSniparaAgentSecuritySkill(endpoint, companionPrefix)
1472
+ },
1473
+ {
1474
+ name: "snipara-proof-gates",
1475
+ displayName: "Snipara Proof Gates",
1476
+ shortDescription: "Verify work before calling it done",
1477
+ defaultPrompt: "Use $snipara-proof-gates to define the proof needed before this task is done.",
1478
+ skillMd: buildSniparaProofGatesSkill(companionPrefix)
1479
+ }
1480
+ ];
1481
+ }
1482
+ function buildSniparaOnboardingSkill(endpoint, companionPrefix) {
1483
+ return [
1484
+ "---",
1485
+ "name: snipara-onboarding",
1486
+ 'description: "Set up Snipara Hosted MCP for an AI agent workspace, validate tool availability, configure API keys through environment variables, generate or merge agent instruction files, and run create-snipara or snipara-companion doctor checks. Use when onboarding a user, repository, assistant, or MCP-capable client to Snipara."',
1487
+ "---",
1488
+ "",
1489
+ "# Snipara Onboarding",
1490
+ "",
1491
+ "## Start Gate",
1492
+ "",
1493
+ `Use the Hosted MCP endpoint: \`${endpoint}\`. Keep the API key in \`SNIPARA_API_KEY\` or the client secret store. Never paste keys into tracked files, prompts, logs, screenshots, or durable memory.`,
1494
+ "",
1495
+ "Validate availability with a tool-oriented call such as `snipara_help(list_all=true)`, `snipara_settings`, or a lightweight `snipara_context_query`. Empty MCP resources or resource templates do not prove an outage because Snipara may be exposed as a tool-only MCP server.",
1496
+ "",
1497
+ "## Setup Steps",
1498
+ "",
1499
+ "1. Detect the target client: Codex, Claude Code, Cursor, VS Code, Continue, ChatGPT/OpenAI MCP, Claude Desktop, Mistral, Gemini, Orca-style MCP clients, or a generic HTTP MCP client.",
1500
+ "2. Prefer `npx create-snipara@latest` for initial setup. It generates Hosted MCP config, `AGENTS.md`, client-specific snippets, and the Snipara skill pack under `.snipara/templates/skills`.",
1501
+ "3. Merge generated instructions into existing files instead of replacing project-specific guidance.",
1502
+ `4. Run \`${companionPrefix} doctor\` when Companion is installed or available through npx.`,
1503
+ "5. Restart or reload the client after MCP configuration changes, then verify tool discovery again.",
1504
+ "",
1505
+ "## Client Notes",
1506
+ "",
1507
+ "- Codex: merge `.snipara/templates/codex-config.toml` into the user or project Codex config if the app does not load project config automatically.",
1508
+ "- Claude Code: keep `AGENTS.md` as the shared source and use `CLAUDE.md` as compatibility guidance.",
1509
+ "- Cursor: use `.cursor/rules/snipara.mdc` for always-applied project guidance.",
1510
+ "- Generic MCP clients: use the generated HTTP MCP reference and the shared `AGENTS.md` rules.",
1511
+ "- Clients with native skills: copy each folder under `.snipara/templates/skills` into the client's skill location.",
1512
+ "",
1513
+ "## Failure Handling",
1514
+ "",
1515
+ "If broad discovery shows only a partial tool surface, call `snipara_help(list_all=true)` before concluding a tool is unavailable. If the client still lags after config changes, use Companion commands as a local fallback for recall, query, and task commit until the MCP session refreshes.",
1516
+ ""
1517
+ ].join("\n");
1518
+ }
1519
+ function buildSniparaContextWorkflowSkill(endpoint, companionPrefix) {
1520
+ return [
1521
+ "---",
1522
+ "name: snipara-context-workflow",
1523
+ 'description: "Use Snipara Hosted MCP for project context, reviewed memory, source-grounded answers, code graph context, workflow mode selection, and durable task closeout. Use when an agent starts a task, resumes work, answers project-specific questions, edits code, or needs to distinguish source truth from memory."',
1524
+ "---",
1525
+ "",
1526
+ "# Snipara Context Workflow",
1527
+ "",
1528
+ "## Source Order",
1529
+ "",
1530
+ `Start from Hosted MCP at \`${endpoint}\`, then local files and tests for exact current state.`,
1531
+ "",
1532
+ "1. Validate Snipara tool availability with `snipara_help`, `snipara_settings`, or a lightweight context query.",
1533
+ "2. Use `snipara_recall` for durable decisions, preferences, validated learnings, and session carryover.",
1534
+ "3. Use `snipara_context_query` for documents, product truth, runbooks, architecture notes, source material, and answer packs.",
1535
+ "4. Use `snipara_get_chunk` before relying on precise wording from returned references.",
1536
+ "5. Use local `rg`, file reads, git commands, lint, type-checks, and tests for exact working-tree truth.",
1537
+ "",
1538
+ "## Workflow Modes",
1539
+ "",
1540
+ "- LITE: small known-file work with low risk.",
1541
+ "- STANDARD: normal project work that benefits from context and code graph follow-up.",
1542
+ "- FULL: multi-file, risky, release/deploy, auth, billing, schema, migration, architectural, or compaction-prone work.",
1543
+ "- Orchestrated FULL: work that needs htasks, production proof gates, routing, or parallel workers.",
1544
+ "",
1545
+ "Use Companion for managed workflow state when available:",
1546
+ "",
1547
+ "```bash",
1548
+ `${companionPrefix} workflow start --goal "<goal>" --plan-file <plan.json>`,
1549
+ `${companionPrefix} workflow phase-start <phase_id>`,
1550
+ `${companionPrefix} workflow phase-commit <phase_id> --summary "<outcome>" --files <files...>`,
1551
+ `${companionPrefix} workflow resume --include-session-context`,
1552
+ "```",
1553
+ "",
1554
+ "## Code Graph And Impact",
1555
+ "",
1556
+ "Use exposed `snipara_code_*` tools for structural questions such as callers, imports, neighbors, paths, symbol cards, and impact. When Companion is installed and the local worktree may be dirty or ahead, prefer Companion code commands because they can select a local overlay and report `sourceSelection`.",
1557
+ "",
1558
+ "Run impact before risky multi-file changes, PR reviews, route/service/job changes, auth, billing, deployment, schema, migrations, or explicit gap analysis.",
1559
+ "",
1560
+ "## Memory Closeout",
1561
+ "",
1562
+ "End substantial work with `snipara_end_of_task_commit` or a managed Companion phase/final commit. Store only durable decisions, learnings, preferences, todos, and reusable context. Never store secrets, raw logs, transient command output, or guesses.",
1563
+ ""
1564
+ ].join("\n");
1565
+ }
1566
+ function buildSniparaSafeParallelWorkSkill(companionPrefix) {
1567
+ return [
1568
+ "---",
1569
+ "name: snipara-safe-parallel-work",
1570
+ 'description: "Coordinate safe parallel work with Snipara Team Sync, collaboration sessions, claims, leases, guard checks, handoffs, and conflict outcomes. Use before editing shared files, taking over work, resuming a dirty workspace, committing, pushing, deploying, or running migrations in a team or multi-agent environment."',
1571
+ "---",
1572
+ "",
1573
+ "# Snipara Safe Parallel Work",
1574
+ "",
1575
+ "## Start Or Resume",
1576
+ "",
1577
+ "Before editing in a shared repository, check what changed and whether another human or agent owns the same surface.",
1578
+ "",
1579
+ "```bash",
1580
+ `${companionPrefix} workflow resume --include-session-context`,
1581
+ `${companionPrefix} team-sync what-changed`,
1582
+ `${companionPrefix} collaboration status`,
1583
+ "```",
1584
+ "",
1585
+ "For new work, leave a visible breadcrumb:",
1586
+ "",
1587
+ "```bash",
1588
+ `${companionPrefix} team-sync start-work --summary "<task>" --files <files...>`,
1589
+ "```",
1590
+ "",
1591
+ "## Guard Before Risk",
1592
+ "",
1593
+ "Run collaboration guards before large edits, commits, pushes, deploys, migrations, schema work, package releases, or work on files likely to be touched by others.",
1594
+ "",
1595
+ "```bash",
1596
+ `${companionPrefix} collaboration guard --files <files...>`,
1597
+ `${companionPrefix} collaboration guard --profile pre-commit --enforce`,
1598
+ `${companionPrefix} collaboration guard --profile pre-push --enforce`,
1599
+ `${companionPrefix} collaboration guard --profile pre-deploy --enforce`,
1600
+ "```",
1601
+ "",
1602
+ "Treat outcomes as follows:",
1603
+ "",
1604
+ "- `CLEAR`: proceed.",
1605
+ "- `WATCH`: proceed, but leave a handoff and watch the surface.",
1606
+ "- `REQUIRES_ACK` or `REVIEW_REQUIRED`: coordinate explicitly before proceeding.",
1607
+ "- `BLOCKED`: stop until the conflict, lease, or ownership issue is resolved.",
1608
+ "",
1609
+ "## Claims And Leases",
1610
+ "",
1611
+ "Use exclusive claims only for genuinely risky surfaces such as schema, migrations, deployment scripts, auth, billing, package publication, or production data handling. Release claims when work finishes or becomes blocked.",
1612
+ "",
1613
+ "## Handoff",
1614
+ "",
1615
+ "End multi-agent work with a concise handoff:",
1616
+ "",
1617
+ "```bash",
1618
+ `${companionPrefix} team-sync handoff --summary "<changed>" --next "<recommended next action>" --files <files...> --attention watch`,
1619
+ "```",
1620
+ "",
1621
+ "Do not treat stale local warnings as final truth. Verify hosted active sessions and leases before blocking useful work.",
1622
+ ""
1623
+ ].join("\n");
1624
+ }
1625
+ function buildSniparaAgentSecuritySkill(endpoint, companionPrefix) {
1626
+ return [
1627
+ "---",
1628
+ "name: snipara-agent-security",
1629
+ 'description: "Apply security guardrails to Snipara-enabled agent workflows, including API key handling, secret storage, memory hygiene, logging, webhook/OAuth callback review, URL handling, and fail-open versus fail-closed decisions. Use for onboarding, automation, reviews, and any task that touches credentials or sensitive project data."',
1630
+ "---",
1631
+ "",
1632
+ "# Snipara Agent Security",
1633
+ "",
1634
+ "## Trust Boundary",
1635
+ "",
1636
+ `Hosted MCP endpoint: \`${endpoint}\`. The API key belongs in environment variables or the client secret store, not in tracked files.`,
1637
+ "",
1638
+ "Before changing an agent workflow, identify:",
1639
+ "",
1640
+ "- caller identity and auth mode",
1641
+ "- project or team ownership boundary",
1642
+ "- input source and whether it is user-controlled",
1643
+ "- side effects such as writes, webhooks, deploys, memory writes, or package publication",
1644
+ "- logs, telemetry, returned errors, and persisted artifacts",
1645
+ "",
1646
+ "## Secrets",
1647
+ "",
1648
+ "- Never commit API keys, OAuth tokens, private keys, database URLs, cookies, raw headers, or session secrets.",
1649
+ "- Never store secrets in Snipara memory, handoff summaries, task commits, answer captures, or examples.",
1650
+ "- Use `.env`, `.env.local`, OS keychains, launch agents, CI secrets, or MCP client secret fields.",
1651
+ "- If a secret was committed or pasted into a durable artifact, treat it as compromised and rotate it.",
1652
+ "",
1653
+ "## Memory And Logs",
1654
+ "",
1655
+ "Persist durable reasoning, not sensitive payloads. Store decisions, workflows, and validated learnings. Do not store raw logs, transient command output, customer data dumps, credentials, or unreviewed guesses.",
1656
+ "",
1657
+ "Sanitize logs before sharing them with agents. Keep identifiers bounded and avoid raw request bodies unless the user explicitly approves and the data is safe.",
1658
+ "",
1659
+ "## Agent Automation",
1660
+ "",
1661
+ "For agent hooks, collaboration guards, and deploy gates, preserve the intended fail-open or fail-closed behavior. Security-critical writes should fail closed; developer-assist hints may fail open with a visible warning.",
1662
+ "",
1663
+ "Use Companion checks when available:",
1664
+ "",
1665
+ "```bash",
1666
+ `${companionPrefix} doctor`,
1667
+ `${companionPrefix} collaboration guard --profile pre-commit --enforce`,
1668
+ `${companionPrefix} stuck-guard status`,
1669
+ "```",
1670
+ "",
1671
+ "## Review Hotspots",
1672
+ "",
1673
+ "Review OAuth/device flows, GitHub App callbacks, webhooks, internal API secrets, generated MCP configs, URL path encoding, JSON embedded into script contexts, CORS/CSP changes, rate limits, and package hooks.",
1674
+ "",
1675
+ "State the threat reduced, files or configuration changed, tests run, and any deferred security work. Do not imply broad security coverage from a narrow patch.",
1676
+ ""
1677
+ ].join("\n");
1678
+ }
1679
+ function buildSniparaProofGatesSkill(companionPrefix) {
1680
+ return [
1681
+ "---",
1682
+ "name: snipara-proof-gates",
1683
+ 'description: "Define and run proof gates before an agent calls Snipara-enabled work done, including local tests, lint/type-checks, code impact, package surface checks, deploy smoke tests, registry verification, and task commit evidence. Use for releases, package updates, production changes, risky edits, and user-visible workflow changes."',
1684
+ "---",
1685
+ "",
1686
+ "# Snipara Proof Gates",
1687
+ "",
1688
+ "## Done Means Proven",
1689
+ "",
1690
+ "Do not call work complete just because code was edited. Match proof to blast radius and report gaps honestly.",
1691
+ "",
1692
+ "## Common Gates",
1693
+ "",
1694
+ "- Small code change: focused unit test, lint/type-check for touched package, and local behavior check.",
1695
+ "- Route/service/job/auth/billing/schema/deploy change: code impact, focused tests, type-check, and environment-specific smoke.",
1696
+ "- Package change: package tests, build, pack dry-run or pack smoke, registry comparison if publishing, and `npx` or clean install verification after publish.",
1697
+ "- Production deploy: health checks, route-specific probes, live version marker when available, and log scan for the changed behavior.",
1698
+ "- Documentation/template change: generated artifact inspection plus the smallest test proving the generator still emits the expected files.",
1699
+ "",
1700
+ "## Snipara-Specific Gates",
1701
+ "",
1702
+ "Use context and impact before risky conclusions:",
1703
+ "",
1704
+ "```bash",
1705
+ `${companionPrefix} brief --task "<task>" --changed-files <files...> --diff-summary "<summary>"`,
1706
+ `${companionPrefix} code impact --changed-files <files...> --diff-summary "<summary>"`,
1707
+ "```",
1708
+ "",
1709
+ "Use managed workflow commits for durable proof:",
1710
+ "",
1711
+ "```bash",
1712
+ `${companionPrefix} workflow phase-commit <phase_id> --summary "<outcome>" --files <files...>`,
1713
+ `${companionPrefix} final-commit --summary "<final outcome>" --files <files...>`,
1714
+ "```",
1715
+ "",
1716
+ "If Companion is unavailable, use hosted `snipara_code_impact` when exposed and `snipara_end_of_task_commit` for durable closeout.",
1717
+ "",
1718
+ "## Reporting",
1719
+ "",
1720
+ "Report commands run, files changed, published or deployed versions, smoke results, and anything not verified. Keep package-release status separate from app-deploy status.",
1721
+ ""
1722
+ ].join("\n");
1723
+ }
1409
1724
  function buildAgentsMdTemplate(answers) {
1410
1725
  return `# AGENTS.md
1411
1726
 
@@ -1432,6 +1747,9 @@ This project uses Snipara Hosted MCP for project context and reviewed memory.
1432
1747
  \`snipara-companion recall\`, \`snipara-companion query\`, and
1433
1748
  \`snipara-companion task-commit\` as the reliable local fallback, then restart
1434
1749
  or reload Codex after MCP config changes.
1750
+ - If the client supports native skills, install the generated Snipara skill pack
1751
+ from \`.snipara/templates/skills\`. Keep this \`AGENTS.md\` file as the shared
1752
+ fallback for clients without native skill support.
1435
1753
 
1436
1754
  ${EXPERIENCE_GOAL_SECTION}
1437
1755
 
@@ -1440,7 +1758,9 @@ Agent task lifecycle:
1440
1758
  1. Start every new thread by validating hosted MCP availability, then use
1441
1759
  project-scoped \`snipara_recall\` and a targeted \`snipara_context_query\` before
1442
1760
  falling back to local documentation search.
1443
- 2. Use \`snipara_context_query\` for docs, business context, client/project truth, architecture notes, runbooks, and narrative source material.
1761
+ 2. Use \`snipara_context_query\` for docs, business context, client/project truth,
1762
+ architecture notes, runbooks, and narrative source material. Keep simple Q&A
1763
+ and single-source lookups on a targeted \`snipara_context_query\`.
1444
1764
  3. When \`snipara_context_query\` returns \`answer_pack\`, treat it as the first-pass response plan: use its source facts, caveats, source map, and verification checklist before drafting claims.
1445
1765
  4. Use \`snipara_get_chunk\` to load cited source sections returned by reference-based queries before relying on precise wording.
1446
1766
  5. For coding tasks, choose a workflow mode before editing: LITE for small
@@ -1453,8 +1773,11 @@ Agent task lifecycle:
1453
1773
  context and \`snipara-companion code impact\` before risky multi-file changes, PR
1454
1774
  reviews, routes, services, jobs, auth, billing, deployment, schema, migrations,
1455
1775
  or explicit "what is missing" assessments.
1456
- 8. Use \`snipara_plan\` for complex work in any plan when exposed; reserve
1457
- \`snipara_decompose\` for FULL-mode work when the hosted server exposes it.
1776
+ 8. Use \`snipara_plan\` for complex or multi-surface work in any plan when
1777
+ exposed. For FULL-mode audits, comparisons, roadmap/implementation planning,
1778
+ release readiness, or package-surface reviews, use \`snipara_decompose\` to
1779
+ preserve the work axes and \`snipara_multi_query\` to execute independent
1780
+ follow-up questions when Pro+ tools are exposed.
1458
1781
  9. When the LLM has produced a visible multi-phase plan and \`snipara-companion\`
1459
1782
  is installed, keep the machine plan in JSON and run
1460
1783
  \`snipara-companion workflow start --goal "<goal>" --plan-file <plan_json_file>\`.
@@ -1502,6 +1825,7 @@ Use Snipara Hosted MCP before answering project-specific questions.
1502
1825
  - Auth: use \`SNIPARA_API_KEY\` from the environment. Never commit keys.
1503
1826
  - At the start of every new thread, validate hosted MCP with a tool-oriented call such as \`snipara_settings\`, \`tools/list\`, or a lightweight \`snipara_context_query\`. Do not treat empty MCP resources/templates as an outage because Snipara may be tool-only.
1504
1827
  - If a session exposes only a subset of expected Snipara tools, call \`snipara_help(list_all=true)\` and compare exact tool names before concluding a tool is unavailable. If only a partial surface remains after exact discovery, use \`snipara-companion recall\`, \`snipara-companion query\`, and \`snipara-companion task-commit\` as a reliable local fallback.
1828
+ - If the client supports native skills, install the generated Snipara skill pack from \`.snipara/templates/skills\`. Keep \`AGENTS.md\` as the shared fallback for clients without native skill support.
1505
1829
 
1506
1830
  ${EXPERIENCE_GOAL_SECTION}
1507
1831
 
@@ -1509,7 +1833,7 @@ ${EXPERIENCE_GOAL_SECTION}
1509
1833
  - Use \`snipara_context_query\` for source truth and \`snipara_get_chunk\` for exact cited sections.
1510
1834
  - When \`snipara_context_query\` returns \`answer_pack\`, use its facts, caveats, source map, and verification checklist before drafting claims.
1511
1835
  - For coding tasks, choose a workflow mode before editing: LITE for small single-phase changes, FULL managed workflow for multi-file, risky, release/deploy, architectural, compaction-prone, or future-maintainer-sensitive work.
1512
- - Use \`snipara_plan\` for complex work when exposed; reserve \`snipara_decompose\` for FULL-mode work when the hosted server exposes it.
1836
+ - Use \`snipara_plan\` for complex or multi-surface work when exposed. Keep simple Q&A on targeted \`snipara_context_query\`; for FULL-mode audits, comparisons, roadmap/implementation planning, release readiness, or package-surface reviews, use \`snipara_decompose\` to preserve axes and \`snipara_multi_query\` for independent follow-up questions when Pro+ tools are exposed.
1513
1837
  - Use \`snipara_code_callers\`, \`snipara_code_imports\`, \`snipara_code_neighbors\`, or \`snipara_code_shortest_path\` for canonical structural code questions.
1514
1838
  - For code impact and structural code questions, use \`snipara-companion code callers/imports/neighbors/shortest-path/impact\` first when \`snipara-companion\` is installed; it auto-selects hosted MCP for clean indexed code or the local overlay for dirty/ahead worktrees and reports \`sourceSelection\`. Use hosted \`snipara_code_impact\` only when companion is unavailable or after push/reindex for canonical graph impact.
1515
1839
  - Run \`snipara-companion code impact\` before risky multi-file changes, PR reviews, routes, services, jobs, auth, billing, deployment, schema, migrations, or explicit "what is missing" assessments.
@@ -1541,6 +1865,7 @@ This workspace uses Snipara Hosted MCP for current project context, business/cli
1541
1865
  - Endpoint: \`${buildHostedMcpEndpoint(answers)}\`
1542
1866
  - At the start of every new thread, validate hosted MCP with a tool-oriented call such as \`snipara_settings\`, \`tools/list\`, or a lightweight \`snipara_context_query\`. Do not treat empty MCP resources/templates as an outage because Snipara may be tool-only.
1543
1867
  - If a session exposes only a subset of expected Snipara tools, call \`snipara_help(list_all=true)\` and compare exact tool names before concluding a tool is unavailable. If only a partial surface remains after exact discovery, use \`snipara-companion recall\`, \`snipara-companion query\`, and \`snipara-companion task-commit\` as a reliable local fallback.
1868
+ - If the client supports native skills, install the generated Snipara skill pack from \`.snipara/templates/skills\`. Keep \`AGENTS.md\` as the shared fallback for clients without native skill support.
1544
1869
 
1545
1870
  ${EXPERIENCE_GOAL_SECTION}
1546
1871
 
@@ -1554,7 +1879,7 @@ ${EXPERIENCE_GOAL_SECTION}
1554
1879
  - Run \`snipara-companion code impact\` before risky multi-file changes, PR reviews, routes, services, jobs, auth, billing, deployment, schema, migrations, or explicit "what is missing" assessments.
1555
1880
  - On paid Context plans, use \`snipara_code_symbol_card\` before editing important symbols.
1556
1881
  - Check every \`snipara_code_*\` response for indexed commit SHA, indexing time, included files, coverage, and freshness warnings.
1557
- - Use \`snipara_plan\` for complex work when available; use \`snipara_decompose\` when deeper decomposition is needed and the hosted server exposes it.
1882
+ - Use \`snipara_plan\` for complex or multi-surface work when available. Keep simple Q&A on targeted \`snipara_context_query\`; for FULL-mode audits, comparisons, roadmap/implementation planning, release readiness, or package-surface reviews, use \`snipara_decompose\` to preserve axes and \`snipara_multi_query\` for independent follow-up questions when Pro+ tools are exposed.
1558
1883
  - Use local file reads, \`rg\`, \`git status --short\`, and tests for exact code edits and current working-tree state.
1559
1884
  - If a broad query is slow, retry once with a narrow keyword query before falling back to local search.
1560
1885
  - When \`snipara-companion\` is installed and the LLM has a visible multi-phase plan, keep the machine plan in JSON, use \`snipara-companion workflow start\`, \`phase-start\`, and \`phase-commit\` per phase, and after \`workflow resume\` rerun \`workflow phase-start\` before editing again.
@@ -2520,7 +2845,7 @@ ${guidance.map((line) => `- ${line}`).join("\n")}
2520
2845
  - Start substantial work with \`snipara_recall\` and \`snipara_context_query\`.
2521
2846
  - Use \`answer_pack\` facts, caveats, source maps, and verification checks before making claims.
2522
2847
  - For coding tasks, choose a workflow mode before editing: LITE for small single-phase changes, FULL managed workflow for multi-file, risky, release/deploy, architectural, compaction-prone, or future-maintainer-sensitive work.
2523
- - Use \`snipara_plan\` for complex work when exposed; reserve \`snipara_decompose\` for FULL-mode work when the hosted server exposes it.
2848
+ - Use \`snipara_plan\` for complex or multi-surface work when exposed. Keep simple Q&A on targeted \`snipara_context_query\`; for FULL-mode audits, comparisons, roadmap/implementation planning, release readiness, or package-surface reviews, use \`snipara_decompose\` to preserve axes and \`snipara_multi_query\` for independent follow-up questions when Pro+ tools are exposed.
2524
2849
  - Use \`snipara_code_symbol_card\` for important symbols. For risky multi-file changes, PR reviews, routes, services, jobs, auth, billing, deployment, schema, migrations, or explicit "what is missing" assessments, use \`snipara-companion code impact\` first when companion is available; use hosted \`snipara_code_impact\` only when companion is unavailable or after push/reindex for canonical graph impact.
2525
2850
  - Use the installed \`snipara-companion\` binary for low-latency hooks; use \`${COMPANION_NPX_COMMAND}\` for one-off terminal commands when freshness matters.
2526
2851
  - If a broad query is slow, retry once with a narrow keyword query before falling back to local search.
@@ -2941,6 +3266,11 @@ async function runValidation(answers, includeHostedCheck, options = {}) {
2941
3266
  status: detection.files.sniparaTemplates && detection.files.cursorRule && detection.files.codexConfig ? "pass" : "warn",
2942
3267
  detail: detection.files.sniparaTemplates && detection.files.cursorRule && detection.files.codexConfig ? ".snipara/templates, .cursor/rules/snipara.mdc, and .codex/config.toml present" : "Agent templates, Cursor rule, or Codex config missing"
2943
3268
  });
3269
+ checks.push({
3270
+ name: "snipara_skill_pack",
3271
+ status: detection.files.sniparaSkillPack ? "pass" : "warn",
3272
+ detail: detection.files.sniparaSkillPack ? ".snipara/templates/skills contains the Snipara skill pack" : "Snipara skill pack missing from .snipara/templates/skills"
3273
+ });
2944
3274
  if (targetClient === "codex") {
2945
3275
  checks.push(getCodexConfigCheck());
2946
3276
  }
@@ -3502,7 +3832,8 @@ function detectEnvironment() {
3502
3832
  cursorDir: fs.existsSync(path.join(homedir(), ".cursor")),
3503
3833
  mistralVibeConfig: fs.existsSync(path.join(process.cwd(), ".vibe", "config.toml")) || fs.existsSync(path.join(homedir(), ".vibe", "config.toml")),
3504
3834
  sniparaCompanionPack: fs.existsSync(path.join(process.cwd(), ".snipara", "companion")),
3505
- sniparaTemplates: fs.existsSync(path.join(process.cwd(), ".snipara", "templates"))
3835
+ sniparaTemplates: fs.existsSync(path.join(process.cwd(), ".snipara", "templates")),
3836
+ sniparaSkillPack: fs.existsSync(path.join(process.cwd(), ".snipara", "templates", "skills"))
3506
3837
  },
3507
3838
  tooling: {
3508
3839
  node: commandExists("node"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-snipara",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "description": "Onboard Snipara Hosted MCP Context + Memory with auth, companion workflows, and optional Snipara Sandbox",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",