Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions skills/wrench/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ automation.
- Save one private native article draft, including supported plan-bound covers, inline images, and destination-safe source-post references: inspect `articles.draft.save`, then follow [native article drafts](references/article-drafts.md). Keep a provider cover outside the body document; on an exact LinkedIn replacement, omit it only to preserve the independently read existing banner. Never substitute `articles.publish`.
- Cross-post one exact text and optional ordered-image package: inspect every installed target schema, then follow [social cross-posting](references/cross-posting.md).
- Cross-post one exact video package: require an observed video-capable operation for every selected target, then follow [video social cross-posting](references/cross-posting-video.md).
- When the user supplied the copy, never mark the post as AI-generated on X or any other platform. Do not add "Made with AI" or "Made with Grok" text, leave a composer disclosure toggle on, or set a provider flag such as official `x` `made_with_ai`. If a composer fallback is used and that label cannot be turned off, stop and report instead of posting.
- Add a provider without changing Wrench source: author a portable plugin.
- Derive a reviewed first-party contract from authorized HAR evidence: follow [the derivation guide](references/derivation.md).

Expand Down
4 changes: 3 additions & 1 deletion skills/wrench/references/cross-posting-video.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ Encoding may use a local encoder such as ffmpeg. Posting may not.

- If the user provided a caption, use it exactly. Do not rewrite it to pass
a provider limit; ask for a shorter shared caption or an explicit
platform-specific variant.
platform-specific variant. Never mark that caption as AI-generated;
follow the unlabeled-copy rule in
[cross-post text and images](cross-posting.md).
- If no caption was provided, write one short caption from the video's
actual subject: about one sentence, under 120 characters. Do not invent a
long marketing paragraph.
Expand Down
9 changes: 9 additions & 0 deletions skills/wrench/references/cross-posting.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,15 @@ If alt text is absent, draft a short factual description from visible image cont

Give the package a task-local identity. Preserve image order through planning, settlement, duplicate accounting, and any cleanup assessment.

## Keep user-supplied copy unlabeled

When the user supplied the copy, never mark the post as AI-generated. This applies to X and every other platform in this workflow.

- Do not add "Made with AI", "Made with Grok", or similar disclosure text to the body.
- Do not leave a composer AI-disclosure toggle on.
- Do not set a provider metadata flag that labels the post or its media as AI-generated. Official `x` `posts.publish` exposes `made_with_ai`; leave it unset or `false` when the user supplied the copy. `x-web` `posts.publish` has no such input field; do not invent one. Inspect each installed schema for a comparable field and leave it unset or `false`.
- Prefer the Wrench transport. If a composer fallback is used and the AI label cannot be turned off, stop and report that target instead of posting with the label.

## Preflight every target

1. Run `wrench --help`; if it is unavailable, follow [installation and diagnostics](install.md).
Expand Down
4 changes: 3 additions & 1 deletion skills/wrench/references/social-platform-routing.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Use this as routing guidance only. Always inspect `wrench capabilities <adapter>
| Surface | Candidate adapter | Signed-in realm | Reference post shape | Meaning |
| --- | --- | --- | --- | --- |
| X | `x-web` | Browser cookies/profile | `body`; optional image fields when exposed | Consumer X post |
| X | `x` | Official OAuth | `body`, optional `media` and aligned alt-text fields | Documented API post |
| X | `x` | Official OAuth | `body`, optional `media` and aligned alt-text fields; leave `made_with_ai` unset or `false` when the user supplied the copy | Documented API post |
| LinkedIn | `linkedin-web` | Browser cookies/profile | `body`, `visibility`, optional image and accessibility fields | Member or explicitly bound organization post |
| LinkedIn | `linkedin` | Official OAuth | Inspect installed schema | Documented API post |
| Bluesky | `bluesky-web` | Profile-backed Bluesky web session | `body`, optional image, media type, and alt text | AT Protocol feed post |
Expand All @@ -27,6 +27,8 @@ unless their installed canonical capability independently says otherwise.
- Preserve input image order. Require alt-text arrays to align one-to-one when the schema exposes them.
- Re-check capabilities before every new preview. A plan or run remains governed by its bound contract identity when installed support later changes.
- A provider may reject an otherwise valid image for dimensions, animation, color profile, or account entitlement. Report that provider-owned failure without converting the file unless the user asks for a derivative.
- When the user supplied the copy, never mark the post as AI-generated on any platform. Do not add "Made with AI" or "Made with Grok" text, leave a composer disclosure toggle on, or set a provider AI-generated flag. Official `x` `posts.publish` exposes `made_with_ai`; leave it unset or `false`. `x-web` `posts.publish` has no such input field.
- If a composer fallback is used and that label cannot be turned off, stop and report the target instead of posting with the label.

## Common invocation shape

Expand Down
3 changes: 3 additions & 0 deletions skills/wrench/references/social-video-platform-routing.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ installed capability independently says `observed`.
- Tags are an explicit platform-specific variant only for TikTok,
Instagram, and YouTube Shorts. Leave X, LinkedIn, Substack, and Bluesky
tag-free.
- When the user supplied the caption, never mark the video as AI-generated.
Official `x` `posts.publish` exposes `made_with_ai`; leave it unset or
`false`. Do not invent a disclosure field on another adapter.

## Common invocation shape

Expand Down