ulams living
Generated from front/cli (ulams schema)
ulams living audit export
Section titled “ulams living audit export”Export the audit trail of a course as CSV or JSON (stdout, or –out
Kind: read (idempotent). Stability: stable. MCP tool: living_audit_export. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/sessions/{session}/audit/export.
| Flag | Type | Required | Description |
|---|---|---|---|
--session (positional) |
string | yes | Builder session id (the course’s session; from ulams builder sessions list). |
--format |
string | Default csv. | |
--action |
string | ||
--from |
string | ||
--to |
string | ||
--out |
string | Write to this file. |
# To a fileulams living audit export <session> --format json --out audit.jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "session": { "type": "string", "description": "Builder session id (the course's session; from `ulams builder sessions list`)." }, "format": { "description": "Default csv.", "type": "string", "enum": [ "csv", "json" ] }, "action": { "type": "string" }, "from": { "type": "string" }, "to": { "type": "string" }, "out": { "description": "Write to this file.", "type": "string" } }, "required": [ "session" ]}ulams living audit export-all
Section titled “ulams living audit export-all”Export the audit trail of the whole academy as CSV or JSON (admins only).
Kind: read (idempotent). Stability: stable. MCP tool: living_audit_export_all. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/audit/export.
| Flag | Type | Required | Description |
|---|---|---|---|
--format |
string | Default csv. | |
--action |
string | ||
--from |
string | ||
--to |
string | ||
--out |
string | Write to this file. |
# Everything to a fileulams living audit export-all --format json --out audit-all.jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "format": { "description": "Default csv.", "type": "string", "enum": [ "csv", "json" ] }, "action": { "type": "string" }, "from": { "type": "string" }, "to": { "type": "string" }, "out": { "description": "Write to this file.", "type": "string" } }}ulams living audit list
Section titled “ulams living audit list”The audit trail of a course’s updates, newest first.
Kind: read (idempotent). Stability: stable. MCP tool: living_audit_list. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/sessions/{session}/audit.
| Flag | Type | Required | Description |
|---|---|---|---|
--session (positional) |
string | yes | Builder session id (the course’s session; from ulams builder sessions list). |
--action |
string | Action prefix, e.g. proposal. or item.accepted. | |
--actor-type |
string | ||
--from |
string | Date-time. | |
--to |
string | Date-time. | |
--source |
string | ||
--page |
integer | ||
--per-page |
integer |
# Recent decisionsulams living audit list <session> --action item. --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "session": { "type": "string", "description": "Builder session id (the course's session; from `ulams builder sessions list`)." }, "action": { "description": "Action prefix, e.g. proposal. or item.accepted.", "type": "string" }, "actorType": { "type": "string" }, "from": { "description": "Date-time.", "type": "string" }, "to": { "description": "Date-time.", "type": "string" }, "source": { "type": "string" }, "page": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, "perPage": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 } }, "required": [ "session" ]}ulams living audit verify
Section titled “ulams living audit verify”Recompute the audit hash chain and report whether it is intact.
The chain covers the whole academy, not one course.
Kind: read (idempotent). Stability: stable. MCP tool: living_audit_verify. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/sessions/{session}/audit/verify.
| Flag | Type | Required | Description |
|---|---|---|---|
--session (positional) |
string | yes | Builder session id (the course’s session; from ulams builder sessions list). |
# Verifyulams living audit verify <session> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "session": { "type": "string", "description": "Builder session id (the course's session; from `ulams builder sessions list`)." } }, "required": [ "session" ]}ulams living audit verify-all
Section titled “ulams living audit verify-all”Recompute the audit hash chain of the whole academy (admins only).
Kind: read (idempotent). Stability: stable. MCP tool: living_audit_verify_all. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/audit/verify.
# Verifyulams living audit verify-all --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": {}}ulams living connections check
Section titled “ulams living connections check”Check a connected source for a new revision now.
Kind: write (idempotent). Stability: stable. MCP tool: living_connections_check. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/connections/{connection}/check.
| Flag | Type | Required | Description |
|---|---|---|---|
--connection (positional) |
string | yes | Connection id (from living sources list). |
# Check nowulams living connections check <connection> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "connection": { "type": "string", "description": "Connection id (from `living sources list`)." } }, "required": [ "connection" ]}ulams living connections delete
Section titled “ulams living connections delete”Stop checking a source and forget its secrets (revisions and the audit trail stay).
Kind: destructive (idempotent). Stability: stable. MCP tool: living_connections_delete. Scopes: living-course:write.
Endpoints: DELETE /api/admin/living-course/connections/{connection}.
| Flag | Type | Required | Description |
|---|---|---|---|
--connection (positional) |
string | yes | Connection id. |
# Disconnectulams living connections delete <connection> --yes --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "connection": { "type": "string", "description": "Connection id." } }, "required": [ "connection" ]}ulams living connections update
Section titled “ulams living connections update”Change a connection: schedule, automatic analysis, pause, learner notices, settings.
Kind: write (idempotent). Stability: stable. MCP tool: living_connections_update. Scopes: living-course:write.
Endpoints: PUT /api/admin/living-course/connections/{connection}.
| Flag | Type | Required | Description |
|---|---|---|---|
--connection (positional) |
string | yes | Connection id. |
--schedule |
string | ||
--auto-analyse |
boolean | Analyse new revisions automatically (within the cost limit). | |
--status |
string | ||
--show-pending-to-learners |
boolean | Tell learners an update is under review. | |
--notify-learners-of-updates |
boolean | Notify learners when an update is applied. | |
--config |
object | Replace the connector settings (JSON or @file). | |
--secrets |
object | Write-only values; a field left out keeps its stored value. |
# Pauseulams living connections update <connection> --status paused --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "connection": { "type": "string", "description": "Connection id." }, "schedule": { "type": "string", "enum": [ "hourly", "daily", "weekly", "manual" ] }, "autoAnalyse": { "description": "Analyse new revisions automatically (within the cost limit).", "type": "boolean" }, "status": { "type": "string", "enum": [ "active", "paused" ] }, "showPendingToLearners": { "description": "Tell learners an update is under review.", "type": "boolean" }, "notifyLearnersOfUpdates": { "description": "Notify learners when an update is applied.", "type": "boolean" }, "config": { "description": "Replace the connector settings (JSON or @file).", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "secrets": { "description": "Write-only values; a field left out keeps its stored value.", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } } }, "required": [ "connection" ]}ulams living connections webhook-secret
Section titled “ulams living connections webhook-secret”Rotate the webhook secret of a connection (shown once; the old one stops working).
Kind: write. Stability: stable. MCP tool: living_connections_webhook_secret. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/connections/{connection}/webhook-secret.
| Flag | Type | Required | Description |
|---|---|---|---|
--connection (positional) |
string | yes | Connection id. |
# Rotateulams living connections webhook-secret <connection> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "connection": { "type": "string", "description": "Connection id." } }, "required": [ "connection" ]}ulams living connectors list
Section titled “ulams living connectors list”List the source connectors this instance offers.
Kind: read (idempotent). Stability: stable. MCP tool: living_connectors_list. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/connectors.
# Connectorsulams living connectors list --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": {}}ulams living proposals accept
Section titled “ulams living proposals accept”Accept one item of a proposal.
Nothing reaches the course until living proposals apply. Item ids come from living proposals get.
Kind: write (idempotent). Stability: stable. MCP tool: living_proposals_accept. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/proposals/{proposal}/items/{item}/accept.
| Flag | Type | Required | Description |
|---|---|---|---|
--proposal (positional) |
string | yes | Update proposal id (from ulams living proposals list <session>). |
--item |
string | yes | Proposal item id (from ulams living proposals get <proposal>). |
# acceptulams living proposals accept <proposal> --item <item> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "proposal": { "type": "string", "description": "Update proposal id (from `ulams living proposals list <session>`)." }, "item": { "type": "string", "description": "Proposal item id (from `ulams living proposals get <proposal>`)." } }, "required": [ "proposal", "item" ]}ulams living proposals accept-all
Section titled “ulams living proposals accept-all”Accept every pending item of a proposal.
Kind: write (idempotent). Stability: stable. MCP tool: living_proposals_accept_all. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/proposals/{proposal}/accept-all.
| Flag | Type | Required | Description |
|---|---|---|---|
--proposal (positional) |
string | yes | Update proposal id (from ulams living proposals list <session>). |
# Accept allulams living proposals accept-all <proposal> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "proposal": { "type": "string", "description": "Update proposal id (from `ulams living proposals list <session>`)." } }, "required": [ "proposal" ]}ulams living proposals analyse
Section titled “ulams living proposals analyse”Start (or resume) the AI analysis of a proposal.
Costs model tokens. When the estimate is above the automatic limit the API answers CONFLICT with the estimate: repeat with –confirm-estimate. 503 FEATURE_DISABLED when AI is off.
Kind: write. Stability: stable. MCP tool: living_proposals_analyse. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/proposals/{proposal}/analyse.
| Flag | Type | Required | Description |
|---|---|---|---|
--proposal (positional) |
string | yes | Update proposal id (from ulams living proposals list <session>). |
--confirm-estimate |
boolean | Accept the cost estimate. |
# Analyseulams living proposals analyse <proposal> --confirm-estimate --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "proposal": { "type": "string", "description": "Update proposal id (from `ulams living proposals list <session>`)." }, "confirmEstimate": { "description": "Accept the cost estimate.", "type": "boolean" } }, "required": [ "proposal" ]}ulams living proposals apply
Section titled “ulams living proposals apply”Apply the accepted items as a new course version.
Creates a blueprint version of kind update and applies it through the course services. A 409 lists conflicts (items that cannot apply) or admin edits made since the last apply; repeat with –overwrite to replace those edits. Waits for the run (–no-wait returns the handle).
Kind: write. Stability: stable. MCP tool: living_proposals_apply. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/proposals/{proposal}/apply.
| Flag | Type | Required | Description |
|---|---|---|---|
--proposal (positional) |
string | yes | Update proposal id (from ulams living proposals list <session>). |
--overwrite |
boolean | Overwrite admin edits made since the last apply. |
# Applyulams living proposals apply <proposal> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "proposal": { "type": "string", "description": "Update proposal id (from `ulams living proposals list <session>`)." }, "overwrite": { "description": "Overwrite admin edits made since the last apply.", "type": "boolean" } }, "required": [ "proposal" ]}ulams living proposals get
Section titled “ulams living proposals get”Show a proposal: its items grouped by lesson, the decisions and the analysis steps.
Kind: read (idempotent). Stability: stable. MCP tool: living_proposals_get. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/proposals/{proposal}.
| Flag | Type | Required | Description |
|---|---|---|---|
--proposal (positional) |
string | yes | Update proposal id (from ulams living proposals list <session>). |
# A proposalulams living proposals get <proposal> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "proposal": { "type": "string", "description": "Update proposal id (from `ulams living proposals list <session>`)." } }, "required": [ "proposal" ]}ulams living proposals learner-note
Section titled “ulams living proposals learner-note”Set the note learners see about this update (up to 500 characters; empty restores the suggested one).
Kind: write (idempotent). Stability: stable. MCP tool: living_proposals_learner_note. Scopes: living-course:write.
Endpoints: PUT /api/admin/living-course/proposals/{proposal}/learner-note.
| Flag | Type | Required | Description |
|---|---|---|---|
--proposal (positional) |
string | yes | Update proposal id (from ulams living proposals list <session>). |
--note |
string | yes | The note, plain text. |
# Set the noteulams living proposals learner-note <proposal> --note "Lesson 3 now covers the new API." --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "proposal": { "type": "string", "description": "Update proposal id (from `ulams living proposals list <session>`)." }, "note": { "type": "string", "description": "The note, plain text." } }, "required": [ "proposal", "note" ]}ulams living proposals list
Section titled “ulams living proposals list”List the update proposals of a course, newest first.
Kind: read (idempotent). Stability: stable. MCP tool: living_proposals_list. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/sessions/{session}/proposals.
| Flag | Type | Required | Description |
|---|---|---|---|
--session (positional) |
string | yes | Builder session id (the course’s session; from ulams builder sessions list). |
# Proposalsulams living proposals list <session> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "session": { "type": "string", "description": "Builder session id (the course's session; from `ulams builder sessions list`)." } }, "required": [ "session" ]}ulams living proposals reanalyse
Section titled “ulams living proposals reanalyse”Start over from the newest revision (the open proposal is superseded; decisions are not carried over).
Kind: write. Stability: stable. MCP tool: living_proposals_reanalyse. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/proposals/{proposal}/reanalyse.
| Flag | Type | Required | Description |
|---|---|---|---|
--proposal (positional) |
string | yes | Update proposal id (from ulams living proposals list <session>). |
# Reanalyseulams living proposals reanalyse <proposal> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "proposal": { "type": "string", "description": "Update proposal id (from `ulams living proposals list <session>`)." } }, "required": [ "proposal" ]}ulams living proposals regenerate
Section titled “ulams living proposals regenerate”Ask for a new suggestion for one item, with a comment (at most three per item).
One new model call for one element.
Kind: write. Stability: stable. MCP tool: living_proposals_regenerate. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/proposals/{proposal}/items/{item}/regenerate.
| Flag | Type | Required | Description |
|---|---|---|---|
--proposal (positional) |
string | yes | Update proposal id (from ulams living proposals list <session>). |
--item |
string | yes | Proposal item id (from ulams living proposals get <proposal>). |
--comment |
string | What to do differently (up to 1000 characters). |
# Regenerateulams living proposals regenerate <proposal> --item <item> --comment "Keep the example" --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "proposal": { "type": "string", "description": "Update proposal id (from `ulams living proposals list <session>`)." }, "item": { "type": "string", "description": "Proposal item id (from `ulams living proposals get <proposal>`)." }, "comment": { "description": "What to do differently (up to 1000 characters).", "type": "string" } }, "required": [ "proposal", "item" ]}ulams living proposals reject
Section titled “ulams living proposals reject”Reject one item of a proposal.
Nothing reaches the course until living proposals apply. Item ids come from living proposals get.
Kind: write (idempotent). Stability: stable. MCP tool: living_proposals_reject. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/proposals/{proposal}/items/{item}/reject.
| Flag | Type | Required | Description |
|---|---|---|---|
--proposal (positional) |
string | yes | Update proposal id (from ulams living proposals list <session>). |
--item |
string | yes | Proposal item id (from ulams living proposals get <proposal>). |
# rejectulams living proposals reject <proposal> --item <item> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "proposal": { "type": "string", "description": "Update proposal id (from `ulams living proposals list <session>`)." }, "item": { "type": "string", "description": "Proposal item id (from `ulams living proposals get <proposal>`)." } }, "required": [ "proposal", "item" ]}ulams living proposals reject-all
Section titled “ulams living proposals reject-all”Reject the whole proposal and acknowledge the source revision.
Kind: destructive (idempotent). Stability: stable. MCP tool: living_proposals_reject_all. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/proposals/{proposal}/reject.
| Flag | Type | Required | Description |
|---|---|---|---|
--proposal (positional) |
string | yes | Update proposal id (from ulams living proposals list <session>). |
# Rejectulams living proposals reject-all <proposal> --yes --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "proposal": { "type": "string", "description": "Update proposal id (from `ulams living proposals list <session>`)." } }, "required": [ "proposal" ]}ulams living proposals reset
Section titled “ulams living proposals reset”Reset a decision on one item.
Nothing reaches the course until living proposals apply. Item ids come from living proposals get.
Kind: write (idempotent). Stability: stable. MCP tool: living_proposals_reset. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/proposals/{proposal}/items/{item}/reset.
| Flag | Type | Required | Description |
|---|---|---|---|
--proposal (positional) |
string | yes | Update proposal id (from ulams living proposals list <session>). |
--item |
string | yes | Proposal item id (from ulams living proposals get <proposal>). |
# resetulams living proposals reset <proposal> --item <item> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "proposal": { "type": "string", "description": "Update proposal id (from `ulams living proposals list <session>`)." }, "item": { "type": "string", "description": "Proposal item id (from `ulams living proposals get <proposal>`)." } }, "required": [ "proposal", "item" ]}ulams living revisions changes
Section titled “ulams living revisions changes”What changed in a revision (fragments added, removed, moved, changed) and which course elements cite them.
Kind: read (idempotent). Stability: stable. MCP tool: living_revisions_changes. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/revisions/{revision}/changes.
| Flag | Type | Required | Description |
|---|---|---|---|
--revision (positional) |
string | yes | Revision id. |
--against |
string | Compare with this revision (default: the one it was compared with). |
# Changesulams living revisions changes <revision> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "revision": { "type": "string", "description": "Revision id." }, "against": { "description": "Compare with this revision (default: the one it was compared with).", "type": "string" } }, "required": [ "revision" ]}ulams living revisions get
Section titled “ulams living revisions get”Show one source revision.
Kind: read (idempotent). Stability: stable. MCP tool: living_revisions_get. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/revisions/{revision}.
| Flag | Type | Required | Description |
|---|---|---|---|
--revision (positional) |
string | yes | Revision id. |
# A revisionulams living revisions get <revision> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "revision": { "type": "string", "description": "Revision id." } }, "required": [ "revision" ]}ulams living revisions list
Section titled “ulams living revisions list”List the revisions of a source, newest first.
Kind: read (idempotent). Stability: stable. MCP tool: living_revisions_list. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/sources/{source}/revisions.
| Flag | Type | Required | Description |
|---|---|---|---|
--source (positional) |
string | yes | Source id (from living sources list). |
# Revisionsulams living revisions list <source> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "source": { "type": "string", "description": "Source id (from `living sources list`)." } }, "required": [ "source" ]}ulams living revisions upload
Section titled “ulams living revisions upload”Upload a new version of a source file as a new revision.
created is false when the file equals the latest revision. A changed file starts change detection and, when AI is on, an update proposal.
Kind: write. Stability: stable. MCP tool: living_revisions_upload. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/sources/{source}/revisions.
| Flag | Type | Required | Description |
|---|---|---|---|
--source (positional) |
string | yes | Source id. |
--file (positional) |
string | yes | Local file (Markdown, PDF or DOCX). |
# A new versionulams living revisions upload <source> ./handbook-v2.md --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "source": { "type": "string", "description": "Source id." }, "file": { "type": "string", "description": "Local file (Markdown, PDF or DOCX)." } }, "required": [ "source", "file" ]}ulams living sources add
Section titled “ulams living sources add”Add a source document (Markdown, PDF or DOCX) to a course’s session.
Uploads a file or a URL’s document as a new source; later versions of it go through living revisions upload <source> <file>. For a Git repository or web pages use living sources connect.
Kind: write. Stability: stable. MCP tool: living_sources_add. Scopes: builder:write.
Endpoints: POST /api/admin/course-builder/sessions/{session}/sources.
| Flag | Type | Required | Description |
|---|---|---|---|
--session (positional) |
string | yes | Builder session id (the course’s session; from ulams builder sessions list). |
--file |
array | Local file; repeat for several. | |
--url |
array | URL of the document itself; repeat for several. |
# Add a fileulams living sources add <session> --file ./handbook-v2.md --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "session": { "type": "string", "description": "Builder session id (the course's session; from `ulams builder sessions list`)." }, "file": { "description": "Local file; repeat for several.", "type": "array", "items": { "type": "string" } }, "url": { "description": "URL of the document itself; repeat for several.", "type": "array", "items": { "type": "string" } } }, "required": [ "session" ]}ulams living sources connect
Section titled “ulams living sources connect”Connect a Git repository or web pages as a source that is checked for changes.
The API fetches revision 1 and starts the interview. –config is the connector’s settings (see living connectors list for the schema), –secrets holds write-only values such as a Git token (prefer @file over typing it). The webhook secret, if the connector has webhooks, is returned once.
Kind: write. Stability: stable. MCP tool: living_sources_connect. Scopes: living-course:write.
Endpoints: POST /api/admin/living-course/sessions/{session}/sources/connect.
| Flag | Type | Required | Description |
|---|---|---|---|
--session (positional) |
string | yes | Builder session id (the course’s session; from ulams builder sessions list). |
--connector |
string | yes | Connector key: git, url, or a plugin’s key. |
--config |
object | yes | Connector settings as JSON or @file, e.g. {“host”:“github”,“repository”:“owner/name”,“branch”:“main”,“paths”:[“docs”]}. |
--secrets |
object | Write-only values, e.g. {“token”:“…”}; JSON or @file. | |
--schedule |
string | How often to check (default: the connector’s). |
# A Git docs folderulams living sources connect <session> --connector git --config '{"host":"github","repository":"owner/name","branch":"main","paths":["docs"]}' --schedule daily --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "session": { "type": "string", "description": "Builder session id (the course's session; from `ulams builder sessions list`)." }, "connector": { "type": "string", "description": "Connector key: git, url, or a plugin's key." }, "config": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {}, "description": "Connector settings as JSON or @file, e.g. {\"host\":\"github\",\"repository\":\"owner/name\",\"branch\":\"main\",\"paths\":[\"docs\"]}." }, "secrets": { "description": "Write-only values, e.g. {\"token\":\"...\"}; JSON or @file.", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "schedule": { "description": "How often to check (default: the connector's).", "type": "string", "enum": [ "hourly", "daily", "weekly", "manual" ] } }, "required": [ "session", "connector", "config" ]}ulams living sources list
Section titled “ulams living sources list”List the sources of a course with their connection and sync state.
Kind: read (idempotent). Stability: stable. MCP tool: living_sources_list. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/sessions/{session}/sources.
| Flag | Type | Required | Description |
|---|---|---|---|
--session (positional) |
string | yes | Builder session id (the course’s session; from ulams builder sessions list). |
# Sourcesulams living sources list <session> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "session": { "type": "string", "description": "Builder session id (the course's session; from `ulams builder sessions list`)." } }, "required": [ "session" ]}ulams living staleness
Section titled “ulams living staleness”Which course elements are out of date against their sources.
Works with AI disabled: it is deterministic change detection.
Kind: read (idempotent). Stability: stable. MCP tool: living_staleness. Scopes: living-course:read.
Endpoints: GET /api/admin/living-course/sessions/{session}/staleness.
| Flag | Type | Required | Description |
|---|---|---|---|
--session (positional) |
string | yes | Builder session id (the course’s session; from ulams builder sessions list). |
# Stalenessulams living staleness <session> --jsonInput JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "session": { "type": "string", "description": "Builder session id (the course's session; from `ulams builder sessions list`)." } }, "required": [ "session" ]}