协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
habr【开发与工程】Read, update, preview, and publish Habr article drafts through the user's encrypted Habr login cookies. Use when the user mentions Habr, publishing to the Russian developer community, or adapting a technical article for Habr.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Habr does not publish a supported write API. This Skill uses the current
https://habr.com/kek/v2/* endpoints used by Habr's own web editor. The
connector encrypts the Cookie jar at rest, then injects a transient decrypted
JSON copy as $HABR_COOKIES only inside the Skill sandbox. Never print it,
pass it in command arguments, or write it to disk.
H="$SKILL_DIR/scripts/habr.py"
[ -f "$H" ] || H=$(find /tmp -maxdepth 8 -path '*/skills/*/habr/scripts/habr.py' 2>/dev/null | head -1)
[ -f "$H" ] || { echo "habr script not found" >&2; exit 1; }
python3 "$H" drafts --limit 20
python3 "$H" get --id ARTICLE_ID > draft.json
An auth error means the Cookie expired. Ask the user to reconnect Habr at https://studio.acedata.cloud/console/connectors; never retry in a loop.
Habr's private editor schema can change. Preserve the complete object returned
by get, edit only intended fields, and pass the resulting JSON back rather than
constructing a partial payload from memory. The client derives a stable
idempotenceKey from the payload when one is absent, so dry-run and confirmed
save use the same key.
# Edit draft.json while preserving unknown fields, then inspect without writing.
python3 "$H" save --id ARTICLE_ID --payload-file draft.json
python3 "$H" preview --payload-file draft.json
# Save only after showing the final title/body/hubs/tags and receiving approval.
python3 "$H" save --id ARTICLE_ID --payload-file draft.json --confirm
save is a dry run unless --confirm is the final argument. preview is
read-only and runs directly. Saving updates a private draft; it does not make
the article public.
python3 "$H" publish --id ARTICLE_ID
python3 "$H" publish --id ARTICLE_ID --confirm
python3 "$H" verify --id ARTICLE_ID
The first call is a dry run. Before the confirmed call, show the exact title,
body, hubs, tags, and visibility returned by get. Publishing is public and can
trigger Habr moderation. If publishing is accepted but result verification
fails, never publish again; use verify until the existing result is visible.
get on an existing draft so required private fields are retained.Recommended draft shape:
# Concrete technical title
One-paragraph problem statement and who this is for.
## Context
## Implementation
## Failure modes and trade-offs
## Results
## Conclusion
drafts/get first to determine whether Habr accepted it.After the user confirms that Habr published the article and provides the real URL, record it once:
publish_artifact(kind="article", channel="habr", title="<title>", url="<real Habr URL>", status="delivered")