@agentled/cli 0.8.2 → 0.8.4

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 (45) hide show
  1. package/README.md +58 -8
  2. package/dist/commands/agents.js +1 -5
  3. package/dist/commands/agents.js.map +1 -1
  4. package/dist/commands/executions.js +15 -0
  5. package/dist/commands/executions.js.map +1 -1
  6. package/dist/commands/feedback.js +13 -2
  7. package/dist/commands/feedback.js.map +1 -1
  8. package/dist/commands/routines.js +17 -0
  9. package/dist/commands/routines.js.map +1 -1
  10. package/dist/commands/use-cases.js +5 -1
  11. package/dist/commands/use-cases.js.map +1 -1
  12. package/dist/commands/workspace-packages.d.ts +2 -0
  13. package/dist/commands/workspace-packages.js +194 -0
  14. package/dist/commands/workspace-packages.js.map +1 -0
  15. package/dist/commands/workspace.js +82 -0
  16. package/dist/commands/workspace.js.map +1 -1
  17. package/dist/index.js +2 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/utils/skills.js +20 -3
  20. package/dist/utils/skills.js.map +1 -1
  21. package/package.json +2 -2
  22. package/patterns/v1/03-credit-efficiency.md +4 -4
  23. package/skills/agentled/SKILL.md +1 -0
  24. package/skills/agentled/references/credits-apps-and-errors.md +1 -1
  25. package/skills/agentled/references/editing-workflows.md +13 -10
  26. package/skills/agentled-content/SKILL.md +52 -0
  27. package/skills/agentled-content/references/context.md +21 -0
  28. package/skills/agentled-content/templates/workspace/AGENTS.md +5 -0
  29. package/skills/agentled-content/templates/workspace/brand.md +15 -0
  30. package/skills/agentled-content/templates/workspace/company.md +11 -0
  31. package/skills/agentled-content/templates/workspace/content/guidelines.md +6 -0
  32. package/skills/agentled-content/templates/workspace/first-task.md +5 -0
  33. package/skills/agentled-content/templates/workspace/onboarding.md +5 -0
  34. package/skills/agentled-content/templates/workspace/tools.md +5 -0
  35. package/skills/agentled-content/tools.md +8 -0
  36. package/skills/agentled-content-visuals/SKILL.md +35 -0
  37. package/skills/agentled-content-visuals/references/quality-checks.md +9 -0
  38. package/skills/gtm-operator/SKILL.md +364 -0
  39. package/skills/seo-operator/SKILL.md +35 -0
  40. package/skills/social-media-agent/SKILL.md +30 -0
  41. package/skills/social-media-agent/references/channels/instagram.md +26 -0
  42. package/skills/social-media-agent/references/channels/linkedin.md +29 -0
  43. package/skills/social-media-agent/references/jobs/create-instagram-post.md +30 -0
  44. package/skills/social-media-agent/references/jobs/prepare-linkedin-organization-post.md +46 -0
  45. package/skills/social-media-agent/references/proof-and-approval.md +48 -0
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: Social Media Management
3
+ version: 0.4.1
4
+ description: Draft, approve, and prove bounded social media work through existing AgentLed services.
5
+ category: social-media
6
+ allowedApps: browser-use, openai, instagram, linkedin
7
+ allowedActions: browser-use.extract-data, openai.generate-image, instagram.create-media-post, instagram.list-recent-media, instagram.get-media-insights, linkedin.create-post-organization, linkedin.get-post-metrics
8
+ relevanceKeywords: social media, instagram, linkedin, organization post, page post, content, caption, alt text, approval, permalink
9
+ ---
10
+
11
+ # Social Media Management
12
+
13
+ Use this skill as a Markdown router for named social-media Jobs. It provides operating guidance only: listing or recommending an app or action grants no permission or authority. Invoking `openai.generate-image` can spend credits. Invoking `instagram.create-media-post` or `linkedin.create-post-organization` can publish. Those actions remain governed by existing AgentLed credit/spend and approval policies. If an active action, schema, or durable receipt capability is unavailable or incompatible, return a partial result, identify the missing runtime evidence, and stop.
14
+
15
+ Host integration is separate from the Job: the AgentLed adapter assigns the Workspace Skill; Hermes installs and loads the portable skill and uses AgentLed authority. Neither host path grants permission, credentials, account connection, approval, billing, publication, or routine activation. Verify that only the capabilities required by the selected Job are available before it proceeds.
16
+
17
+ The first Job requires an exact public 1080x1350 JPEG and a strict normalized `instagram.create-media-post` input containing `accountId`, `mediaUrl`, `caption`, `altText`, `imageProfile=instagram_post_portrait`, `mediaType=IMAGE`, and any connection selector present. Before connection, make exactly one `openai.generate-image` attempt; do not retry automatically, and another generation attempt requires explicit user authorization. Durable receipt states record the attempt; any input or destination change invalidates approval, and an ambiguous result must never invite an automatic retry. After connection, use one bounded recent-media page and an explicit sample of at most three returned media IDs or permalinks for media-product insights. Revise the candidate only when that evidence changes the recommendation. If `instagram_manage_insights` or analytics evidence is unavailable, preserve the grounded draft, report the gap, and do not block the first approved static post or request comments/moderation scope solely for analytics.
18
+
19
+ The LinkedIn organization Job prepares a useful approval packet before connection or public write access. It starts from a verified source or product insight, revalidates drift-prone claims, and requires an exact organization actor, organization ID, Page URL, current human administrator identity, proposed publication time and timezone, and brand input. Its executable write uses the active strict `linkedin.create-post-organization` input with `organizationId`, `text`, `mediaUrl`, and any active connection selector. A separate alt text companion draft remains part of the reviewed packet, but the current organization-post action does not accept or transmit the companion alt text draft; never claim that it did. Proof requires `postUrl`, `postId`, `actorUrn`, and matching organization identity from one unambiguous result.
20
+
21
+ For the first-session LinkedIn path, research a verified company or product source and produce the organization-post draft in chat before requesting any connection. Only after the user explicitly chooses to publish, create or reuse one small manual workflow with exact post text, organization actor, and optional media as run inputs; asking for a draft or revision alone must not create workspace state. The only reusable external action is `linkedin.create-post-organization`, and it must retain exact-payload approval for the actor, destination, text, and media. Do not publish during setup or testing. Do not create a cross-channel package, routine, schedule, or automatic run.
22
+
23
+ ## Jobs
24
+
25
+ - **Create an Instagram post** — implemented in v0.2. Read `references/jobs/create-instagram-post.md`.
26
+ - **Prepare a LinkedIn organization post** — implemented in v0.3. Read `references/jobs/prepare-linkedin-organization-post.md`.
27
+ - **Review Instagram comments** — named follow-up Job; not implemented in v0.
28
+ - **Refresh a social content calendar** — named follow-up Job; not implemented in v0.
29
+
30
+ For an implemented Job, read its channel reference and the proof/approval reference before taking any action. Keep customer context, permissions, connections, approvals, receipts, billing, and recurrence in the existing AgentLed services. **Make this weekly** is offered for Instagram only after one unambiguous public result has both a public permalink and external media ID. **Make this twice weekly** is offered for a LinkedIn organization only after one unambiguous result has a public permalink and matching organization identity. Claim **Paused recurrence** only from an authoritative existing paused routine record; this skill does not automatically configure or activate a routine.
@@ -0,0 +1,26 @@
1
+ # Channel: Instagram
2
+
3
+ Instagram v0 is one bounded image-post Job for one exact Business or Creator account, with a bounded post-connection evidence review. The channel reference narrows the draft and proof requirements; it does not add provider behavior or permission. If an active action, schema, or durable receipt capability is unavailable or incompatible, return a partial result, identify the missing runtime evidence, and stop.
4
+
5
+ ## Before connection
6
+
7
+ - Use public business context and available workspace knowledge to ground the post.
8
+ - Produce one public `image/jpeg` artifact at exactly 1080x1350, one Instagram-native caption, an alt text draft, and a short rationale before asking for an Instagram connection. A concept, prompt, storyboard, or unverified-size image is not Draft ready.
9
+ - Verify that the active `openai.generate-image` action returns the required exact derivative for this Job. Verify the returned public artifact is 1080x1350 JPEG; if that evidence is absent, keep the result partial and do not ask for connection.
10
+ - Make exactly one `openai.generate-image` attempt before connection. Do not retry automatically; another generation attempt requires explicit user authorization.
11
+ - Keep the caption natural for Instagram: a clear hook, useful body copy, and a restrained call to action when supported by the source context. Do not invent product claims, audience details, testimonials, or results.
12
+ - Write alt text that describes the actual returned image content and purpose. If the image is not available, say so instead of inventing visual details. The existing Instagram action accepts the alt text as part of the frozen approval input and forwards it with the image post.
13
+ - Ask at most one missing-input question, limited to the offer or audience that blocks a grounded draft.
14
+
15
+ ## Connection and evidence review
16
+
17
+ - Use the existing AgentLed Instagram connection surface to connect and select one exact Business or Creator account. Require reconnect, exact-account, and scope proof when the stored connection is stale, ambiguous, or missing the required Instagram scopes. Listing or recommending an app or action grants no permission or authority. Invoking `openai.generate-image` can spend credits. Invoking `instagram.create-media-post` can publish. Both remain governed by existing AgentLed credit/spend and approval policies.
18
+ - After connection, call `instagram.list-recent-media` once for one bounded recent-media page for the selected owned account. Choose an explicit sample of at most three returned media IDs or permalinks, then call `instagram.get-media-insights` only for that sample and its supported media-product insights. Revise the candidate only when that evidence changes the recommendation; otherwise preserve the grounded candidate. Do not fall back to public, unowned, or unbounded data.
19
+ - If `instagram_manage_insights` or analytics evidence is unavailable, preserve the grounded draft, report the gap, and do not block the first approved static post or request comments/moderation scope solely for analytics.
20
+ - The existing AgentLed approval input freezes the full strict normalized `instagram.create-media-post` input: `accountId`, `mediaUrl`, `caption`, `altText`, `imageProfile=instagram_post_portrait`, `mediaType=IMAGE`, and any connection selector present. Any input or destination change invalidates approval. Do not fall back to legacy non-strict input. Require existing AgentLed approval and authority before one bounded public write.
21
+ - Durable receipt states record the attempt through `pending`, `claimed`, `container_dispatching`, `container_created`, `publish_dispatching`, `published`, `complete`, `permalink_pending`, `failed`, or `outcome_unknown`. An ambiguous provider outcome is partial/unproven and must never invite an automatic retry; reconcile the durable receipt instead.
22
+ - Full comments and moderation permissions are deferred and are not a first-post dependency. Do not request those scopes solely to cover missing analytics evidence.
23
+
24
+ ## Proof
25
+
26
+ After the active action and receipt capability return evidence, a post is proven only when one unambiguous execution/audit result includes the external media ID and a public permalink. A successful request without those values, or an ambiguous provider outcome, is not public proof. Keep the result partial or unproven and identify the missing runtime evidence.
@@ -0,0 +1,29 @@
1
+ # Channel: LinkedIn organization Page
2
+
3
+ This channel reference narrows Social Media Management to one exact LinkedIn organization actor. It does not add provider behavior, account authority, connection, approval, scheduling, publication, analytics, or recurrence.
4
+
5
+ ## Before connection
6
+
7
+ - Start from one verified source or product insight. Revalidate drift-prone claims and omit stale pricing, revenue, customer, adoption, or performance numbers, private customer data, and private deal data.
8
+ - Fix the intended organization actor, organization ID, Page URL, current human administrator identity, and proposed publication time/timezone in the packet. Never fall back to a personal-profile actor when the organization actor is unavailable.
9
+ - Produce final mobile-readable copy plus source/claim review, tags if useful, duplicate-topic and duplicate-image evidence or an explicit limitation, and one exact approval boundary.
10
+ - Reuse the workspace brand brief and approved assets. For a landscape Page post, default to a 1200x627 PNG with one strong headline, minimal supporting text, generous safe margins, and a composition distinct from recent images.
11
+ - Prefer an approved existing image. If generation is needed, use exactly one authorized `openai.generate-image` attempt for the approved brief and credit boundary, verify the actual artifact and visible words, and do not retry automatically.
12
+ - Include an alt text companion draft that describes the actual reviewed asset. The current organization-post action does not accept or transmit the companion alt text draft. Do not claim that alt text was published.
13
+ - Ask at most one question only when the missing source, offer, audience, organization destination, or brand input prevents a grounded packet.
14
+
15
+ ## Connection, approval, and write
16
+
17
+ - Return the useful packet before asking for a connection. A useful draft does not imply that LinkedIn is connected or that the administrator or organization identity has been verified.
18
+ - Use one exact LinkedIn organization connection with authority for the requested organization ID. The organization connection and current human administrator identity must both be verified before any public write. Never fall back to a personal-profile actor when the organization actor is unavailable.
19
+ - Verify the active `linkedin.create-post-organization` schema before approval. Its normalized executable input contains `organizationId`, `text`, optional `mediaUrl`, and any active connection selector. A local asset path is not a runtime-ready media URL.
20
+ - Freeze the exact organization actor, organization ID, Page URL, exact copy, exact media, alt text companion draft, publication time and timezone, connection selector, and executable input. Any payload, actor, destination, media, or time change invalidates approval.
21
+ - Invoking `linkedin.create-post-organization` can publish. Require existing AgentLed connection, permission, explicit approval, billing policy, and due-time evidence before one bounded public-write attempt.
22
+ - Do not retry automatically after an ambiguous provider result. Reconcile the existing durable action/execution state first.
23
+
24
+ ## Proof, metrics, and recurrence
25
+
26
+ - Prove one organization post only from an unambiguous existing execution/audit result containing `postUrl`, `postId`, `actorUrn`, and matching organization ID. A public permalink without matching organization identity, or organization identity without the public permalink, is partial.
27
+ - Do not claim that alt text was published; the current action does not transmit the companion draft.
28
+ - After public proof, `linkedin.get-post-metrics` may make one bounded owner-only read for the exact proven post and organization. Missing or delayed metrics are reported, not invented, and do not erase publication proof.
29
+ - Offer **Make this twice weekly** only after one proven result and a durable content ledger can deduplicate topics, images, approvals, and attempts. Claim **Paused recurrence** only from an authoritative existing paused routine record. Activation remains a separate existing routine action and approval boundary.
@@ -0,0 +1,30 @@
1
+ # Job: Create an Instagram post
2
+
3
+ This is the first implemented Social Media Management Job. A Job is a named Markdown playbook, not a new record or runtime.
4
+
5
+ ## Sequence
6
+
7
+ 1. **Ground the request.** Inspect the business website and available public context through the existing read-only workspace/browser capability. Identify the offer, audience, useful source facts, and any claim that needs a caveat.
8
+ 2. **Ask at most one question.** Ask one concise question only when the offer or audience is still missing. If the answer is not available, return an honest partial result with the missing input and a useful next step; do not turn the Job into an interview.
9
+ 3. **Verify capabilities and create value before connection.** Verify the active `openai.generate-image`, `instagram.create-media-post`, and durable receipt schemas/capabilities. If any required action, schema, or receipt capability is unavailable or incompatible, report a partial result, identify the missing runtime evidence, and stop. Make exactly one `openai.generate-image` attempt for this Job to produce a grounded Instagram-native caption, one public 1080x1350 JPEG image artifact, an alt text draft, and a short rationale. Do not retry automatically; another generation attempt requires explicit user authorization. Verify those exact returned-artifact facts; a concept, prompt, storyboard, or unverified-size image is not Draft ready. Report a partial result and do not ask for connection when the exact public JPEG evidence is absent.
10
+ 4. **Connect only after the draft is useful.** Ask the user to connect and select one exact Business or Creator account only after the returned image and text artifact are ready for review. Existing connection, scope, approval, and permission surfaces remain authoritative; listing or recommending an app or action grants no permission or authority.
11
+ 5. **Review bounded owned evidence after connection.** For the selected account, call `instagram.list-recent-media` once for one bounded recent-media page. Choose an explicit sample of at most three returned media IDs or permalinks, then call `instagram.get-media-insights` only for that sample and its supported media-product insights. Revise the candidate only when that evidence changes the recommendation; otherwise preserve the grounded candidate. If `instagram_manage_insights` or analytics evidence is unavailable, preserve the grounded draft, report the gap, and do not block the first approved static post or request comments/moderation scope solely for analytics. Require reconnect, exact-account, and scope proof when the connection is stale or ambiguous.
12
+ 6. **Freeze and approve the exact write.** The existing AgentLed approval input freezes the full strict normalized `instagram.create-media-post` input: `accountId`, `mediaUrl`, `caption`, `altText`, `imageProfile=instagram_post_portrait`, `mediaType=IMAGE`, and any connection selector present. Any input or destination change invalidates approval. Do not fall back to legacy non-strict input. Require existing AgentLed approval and authority, then make one bounded public-write attempt. Full comments and moderation permissions are deferred and are not a first-post dependency.
13
+ 7. **Respect durable receipt states.** The existing receipt records `pending`, `claimed`, `container_dispatching`, `container_created`, `publish_dispatching`, `published`, `complete`, `permalink_pending`, `failed`, or `outcome_unknown` states. An ambiguous provider outcome is partial or unproven and must never invite an automatic retry; reconcile the durable receipt before another attempt.
14
+ 8. **Prove the result.** Call the post published only when one unambiguous execution/audit result contains both the external media ID and the public permalink. If either proof value is missing, or the provider outcome is ambiguous, report a partial or unproven result and say what runtime evidence is still missing.
15
+ 9. **Offer recurrence after proof.** Offer **Make this weekly** only after public permalink/media-ID proof from that unambiguous result. Claim **Paused recurrence** only from an authoritative existing paused routine record. Generic paused-routine infrastructure exists, but this Job does not automatically configure a routine; any activation remains a separate existing routine action and approval boundary.
16
+
17
+ ## Honest result contract
18
+
19
+ Report these states distinctly:
20
+
21
+ - **Draft ready:** public 1080x1350 JPEG, caption, alt text draft, rationale, sources, and any caveats are present; no connection or public write is implied. A concept or unverified-size image is partial.
22
+ - **Awaiting connection:** the user has a useful draft and must connect/select one exact Business or Creator account before approval can bind a destination; stale connection, exact-account, and scope proof require reconnect.
23
+ - **Owned evidence reviewed:** bounded recent owned media and supported media-product insights were read for the selected account; revise the candidate only when that evidence changes the recommendation.
24
+ - **Awaiting exact approval:** the full strict normalized `instagram.create-media-post` input is frozen in one existing AgentLed approval input: `accountId`, `mediaUrl`, `caption`, `altText`, `imageProfile=instagram_post_portrait`, `mediaType=IMAGE`, and any connection selector present. Any input or destination change invalidates approval; existing approval and authority are still required before a public write.
25
+ - **Receipt in progress or unresolved:** durable receipt states identify the attempt; an ambiguous or `outcome_unknown` state is not a retry invitation.
26
+ - **Published proof:** the exact approved artifact has one unambiguous execution result containing an external media ID and public permalink.
27
+ - **Paused recurrence:** an authoritative existing routine record says the routine is paused; do not infer this state from a recurrence offer.
28
+ - **Partial or unproven:** some work exists, but a missing input, artifact, approval, execution result, media ID, or permalink prevents the stronger claim.
29
+
30
+ Never claim that an image was generated, an account was connected, approval was granted, alt text was published, a post was published, or a routine was activated unless the existing service returned evidence for that exact fact. If an active capability is unavailable, return a partial result, identify the missing runtime evidence, and stop.
@@ -0,0 +1,46 @@
1
+ # Job: Prepare a LinkedIn organization post
2
+
3
+ This implemented Social Media Management Job prepares, optionally publishes, and proves one organization-page post through existing AgentLed services. A Job is a named Markdown playbook, not a new record or runtime.
4
+
5
+ ## Sequence
6
+
7
+ 1. **Ground one useful idea.** Start from a verified source or product insight and the available workspace or public context. Revalidate drift-prone claims before final copy. Do not use stale pricing, revenue, customer, adoption, or performance numbers, expose private customer or deal data, or turn an inference into a fact.
8
+ 2. **Fix the organization destination.** Record the exact organization actor, organization ID, Page URL, current human administrator identity, and proposed publication time and timezone. Never substitute a personal-profile actor when the organization actor is unavailable or ambiguous.
9
+ 3. **Ask at most one question.** Ask one concise question only when a missing source, offer, audience, organization destination, or brand input blocks a grounded packet. Otherwise continue. If the answer is unavailable, return an honest partial with the missing evidence and stop.
10
+ 4. **Create value before connection.** Return the useful approval packet before asking for a LinkedIn connection. Include final copy, source URLs and claim review, exact tag targets if any, the proposed publication time/timezone, a 1200x627 image asset or exact image brief, an alt text companion draft, duplicate-topic and duplicate-image evidence or an explicit limitation, and the exact approval boundary. Keep the copy native to LinkedIn: one concrete idea, mobile-readable paragraphs or restrained bullets, a supported call to action, and no more than three relevant hashtags.
11
+ 5. **Use the brand supplied by the workspace.** Reuse approved brand assets and visual rules instead of inventing a new identity. Prefer a fitting existing asset. If a new image is required, invoke `openai.generate-image` only after explicit authorization for the exact brief and credit boundary, make at most one attempt, verify the returned artifact and visible words, and stop rather than retrying automatically. A local-only path is useful review evidence but is not a runtime-ready `mediaUrl` until an existing service returns an accessible URL.
12
+ 6. **Keep alt text evidence honest.** Draft useful alt text for the reviewed image. The active `linkedin.create-post-organization` schema uses `organizationId`, `text`, and optional `mediaUrl`; it does not accept or transmit the companion alt text draft. Do not claim that alt text was published. If accessibility-complete media publication is required, report the capability gap instead of hiding it.
13
+ 7. **Connect only after the packet is useful.** The organization connection and current human administrator identity must both be verified before any public write. Require the exact organization actor and organization ID, a current LinkedIn connection with organization authority, the active strict action schema, and existing AgentLed permission and approval surfaces. If any of those are missing or mismatched, preserve the packet, report the exact blocker, and stop. Do not substitute a personal-profile actor.
14
+ 8. **Freeze the exact approval.** Bind the exact organization actor, organization ID, Page URL, exact copy, exact media, alt text companion draft, publication time and timezone, active connection selector, and normalized executable input containing `organizationId`, `text`, and optional `mediaUrl`. Any payload, actor, destination, media, or time change invalidates approval and requires a new exact review.
15
+ 9. **Make one approved attempt.** Invoking `linkedin.create-post-organization` can publish. Require existing AgentLed connection, approval, authority, billing policy, and due-time evidence before one bounded public-write attempt. Do not retry automatically if the provider result or durable receipt is ambiguous; reconcile the existing attempt first.
16
+ 10. **Prove the organization result.** Call the post published only when one unambiguous existing execution/audit result contains `postUrl`, `postId`, `actorUrn`, and matching organization ID. Publication proof requires a public permalink and organization identity from the same exact attempt. Missing or mismatched proof is partial or unproven.
17
+ 11. **Review optional metrics after proof.** `linkedin.get-post-metrics` is an optional owner-only read after public proof. Use one bounded read for the proven post and organization. Missing metrics do not erase publication proof; report the gap and never invent reach or engagement.
18
+ 12. **Offer recurrence after proof.** Offer **Make this twice weekly** only after one proven organization result and only when a durable content ledger can prevent duplicate topics, images, and writes. Claim **Paused recurrence** only from an authoritative existing paused routine record. A proposed cadence remains paused until separately reviewed and activated; every occurrence still needs its exact destination, copy, media, and time authority.
19
+
20
+ ## Approval packet
21
+
22
+ Return these fields before any connection or public write:
23
+
24
+ - `status`: `approval-ready`, `partial`, or `no strong post due`;
25
+ - exact organization actor, organization ID, Page URL, and current administrator identity to verify;
26
+ - proposed publication date, time, and timezone;
27
+ - final post copy;
28
+ - source URLs, claim review, and caveats;
29
+ - exact tag targets and URLs, if any;
30
+ - exact existing image asset or one approved image brief, dimensions, and alt text companion draft;
31
+ - duplicate-topic and duplicate-image check, or the exact ledger limitation;
32
+ - the exact approval boundary and a statement that no connection or public action occurred.
33
+
34
+ If no directly relevant and well-supported idea is available, return `no strong post due`. Do not fill a calendar quota with weak content.
35
+
36
+ ## Honest result contract
37
+
38
+ - **LinkedIn draft ready:** the full approval packet is present; no connection, image generation, scheduling, or publication is implied.
39
+ - **Awaiting LinkedIn connection:** the useful packet exists, but the exact organization connection or current administrator identity is missing or unverified.
40
+ - **Awaiting exact LinkedIn approval:** the actor, organization, destination, copy, media, companion alt text, time/timezone, connection selector, and executable action input are frozen; the public write still requires exact approval and existing authority.
41
+ - **LinkedIn receipt in progress or unresolved:** an attempt exists but proof is incomplete or ambiguous; reconcile it and do not retry automatically.
42
+ - **LinkedIn published proof:** one exact result contains `postUrl`, `postId`, `actorUrn`, and matching organization ID. Do not claim that the companion alt text was published.
43
+ - **Paused recurrence:** an authoritative existing routine record is paused; a cadence suggestion or approved post does not prove this state.
44
+ - **Partial or unproven:** useful work exists, but missing source, identity, connection, approval, due-time, action, receipt, permalink, or organization evidence prevents a stronger claim.
45
+
46
+ Never claim that a source was checked, an image was generated or uploaded, an account was connected, an administrator was verified, approval was granted, a post was scheduled or published, alt text was transmitted, metrics were read, or a routine was created or activated unless the existing service returned evidence for that exact fact.
@@ -0,0 +1,48 @@
1
+ # Proof and approval
2
+
3
+ This reference keeps native AgentLed state separate from Markdown guidance. If an active action, schema, or durable receipt capability is unavailable or incompatible, return a partial result, identify the missing runtime evidence, and stop. Existing AgentLed records remain authoritative for permissions, connections, approvals, execution, receipts, credits, and routines.
4
+
5
+ ## State contract
6
+
7
+ | State | Minimum evidence | Safe claim |
8
+ | --- | --- | --- |
9
+ | Draft ready | Public 1080x1350 JPEG, Instagram-native caption, alt text draft, rationale, and source context | A useful draft is ready; no connection or publication occurred. An unverified artifact remains partial. |
10
+ | Awaiting connection | Draft-ready artifact plus one exact Business or Creator account connection request | The user can connect/select the exact account; no account is connected by the skill. |
11
+ | Owned evidence reviewed | One bounded recent-media page and an explicit sample of at most three returned media IDs or permalinks, with supported media-product insights when available | The candidate is revised only when that evidence changes the recommendation. If insights or analytics evidence is unavailable, preserve the grounded draft and report the gap. |
12
+ | Awaiting exact approval | Full strict normalized `instagram.create-media-post` input: `accountId`, `mediaUrl`, `caption`, `altText`, `imageProfile=instagram_post_portrait`, `mediaType=IMAGE`, and any connection selector present | The exact public write is waiting for explicit approval and existing authority. Any input or destination change invalidates approval. |
13
+ | Receipt in progress or unresolved | Durable receipt state such as `pending`, `claimed`, `container_dispatching`, `container_created`, `publish_dispatching`, `published`, `complete`, `permalink_pending`, `failed`, or `outcome_unknown` | Reconcile the state; an ambiguous result is not an automatic retry. |
14
+ | Published proof | One unambiguous existing execution/audit record with external media ID and public permalink | One observed attempt has public proof. |
15
+ | LinkedIn draft ready | Final organization-page copy, verified source and claim review, exact organization destination, proposed publication time, 1200x627 image asset or exact brief, alt text companion draft, and duplicate-check evidence or limitation | A useful LinkedIn approval packet is ready; no connection or public write is implied. |
16
+ | Awaiting LinkedIn connection | LinkedIn draft-ready packet plus the exact organization actor, organization ID, Page URL, and current human administrator identity | The exact organization connection can be selected and verified; no personal-profile fallback is allowed. |
17
+ | Awaiting exact LinkedIn approval | Exact organization actor, organization ID, Page URL, copy, media, alt text companion draft, publication time/timezone, active connection selector, and normalized `linkedin.create-post-organization` input | The exact organization write is waiting for explicit approval and existing authority. Any payload, actor, destination, media, or time change invalidates approval. |
18
+ | LinkedIn receipt in progress or unresolved | Existing action/execution state for the exact approved organization write, without complete proof fields | Reconcile the state; an ambiguous provider outcome is not an automatic retry. |
19
+ | LinkedIn published proof | One unambiguous existing execution/audit result with `postUrl`, `postId`, `actorUrn`, and matching organization ID | One exact organization-page publication is proven. Do not claim that the companion alt text was published. |
20
+ | Partial or unproven | One or more required inputs, artifacts, approval, execution values, media ID, or permalink is missing | Report only the facts evidenced and identify the next safe step. |
21
+ | Paused recurrence | Channel-specific public proof exists and an authoritative existing routine record says the cadence is paused | The paused channel cadence may be reported; it is not active. |
22
+
23
+ ## Approval rules
24
+
25
+ - Listing or recommending an app or action grants no permission or authority. Invoking `openai.generate-image` can spend credits. Invoking `instagram.create-media-post` can publish. Both remain governed by existing AgentLed credit/spend and approval policies.
26
+ - A concept, prompt, storyboard, or unverified-size image is not Draft ready. No public 1080x1350 JPEG evidence means a partial result and no connection request.
27
+ - Verify the active `openai.generate-image` schema and returned public artifact before calling the draft ready; if the action or schema is unavailable, return partial and stop.
28
+ - The existing approval surface binds the full strict normalized `instagram.create-media-post` input: `accountId`, `mediaUrl`, `caption`, `altText`, `imageProfile=instagram_post_portrait`, `mediaType=IMAGE`, and any connection selector present. Missing approval or existing authority is a hard stop for public writes. Any input or destination change invalidates approval. Do not fall back to legacy non-strict input.
29
+ - Do not reuse approval for a changed artifact, another account, or another publication. A durable receipt state is authoritative for the attempt.
30
+ - An ambiguous provider outcome is partial/unproven and must never invite an automatic retry from Markdown guidance.
31
+ - A draft, provider response, task ID, container ID, or optimistic status is not publication proof by itself.
32
+ - For LinkedIn, prepare the useful approval packet before requesting a connection. Verify the exact organization actor, organization ID, Page URL, current human administrator identity, source review, final copy, media, alt text companion draft, and publication time/timezone. Do not substitute a personal-profile actor.
33
+ - The active `linkedin.create-post-organization` write input contains `organizationId`, `text`, `mediaUrl`, and any active connection selector. The current action does not accept or transmit the companion alt text draft, so do not claim that alt text was published. Any payload, actor, destination, media, or time change invalidates approval.
34
+ - Invoking `linkedin.create-post-organization` can publish. Require existing AgentLed connection, approval, authority, and billing policy before one bounded public-write attempt. Do not retry automatically after an ambiguous provider outcome.
35
+
36
+ ## Publication proof and recurrence
37
+
38
+ Require both an external media ID and a public permalink from one unambiguous existing execution/audit result before using the word published or offering **Make this weekly**. If either is absent or the provider outcome is ambiguous, report partial or unproven and do not offer recurrence as if the post succeeded.
39
+
40
+ For LinkedIn organization posts, require `postUrl`, `postId`, `actorUrn`, and matching organization identity from one unambiguous existing execution/audit result before using the word published or offering **Make this twice weekly**. `linkedin.get-post-metrics` is an optional bounded owner-only read after public proof; missing metrics do not erase publication proof and must not be invented. Keep the content ledger and every recurring occurrence destination-bound, duplicate-checked, and separately approved under the existing routine runtime.
41
+
42
+ ## Readiness boundary
43
+
44
+ An individual result is Draft ready only after the public 1080x1350 JPEG, caption, alt text draft, rationale, and sources are present. Reconnect, exact-account, and scope proof remain operational gates. If `instagram_manage_insights` or analytics evidence is unavailable, preserve the grounded draft and do not block the first approved static post or request comments/moderation scope solely for analytics. Full comments and moderation permissions are deferred and are not a first-post dependency.
45
+
46
+ Only after that public proof may the agent offer **Make this weekly**. Claim **Paused recurrence** only from an authoritative existing paused routine record. Generic paused-routine infrastructure exists, but this Job does not automatically configure a routine; keep any routine paused until the user separately reviews and activates it through the existing routine runtime.
47
+
48
+ Only after LinkedIn public proof may the agent offer **Make this twice weekly**. Claim **Paused recurrence** only from an authoritative existing paused routine record. Preparing or approving one post does not activate recurrence; keep a proposed LinkedIn routine paused until the user separately reviews and activates it through the existing routine runtime.