Ase meta config
Agentic Software Engineering (ASE)
npx -y skills add rse/ase --skill ase-meta-configAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
List, get, set, or delete the layered ASE configuration values across the user/project/task/session scope chain. Use when the user wants to "configure" ASE, or to inspect or change a configuration key like `agent.persona`, `agent.guidance`, `agent.task`, or `project.boxing`.
SKILL.md
6.6 KB, as published. Nobody here has run it
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
<skill name="ase-meta-config"> Configuration Management </skill><expand name="getopt" arg1="ase-meta-config" arg2="--scope|-s="> $ARGUMENTS </expand>
<objective> *List*, *get*, *set*, or *delete* the values of the *layered configuration* of ASE, mirroring the non-interactive `ase config <operation>` CLI subcommands *exclusively* through the `ase` MCP server. </objective>Procedure
-
Determine Operation:
-
Set <arguments><getopt-arguments/></arguments>, with any leading and trailing whitespace stripped. Split <arguments/> into whitespace-separated tokens, honoring single and double quotes (a quoted token is one token, with its surrounding quotes removed). Set <operation/> to the first token, lower-cased, and <operands/> to the list of the remaining tokens. If <arguments/> is empty, set <operation>(none)</operation> and <operands/> to the empty list. Inherit the always existing <ase-session-id/> from the current context. Do not output anything.
-
Determine the target scope chain:
<if condition="<getopt-option-scope/> is empty"> Set <scope>session:<ase-session-id/></scope>. Reads then cascade `user` -> `project` -> `session`, and writes land on the *session* layer -- the only layer on which the `agent.task` and `agent.skill` keys are writable at all. </if> <else> Set <scope><getopt-option-scope/></scope>, forwarding the given scope chain verbatim. </else>Do not output anything.
-
You MUST NOT use
Bash,Read,Write,Edit, or any other filesystem-touching tool anywhere in this skill. Every configuration access is performed exclusively through thease_config_*tools of theaseMCP server. Do not output anything.
-
-
Dispatch Operation:
-
<if condition="<operation/> is `list` AND <operands/> is empty">
Call the `ase_config_list(scope: "<scope/>")` tool from the `ase`
MCP server. The result is a structured object with an `entries`
array where each entry has a `key`, a `value`, and a `scope` field.
-
If the
<template> ⧉ **ASE**: ⚙ config (scope: `<scope/>`): *(none)* </template>entriesarray is empty, output the following <template/>: -
Else output the following <template/>, where each <key/>, <value/>, and <entry-scope/> correspond to one entry of the
<template> ⧉ **ASE**: ⚙ config (scope: `<scope/>`):entriesarray, in the given order:
</template>Key Value Scope <key/><value/> <entry-scope/>[...] [...] [...]
-
-
<elseif condition="<operation/> is `get` AND <operands/> has exactly one token">
Set <key/> to the single token of <operands/>. Call the
`ase_config_get(key: "<key/>", scope: "<scope/>")` tool from the
`ase` MCP server and set <text/> to its `text` output field.
-
If <text/> is empty, the key is not set at all. Output the following <template/>:
<template> ⧉ **ASE**: ⚙ config: `<key/>` (scope: `<scope/>`): *(not set)* </template> -
Else set <value/> to the JSON-decoded <text/> and output the following <template/>:
<template> ⧉ **ASE**: ⚙ config: `<key/>` (scope: `<scope/>`): **<value/>** </template>
-
-
<elseif condition="<operation/> is `set` AND <operands/> has exactly two tokens">
Set <key/> to the *first* and <value/> to the *second* token of
<operands/>. Call the `ase_config_set(key: "<key/>", val:
"<value/>", scope: "<scope/>")` tool from the `ase` MCP server.
Then, if <key/> is one of the three keys steering your own behaviour, you MUST immediately adopt the new <value/> for the remainder of the session -- including the output of this very skill run -- by re-evaluating and internalizing the corresponding rules of the constitution: for
agent.personaset <ase-persona-style><value/></ase-persona-style> and re-evaluate thePersona Communication Stylerules, foragent.guidanceset <ase-guidance-level><value/></ase-guidance-level> and re-evaluate theGuidance Hint Levelrules, and forproject.boxingset <ase-project-boxing><value/></ase-project-boxing> and re-evaluate theArtifact Boxing Transparencyrules. Do not output anything for this.Then only output the following <template/>:
<template> ⧉ **ASE**: ⚙ config: `<key/>` (scope: `<scope/>`): **<value/>** (*updated*) </template> </elseif> - <elseif condition="<operation/> is `delete` AND <operands/> has exactly one token"> Set <key/> to the single token of <operands/>. Call the `ase_config_delete(key: "<key/>", scope: "<scope/>")` tool from the `ase` MCP server. Then only output the following <template/>: <template> ⧉ **ASE**: ⚙ config: `<key/>` (scope: `<scope/>`): (*deleted*) </template> </elseif>
- <else> The <operation/> is either missing, unknown, or was given with the wrong number of operands. Notice that the `init` and `edit` subcommands of the `ase config` CLI are deliberately *not* mirrored by this skill. Only output the following <template/> and then immediately *STOP* processing the entire current skill: <template> ⧉ **ASE**: ☻ skill: **ase-meta-config**, ▶ ERROR: invalid operation: **<operation/>** (expected `list`, `get <key>`, `set <key> <value>`, or `delete <key>`) </template> </else>
-
<if condition="<operation/> is `list` AND <operands/> is empty">
Call the `ase_config_list(scope: "<scope/>")` tool from the `ase`
MCP server. The result is a structured object with an `entries`
array where each entry has a `key`, a `value`, and a `scope` field.