@@ -155,15 +155,19 @@ async def call(
155155@dataclass
156156class CreateSkillPayloadTool (NeoSkillToolBase ):
157157 name : str = "astrbot_create_skill_payload"
158- description : str = "Create a generic skill payload and return payload_ref."
158+ description : str = (
159+ "Step 1/3 for Neo skill authoring: create immutable payload content and return payload_ref. "
160+ "Use this to store skill_markdown and structured metadata; do NOT write local skill folders directly."
161+ )
159162 parameters : dict = field (
160163 default_factory = lambda : {
161164 "type" : "object" ,
162165 "properties" : {
163166 "payload" : {
164167 "anyOf" : [{"type" : "object" }, {"type" : "array" }],
165168 "description" : (
166- "Skill payload JSON. Recommended fields: skill_markdown, commands, meta."
169+ "Skill payload JSON. Typical schema: {skill_markdown, inputs, outputs, meta}. "
170+ "This only stores content and returns payload_ref; it does not create a candidate or release."
167171 ),
168172 },
169173 "kind" : {
@@ -221,18 +225,31 @@ async def call(
221225@dataclass
222226class CreateSkillCandidateTool (NeoSkillToolBase ):
223227 name : str = "astrbot_create_skill_candidate"
224- description : str = "Create a skill candidate from source execution IDs."
228+ description : str = (
229+ "Step 2/3 for Neo skill authoring: create a candidate by binding execution evidence "
230+ "(source_execution_ids) with skill identity (skill_key) and optional payload_ref."
231+ )
225232 parameters : dict = field (
226233 default_factory = lambda : {
227234 "type" : "object" ,
228235 "properties" : {
229- "skill_key" : {"type" : "string" },
236+ "skill_key" : {
237+ "type" : "string" ,
238+ "description" : "Stable logical identifier, e.g. image-collage-9grid." ,
239+ },
230240 "source_execution_ids" : {
231241 "type" : "array" ,
232242 "items" : {"type" : "string" },
243+ "description" : "Execution evidence IDs captured from sandbox history." ,
244+ },
245+ "scenario_key" : {
246+ "type" : "string" ,
247+ "description" : "Optional scenario namespace for grouping candidates." ,
248+ },
249+ "payload_ref" : {
250+ "type" : "string" ,
251+ "description" : "Optional payload reference created by astrbot_create_skill_payload." ,
233252 },
234- "scenario_key" : {"type" : "string" },
235- "payload_ref" : {"type" : "string" },
236253 },
237254 "required" : ["skill_key" , "source_execution_ids" ],
238255 }
@@ -338,7 +355,10 @@ async def call(
338355@dataclass
339356class PromoteSkillCandidateTool (NeoSkillToolBase ):
340357 name : str = "astrbot_promote_skill_candidate"
341- description : str = "Promote one candidate to release stage (canary/stable)."
358+ description : str = (
359+ "Step 3/3 for Neo skill authoring: promote candidate to canary/stable release. "
360+ "If stage=stable and sync_to_local=true, payload.skill_markdown is synced to local SKILL.md automatically."
361+ )
342362 parameters : dict = field (
343363 default_factory = lambda : {
344364 "type" : "object" ,
@@ -351,7 +371,10 @@ class PromoteSkillCandidateTool(NeoSkillToolBase):
351371 },
352372 "sync_to_local" : {
353373 "type" : "boolean" ,
354- "description" : "When stage is stable, sync payload.skill_markdown to local SKILL.md." ,
374+ "description" : (
375+ "Only used with stage=stable. true means sync payload.skill_markdown to local SKILL.md; "
376+ "false means release remains Neo-side only."
377+ ),
355378 "default" : True ,
356379 },
357380 },
0 commit comments