[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M782AFZ1HF2S975GHTMEKP9D":3,"skill-same:01M782AFZ1HF2S975GHTMEKP9D":47},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":29,"ownerHtmlUrl":30,"ownerBlogUrl":29,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M782AFZ1HF2S975GHTMEKP9D","pm-vitally",null,"Vitally connector knowledge and safe action guide.","polymetrics-ai\u002Fcli","polymetrics-ai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F177650388?v=4","01M77Z920R1RTP5NXCP1V1HNMS","Polymetrics","01M77Z921DPWZC4DQSSZNWF82B",7,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai\u002Fcli\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fpm-vitally\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: pm-vitally\ndescription: Vitally connector knowledge and safe action guide.\n---\n\n# pm-vitally\n\n## Purpose\n\nReads and writes Vitally customer-success accounts, users, notes, conversations, tasks, and NPS responses via the Vitally REST API.\n\n## Icon\n\n- id: pm-sample\n- asset: icons\u002Fpm-sample.svg\n- source: polymetrics\n- review_status: polymetrics\n- review_url: https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai\u002Fcli\n\n## Capabilities\n\n- check=true catalog=true read=true write=true query=false\n- Integration type: api\n\n## Authentication\n\n- Use pm credentials add with --from-env or --value-stdin for secret fields.\n\n## Configuration\n\n- base_url\n- page_size\n- status\n- basic_auth_header (secret) (required)\n\n## ETL Streams\n\n- accounts:\n  - primary key: id\n  - fields: id(string), name(string), traits(object)\n- users:\n  - primary key: id\n  - cursor: updatedAt\n  - fields: accounts(array), avatar(string), createdAt(string), deactivatedAt(string), email(string), externalId(string), firstKnown(string), id(string), lastInboundMessageTimestamp(string), lastOutboundMessageTimestamp(string), lastSeenTimestamp(string), name(string), npsLastFeedback(string), npsLastRespondedAt(string), npsLastScore(integer), organizations(array), segments(array), traits(object), unsubscribedFromConversations(boolean), unsubscribedFromConversationsAt(string), updatedAt(string)\n- notes:\n  - primary key: id\n  - cursor: updated_at\n  - fields: account_id(string), archived_at(string), author_id(string), category_id(string), created_at(string), external_id(string), id(string), note(string), note_date(string), organization_id(string), source(string), subject(string), tags(array), traits(object), updated_at(string)\n- conversations:\n  - primary key: id\n  - cursor: updated_at\n  - fields: accounts(array), admins(array), created_at(string), external_id(string), id(string), rating(string), source(string), status(string), subject(string), traits(object), updated_at(string), users(array)\n- tasks:\n  - primary key: id\n  - cursor: updated_at\n  - fields: account_id(string), archived_at(string), assigned_to_id(string), category_id(string), completed_at(string), completed_by_id(string), created_at(string), description(string), due_date(string), external_id(string), id(string), meeting_id(string), name(string), organization_id(string), source(string), tags(array), traits(object), updated_at(string)\n- nps_responses:\n  - primary key: id\n  - cursor: updated_at\n  - fields: created_at(string), external_id(string), feedback(string), id(string), responded_at(string), score(integer), updated_at(string), user_id(string)\n\n## Sync Modes\n\n- ETL sync modes: full_refresh_append, full_refresh_overwrite, full_refresh_overwrite_deduped\n\n## Reverse ETL Actions\n\n- create_account:\n  - endpoint: POST \u002Fresources\u002Faccounts\n  - required fields: externalId, name\n  - risk: creates a new customer-success account visible to the vendor's CS team; external mutation, approval required\n- update_account:\n  - endpoint: PUT \u002Fresources\u002Faccounts\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing customer-success account's fields\u002Ftraits, visible to the vendor's CS team; external mutation, approval required\n- create_user:\n  - endpoint: POST \u002Fresources\u002Fusers\n  - required fields: externalId\n  - risk: creates a new user record visible to the vendor's CS team; external mutation, approval required\n- update_user:\n  - endpoint: PUT \u002Fresources\u002Fusers\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing user's fields\u002Ftraits, visible to the vendor's CS team; external mutation, approval required\n- create_note:\n  - endpoint: POST \u002Fresources\u002Fnotes\n  - required fields: note, noteDate\n  - risk: creates a customer-success note visible to the vendor's CS team; external mutation, approval required\n- update_note:\n  - endpoint: PUT \u002Fresources\u002Fnotes\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing customer-success note visible to the vendor's CS team; external mutation, approval required\n- delete_note:\n  - endpoint: DELETE \u002Fresources\u002Fnotes\u002F{{ record.id }}\n  - required fields: id\n  - risk: archives\u002Fdeletes a customer-success note; external mutation, approval required\n- create_conversation:\n  - endpoint: POST \u002Fresources\u002Fconversations\n  - required fields: subject, messages\n  - risk: creates a historical conversation record visible to the vendor's CS team; does not send outbound messages to real participants (Vitally's own documented behavior); external mutation, approval required\n- update_conversation:\n  - endpoint: PUT \u002Fresources\u002Fconversations\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing conversation record (new messages inserted, existing ones updated by externalId); external mutation, approval required\n- delete_conversation:\n  - endpoint: DELETE \u002Fresources\u002Fconversations\u002F{{ record.id }}\n  - required fields: id\n  - risk: permanently deletes a conversation and all its messages; external mutation, approval required\n- create_task:\n  - endpoint: POST \u002Fresources\u002Ftasks\n  - required fields: name, accountId\n  - risk: creates a customer-success task visible to the vendor's CS team; external mutation, approval required\n- update_task:\n  - endpoint: PUT \u002Fresources\u002Ftasks\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing customer-success task visible to the vendor's CS team; external mutation, approval required\n- create_nps_response:\n  - endpoint: POST \u002Fresources\u002FnpsResponses\n  - required fields: userId, respondedAt, score\n  - risk: creates (or, if externalId already exists, upserts -- Vitally's own documented behavior) an NPS response visible to the vendor's CS team; external mutation, approval required\n- update_nps_response:\n  - endpoint: PUT \u002Fresources\u002FnpsResponses\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing NPS response visible to the vendor's CS team; external mutation, approval required\n\n## Security\n\n- read risk: external Vitally API read of customer-success account\u002Fuser\u002Fnote\u002Fconversation\u002Ftask\u002FNPS-response data\n- write risk: external mutation of Vitally customer-success records (create\u002Fupdate accounts, users, notes, tasks, conversations, NPS responses; delete notes and conversations); approval required\n- approval: read: none, read-only sync surface. write: required for all mutating actions (create\u002Fupdate\u002Fdelete of customer-success records visible to the vendor's CS team).\n- Never pass secret values in chat, shell arguments, logs, docs, or JSON output.\n\n## Commands\n\n### Inspect as a manual\n\n```bash\npm connectors inspect vitally\n```\n\n### Inspect as structured JSON\n\n```bash\npm connectors inspect vitally --json\n```\n\n## Agent Rules\n\n- Run pm connectors inspect vitally before creating credentials or plans.\n- Use --json only when the caller needs structured output; use the manual for human-readable guidance.\n- Never ask the user to paste secret values into chat.\n- For reverse ETL writes, create a plan, show the preview, wait for explicit approval, then run with the approval token.\n","# pm-vitally\n\n## Purpose\n\nReads and writes Vitally customer-success accounts, users, notes, conversations, tasks, and NPS responses via the Vitally REST API.\n\n## Icon\n\n- id: pm-sample\n- asset: icons\u002Fpm-sample.svg\n- source: polymetrics\n- review_status: polymetrics\n- review_url: https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai\u002Fcli\n\n## Capabilities\n\n- check=true catalog=true read=true write=true query=false\n- Integration type: api\n\n## Authentication\n\n- Use pm credentials add with --from-env or --value-stdin for secret fields.\n\n## Configuration\n\n- base_url\n- page_size\n- status\n- basic_auth_header (secret) (required)\n\n## ETL Streams\n\n- accounts:\n  - primary key: id\n  - fields: id(string), name(string), traits(object)\n- users:\n  - primary key: id\n  - cursor: updatedAt\n  - fields: accounts(array), avatar(string), createdAt(string), deactivatedAt(string), email(string), externalId(string), firstKnown(string), id(string), lastInboundMessageTimestamp(string), lastOutboundMessageTimestamp(string), lastSeenTimestamp(string), name(string), npsLastFeedback(string), npsLastRespondedAt(string), npsLastScore(integer), organizations(array), segments(array), traits(object), unsubscribedFromConversations(boolean), unsubscribedFromConversationsAt(string), updatedAt(string)\n- notes:\n  - primary key: id\n  - cursor: updated_at\n  - fields: account_id(string), archived_at(string), author_id(string), category_id(string), created_at(string), external_id(string), id(string), note(string), note_date(string), organization_id(string), source(string), subject(string), tags(array), traits(object), updated_at(string)\n- conversations:\n  - primary key: id\n  - cursor: updated_at\n  - fields: accounts(array), admins(array), created_at(string), external_id(string), id(string), rating(string), source(string), status(string), subject(string), traits(object), updated_at(string), users(array)\n- tasks:\n  - primary key: id\n  - cursor: updated_at\n  - fields: account_id(string), archived_at(string), assigned_to_id(string), category_id(string), completed_at(string), completed_by_id(string), created_at(string), description(string), due_date(string), external_id(string), id(string), meeting_id(string), name(string), organization_id(string), source(string), tags(array), traits(object), updated_at(string)\n- nps_responses:\n  - primary key: id\n  - cursor: updated_at\n  - fields: created_at(string), external_id(string), feedback(string), id(string), responded_at(string), score(integer), updated_at(string), user_id(string)\n\n## Sync Modes\n\n- ETL sync modes: full_refresh_append, full_refresh_overwrite, full_refresh_overwrite_deduped\n\n## Reverse ETL Actions\n\n- create_account:\n  - endpoint: POST \u002Fresources\u002Faccounts\n  - required fields: externalId, name\n  - risk: creates a new customer-success account visible to the vendor's CS team; external mutation, approval required\n- update_account:\n  - endpoint: PUT \u002Fresources\u002Faccounts\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing customer-success account's fields\u002Ftraits, visible to the vendor's CS team; external mutation, approval required\n- create_user:\n  - endpoint: POST \u002Fresources\u002Fusers\n  - required fields: externalId\n  - risk: creates a new user record visible to the vendor's CS team; external mutation, approval required\n- update_user:\n  - endpoint: PUT \u002Fresources\u002Fusers\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing user's fields\u002Ftraits, visible to the vendor's CS team; external mutation, approval required\n- create_note:\n  - endpoint: POST \u002Fresources\u002Fnotes\n  - required fields: note, noteDate\n  - risk: creates a customer-success note visible to the vendor's CS team; external mutation, approval required\n- update_note:\n  - endpoint: PUT \u002Fresources\u002Fnotes\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing customer-success note visible to the vendor's CS team; external mutation, approval required\n- delete_note:\n  - endpoint: DELETE \u002Fresources\u002Fnotes\u002F{{ record.id }}\n  - required fields: id\n  - risk: archives\u002Fdeletes a customer-success note; external mutation, approval required\n- create_conversation:\n  - endpoint: POST \u002Fresources\u002Fconversations\n  - required fields: subject, messages\n  - risk: creates a historical conversation record visible to the vendor's CS team; does not send outbound messages to real participants (Vitally's own documented behavior); external mutation, approval required\n- update_conversation:\n  - endpoint: PUT \u002Fresources\u002Fconversations\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing conversation record (new messages inserted, existing ones updated by externalId); external mutation, approval required\n- delete_conversation:\n  - endpoint: DELETE \u002Fresources\u002Fconversations\u002F{{ record.id }}\n  - required fields: id\n  - risk: permanently deletes a conversation and all its messages; external mutation, approval required\n- create_task:\n  - endpoint: POST \u002Fresources\u002Ftasks\n  - required fields: name, accountId\n  - risk: creates a customer-success task visible to the vendor's CS team; external mutation, approval required\n- update_task:\n  - endpoint: PUT \u002Fresources\u002Ftasks\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing customer-success task visible to the vendor's CS team; external mutation, approval required\n- create_nps_response:\n  - endpoint: POST \u002Fresources\u002FnpsResponses\n  - required fields: userId, respondedAt, score\n  - risk: creates (or, if externalId already exists, upserts -- Vitally's own documented behavior) an NPS response visible to the vendor's CS team; external mutation, approval required\n- update_nps_response:\n  - endpoint: PUT \u002Fresources\u002FnpsResponses\u002F{{ record.id }}\n  - required fields: id\n  - risk: updates an existing NPS response visible to the vendor's CS team; external mutation, approval required\n\n## Security\n\n- read risk: external Vitally API read of customer-success account\u002Fuser\u002Fnote\u002Fconversation\u002Ftask\u002FNPS-response data\n- write risk: external mutation of Vitally customer-success records (create\u002Fupdate accounts, users, notes, tasks, conversations, NPS responses; delete notes and conversations); approval required\n- approval: read: none, read-only sync surface. write: required for all mutating actions (create\u002Fupdate\u002Fdelete of customer-success records visible to the vendor's CS team).\n- Never pass secret values in chat, shell arguments, logs, docs, or JSON output.\n\n## Commands\n\n### Inspect as a manual\n\n```bash\npm connectors inspect vitally\n```\n\n### Inspect as structured JSON\n\n```bash\npm connectors inspect vitally --json\n```\n\n## Agent Rules\n\n- Run pm connectors inspect vitally before creating credentials or plans.\n- Use --json only when the caller needs structured output; use the manual for human-readable guidance.\n- Never ask the user to paste secret values into chat.\n- For reverse ETL writes, create a plan, show the preview, wait for explicit approval, then run with the approval token.\n",{"name":5,"description":7},"main","813f457a925f7ee3fe3bea101a43e445992c8552","docs\u002Fskills\u002Fpm-vitally",0,"https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai\u002Fcli","https:\u002F\u002Fcli.polymetrics.ai","https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai","Local-first data infrastructure for agents and developers.","2026-09-21 12:42:03",{"source":8,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add polymetrics-ai\u002Fcli --skill pm-vitally",{"tool":39,"command":40},"bunx","bunx skills add polymetrics-ai\u002Fcli --skill pm-vitally",{"tool":42,"command":43},"pnpm","pnpm dlx skills add polymetrics-ai\u002Fcli --skill pm-vitally","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai\u002Fcli\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fpm-vitally\u002FSKILL.md",true,[],[48,55,62,69,76,83],{"skillNo":49,"name":50,"nameZh":6,"description":51,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":54,"publishedAt":19},"01M782EH9BFHYZVECKJ31F427S","recipe-preview-approve-reverse-etl","Preview and approve a reverse ETL plan safely.","https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai\u002Fcli\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Frecipe-preview-approve-reverse-etl\u002FSKILL.md",[],[],{"skillNo":56,"name":57,"nameZh":6,"description":58,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":61,"publishedAt":19},"01M782EFGH5NRZ2CXDK0V9YWFW","recipe-github-prs-to-warehouse","Sync GitHub pull requests into the local warehouse.","https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai\u002Fcli\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Frecipe-github-prs-to-warehouse\u002FSKILL.md",[],[],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":19},"01M782ECJZRQAK8E86CE7R2YM2","pm-zoom","Zoom connector knowledge and safe action guide.","https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai\u002Fcli\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fpm-zoom\u002FSKILL.md",[],[],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":19},"01M782EASYDANMV35W2ZHG2QD0","pm-zonka-feedback","Zonka Feedback connector knowledge and safe action guide.","https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai\u002Fcli\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fpm-zonka-feedback\u002FSKILL.md",[],[],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":19},"01M782E8WA94A906385AET1ZWH","pm-zoho-invoice","Zoho Invoice connector knowledge and safe action guide.","https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai\u002Fcli\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fpm-zoho-invoice\u002FSKILL.md",[],[],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":19},"01M782E73M7F23B6VBGM72QMMQ","pm-zoho-inventory","Zoho Inventory connector knowledge and safe action guide.","https:\u002F\u002Fgithub.com\u002Fpolymetrics-ai\u002Fcli\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fpm-zoho-inventory\u002FSKILL.md",[],[]]