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.
Ensure these environment variables are set before using the script:
JUSTAI_OPENAPI_BASE_URLJUSTAI_OPENAPI_API_KEYJUSTAI_OPENAPI_TIMEOUTIf the task should be scoped to a specific资料库, run scripts/list_projects.py first and choose one or more project_id.
If the task should preload a specific skill, run scripts/list_skills.py first and choose one or more skill_id.
Run scripts/chat.py with --message, optional --conversation-id, optional repeated --project-id, and optional repeated --skill-id.
Preserve the returned conversation_id.
Run scripts/chat_result.py --conversation-id ... to poll the task result.
Read the returned JSON and use it directly:
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 turnsIf the user asks to continue an existing conversation, pass the previous conversation_id back into scripts/chat.py together with the new --message.
For confirm_info results:
这些信息没问题,继续生成方案.预算改成3万,目标用户改成25到30岁女性,请更新资料卡片.List projects:
bash
python3 "${CLAUDE_SKILL_DIR}/scripts/list_projects.py"
List skills:
bash
python3 "${CLAUDE_SKILL_DIR}/scripts/list_skills.py"
Run a new turn:
bash
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" --message "帮我做一份小红书运营方案"
Poll the result:
bash
python3 "${CLAUDE_SKILL_DIR}/scripts/chat_result.py" \
--conversation-id "existing-conversation-id"
Continue an existing turn:
bash
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--conversation-id "existing-conversation-id" \
--message "继续展开第二部分"
Continue after a confirmation card:
bash
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--conversation-id "existing-conversation-id" \
--message "这些信息没问题,继续生成方案"
Revise a confirmation card in natural language:
bash
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:
bash
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--project-id "fld_demo" \
--message "请参考这个资料库里的内容,帮我写一篇港理工校园生活图文笔记"
Run a turn with a manually selected skill:
bash
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--skill-id "skill_demo" \
--message "使用这个技能继续分析"
Run a turn with both selected project and skill:
bash
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--project-id "fld_demo" \
--skill-id "skill_demo" \
--message "优先参考这个资料库并使用这个 skill 帮我生成方案"
Override the timeout for slower branches:
bash
python3 "${CLAUDE_SKILL_DIR}/scripts/chat.py" \
--message "我是做敏感肌护肤的品牌,先帮我整理资料卡片"
Control polling interval:
bash
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.