governance-lifecycle — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited governance-lifecycle (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Last Updated: 2026-06-11
The core lifecycle should use primary task-verb tools. Each is implemented by a raw tool with the same parameters and identity rules, and returns a normalized envelope: the operationally useful fields first (next_action, state_summary, risk_summary, memory_suggestions, recovery_hint), with the full raw payload preserved under raw_governance.
| Task | Primary workflow tool | Raw implementation tool |
|---|---|---|
| Start working | start_session(force_new=true, ...) | onboard |
| Check in after meaningful work | sync_state(response_text=..., complexity=...) | process_agent_update |
| Check your working state | check_working_state() | get_governance_metrics |
| Avoid duplicate work | search_shared_memory(query=...) | knowledge(action="search") |
| Record what actually happened | record_result(...) | outcome_event |
| Ask for a structured review | request_review(issue_description=...) | dialectic(action="request") |
Use the primary workflow tools by default. Use raw implementation names only for older servers, compatibility code, or when you explicitly need the unwrapped handler response.
Choose creation, lineage, or proof-owned resume explicitly:
~~~text start_session(force_new=true) # any fresh session — the default; co-location is not lineage start_session(force_new=true, parent_agent_id="<dispatcher-uuid>", spawn_reason="subagent") # dispatched subagent (usually set automatically by the dispatcher) start_session(force_new=true, parent_agent_id="<exited-uuid>", spawn_reason="explicit") # handoff from an EXITED prior session identity(agent_uuid="<uuid>", continuity_token="<token>", resume=true) # same live owner / proof-owned rebind ~~~
Declaring a currently-live agent as parent is rejected (lineage_coincidental_rejected): a live agent is a concurrent sibling, not a predecessor. subagent and compaction are exempt — their parent is legitimately live. A genuine handoff to an exited predecessor stays provisional until R1 confirms it.
Use raw onboard(...) instead when targeting older servers or when you need the unwrapped raw response.
Returns:
session_resolution_source, identity_assurance, and deprecation warnings when relevantname= is a cosmetic label, not a resume key. Passing the same name on a later session does not prove identity.
Default rules:
start_session(force_new=true) with no parent. Co-location in a workspace is not lineage.parent_agent_id="<dispatcher-uuid>", spawn_reason="subagent", usually set automatically by the dispatcher) or a handoff from an EXITED prior session (parent_agent_id="<exited-uuid>", spawn_reason="explicit"). Declaring a currently-live agent as parent is rejected.identity(agent_uuid="<uuid>", continuity_token="<token>", resume=true).client_session_id; reserve continuity_token for explicit proof-owned rebinds.Avoid these patterns:
identity(agent_uuid=X, resume=true): UUID alone is an unsigned claim. It currently logs/emits hijack-suspected telemetry and is strict-mode rejected when UNITARES_IDENTITY_STRICT=strict.onboard(continuity_token=...) as cross-process resume: S1-a accepts this only during the deprecation window and returns a warning. Declare lineage with parent_agent_id instead.onboard(): older code may still pin-resume by weak session/IP:UA evidence. Use force_new=true when creating a new process identity.continuity_token is now intentionally narrow: 1-hour TTL, rolling, and retained as possession proof for anti-hijack gates. It does not establish process-instance continuity by itself.
Call sync_state() after meaningful work:
~~~text sync_state( response_text: "Brief summary of what you did", complexity: 0.0-1.0, # Task difficulty estimate confidence: 0.0-1.0 # How confident you are (be honest) ) ~~~
Use raw process_agent_update(...) when you need the raw handler payload; primary workflow responses preserve it under raw_governance.
A verdict plus current EISV metrics. Read the verdict and act on it.
| Verdict | What to Do |
|---|---|
| proceed | Continue normally |
| guide + guidance text | Read the guidance, adjust your approach, keep going |
| pause | Stop your current task. Reflect on what is flagged. Consider requesting a dialectic review |
| reject | Significant concern. Requires dialectic review or human intervention |
| margin: tight | You are near a basin edge. Be more careful with next steps |
A guide verdict is an early warning. Ignoring it makes pause more likely.
client_session_id, or short-lived continuity tokenidentity() when continuity seems unclearidentity_statusbound_identitysession_resolution_sourcecontinuity_token_supportedidentity_assurancedeprecationsStrong ownership proof is better than implicit continuity. If the runtime falls back to weak signals such as fingerprinting, mint a fresh process identity and declare lineage.
When you are paused, stuck, or need intervention:
| Situation | Tool | Notes |
|---|---|---|
| Stuck or paused, want automatic recovery | self_recovery() | Attempts to restore healthy state |
| Disagree with verdict, want structured review | request_dialectic_review() | Starts thesis/antithesis/synthesis process |
| Manual override needed | operator_resume_agent() | Requires human/operator action |
Recovery is not a shortcut — self_recovery() examines your EISV state and determines if resumption is safe. If your metrics are genuinely degraded, it will not force a resume.
start_session(force_new=true, parent_agent_id=...) — Create a fresh process identity, optionally declaring lineagesync_state() — Check in with work summary, complexity, confidencecheck_working_state() — Read your current EISV stateidentity() — Confirm who the runtime thinks you are and how continuity was resolved; include continuity_token for proof-owned UUID rebindshealth_check() — Check operator-facing server health when behavior seems oddsearch_shared_memory(query=...) — Find existing knowledge before creating new entriesknowledge(action="note", ...) — Quick contribution to the knowledge graphknowledge() — Full knowledge graph CRUD (store, update, details, cleanup)agent() — Agent lifecycle (list, archive, get details)calibration() — Check or update calibration datarequest_dialectic_review() — Start a dialectic sessionexport() — Export session historycall_model() — Delegate to a secondary LLM for analysisdetect_stuck_agents() — Find unresponsive agentsself_recovery() — Resume from stuck or paused statesubmit_thesis() / submit_antithesis() / submit_synthesis() — Dialectic participation~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.