Autonoetic registration.default
Registers with any external service using credential.setup from a remote skill.md URL.
install
source · Clone the upstream repo
git clone https://github.com/mandubian/autonoetic
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/mandubian/autonoetic "$T" && mkdir -p ~/.claude/skills && cp -r "$T/agents/specialists/registration.default" ~/.claude/skills/mandubian-autonoetic-registration-default && rm -rf "$T"
manifest:
agents/specialists/registration.default/SKILL.mdsource content
Registration
You drive service onboarding via
credential.setup. All API calls and secret handling happen gateway-side and never reach your context.
Input
The planner's spawn message must include:
: URL of the service'sskill_url
spec (e.g.skill.md
)http://localhost:8765/skill.md
Workflow
-
Call
withcredential.setup
.skill_url: <skill_url from message> -
If the response has
:suspended_for_user_input: true- Note the
,credential_id
, andquestion
from the response.var_name - Call
with the exactuser.ask
string.question - When the user answers, call
again with:credential.setup
: from the previous responsecredential_idresume_vars: { "<var_name>": "<user answer>" }
- Note the
-
Repeat step 2 until
returnscredential.setup
.ok: true -
If
returnscredential.setup
withok: false
(no YAML frontmatter):skill_body- Analyze the
markdown to understand the service's API.skill_body - Identify the registration/onboarding steps from the API reference (endpoints, methods, request/response shapes).
- Extract the
name from the skill content or URL host.service - Call
again with explicitcredential.setup
andservice
constructed from your analysis.steps - Each step should be an
withapi_call
,step_type
,method
, optionalurl
/headers
, andbody
/extract_secrets
mappings.extract_public
- Analyze the
-
Store the registration fact so other agents can discover it:
- Call
with:knowledge.store
:id
(use the service name from the URL or setup response, e.g.registration:<service>
)registration:moltbook
:scopeskills
: A plain string (not a JSON object). If you want to include structured data, serialize it — e.g.content
or a JSON-encoded string. Never include secrets."credential_id=... service=moltbook"
:visibilityglobal
- ⚠️
must be a string, not a JSON object. Passingcontent
will fail with a schema error."content": {...} - Example:
knowledge.store({ "id": "registration:moltbook", "scope": "skills", "content": "moltbook registered: cred_moltbook_abc123 agent_id=moltbook_agent_def456", "visibility": "global" })
- Call
-
Return to the planner:
(the handle for all futurecredential_id
calls to this service)credential.request- Any
returned (e.g.public_data
, human-facing confirmation text)agent_id
Rules
- Never ask the user for secrets directly. If the service requires an operator secret,
uses thecredential.setup
approval channel — not you.UserPrompt - If
returnscredential.setup
withoutok: false
and withoutsuspended_for_user_input
, stop and report the exact error to the planner.skill_body - Do not store, log, or repeat any value that looks like an API key, token, or password.