You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Qoder creates one writable, system-managed Memory Store for an `(Identity, Template)` pair when its first Forward Session is created. `default_memory_store` lets OpenCMA manage the display metadata and destroy policy of that provider-created Store; it does not declare a second, ordinary entry under the top-level `memory_stores` collection.
297
+
298
+
```yaml
299
+
defaults:
300
+
provider: qoder
301
+
identity: support-user
302
+
303
+
identities:
304
+
support-user:
305
+
external_id: support-user # managed by OpenCMA
306
+
307
+
agents:
308
+
support:
309
+
# ...
310
+
delivery:
311
+
qoder:
312
+
type: forward
313
+
default_memory_store:
314
+
name: "Support group memory"
315
+
description: "Confirmed support knowledge and operating rules"
316
+
delete_on_destroy: false
317
+
```
318
+
319
+
Apply behavior:
320
+
321
+
- Requires Qoder Forward delivery and `defaults.identity`.
322
+
- Locates the Store mounted as `system_managed: true` and `access: read_write`, then idempotently updates its `name` and optional `description`.
323
+
- Does not create an initialization Session. Before the first real Session has created the Store, apply reports the reconciliation as pending. Run apply again after a Session exists.
324
+
- `name`changes the provider Store's display name, so it can be meaningful instead of remaining the provider-generated default.
325
+
326
+
Destroy behavior:
327
+
328
+
| `delete_on_destroy` | Result |
329
+
|---|---|
330
+
| omitted or `false` | Retain the Store, its Memories, and all version history. This is the default. |
331
+
| `true` | Permanently delete the Store, its Memories, and all version history after its system mount has been removed. |
332
+
333
+
For permanent deletion, OpenCMA captures and persists the Store ID before archiving the Template and deleting the Identity. Qoder may remove the system mount asynchronously, so OpenCMA uses bounded retries for a `still mounted` conflict. If the conflict remains, it tries `archive → delete`, matching the lifecycle verified against the live Qoder service. A cleanup that still cannot finish is retained in state and reported as a partial destroy; a later `agents destroy` resumes it even when all ordinary resources are already gone.
334
+
335
+
If the preflight cannot resolve the Identity, Template, or Store lookup, destroy aborts before deleting any project resource. Authentication, permission, and non-retryable validation errors fail immediately. `--cascade` does not override this field.
336
+
337
+
`delete_on_destroy: true` requires an OpenCMA-managed Identity. An external `identity_id` is never deleted by OpenCMA, so it keeps the system Store mounted and fails configuration validation. Permanent deletion is irreversible; keep the default `false` unless data removal is explicitly required.
338
+
290
339
| Field | Type | Required | Description |
291
340
|-------|------|:--------:|-------------|
292
341
| `model` | string \| map<provider,string> | yes | Single model or a per-provider map. |
@@ -301,14 +350,26 @@ agents:
301
350
| `mcp_servers[]` | `{ name, type?, url? }` | no | URL (`url`/`http`) or `official` MCP server. |
302
351
| `skills[]` | string \| AgentSkillRef | no | Skill name or `{ type: "official"\|"custom", skill_id, version? }`. |
303
352
| `vault` | string | no | Vault name. |
353
+
| `files` | string[] | no | File declarations inherited by a Qoder Forward Template. These files are created through the Forward File API. |
| `default_memory_store.name` | string | yes (with `default_memory_store`) | Display name for Qoder Forward's writable system-managed Store; 1–255 characters. |
356
+
| `default_memory_store.description` | string | no | Display description for the system-managed Store; up to 1024 characters. |
357
+
| `default_memory_store.delete_on_destroy` | boolean | no | Permanently delete the Store during destroy. Defaults to `false` (retain). |
305
358
| `environment_variables` | map<string,string> | no | Qoder runtime variables. Managed Sessions use Qoder's `KEY=VALUE;...` wire format; Forward Templates store the map as defaults and Forward Sessions send it under `config.environment_variables`. |
306
359
| `managed_tool_config.enabled_tools` | string[] | no | Provider-operated tools the Agent Harness exposes, e.g. `create_forward_schedule`, `list_forward_schedules`, `delete_forward_schedule`. Qoder Forward delivery only; declaring it on managed delivery is a validation error. |
307
360
| `resources` | SessionResource[] | no | Resources attached to every managed Session created for the Agent. |
308
361
| `multiagent.type` | `"coordinator"` | no | Declare a coordinator agent. |
| `metadata` | map<string,string> | no | Free-form metadata. |
311
364
365
+
For Qoder Forward delivery, a locally declared Environment is created only through the Forward Environment API. An
366
+
external `environment_id` may reference an Environment from either the Managed API or the Forward API; OpenCMA does
367
+
not create or mutate such a reference and resolves its API domain when checking existence. Referenced custom Skills, Vaults and Credentials, Files, and explicit
368
+
Memory Stores are created through their Forward APIs. A locally managed Environment, Skill, Vault, File, or Memory
369
+
Store cannot be shared by Managed and Forward Agents under one logical declaration; declare separate resources for
370
+
the two API domains. Explicit Forward Memory Stores require `defaults.identity` and are mounted read-only to that
371
+
Identity and Template.
372
+
312
373
### Session resources
313
374
314
375
Qoder and Claude managed Sessions support a provider-neutral GitHub repository resource:
0 commit comments