mammoth-cli 2.0.26__tar.gz → 2.0.28__tar.gz

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 (219) hide show
  1. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/PKG-INFO +13 -7
  2. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/README.md +11 -5
  3. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/__init__.py +1 -1
  4. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +4 -1
  5. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +1 -1
  6. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +4 -5
  7. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +2 -2
  8. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +20 -0
  9. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +1 -1
  10. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +25 -0
  11. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +1 -1
  12. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/registry.py +2 -0
  13. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/skill.py +28 -0
  14. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/view.py +11 -0
  15. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/command_contract.py +6 -0
  16. mammoth_cli-2.0.28/mammoth_cli/skills/steering.py +106 -0
  17. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/pyproject.toml +2 -2
  18. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/skill.yaml +67 -0
  19. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/view.yaml +3 -1
  20. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/sdk-methods.yaml +2 -2
  21. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/.gitignore +0 -0
  22. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/LICENSE +0 -0
  23. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/__main__.py +0 -0
  24. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/app.py +0 -0
  25. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  26. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  27. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  28. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  29. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  30. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  31. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  32. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  33. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  34. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  35. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  36. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  37. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  38. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  39. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  40. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  41. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  42. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  43. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  44. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  45. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  46. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  47. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  48. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  49. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  50. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  51. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  52. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  53. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  54. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  55. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  56. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  57. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  58. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  59. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  60. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  61. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  62. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  63. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  64. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  65. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  66. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  67. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  68. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  69. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  70. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  71. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  72. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  73. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  74. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  75. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  76. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  77. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  78. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  79. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  80. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  81. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  82. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  83. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  84. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  85. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/__init__.py +0 -0
  86. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/activity.py +0 -0
  87. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/addon.py +0 -0
  88. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/agent.py +0 -0
  89. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/ai.py +0 -0
  90. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/annotation.py +0 -0
  91. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/auth.py +0 -0
  92. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/automation.py +0 -0
  93. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/batch.py +0 -0
  94. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/billing.py +0 -0
  95. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/browse.py +0 -0
  96. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/capability.py +0 -0
  97. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/client_app.py +0 -0
  98. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/completion.py +0 -0
  99. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/config.py +0 -0
  100. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/connector.py +0 -0
  101. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/context.py +0 -0
  102. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/dashboard.py +0 -0
  103. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/data_app.py +0 -0
  104. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/dataset.py +0 -0
  105. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/doctor.py +0 -0
  106. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/external_key.py +0 -0
  107. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/file.py +0 -0
  108. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/folder.py +0 -0
  109. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/job.py +0 -0
  110. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/notification.py +0 -0
  111. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/parameter.py +0 -0
  112. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/project.py +0 -0
  113. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/report.py +0 -0
  114. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/schedule.py +0 -0
  115. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/schema.py +0 -0
  116. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/snippet.py +0 -0
  117. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/support.py +0 -0
  118. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/template.py +0 -0
  119. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/trash.py +0 -0
  120. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/upgrade.py +0 -0
  121. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/user.py +0 -0
  122. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/view_ops.py +0 -0
  123. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/webhook.py +0 -0
  124. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/workflow.py +0 -0
  125. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/commands/workspace.py +0 -0
  126. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/context/__init__.py +0 -0
  127. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/context/credentials.py +0 -0
  128. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/context/endpoint.py +0 -0
  129. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/context/profiles.py +0 -0
  130. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/context/resolver.py +0 -0
  131. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/contracts/__init__.py +0 -0
  132. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/contracts/auth.py +0 -0
  133. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/errors/__init__.py +0 -0
  134. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/errors/envelope.py +0 -0
  135. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/manifest/__init__.py +0 -0
  136. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/manifest/loader.py +0 -0
  137. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/messages/__init__.py +0 -0
  138. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/output/__init__.py +0 -0
  139. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/output/envelope.py +0 -0
  140. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/output/normalize.py +0 -0
  141. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/output/policy.py +0 -0
  142. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/output/progress.py +0 -0
  143. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/output/render.py +0 -0
  144. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/py.typed +0 -0
  145. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/__init__.py +0 -0
  146. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/confirm.py +0 -0
  147. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/executor.py +0 -0
  148. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/input_loader.py +0 -0
  149. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/invocation.py +0 -0
  150. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/options.py +0 -0
  151. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/parents.py +0 -0
  152. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/runlog.py +0 -0
  153. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/session.py +0 -0
  154. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/strict.py +0 -0
  155. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/updates.py +0 -0
  156. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/runtime/validate.py +0 -0
  157. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/__init__.py +0 -0
  158. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/argspec.py +0 -0
  159. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/coerce.py +0 -0
  160. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/conditions.py +0 -0
  161. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/dispatch.py +0 -0
  162. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/factory.py +0 -0
  163. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/input_fields.py +0 -0
  164. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/mapping.py +0 -0
  165. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/openapi_types.py +0 -0
  166. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/positionals.py +0 -0
  167. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/protocol.py +0 -0
  168. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/sdk_service.py +0 -0
  169. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/testing.py +0 -0
  170. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/services/type_system.py +0 -0
  171. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/skills/__init__.py +0 -0
  172. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/skills/installer.py +0 -0
  173. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/mammoth_cli/testing.py +0 -0
  174. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/activity.yaml +0 -0
  175. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/addon.yaml +0 -0
  176. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/agent.yaml +0 -0
  177. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/ai.yaml +0 -0
  178. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/annotation.yaml +0 -0
  179. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/auth.yaml +0 -0
  180. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/automation.yaml +0 -0
  181. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/batch.yaml +0 -0
  182. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/billing.yaml +0 -0
  183. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/browse.yaml +0 -0
  184. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/capability.yaml +0 -0
  185. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/client-app.yaml +0 -0
  186. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/completion.yaml +0 -0
  187. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/config.yaml +0 -0
  188. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/connector.yaml +0 -0
  189. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/context.yaml +0 -0
  190. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/dashboard.yaml +0 -0
  191. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/data-app.yaml +0 -0
  192. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/dataset.yaml +0 -0
  193. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/doctor.yaml +0 -0
  194. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/external-key.yaml +0 -0
  195. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/file.yaml +0 -0
  196. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/folder.yaml +0 -0
  197. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/job.yaml +0 -0
  198. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/log.yaml +0 -0
  199. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/notification.yaml +0 -0
  200. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/parameter.yaml +0 -0
  201. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/project.yaml +0 -0
  202. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/report.yaml +0 -0
  203. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/schedule.yaml +0 -0
  204. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/schema.yaml +0 -0
  205. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/snippet.yaml +0 -0
  206. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/support.yaml +0 -0
  207. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/template.yaml +0 -0
  208. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/trash.yaml +0 -0
  209. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/upgrade.yaml +0 -0
  210. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/user.yaml +0 -0
  211. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/version.yaml +0 -0
  212. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/webhook.yaml +0 -0
  213. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/workflow.yaml +0 -0
  214. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/commands/workspace.yaml +0 -0
  215. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/openapi-operations.yaml +0 -0
  216. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/schema-v1.json +0 -0
  217. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/manifests/sdk-catalog.source.yaml +0 -0
  218. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/openapi/metadata.json +0 -0
  219. {mammoth_cli-2.0.26 → mammoth_cli-2.0.28}/spec/openapi/openapi.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mammoth-cli
