Skip to main content

Library Tool Families

Every wizard-built or promote-built Strongly agent ships with seven canonical Library tool families auto-registered at boot. The agent calls them like any other function-calling tool; the platform handles auth, scope, retry, and multi-tenant isolation through the shared library_client.

The seven families

FamilyTool prefixWhat it coversREST surface
memorymemory_*Facts, observations, decisions. Hybrid semantic + text search./api/v1/memory
rulesrule_*Hard constraints (must / must-not / should)./api/v1/rules
skillsskill_*Reusable instruction packs (markdown)./api/v1/skills
taskstask_*One-off and recurring agent work. Cron-driven heartbeat closes via task_complete./api/v1/tasks
promptsprompt_*Read / author / look up Library prompts./api/v1/prompts
artifactsartifact_*Persisted deliverables (reports, dashboards, plans)./api/v1/artifacts
preferencespreference_*Long-running user preferences (timezone, tone, sign-off)./api/v1/preferences

Brain-config knobs

The brain workflow's top-level builtInTools config (or the same field on the function-calling node) controls which families register:

{
"builtInTools": {
"disabled": ["artifacts"],
"allowedFamilies": null
}
}
  • disabled — list of family names to skip even when otherwise allowed. Unknown names are silently ignored at runtime; the promote-workflow validator warns at edit time.
  • allowedFamilies — when present, a positive allow-list. Anything not listed is skipped, even if it's not in disabled. Use this to build a maximally-locked-down agent (e.g. read-only research bot with ["memory", "skills", "prompts"]).

Disabling a family at config time and re-enabling later requires a redeploy of the agent pod.

Tool definitions

Every tool registers with an OpenAI-function-calling-compatible JSON Schema. The full definition is available at runtime via GET /tools on the agent pod. Inline summary below.

memory

  • memory_create(content, kind?, summary?, tags?, category?, importance?) — store.
  • memory_search(query, limit?) — hybrid semantic + text.
  • memory_list(limit?, offset?, kind?, tags?) — browse.
  • memory_get(memory_id) — fetch one.
  • memory_update(memory_id, { content?, summary?, tags?, … }) — update in place.
  • memory_delete(memory_id).

rules

  • rule_create(description, content, category, severity, enforcement_mode?).
  • rule_list(limit?, category?, enabled_only?).
  • rule_get(rule_id) / rule_update(rule_id, …) / rule_delete(rule_id).

skills

skill_create / skill_list / skill_get / skill_update / skill_delete — Library-resident reusable instruction packs.

tasks

  • task_create(description, cron?, recurrence?, priority?, due_at?).
  • task_list(status?, limit?, offset?).
  • task_get(task_id) / task_complete(task_id, result?) / task_skip_next / task_end_recurrence / task_delete.

prompts

  • prompt_get(prompt_id) — read full content.
  • prompt_list(type?, limit?, offset?).
  • prompt_create(name, content, type?, description?, tags?).
  • prompt_update(prompt_id, …).

artifacts

  • artifact_save(title, artifact_type, content, content_type, summary?, tags?).
  • artifact_list(artifact_type?, limit?, offset?).
  • artifact_get(artifact_id, with_download_url?).
  • artifact_share(artifact_id, user_id) / artifact_delete.

preferences

  • preference_set(key, value, source?, description?).
  • preference_get(key) / preference_list(source?, limit?, offset?) / preference_forget(key).

Result envelope

Every tool returns a JSON string with one of two envelopes:

{ "success": true, "data": <result> }
{
"success": false,
"error": {
"code": "<error code>",
"status": <HTTP status>,
"message": "<reason>",
"details": <optional structured details>
}
}

Tools NEVER raise — the agent loop always sees a JSON envelope and decides whether to retry, surface the error, or continue.

Auth + multi-tenancy

The library_client injects three headers on every request:

  • Authorization: Bearer <STRONGLY_OWNER_TOKEN> — agent identity.
  • X-Strongly-App-Id: <STRONGLY_APP_ID> — per-agent isolation when the agent was deployed via an app.
  • X-Agent-Workflow-Id: <WORKFLOW_ID> — the brain workflow id.

The platform's existing scope filter uses these to pin reads and writes to the calling agent's tenant.

Retry policy

  • Idempotent verbs (GET, PUT, DELETE) — retry up to 3 times on connection errors and HTTP 502/503/504 with full-jitter exponential backoff (base 0.5 s, cap 8 s).
  • Non-idempotent verbs (POST, PATCH) — retry only on connection errors. Never retry a 5xx that may have committed a write.
  • 4xx is always raised — the caller decides what to surface.

See also