← Hive AxylCONTENT HISTORY

Update to Hive Axyl

Snapshot Oct 24, 2026 · 13:42 UTC · version 2.1.0

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save Hive Axyl and check future changes in Following.

Up to 10 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Creates and saves Hive Analytics chart, ranking, funnel, or retention content, and can assemble approved content\ninto a dashboard. Follow axyl-analytics-common first.\n\nTRIGGER when:\n- The user asks to build and save a chart, ranking, funnel, or retention\n- The user asks to create a dashboard with an already finalized composition\n- The user asks to bundle specified metrics or charts into one dashboard\n- The user asks to recreate an existing dashboard or a dashboard template in another project or workspace of the same company\n\nDO NOT TRIGGER when:\n- The dashboard composition is undecided or needs recommendation/readiness assessment → axyl-design-dashboard\n- The request is read-only analysis → axyl-analytics-common, axyl-detect-anomaly, or axyl-drill-down-metrics\n- The request creates a user segment or snapshot → axyl-create-segment\n- The request is development work unrelated to analytics\n",
  "included_files": [
    {
      "relative_path": "references/dashboard_patterns.md",
      "size_in_bytes": 2341
    },
    {
      "relative_path": "references/layout_policy.md",
      "size_in_bytes": 1783
    },
    {
      "relative_path": "references/template_mapping.md",
      "size_in_bytes": 19661
    }
  ],
  "name": "axyl-create-content",
  "skill_md_contents": "---\nname: axyl-create-content\nmetadata:\n  version: \"1.0.0\"\ndescription: |\n  Creates and saves Hive Analytics chart, ranking, funnel, or retention content, and can assemble approved content\n  into a dashboard. Follow axyl-analytics-common first.\n\n  TRIGGER when:\n  - The user asks to build and save a chart, ranking, funnel, or retention\n  - The user asks to create a dashboard with an already finalized composition\n  - The user asks to bundle specified metrics or charts into one dashboard\n  - The user asks to recreate an existing dashboard or a dashboard template in another project or workspace of the same company\n\n  DO NOT TRIGGER when:\n  - The dashboard composition is undecided or needs recommendation/readiness assessment → axyl-design-dashboard\n  - The request is read-only analysis → axyl-analytics-common, axyl-detect-anomaly, or axyl-drill-down-metrics\n  - The request creates a user segment or snapshot → axyl-create-segment\n  - The request is development work unrelated to analytics\n---\n\n# axyl-create-content\n\n> **CRITICAL — Always review the common rules in [axyl-analytics-common](../axyl-analytics-common/SKILL.md) first.**\n> **CRITICAL — Saving (`create_*`) and dashboards (`create_dashboard`) are write operations. Never run them without WRITE_APPROVAL.**\n> **CRITICAL — Check for duplicates with `list_contents` before saving (DUPLICATE_GATE). The console will save any number of items with the same name.**\n> **CRITICAL — Use only verified values for `content_idx`, `project_id`, and `org_idx`/`workspace_idx` (NO_GUESSING).**\n> **CRITICAL — Before building each content item, read its `create_*` reference and the corresponding `preview_*` reference first.**\n> **CRITICAL — Ranking is supported as the first-class `chart_rank` content type, not as a `chart` workaround. Verify with `preview_chart_rank` and save with `create_chart_rank`.**\n> **CRITICAL — Pick up a request handed over from design-dashboard only when it carries a `design_approval.approved=true` context in which the user approved the final composition at the result review. Without it, return to design-dashboard's DESIGN_APPROVAL_GATE and do not start a preview or a save.**\n\n---\n\n## Tools\n\n- **Save (write):** `create_chart` / `create_chart_rank` / `create_funnel` / `create_retention`\n  → [create_chart.md](../axyl-analytics-common/references/create_chart.md) · [create_chart_rank.md](../axyl-analytics-common/references/create_chart_rank.md) · [create_funnel.md](../axyl-analytics-common/references/create_funnel.md) · [create_retention.md](../axyl-analytics-common/references/create_retention.md)\n- **Assemble (write):** `create_dashboard`\n  → [create_dashboard.md](../axyl-analytics-common/references/create_dashboard.md)\n- **Update (write):** `update_chart` / `update_chart_rank` / `update_funnel` / `update_retention` / `update_dashboard`\n  → [update_chart.md](../axyl-analytics-common/references/update_chart.md) · [update_chart_rank.md](../axyl-analytics-common/references/update_chart_rank.md) · [update_funnel.md](../axyl-analytics-common/references/update_funnel.md) · [update_retention.md](../axyl-analytics-common/references/update_retention.md) · [update_dashboard.md](../axyl-analytics-common/references/update_dashboard.md)\n  Use these to fix content or dashboards that already exist. **Consider updating before creating anything new** — piling up copies makes it impossible to tell which one is current.\n- **Verify (read):** `preview_chart` / `preview_chart_rank` / `preview_funnel` / `preview_retention`\n  → [preview_chart.md](../axyl-analytics-common/references/preview_chart.md) · [preview_chart_rank.md](../axyl-analytics-common/references/preview_chart_rank.md) · [preview_funnel.md](../axyl-analytics-common/references/preview_funnel.md) · [preview_retention.md](../axyl-analytics-common/references/preview_retention.md)\n- **Duplicate check (read):** `list_contents` / `get_content` / `get_dashboard`\n  → [list_contents.md](../axyl-analytics-common/references/list_contents.md) · [get_content.md](../axyl-analytics-common/references/get_content.md) · [get_dashboard.md](../axyl-analytics-common/references/get_dashboard.md)\n- **Template source (read):** `get_dashboard_template` / `get_content_template` — when recreating from a platform template\n  → [get_dashboard_template.md](../axyl-analytics-common/references/get_dashboard_template.md) · [get_content_template.md](../axyl-analytics-common/references/get_content_template.md)\n- **Metric registration (write, a preceding step):** `create_metric` — only in the cases listed in its \"When to Use\" (including a metric that cannot be expressed through content arguments, or an explicit request to register one)\n  → [create_metric.md](../axyl-analytics-common/references/create_metric.md)\n\n### Metrics That Cannot Be Expressed Through Content Arguments\n\n- **A metric whose terms have different periods (stickiness = DAU / MAU, and so on)** cannot be built from chart arguments.\n  `measure_date`, which fixes a period per term, exists only in a metric definition, so register it first with `create_metric`\n  and build the content from that `metric_idx`. This needs **two approvals** — metric registration and content saving are each subject to WRITE_APPROVAL.\n- **A metric needing a first aggregation by time unit plus a second aggregation, such as peak concurrent users**, can be built\n  directly from chart arguments (`group_formular`/`group_format`/`group_interval` — the \"Two-stage aggregation\" section of\n  [preview_chart.md](../axyl-analytics-common/references/preview_chart.md)). Register it as a metric only in the cases `create_metric`'s \"When to Use\" lists (for example, reuse across several content items or an explicit request to register it).\n\n## Reference Documents\n\n- [Layout policy](references/layout_policy.md) — automatic placement rules on the 24-column grid\n- [Request decomposition patterns](references/dashboard_patterns.md) — examples of decomposing a natural-language request into a content list\n- [Template conversion](references/template_mapping.md) — converting platform template params into `create_*` arguments\n\n---\n\n## Workflow\n\n### Prerequisite — Review the common rules\n\nPROJECT_ID_GATE, ORG_WORKSPACE_GATE, SCHEMA_FIRST, DUPLICATE_GATE, WRITE_APPROVAL,\nPOST_WRITE_LINK, and NO_GUESSING from axyl-analytics-common all apply.\n\n### Phase 0 — Decompose the request\n\n```\nStep 0-1. Is there a follow-up context handed over by design-dashboard?\n  ├─ YES + design_approval.approved=true\n  │     → do not decompose. Use the display order, names, types, and chart_type from contents[] as given\n  │        (handoff format: axyl-design-dashboard/references/handoffs.md)\n  ├─ YES + no approval → return to design-dashboard for the result review and composition approval ⛔\n  └─ NO                → Step 0-1b\n\nStep 0-1b. Is the composition decided?\n  ├─ YES — the user named the metrics or charts to include, or asked for a single content item → Step 0-2\n  ├─ YES — the user asked to recreate an existing dashboard or template → \"Recreating an Existing Dashboard\" below\n  └─ NO  — only a theme such as \"make me a revenue dashboard\" → hand over to axyl-design-dashboard for\n           recommendation, readiness diagnosis, and composition approval. Do not decompose it here ⛔\n\nStep 0-2. Decompose the request into a content list. Each content item = a type (chart/chart_rank/funnel/retention) + a metric or condition.\n  - Dashboard request      → several content items + a dashboard name\n  - Single content request → one content item (skip dashboard assembly)\n```\nFor decomposition examples, see [references/dashboard_patterns.md](references/dashboard_patterns.md).\n\n**When you have received a follow-up context, do not reinterpret the composition.** The names, types, metrics, filters, and periods\nare values already agreed with the user and checked for readiness. Decomposing again would diverge from the composition the user\napproved. If you see a reason to change something, do not change it on your own — confirm with the user. Any handed-over `excluded[]`\nis not an implementation target, so leave it out and state in the result what you left out.\n\n### Recreating an Existing Dashboard\n\nWhen the user asks to make an existing dashboard (or a dashboard template) again in another project or workspace **of the\nsame company**. Recreating a dashboard in another company's project is not supported — the events, metrics, and properties\nbelong to each company, so tell the user and stop.\n\n1. Read the source: `get_dashboard`, then `get_content` for each content item. For a platform dashboard template, use\n   `get_dashboard_template` and `get_content_template`, and convert per [template_mapping.md](references/template_mapping.md).\n2. Run Phase 1 for the **target** project and workspace, and confirm it belongs to the source's company (`company_cd`).\n   The source's events and metrics are then used as they are; confirm in the target with the Phase 2 preview that they\n   have data. When the target project differs from the source, also check each filter value (global, chart, and per-term)\n   against the target with `query_adhoc`, as in the template filter check; a value that does not exist there matches nothing.\n3. Build each content item through Phase 2 (preview in the target, duplicate check, approval, save).\n4. Assemble in Phase 3 in the source order with each item's `width`/`height`/`memo`/`row`, and carry the global period and filters\n   after the check in the `create_dashboard` reference. Text and image panels cannot be recreated; tell the user to add\n   them in the console.\n\n### Phase 1 — Gates (axyl-analytics-common)\n\n```\nStep 1-1. PROJECT_ID_GATE       → confirm project / company_cd\nStep 1-2. ORG_WORKSPACE_GATE    → confirm org_idx / workspace_idx\nStep 1-3. SCHEMA_FIRST          → confirm the events, dimensions, and metrics each content item needs\n                                  (list_metrics → list_events/list_dimensions)\nStep 1-4. DUPLICATE_GATE        → for each proposed content/dashboard, query by its name\n                                  (and metric names for registered-metric-only content)\n                                  → confirm the returned candidates in detail; do not preload the whole workspace\nStep 1-5. For a dashboard request, call get_dashboard, then get_content for every content member and compare the full\n          member compositions and dashboard-level settings before any child content is written\n          → if no duplicate was confirmed among the name candidates and any proposed member is event-based, a funnel, or a retention,\n            run one bounded widened dashboard query without name/metrics and inspect the returned dashboard rows\n          ├─ identical composition → have the user choose: use the existing one / create a copy / skip ⛔\n          └─ partial overlap       → state the differences and let the user choose: add the missing content to the\n                                     existing dashboard (update_dashboard; offer only when its permission is EDITOR) /\n                                     create a new one / skip ⛔\n          └─ different             → state in one line what differs and proceed (DUPLICATE_GATE)\n```\n\n**If the handed-over context has verified values, do not redo Steps 1-1 through 1-3.** `company_cd`, `project`,\n`org_idx`, `workspace_idx`, and `metric_idx`/`event_idx`/`dimension_idx` are values design-dashboard confirmed against\nthe target company's schema, so use them as is — re-querying only repeats the same request and risks newly selecting a\ndifferent metric with a similar name.\nBy contrast, **always perform Steps 1-4 and 1-5 (DUPLICATE_GATE) even with a handed-over context** — the same content may have\nbeen created between design time and save time, and design-dashboard cannot know the state just before the save.\n\nDo not preload the entire workspace. Reuse an identical candidate query when several proposed items share it; otherwise keep\nthe initial name/metrics queries narrow. When event-based content, funnels, or retentions need a renamed-copy check, widen at\nmost once per target workspace and `content_type` with the default bounded result and reuse it for every proposed item of\nthat type; rerun it after a workspace change or a failed or uncertain write. If it is\n`truncated`, disclose that older renamed copies were not exhaustively checked and include that limitation with WRITE_APPROVAL.\nUse `limit=0` only when the user explicitly asks for an exhaustive audit or on an exact-name/type recovery query when checking\nwhether an uncertain previous write succeeded before a retry. Never use `mine_only` in DUPLICATE_GATE.\n\nIf Step 1-5 leads the user to choose using the existing dashboard or skipping, stop without previewing or saving any content.\nProceed to Phase 2 when they choose to create a copy or to add missing content to the existing dashboard (then finish with\n`update_dashboard` in Phase 3 instead of `create_dashboard`), and compose each child item from the user's choice of reusing the\nexisting content, creating a copy, or skipping.\n\n### Phase 2 — Build each content item (repeat per item)\n\n```\nStep 2-0. If the handed-over context has a platform template reference, convert get_content_template's params\n          into create_* arguments → [template_mapping.md](references/template_mapping.md)\nStep 2-1. Preview the data with preview_<type> → have the user confirm it\n          └─ if the result is empty, recheck the project, period, and configuration once, then show a \"currently no data\" warning with the evidence\nStep 2-2. [DUPLICATE_GATE] Select candidates from the Step 1-4 query results\n          ├─ registered-metric-only content → rows with the same name or metric\n          └─ any event-based measure, funnel, or retention → if the narrow candidates contained no duplicate,\n                                                              use the returned rows from one bounded same-type widening\n          ├─ no candidate → Step 2-3\n          └─ candidate    → compare params with get_content(company_cd, org_idx, workspace_idx, candidate idx)\n                        ├─ same      → have the user choose: reuse the existing asset / create a copy / skip ⛔\n                        └─ different → state in one line what differs, then Step 2-3\nStep 2-3. [WRITE_APPROVAL] Wait for explicit approval to save ⛔\n          └─ if the result is empty, state in the approval text that no data will be visible even after saving\nStep 2-4. Call create_<type> → collect content_idx\n```\n\n> With several content items, you may gather the preview results and duplicate-check results and present them at once for a\n> **batch approval**. Never call `create_*` without approval.\n\n**Cautions when judging duplicates**\n\n- Do not answer \"it already exists\" from `match` alone. The list carries no `params` or `chart_type`, so confirm by\n  comparing `params` from `get_content`.\n- Do not rule out a duplicate just because the metrics look different — `metrics` holds only measures built from registered\n  metrics, and measures built from events, along with the events of funnels and retentions, do not appear (`metrics_comparable=false`).\n  A renamed event-based copy therefore cannot be caught by name or metrics. If the narrow candidates contain no duplicate, compare\n  the bounded widened same-type result with `get_content`. When it is truncated, report the unchecked older range rather\n  than automatically loading every row.\n- For period comparison, look first at `date_params`'s `start_date_type`/`end_date_type`.\n  For `\"V\"` (relative), compare `period`, `start_period`/`end_period`, and `start_value`/`end_value` — do not compare `start_date`/`end_date` here, because they are computed\n  at save time and the same configuration will show different dates.\n  For `\"F\"` (fixed), the reverse holds: `start_date`/`end_date` are the configuration itself, so compare those\n  (there, `start_value`/`end_value` come back as 0 and are meaningless).\n  `\"V\"` and `\"F\"` are never duplicates of each other, even when the dates happen to coincide.\n  Funnels write a fixed period as `\"ep\"` instead of `\"F\"` — treat `\"ep\"` as fixed, and build funnel\n  `date_params` with `\"ep\"` (see [preview_funnel.md](../axyl-analytics-common/references/preview_funnel.md)).\n- Even for a duplicate, create it if the user says to. The gate **informs**; it does not block.\n- Reuse is possible only for existing content in the target workspace with verified access. If reuse is chosen, put the existing\n  `content_idx` into the assembly list and do not call `create_<type>`.\n- Save approval for an empty preview counts as WRITE_APPROVAL only when the warned content and the final save composition were\n  presented together. Without approval, skip that content item.\n\n### Phase 3 — Assemble the dashboard (optional)\n\n```\nOne content item & no dashboard needed → return the content url built in Phase 2 and stop\nDashboard request                      → create_dashboard(contents=[the content_idx values confirmed in Phase 2, in display order],\n                                                           date_params/adhoc_filters when requested or carried from a\n                                                           template/handoff)\n                                          → return the dashboard url\n```\n\nJudge dashboard duplicates by the dashboard copy criteria in axyl-analytics-common DUPLICATE_GATE.\nTo add content to an existing dashboard, read it with `get_dashboard` and confirm its `permission` is `EDITOR` before saving any\ncontent for it (otherwise offer a copy or a request to the author), then pass the full new list to `update_dashboard`\nafter WRITE_APPROVAL, carrying over each existing item's `width`/`height`/`memo`/`row` and passing text and image panels as\n`{\"panel_ref\": n}` so the current layout is kept (a panel left out is not deleted; it moves to the bottom).\nCreate a new dashboard only after showing the final composition and target workspace and obtaining WRITE_APPROVAL.\nWhen the request, a template, or a design handoff includes a dashboard-wide period or filters, pass them to\n`create_dashboard` as `date_params`/`adhoc_filters` and show the exact settings in the same WRITE_APPROVAL. Check settings\nfrom a template or handoff first, as the `create_dashboard` reference says (dimension, values, and a fixed period).\nA period or filter the request states for the dashboard as a whole goes into these global settings; member content keeps\nits own default period unless the user gives one per content. When the dashboard has a global period or filters, say in the\nWRITE_APPROVAL summary that the Phase 2 previews used each member's own period and settings, and that the dashboard applies\nthe global ones, so its values can differ from the previews.\n\nFor a new layout the tool computes placement from the contents order, so **decide the order**. To keep an existing layout — a\ntemplate, a dashboard you are recreating, or an `update_dashboard` call that changes `contents` — also pass each item's `width`/`height`/`memo`/`row`,\nand for `update_dashboard` the text and image panels by `panel_ref` (see [layout_policy.md](references/layout_policy.md)).\n\n### Phase 4 — POST_WRITE_LINK\n\n- Return the console link the tool returned: `url` from `create_*`/`create_dashboard`, `console_url` from `update_*`.\n\n---\n\n## Full Chain\n\n```\n[Decompose the request]\n(PROJECT_ID_GATE) (ORG_WORKSPACE_GATE) (SCHEMA_FIRST)\nDashboard request: [DUPLICATE_GATE: get_dashboard + get_content for every content member before any child write]\n  └─ use existing / skip → stop without creating child content\nPer content item: preview_<type> → [duplicate check: get_content] → [WRITE_APPROVAL] → create_<type> → content_idx\n  ├─ single & no dashboard needed → return the content url\n  └─ dashboard request            → new: [WRITE_APPROVAL for the final assembly] → create_dashboard\n                                    → existing dashboard change: [WRITE_APPROVAL] → update_dashboard\n                                    → return the dashboard url\n```\n\n---\n\n## Prohibited Behavior ❌\n\n| Situation | Prohibited behavior | Correct behavior |\n|------|----------|-----------|\n| Before approval | Calling `create_*` right away | Verify with `preview_<type>`, then WRITE_APPROVAL |\n| Duplicate unchecked | Saving without checking existing content | Find candidates with `list_contents` → confirm with `get_content` |\n| Duplicate candidate found | Declaring \"it already exists\" from `match` alone | Compare in detail, then ask the user to reuse, copy, or skip |\n| Metrics look empty | Concluding it is not a duplicate | It is event-based and so absent from the list — confirm with `get_content` |\n| Dashboard duplicate | Comparing by the member `content_idx` set | Follow the dashboard copy criteria in axyl-analytics-common DUPLICATE_GATE (a copy has different idx values) |\n| content_idx | Guessing or inventing it | Use only a `create_*` return value, or an existing idx confirmed to be in the same workspace with `get_content` |\n| org_idx/workspace_idx unconfirmed | Calling with an arbitrary value (for example, 0) | Perform ORG_WORKSPACE_GATE, then retry |\n| Metric or event unclear | Guessing and passing it | Confirm with list_metrics/list_events/list_dimensions |\n| Saved but no link returned | Just stopping | Return the url per POST_WRITE_LINK |\n\n---\n\n## Exception Handling\n\n| Situation | Response |\n|------|------|\n| Empty preview result | Recheck the project, period, and configuration once and warn. Save if the user explicitly approves creating empty content |\n| Duplicate content found | Present the existing URL and the differences, and have the user choose to reuse, copy, or skip |\n| Too many `list_contents` candidates | Narrow with `workspace_idx`, name, and `content_type`. Do not use `mine_only` for a duplicate check; keep the widened pass bounded and disclose the unchecked older range |\n| `list_contents` `truncated=true` | Do not conclude \"no duplicate\" or automatically use `limit=0`; disclose incomplete coverage. Use `limit=0` only for an explicitly requested exhaustive audit or exact-name/type uncertain-write recovery |\n| `create_*` failed | First check with DUPLICATE_GATE's recovery query whether it was created anyway — the first request may have succeeded. Count it as created only when an item that was not among the candidates seen before the save matches the approved settings; an existing same-name item does not count. If it was, do not save again. If not, retry only after fresh WRITE_APPROVAL (fix the parameters first if the error requires it, and say what changed or that nothing did). Stop if it is before dashboard assembly |\n| Some content failed during dashboard assembly | Ask the user whether to proceed with only the successful `content_idx` values |\n| Organization or workspace authorization denial | Do not retry the same call unchanged or with a guessed identifier; follow MCP_ACCESS_GATE (denied call with `org_idx`) |\n| Not connected to the Hive Axyl MCP server (first install, never signed in), or the sign-in session expired | Apply MCP_CONNECTION_GATE in axyl-analytics-common. Cannot retry without user action |\n"
}

SHA-256 of public snapshot: 32d4dacf4c919c7abc3724c9f2ce3e8629ef7ef393f5dbe0dd9aca2348c06914