3
- Version: 2.0.26
3
+ Version: 2.0.28
4
4
  Summary: Command-line interface for the Mammoth Analytics platform
5
5
  Project-URL: homepage, https://mammoth.io
6
6
  Project-URL: repository, https://github.com/EdgeMetric/mammothsdk
@@ -17,7 +17,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
17
17
  Requires-Python: <3.15,>=3.12
18
18
  Requires-Dist: jsonschema>=4.20
19
19
  Requires-Dist: keyring<26,>=25.7
20
- Requires-Dist: mammoth-io<0.8,>=0.7.12
20
+ Requires-Dist: mammoth-io<0.8,>=0.7.13
21
21
  Requires-Dist: platformdirs<5,>=4.10
22
22
  Requires-Dist: pydantic<3,>=2.13
23
23
  Requires-Dist: pyyaml<7,>=6
@@ -81,9 +81,9 @@ command. An agent does this by asking the operator to run the login below in
81
81
  their own terminal; the CLI never reads credentials from environment variables:
82
82
 
83
83
  ```bash
84
- mammoth skill list
85
- mammoth skill path
86
- # Read the installed SKILL.md before operating.
84
+ mammoth skill show
85
+ # Read the SKILL.md it prints before operating; `mammoth skill agents-md install`
86
+ # writes a short steering block into AGENTS.md so future sessions start here.
87
87
  mammoth auth status
88
88
  # Compare the reported endpoint with the intended target before doctor.
89
89
  # Use app for production; use release only when explicitly intended.
@@ -214,8 +214,8 @@ Use Mammoth Analytics only through the `mammoth` CLI in bash; run
214
214
  create an API key (key + secret) and note your workspace id, then run in
215
215
  your own terminal: mammoth auth login" — never ask for, read, or pass a key
216
216
  or secret yourself, and never run auth login.
217
- 3. Require `mammoth doctor` to pass, then `cat` the SKILL.md at
218
- `mammoth skill path` (data.canonical) and follow it.
217
+ 3. Require `mammoth doctor` to pass, then run `mammoth skill show` and
218
+ follow the guide it prints.
219
219
  Work inside `mammoth project ensure 'PROJECT NAME'` unless I name a project;
220
220
  take ids only from reads; `schema get COMMAND_ID` before a new command; read
221
221
  results back before reporting.
@@ -286,6 +286,12 @@ COMMAND.ID` to verify a request shape against the installed CLI.
286
286
  Agent-readable indexes: [`docs/llms.txt`](https://github.com/EdgeMetric/mammothsdk/blob/main/mammoth-cli/docs/llms.txt) and
287
287
  [`docs/llms-full.txt`](https://github.com/EdgeMetric/mammothsdk/blob/main/mammoth-cli/docs/llms-full.txt).
288
288
 
289
+ ## Production readiness
290
+
291
+ [`docs/production-readiness.md`](https://github.com/EdgeMetric/mammothsdk/blob/main/mammoth-cli/docs/production-readiness.md)
292
+ is the one-page verdict: what is proven live, what is not, and where every
293
+ claim's evidence lives. Read it before promising a deliverable.
294
+
289
295
  ## Capability-matrix status
290
296
 
291
297
  The committed machine-readable release matrix is the canonical repository
@@ -53,9 +53,9 @@ command. An agent does this by asking the operator to run the login below in
53
53
  their own terminal; the CLI never reads credentials from environment variables:
54
54
 
55
55
  ```bash
56
- mammoth skill list
57
- mammoth skill path
58
- # Read the installed SKILL.md before operating.
56
+ mammoth skill show
57
+ # Read the SKILL.md it prints before operating; `mammoth skill agents-md install`
58
+ # writes a short steering block into AGENTS.md so future sessions start here.
59
59
  mammoth auth status
60
60
  # Compare the reported endpoint with the intended target before doctor.
61
61
  # Use app for production; use release only when explicitly intended.
@@ -186,8 +186,8 @@ Use Mammoth Analytics only through the `mammoth` CLI in bash; run
186
186
  create an API key (key + secret) and note your workspace id, then run in
187
187
  your own terminal: mammoth auth login" — never ask for, read, or pass a key
188
188
  or secret yourself, and never run auth login.
189
- 3. Require `mammoth doctor` to pass, then `cat` the SKILL.md at
190
- `mammoth skill path` (data.canonical) and follow it.
189
+ 3. Require `mammoth doctor` to pass, then run `mammoth skill show` and
190
+ follow the guide it prints.
191
191
  Work inside `mammoth project ensure 'PROJECT NAME'` unless I name a project;
192
192
  take ids only from reads; `schema get COMMAND_ID` before a new command; read
193
193
  results back before reporting.
@@ -258,6 +258,12 @@ COMMAND.ID` to verify a request shape against the installed CLI.
258
258
  Agent-readable indexes: [`docs/llms.txt`](https://github.com/EdgeMetric/mammothsdk/blob/main/mammoth-cli/docs/llms.txt) and
259
259
  [`docs/llms-full.txt`](https://github.com/EdgeMetric/mammothsdk/blob/main/mammoth-cli/docs/llms-full.txt).
260
260
 
261
+ ## Production readiness
262
+
263
+ [`docs/production-readiness.md`](https://github.com/EdgeMetric/mammothsdk/blob/main/mammoth-cli/docs/production-readiness.md)
264
+ is the one-page verdict: what is proven live, what is not, and where every
265
+ claim's evidence lives. Read it before promising a deliverable.
266
+
261
267
  ## Capability-matrix status
262
268
 
263
269
  The committed machine-readable release matrix is the canonical repository
@@ -6,7 +6,7 @@ not implement a second HTTP client and does not call private SDK members.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- __version__ = "2.0.26"
9
+ __version__ = "2.0.28"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mammoth-cli
3
- version: 2.0.26
3
+ version: 2.0.28
4
4
  description: "Use Mammoth Analytics from a terminal: install or authenticate the CLI, discover its live command contract, and safely manage projects, data, views, pipelines, dashboards, exports, and handoffs."
5
5
  ---
6
6
 
@@ -45,6 +45,9 @@ before the next step.
45
45
 
46
46
  - Ids are positionals; request fields are one `--input '{...}'` document;
47
47
  there are no per-field flags (`project create NAME`, not `--name`).
48
+ - `mammoth skill show --input '{"file": "references/recipes/transforms.md"}'`
49
+ prints any file of this skill; `mammoth skill agents-md install` writes a
50
+ steering block into a repository's AGENTS.md so later sessions start here.
48
51
  - `COMMAND --help` lists the input fields with types; `mammoth schema get
49
52
  COMMAND_ID` is the full contract (add `--input '{"full": true}'` for the
50
53
  JSON Schema); `schema list` is the family index, `schema list view` one
@@ -140,4 +140,4 @@ Ran once: `workflow.create`, `workflow.delete`, `workflow.get`, `workflow.graph`
140
140
 
141
141
  Ran once: `workspace.app-usage`, `workspace.get`, `workspace.list`, `workspace.segment.list`, `workspace.segment.update`, `workspace.storage-breakdown`, `workspace.user.list`
142
142
 
143
- Evidence collected on CLI releases 1.1.5 through 2.0.24; each row's release is recorded in `docs/release-capability-matrix.json` (`evidence_version`). A row that ran on an older release has not been re-run since unless its note says so. Details: `docs/capability-evidence/` in the repository.
143
+ Evidence collected on CLI releases 1.1.5 through 2.0.27; each row's release is recorded in `docs/release-capability-matrix.json` (`evidence_version`). A row that ran on an older release has not been re-run since unless its note says so. Details: `docs/capability-evidence/` in the repository.
@@ -1,7 +1,7 @@
1
1
  # What is proven on release
2
2
 
3
3
  Generated from `docs/release-capability-matrix.json`; do not edit by hand.
4
- The CLI publishes 552 commands. 455 of them bind one of the 528 API operations in the matrix; the remainder are local commands (`schema`, `auth`, `doctor`, `log`, ...) or typed variants that share an operation (every `view transform *` command submits through `view.task.add`). 261 bound commands ran once successfully on release, 2 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer.
4
+ The CLI publishes 554 commands. 455 of them bind one of the 528 API operations in the matrix; the remainder are local commands (`schema`, `auth`, `doctor`, `log`, ...) or typed variants that share an operation (every `view transform *` command submits through `view.task.add`). 262 bound commands ran once successfully on release, 2 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer.
5
5
 
6
6
  Status meanings:
7
7
 
@@ -18,7 +18,7 @@ The typed `view transform *` commands all submit through `view.task.add`; its ma
18
18
  | Family | Commands | Ran once | Not supported | Untried |
19
19
  |---|---|---|---|---|
20
20
  | `dashboard` | 104 | 81 | 2 | 21 |
21
- | `view` | 62 | 57 | 0 | 5 |
21
+ | `view` | 62 | 58 | 0 | 4 |
22
22
  | `support` | 45 | 9 | 0 | 36 |
23
23
  | `billing` | 23 | 4 | 0 | 19 |
24
24
  | `connector` | 22 | 3 | 0 | 19 |
@@ -110,13 +110,12 @@ Ran once: `project.bulk-delete`, `project.bulk-update`, `project.checkpoint.list
110
110
 
111
111
  ## `view`
112
112
 
113
- Ran once: `view.active-user.list`, `view.active-user.mark`, `view.ai.generate-data`, `view.ai.profile`, `view.bulk-delete`, `view.checkpoint.create`, `view.checkpoint.delete`, `view.checkpoint.get`, `view.checkpoint.list`, `view.checkpoint.update`, `view.conditional-format.create`, `view.conditional-format.delete-all`, `view.conditional-format.list`, `view.conditional-format.update`, `view.create`, `view.data-check.create`, `view.data-check.delete`, `view.data-check.get`, `view.data-check.list`, `view.data.get`, `view.data.query`, `view.delete`, `view.derivative.create`, `view.derivative.data`, `view.derivative.delete`, `view.derivative.list`, `view.derivative.update`, `view.draft.command`, `view.export.delete`, `view.export.get`, `view.export.list`, `view.export.publish-db`, `view.export.update`, `view.exportable-config.apply`, `view.exportable-config.get`, `view.get`, `view.list`, `view.parameter-context`, `view.pipeline.edit`, `view.pipeline.get`, `view.pipeline.items`, `view.pipeline.rerun`, `view.preview`, `view.restore`, `view.task.add`, `view.task.delete`, `view.task.get`, `view.task.list`, `view.task.preview`, `view.task.update`, `view.trash`, `view.version.apply`, `view.version.delete`, `view.version.get`, `view.version.list`, `view.version.update`
113
+ Ran once: `view.active-user.list`, `view.active-user.mark`, `view.ai.generate-data`, `view.ai.profile`, `view.bulk-delete`, `view.checkpoint.create`, `view.checkpoint.delete`, `view.checkpoint.get`, `view.checkpoint.list`, `view.checkpoint.update`, `view.conditional-format.create`, `view.conditional-format.delete-all`, `view.conditional-format.list`, `view.conditional-format.update`, `view.create`, `view.data-check.create`, `view.data-check.delete`, `view.data-check.get`, `view.data-check.list`, `view.data.get`, `view.data.query`, `view.delete`, `view.derivative.create`, `view.derivative.data`, `view.derivative.delete`, `view.derivative.list`, `view.derivative.update`, `view.draft.command`, `view.export.create`, `view.export.delete`, `view.export.get`, `view.export.list`, `view.export.publish-db`, `view.export.update`, `view.exportable-config.apply`, `view.exportable-config.get`, `view.get`, `view.list`, `view.parameter-context`, `view.pipeline.edit`, `view.pipeline.get`, `view.pipeline.items`, `view.pipeline.rerun`, `view.preview`, `view.restore`, `view.task.add`, `view.task.delete`, `view.task.get`, `view.task.list`, `view.task.preview`, `view.task.update`, `view.trash`, `view.version.apply`, `view.version.delete`, `view.version.get`, `view.version.list`, `view.version.update`
114
114
 
115
115
  | Command | State | Note |
116
116
  |---|---|---|
117
117
  | `view.ai.generation-info` | observed blocker | backend: GET /workspaces/4/projects/24/datasets/54/dataviews/76/data/generate -> HTTP 400 5GENR011 NOT_IMPLEMENTED 'Not implemented', request_id:null |
118
118
  | `view.data-check.update` | observed blocker | backend_error: PATCH with the schema's documented {op: command, path: enable/disable, value: null} shape returns HTTP 500 empty body (CLI outcome_unknown, exit 7) while the mutatio |
119
- | `view.export.create` | observed blocker | backend: CLI accepts the request (exit 0, job 358 accepted on POST /dataviews/76/actions), but job get 358 -> status:error, response:{"error":{"message":"'destination'"}} (a raw Py |
120
119
  | `view.export.publish-db-update` | CLI defect fixed, untried since | 2.0.16 (example value is the documented {"odbc_type": "postgres"} object (a bare string is rejected)) |
121
120
 
122
- Evidence collected on CLI releases 1.1.5 through 2.0.24; each row's release is recorded in `docs/release-capability-matrix.json` (`evidence_version`). A row that ran on an older release has not been re-run since unless its note says so. Details: `docs/capability-evidence/` in the repository.
121
+ Evidence collected on CLI releases 1.1.5 through 2.0.27; each row's release is recorded in `docs/release-capability-matrix.json` (`evidence_version`). A row that ran on an older release has not been re-run since unless its note says so. Details: `docs/capability-evidence/` in the repository.
@@ -1,6 +1,6 @@
1
1
  # Published CLI command catalog
2
2
 
3
- This generated catalog is a lookup table for every command in the published CLI manifest, currently 552; each entry carries its release status line. It is a command-contract index, not an assertion that every backend/OpenAPI operation has a CLI binding. For an exact local CLI contract, run `mammoth schema get COMMAND_ID`; `mammoth capability list` is an API-binding inventory and can omit typed/local CLI routes. For focused workflows, read the [recipes index](recipes/index.md). Sensitive structured input must come from a private file or pipe; never put secrets in literal argv.
3
+ This generated catalog is a lookup table for every command in the published CLI manifest, currently 554; each entry carries its release status line. It is a command-contract index, not an assertion that every backend/OpenAPI operation has a CLI binding. For an exact local CLI contract, run `mammoth schema get COMMAND_ID`; `mammoth capability list` is an API-binding inventory and can omit typed/local CLI routes. For focused workflows, read the [recipes index](recipes/index.md). Sensitive structured input must come from a private file or pipe; never put secrets in literal argv.
4
4
 
5
5
  Load only the applicable domain file:
6
6
 
@@ -35,7 +35,7 @@ Load only the applicable domain file:
35
35
  - [report](commands/report.md) — 1 published commands
36
36
  - [schedule](commands/schedule.md) — 5 published commands
37
37
  - [schema](commands/schema.md) — 3 published commands
38
- - [skill](commands/skill.md) — 5 published commands
38
+ - [skill](commands/skill.md) — 7 published commands
39
39
  - [snippet](commands/snippet.md) — 8 published commands
40
40
  - [support](commands/support.md) — 45 published commands
41
41
  - [template](commands/template.md) — 5 published commands
@@ -2,6 +2,16 @@
2
2
 
3
3
  Every command returns the standard JSON envelope. On nonzero exit, read the error envelope and its `recovery_commands`; do not guess request fields. "Status on release" is joined from `docs/release-capability-matrix.json`: *ran once* means one bounded live run succeeded on the named CLI release, *untried* means nobody has run it, *not supported* means the backend refuses it. When this file disagrees with [capabilities](../capabilities.md) or a recipe, they win. Envelope shapes: [machine output](../machine-output.md).
4
4
 
5
+ ### `skill.agents-md.install`
6
+
7
+ Run: `mammoth skill agents-md install`. Exact input fields: `mammoth schema get skill.agents-md.install`.
8
+
9
+ Example: `mammoth skill agents-md install`. Placeholders are illustrative; resolve IDs and input from observed reads.
10
+
11
+ Result: `SkillAgentsMdInstallResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
12
+
13
+ Status on release: untried; no live run recorded.
14
+
5
15
  ### `skill.install`
6
16
 
7
17
  Run: `mammoth skill install`. Exact input fields: `mammoth schema get skill.install`.
@@ -32,6 +42,16 @@ Result: `SkillPathResult`; mutation `read`, confirmation `none`, wait policy `no
32
42
 
33
43
  Status on release: untried; no live run recorded.
34
44
 
45
+ ### `skill.show`
46
+
47
+ Run: `mammoth skill show`. Exact input fields: `mammoth schema get skill.show`.
48
+
49
+ Example: `mammoth skill show`. Placeholders are illustrative; resolve IDs and input from observed reads.
50
+
51
+ Result: `SkillShowResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
52
+
53
+ Status on release: untried; no live run recorded.
54
+
35
55
  ### `skill.uninstall`
36
56
 
37
57
  Run: `mammoth skill uninstall`. Exact input fields: `mammoth schema get skill.uninstall`.
@@ -382,7 +382,7 @@ Example: `mammoth view export create 123 --input '{"export_spec": {"DATAVIEW_ID"
382
382
 
383
383
  Result: `ViewExportCreateResult`; mutation `external_effect`, confirmation `yes_always`, wait policy `returns_job`.
384
384
 
385
- Status on release: observed blocker — backend: CLI accepts the request (exit 0, job 358 accepted on POST /dataviews/76/actions), but job get 358 -> status:error, response:{"error":{"message":"'destination'"}} (a raw Py. Re-check before relying on it.
385
+ Status on release: ran once on CLI 2.0.27 — cross-project send 2026-09-19: exit 0 on release with CLI 2.0.27. Raw internal_dataset export accepted (job 831 add_action) and created dataset 113 in project 57. Without USER_ID the same spec is 4GENR007 Validation error with no detail (the backend checks th…
386
386
 
387
387
  ### `view.export.csv`
388
388
 
@@ -22,6 +22,31 @@ If `schema get view.export.csv` rejects requested fields, preserve the
22
22
  structured error and discover another declared export route rather than using
23
23
  raw HTTP.
24
24
 
25
+ ## Send a view into another project (parallel send, branch-out)
26
+
27
+ `view export dataset` writes the view's rows into a Mammoth dataset **as a
28
+ pipeline step of the source view**, so the copy is refreshed every time the
29
+ source pipeline re-runs; existing tasks and existing exports (for example a
30
+ Power BI send) are not touched — it is appended at the end of the pipeline.
31
+ `target_project_id` puts the dataset in another project (proven on release:
32
+ view 134 in project 58 → dataset 114 in project 57, refreshed 302 → 301 rows
33
+ after a filter was added upstream).
34
+
35
+ ```bash
36
+ mammoth view export dataset SOURCE_VIEW_ID SOURCE_DATASET_ID --yes \
37
+ --input '{"dataset_name": "Finance feed", "target_project_id": TARGET_PROJECT_ID}'
38
+ # -> {"dataset_id": N, "project_id": TARGET_PROJECT_ID, "next": "mammoth view list N --project TARGET_PROJECT_ID"}
39
+ mammoth view export list SOURCE_VIEW_ID SOURCE_DATASET_ID # handler internal_dataset, status executed, TARGET_DS_ID N
40
+ ```
41
+
42
+ `target_ds_id` writes into an existing dataset instead of creating one
43
+ (`save_as_mode` `REPLACE_IN_DS` or `APPEND_TO_DS`). Read the delivery back in
44
+ the target project (`view list N --project P`, `view data get`) before
45
+ reporting it. Do not build this with `view export create`: the raw
46
+ `internal_dataset` spec needs `USER_ID` and the `export_project` /
47
+ `project_id` / `source_project_id` trio, and without them the backend answers
48
+ `4GENR007 Validation error` with no detail; the typed command fills them.
49
+
25
50
  ## Destination exports that carry a secret
26
51
 
27
52
  `schema get` lists `secret_fields` for every typed destination export
@@ -19,7 +19,7 @@ or secrets in an argument, prompt, transcript, or checkpoint.
19
19
  your own initiative. The SDK (`mammoth-io`) comes with the CLI. If a later
20
20
  envelope shows `meta.update_available`, run the `command` it names before
21
21
  the next task step, then continue on the new version.
22
- 2. Locate the installed guidance with `mammoth skill path` and read `SKILL.md`; open a reference only when the routing
22
+ 2. Read the installed guidance with `mammoth skill show` (`--input '{"file": "references/..."}'` prints one reference); open a reference only when the routing
23
23
  table sends you there. `references/commands/*.md` are per-command lookups,
24
24
  not upfront reading. If a skill install is required for the agent host,
25
25
  run `mammoth skill install` and verify ownership
@@ -175,9 +175,11 @@ HANDLERS: dict[str, Handler] = {
175
175
  "doctor": doctor_cmd.doctor,
176
176
  "completion.show": completion_cmd.completion_show,
177
177
  "completion.install": completion_cmd.completion_install,
178
+ "skill.agents-md.install": skill_cmd.skill_agents_md_install,
178
179
  "skill.install": skill_cmd.skill_install,
179
180
  "skill.list": skill_cmd.skill_list,
180
181
  "skill.path": skill_cmd.skill_path,
182
+ "skill.show": skill_cmd.skill_show,
181
183
  "skill.uninstall": skill_cmd.skill_uninstall,
182
184
  "skill.update": skill_cmd.skill_update,
183
185
  "capability.list": _capability_list,
@@ -57,3 +57,31 @@ def skill_path(invocation: Invocation) -> HandlerResult:
57
57
  """Show the canonical skill path and the computed destination paths."""
58
58
  agents, scope, _force = _options(invocation)
59
59
  return installer.path(agents, scope), {}
60
+
61
+
62
+ def skill_show(invocation: Invocation) -> HandlerResult:
63
+ """Print the bundled SKILL.md, or one reference file, as text."""
64
+ from mammoth_cli.errors.envelope import CODE_RESOURCE_NOT_FOUND, EXIT_NOT_FOUND, CliError
65
+ from mammoth_cli.skills import steering
66
+
67
+ document = invocation.load_input() or {}
68
+ file = document.get("file")
69
+ try:
70
+ return steering.show(str(file) if file else None), {}
71
+ except FileNotFoundError as exc:
72
+ raise CliError(
73
+ code=CODE_RESOURCE_NOT_FOUND,
74
+ message=f"'{exc}' is not a file of the bundled skill.",
75
+ exit_status=EXIT_NOT_FOUND,
76
+ hint="Paths are relative to the skill directory, e.g. references/recipes/index.md.",
77
+ recovery_commands=["mammoth skill path"],
78
+ ) from exc
79
+
80
+
81
+ def skill_agents_md_install(invocation: Invocation) -> HandlerResult:
82
+ """Write or refresh the <mammoth-cli> steering block in AGENTS.md (or the given path)."""
83
+ from mammoth_cli.skills import steering
84
+
85
+ document = invocation.load_input() or {}
86
+ path = document.get("path")
87
+ return steering.install_steering(str(path) if path else None), {}
@@ -1864,4 +1864,15 @@ def view_export_specialized(invocation: Invocation) -> HandlerResult:
1864
1864
  if dataset_id is None:
1865
1865
  dataset_id = _resolve_dataset_id(service, invocation, dataview_id, document)
1866
1866
  data = service.call_view(dataview_id, method, dataset_id=dataset_id, **kwargs)
1867
+ if invocation.command_id == "view.export.dataset" and isinstance(data, int):
1868
+ # The SDK returns the bare id of the dataset written to; name it, and
1869
+ # say which project it landed in, so the agent's next read is obvious.
1870
+ target_project = kwargs.get("target_project_id")
1871
+ data = {
1872
+ "dataset_id": data,
1873
+ "project_id": int(target_project) if target_project is not None else project_id,
1874
+ "source_view_id": dataview_id,
1875
+ "next": f"mammoth view list {data}"
1876
+ + (f" --project {int(target_project)}" if target_project is not None else ""),
1877
+ }
1867
1878
  return data, _meta(invocation, auth.workspace_id, project_id)
@@ -284,6 +284,10 @@ _LOCAL_CONTRACT_FIELDS: dict[str, tuple[FieldSpec, ...]] = {
284
284
  FieldSpec("run_id", required=False, annotation=str | None, default=None),
285
285
  ),
286
286
  "skill.list": (),
287
+ "skill.show": (FieldSpec("file", required=False, annotation=str | None, default=None),),
288
+ "skill.agents-md.install": (
289
+ FieldSpec("path", required=False, annotation=str | None, default=None),
290
+ ),
287
291
  "skill.path": (
288
292
  FieldSpec("agents", required=False, annotation=list[str] | None, default=None),
289
293
  FieldSpec("scope", required=False, annotation=str, default="user"),
@@ -348,9 +352,11 @@ _LOCAL_COMMANDS = frozenset(
348
352
  "schema.find",
349
353
  "schema.get",
350
354
  "schema.list",
355
+ "skill.agents-md.install",
351
356
  "skill.install",
352
357
  "skill.list",
353
358
  "skill.path",
359
+ "skill.show",
354
360
  "skill.uninstall",
355
361
  "skill.update",
356
362
  "upgrade",
@@ -0,0 +1,106 @@
1
+ """Steering text for agent instruction files, and the bundled-skill reader.
2
+
3
+ ``mammoth skill agents-md install`` writes one ``<mammoth-cli>…</mammoth-cli>``
4
+ block into a repository's ``AGENTS.md`` (or ``CLAUDE.md``); re-running replaces
5
+ the block in place, so upgrading the CLI and reinstalling refreshes stale
6
+ instructions without duplicating them. ``mammoth skill show`` prints the
7
+ bundled ``SKILL.md`` (or one of its reference files) so a cold-start agent
8
+ loads the guide with one command instead of resolving a path and reading it.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import re
14
+ from pathlib import Path
15
+
16
+ from mammoth_cli import __version__
17
+ from mammoth_cli.skills.installer import SKILL_NAME, canonical_skill_dir
18
+
19
+ BLOCK_OPEN = "<mammoth-cli>"
20
+ BLOCK_CLOSE = "</mammoth-cli>"
21
+ DEFAULT_STEERING_PATH = "AGENTS.md"
22
+
23
+ #: The steering block, without the tags. Kept short on purpose: it points the
24
+ #: agent at ``mammoth skill show``, which holds the actual guide.
25
+ STEERING_BODY = """## Mammoth Analytics
26
+
27
+ Use the `mammoth` CLI for all Mammoth work; do not call the REST API or the
28
+ Python SDK directly. Before the first Mammoth command in a session run
29
+ `mammoth doctor` (it must pass), then `mammoth skill show` and follow that
30
+ guide. If `mammoth` is missing, install it with `pip install mammoth-cli`
31
+ (or `uv tool install mammoth-cli`). If `mammoth auth status` shows no
32
+ credentials, tell the operator the exact `mammoth auth login` command to run
33
+ in their own terminal and wait; never ask for, read, or pass a key or secret.
34
+ Piped output is compact JSON. Take ids only from reads; run `mammoth schema get
35
+ COMMAND_ID` before a command you have not used; destructive commands need
36
+ `--yes --confirm ID`, and only for ids this task created.
37
+ """
38
+
39
+ _BLOCK_RE = re.compile(re.escape(BLOCK_OPEN) + r".*?" + re.escape(BLOCK_CLOSE) + r"\n?", re.DOTALL)
40
+
41
+
42
+ def steering_block() -> str:
43
+ """The full block, tags included, as written into the instructions file."""
44
+ stamp = (
45
+ f"<!-- written by mammoth-cli {__version__}; "
46
+ "rerun `mammoth skill agents-md install` to refresh -->"
47
+ )
48
+ return f"{BLOCK_OPEN}\n{stamp}\n{STEERING_BODY}{BLOCK_CLOSE}\n"
49
+
50
+
51
+ def install_steering(path: str | None = None, cwd: Path | None = None) -> dict[str, object]:
52
+ """Create or refresh the steering block in ``path`` (default ``AGENTS.md``).
53
+
54
+ Returns:
55
+ ``{"path", "action", "skill_version"}`` where ``action`` is
56
+ ``created`` (file did not exist), ``replaced`` (an earlier block was
57
+ updated in place), ``appended`` (file existed without a block) or
58
+ ``unchanged`` (the block was already current).
59
+ """
60
+ base = cwd or Path.cwd()
61
+ target = Path(path or DEFAULT_STEERING_PATH)
62
+ if not target.is_absolute():
63
+ target = base / target
64
+ block = steering_block()
65
+ if target.exists():
66
+ current = target.read_text(encoding="utf-8")
67
+ if _BLOCK_RE.search(current):
68
+ updated = _BLOCK_RE.sub(lambda _m: block, current, count=1)
69
+ action = "unchanged" if updated == current else "replaced"
70
+ else:
71
+ separator = "" if current.endswith("\n") or not current else "\n"
72
+ updated = f"{current}{separator}\n{block}" if current else block
73
+ action = "appended"
74
+ else:
75
+ target.parent.mkdir(parents=True, exist_ok=True)
76
+ updated = block
77
+ action = "created"
78
+ if action != "unchanged":
79
+ target.write_text(updated, encoding="utf-8")
80
+ return {"path": str(target), "action": action, "skill_version": __version__}
81
+
82
+
83
+ def show(file: str | None = None) -> dict[str, object]:
84
+ """Return the text of ``SKILL.md`` or of one bundled reference file.
85
+
86
+ Args:
87
+ file: A path relative to the skill directory, such as
88
+ ``references/recipes/transforms.md``. Defaults to ``SKILL.md``.
89
+
90
+ Raises:
91
+ FileNotFoundError: when ``file`` is not a bundled skill file (paths
92
+ outside the skill directory are refused the same way).
93
+ """
94
+ root = canonical_skill_dir().resolve()
95
+ relative = file or "SKILL.md"
96
+ candidate = (root / relative).resolve()
97
+ if root not in candidate.parents and candidate != root:
98
+ raise FileNotFoundError(relative)
99
+ if not candidate.is_file():
100
+ raise FileNotFoundError(relative)
101
+ return {
102
+ "skill": SKILL_NAME,
103
+ "file": relative,
104
+ "path": str(candidate),
105
+ "text": candidate.read_text(encoding="utf-8"),
106
+ }
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.0.26"
3
+ version = "2.0.28"
4
4
  description = "Command-line interface for the Mammoth Analytics platform"
5
5
  authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
6
6
  readme = "README.md"
7
7
  license = "LicenseRef-Proprietary"
8
8
  requires-python = ">=3.12,<3.15"
9
9
  dependencies = [
10
- "mammoth-io (>=0.7.12,<0.8)",
10
+ "mammoth-io (>=0.7.13,<0.8)",
11
11
  "typer (>=0.27,<0.28)",
12
12
  "rich (>=15,<16)",
13
13
  "platformdirs (>=4.10,<5)",
@@ -99,6 +99,73 @@ commands:
99
99
  undo_test: null
100
100
  known_restrictions: null
101
101
  reviewed_by: primary
102
+ - command_id: skill.agents-md.install
103
+ command_path: skill agents-md install
104
+ disposition: command
105
+ alias_of: null
106
+ operation_ids: []
107
+ positionals: []
108
+ options: []
109
+ sdk_symbol: mammoth_cli.skills.steering.install_steering
110
+ sdk_conversion: Call mammoth_cli.skills.steering.install_steering with validated request fields.
111
+ request_model: SkillAgentsMdInstallRequest
112
+ result_model: SkillAgentsMdInstallResult
113
+ mutation_class: benign_mutation
114
+ confirmation: none
115
+ wait_policy: not_async
116
+ pagination_policy: none
117
+ acceptance_evidence: live_read_only
118
+ live_test: null
119
+ live_exemption_reason: Local agent-skill file.
120
+ contract_fixture: null
121
+ required_fixture_guard: null
122
+ secret_fields: []
123
+ human_example: mammoth skill agents-md install --help
124
+ agent_example: mammoth skill agents-md install
125
+ unit_tests:
126
+ - UT-SKILL-AGENTS-MD-INSTALL
127
+ contract_tests:
128
+ - CT-SKILL-AGENTS-MD-INSTALL-HUMAN
129
+ - CT-SKILL-AGENTS-MD-INSTALL-JSON
130
+ - CT-SKILL-AGENTS-MD-INSTALL-ERROR
131
+ draft_test: null
132
+ undo_test: null
133
+ known_restrictions: 'Writes one <mammoth-cli>…</mammoth-cli> block into AGENTS.md in the current directory (--input ''{"path": "CLAUDE.md"}'' for another file); re-running replaces the block in place. Local file write only.'
134
+ reviewed_by: primary
135
+ - command_id: skill.show
136
+ command_path: skill show
137
+ disposition: command
138
+ alias_of: null
139
+ operation_ids: []
140
+ positionals: []
141
+ options: []
142
+ sdk_symbol: mammoth_cli.skills.steering.show
143
+ sdk_conversion: Call mammoth_cli.skills.steering.show with validated request fields.
144
+ request_model: SkillShowRequest
145
+ result_model: SkillShowResult
146
+ mutation_class: read
147
+ confirmation: none
148
+ wait_policy: not_async
149
+ pagination_policy: none
150
+ acceptance_evidence: live_read_only
151
+ live_test: null
152
+ live_exemption_reason: Local agent-skill file.
153
+ contract_fixture: null
154
+ required_fixture_guard: null
155
+ secret_fields: []
156
+ human_example: mammoth skill show --help
157
+ agent_example: mammoth skill show
158
+ unit_tests:
159
+ - UT-SKILL-SHOW
160
+ contract_tests:
161
+ - CT-SKILL-SHOW-HUMAN
162
+ - CT-SKILL-SHOW-JSON
163
+ - CT-SKILL-SHOW-ERROR
164
+ draft_test: null
165
+ undo_test: null
166
+ known_restrictions: 'Prints the bundled SKILL.md under data.text; --input ''{"file": "references/recipes/transforms.md"}'' prints one reference file. Read-only, local.'
167
+ reviewed_by: primary
168
+
102
169
  - command_id: skill.uninstall
103
170
  command_path: skill uninstall
104
171
  disposition: command
@@ -1859,7 +1859,9 @@ commands:
1859
1859
  draft_test: null
1860
1860
  undo_test: null
1861
1861
  known_restrictions: 'Mutation class dynamic: benign_mutation for a new target, destructive when replacing
1862
- an existing target.'
1862
+ an existing target. The export is appended to the source pipeline (end_of_pipeline) and re-runs with it;
1863
+ target_project_id sends the dataset into another project (cross-project branch-out, proven on release).
1864
+ Result: {dataset_id, project_id, source_view_id, next}.'
1863
1865
  reviewed_by: primary
1864
1866
  - command_id: view.export.delete
1865
1867
  command_path: view export delete
@@ -6502,7 +6502,7 @@ methods:
6502
6502
  reviewed_by: primary
6503
6503
  - sdk_symbol: mammoth.view.View.branch_out
6504
6504
  implementation_origin: mammoth.view.View.branch_out
6505
- signature: 'branch_out(self, dataset_name: ''str'', *, target_ds_id: ''int | None'' = None, save_as_mode: ''SaveAsDatasetMode'' = <SaveAsDatasetMode.REPLACE: ''REPLACE_IN_DS''>, column_mapping: ''dict[str, str] | None'' = None, label_ids: ''list[int] | None'' = None, condition: ''Condition | CompoundCondition | NotCondition | None'' = None, timeout: ''int | None'' = None) -> ''int'''
6505
+ signature: 'branch_out(self, dataset_name: ''str'', *, target_ds_id: ''int | None'' = None, save_as_mode: ''SaveAsDatasetMode'' = <SaveAsDatasetMode.REPLACE: ''REPLACE_IN_DS''>, column_mapping: ''dict[str, str] | None'' = None, label_ids: ''list[int] | None'' = None, condition: ''Condition | CompoundCondition | NotCondition | None'' = None, timeout: ''int | None'' = None, target_project_id: ''int | None'' = None) -> ''int'''
6506
6506
  openapi_operation_ids: []
6507
6507
  canonical_command: null
6508
6508
  alias_of: view.export.dataset
@@ -6744,7 +6744,7 @@ methods:
6744
6744
  reviewed_by: primary
6745
6745
  - sdk_symbol: mammoth.view.ViewExport.to_dataset
6746
6746
  implementation_origin: mammoth.view.ViewExport.to_dataset
6747
- signature: 'to_dataset(self, dataset_name: ''str'', *, target_ds_id: ''int | None'' = None, save_as_mode: ''SaveAsDatasetMode'' = <SaveAsDatasetMode.REPLACE: ''REPLACE_IN_DS''>, column_mapping: ''dict[str, str] | None'' = None, label_ids: ''list[int] | None'' = None, condition: ''Condition | CompoundCondition | NotCondition | None'' = None, timeout: ''int | None'' = None) -> ''int'''
6747
+ signature: 'to_dataset(self, dataset_name: ''str'', *, target_ds_id: ''int | None'' = None, save_as_mode: ''SaveAsDatasetMode'' = <SaveAsDatasetMode.REPLACE: ''REPLACE_IN_DS''>, column_mapping: ''dict[str, str] | None'' = None, label_ids: ''list[int] | None'' = None, condition: ''Condition | CompoundCondition | NotCondition | None'' = None, timeout: ''int | None'' = None, target_project_id: ''int | None'' = None) -> ''int'''
6748
6748
  openapi_operation_ids: []
6749
6749
  canonical_command: view.export.dataset
6750
6750
  alias_of: null
File without changes
File without changes