Use the bundled scripts to inspect available projects and skills, then call the deployed JustAI openapi endpoint in two steps:
list_projects.py lists your available资料库 folders/projectslist_skills.py lists your available skill IDschat.py submits the task and returns conversation_idchat_result.py polls chat_result until the task is completed or failedThis keeps the interface stable for slower branches such as card generation, plan generation, notes generation, and image generation.
When running inside Claude Code, ${CLAUDE_SKILL_DIR} resolves to this skill directory. Use that path when invoking the bundled scripts. In Codex or a plain shell, run the same scripts from the installed skill directory.
JUSTAI_OPENAPI_BASE_URLJUSTAI_OPENAPI_API_KEYJUSTAI_OPENAPI_TIMEOUTscripts/list_projects.py first and choose one or more project_id.scripts/list_skills.py first and choose one or more skill_id.scripts/chat.py with --message, optional --conversation-id, optional repeated --project-id, and optional repeated --skill-id.conversation_id.scripts/chat_result.py --conversation-id ... to poll the task result.branch tells which real path ran, such as collect_info, confirm_info, generate_plan, generate_notes, or generate_imageresult is the primary payloadtext is the human-readable summary or fallback textconversation_id must be preserved for follow-up turnsconversation_id back into scripts/chat.py together with the new --message.confirm_info results:这些信息没问题,继续生成方案.预算改成3万,目标用户改成25到30岁女性,请更新资料卡片.List projects:
python3 "${CLAUDE_SKILL_DIR}/scripts/list_projects.py"
List skills:
python3 "${CLAUDE_SKILL_DIR}/scripts/list_skills.py"
Run a new turn:
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" --message "帮我做一份小红书运营方案"
Poll the result:
python3 "${CLAUDE_SKILL_DIR}/scripts/chat_result.py" \
--conversation-id "existing-conversation-id"
Continue an existing turn:
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--conversation-id "existing-conversation-id" \
--message "继续展开第二部分"
Continue after a confirmation card:
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--conversation-id "existing-conversation-id" \
--message "这些信息没问题,继续生成方案"
Revise a confirmation card in natural language:
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--conversation-id "existing-conversation-id" \
--message "预算改成3万,目标用户改成25到30岁女性,其他不变,请更新资料卡片"
Run a turn scoped to a selected project/folder:
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--project-id "fld_demo" \
--message "请参考这个资料库里的内容,帮我写一篇港理工校园生活图文笔记"
Run a turn with a manually selected skill:
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--skill-id "skill_demo" \
--message "使用这个技能继续分析"
Run a turn with both selected project and skill:
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--project-id "fld_demo" \
--skill-id "skill_demo" \
--message "优先参考这个资料库并使用这个 skill 帮我生成方案"
Override the timeout for slower branches:
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--message "我是做敏感肌护肤的品牌,先帮我整理资料卡片"
Control polling interval:
python3 "${CLAUDE_SKILL_DIR}/scripts/chat_result.py" \
--conversation-id "existing-conversation-id" \
--poll-interval 2 \
--timeout 300
curl so submit and polling stay consistent.project_id 和 skill_id 两个字段,值都是字符串数组。conversation_id from the last successful submit response and reuse it for polling and follow-up requests.result as the primary machine-readable payload. Use text only as fallback when result is plain text.confirm_info currently continues through natural-language follow-up on the same conversation_id; there is no structured form_data submission path in openapi yet.status=failed, surface message directly instead of retrying blindly.共 1 个版本