Automation and tasks

백그라운드 작업

백그라운드 작업은 기본 대화 세션 밖에서 실행되는 작업을 추적합니다: ACP 실행, 하위 에이전트 생성, 격리된 cron 작업 실행, CLI에서 시작된 작업입니다.

작업은 세션, cron 작업 또는 Heartbeat를 대체하지 않습니다. 작업은 분리된 작업이 무엇을 했는지, 언제 했는지, 성공했는지를 기록하는 활동 원장입니다.

요약

  • 작업은 스케줄러가 아니라 기록입니다. cron과 Heartbeat는 작업이 언제 실행될지 결정하고, 작업은 무슨 일이 일어났는지 추적합니다.
  • ACP, 하위 에이전트, 모든 cron 작업, CLI 작업은 작업을 생성합니다. Heartbeat 턴은 생성하지 않습니다.
  • 각 작업은 queued → running → terminal(succeeded, failed, timed_out, cancelled 또는 lost)을 거칩니다.
  • cron 런타임이 아직 작업을 소유하고 있는 동안 cron 작업은 활성 상태로 유지됩니다. 메모리 내 런타임 상태가 사라지면 작업 유지 관리는 작업을 lost로 표시하기 전에 먼저 영구 cron 실행 기록을 확인합니다.
  • 완료는 푸시 기반입니다. 분리된 작업은 완료 시 직접 알리거나 요청자 세션/Heartbeat를 깨울 수 있으므로, 상태 폴링 루프는 보통 적합한 형태가 아닙니다.
  • 격리된 cron 실행과 하위 에이전트 완료는 최종 정리 부기 전에 자식 세션의 추적된 브라우저 탭/프로세스를 최선 노력으로 정리합니다.
  • 격리된 cron 전달은 하위 descendant 에이전트 작업이 아직 비워지는 중일 때 오래된 중간 부모 응답을 억제하며, 전달 전에 최종 descendant 출력이 도착하면 이를 우선 사용합니다.
  • 완료 알림은 채널로 직접 전달되거나 다음 Heartbeat를 위해 대기열에 추가됩니다.
  • openclaw tasks list는 모든 작업을 표시하고, openclaw tasks audit는 문제를 드러냅니다.
  • 터미널 기록은 7일 동안 보관된 뒤 자동으로 정리됩니다.

빠른 시작

목록 및 필터

# List all tasks (newest first)
openclaw tasks list

# Filter by runtime or status
openclaw tasks list --runtime acp
openclaw tasks list --status running

검사

# Show details for a specific task (by ID, run ID, or session key)
openclaw tasks show <lookup>

취소 및 알림

# Cancel a running task (kills the child session)
openclaw tasks cancel <lookup>

# Change notification policy for a task
openclaw tasks notify <lookup> state_changes

감사 및 유지 관리

# Run a health audit
openclaw tasks audit

# Preview or apply maintenance
openclaw tasks maintenance
openclaw tasks maintenance --apply

작업 흐름

# Inspect TaskFlow state
openclaw tasks flow list
openclaw tasks flow show <lookup>
openclaw tasks flow cancel <lookup>

작업을 생성하는 것

소스 런타임 유형 작업 기록이 생성되는 시점 기본 알림 정책
ACP 백그라운드 실행 acp 자식 ACP 세션 생성 done_only
하위 에이전트 오케스트레이션 subagent sessions_spawn을 통해 하위 에이전트 생성 done_only
cron 작업(모든 유형) cron 모든 cron 실행(기본 세션 및 격리됨) silent
CLI 작업 cli Gateway를 통해 실행되는 openclaw agent 명령 silent
에이전트 미디어 작업 cli 세션 기반 music_generate/video_generate 실행 silent
cron 및 미디어의 알림 기본값

기본 세션 cron 작업은 기본적으로 silent 알림 정책을 사용합니다. 추적용 기록은 생성하지만 알림은 생성하지 않습니다. 격리된 cron 작업도 기본값은 silent이지만 자체 세션에서 실행되므로 더 눈에 잘 띕니다.

세션 기반 music_generatevideo_generate 실행도 silent 알림 정책을 사용합니다. 여전히 작업 기록은 생성하지만, 완료는 원래 에이전트 세션에 내부 깨우기로 전달되어 에이전트가 후속 메시지를 작성하고 완료된 미디어를 직접 첨부할 수 있게 합니다. 그룹/채널 완료는 일반적인 표시 응답 정책을 따르므로, 소스 전달에 필요하면 에이전트가 메시지 도구를 사용합니다. 완료 에이전트가 도구 전용 경로에서 메시지 도구 전달 증거를 생성하지 못하면, OpenClaw는 미디어를 비공개로 남겨두지 않고 완료 fallback을 원래 채널로 직접 보냅니다.

동시 video_generate 가드레일

세션 기반 video_generate 작업이 아직 활성 상태인 동안, 이 도구는 가드레일 역할도 합니다. 같은 세션에서 video_generate 호출이 반복되면 두 번째 동시 생성을 시작하는 대신 활성 작업 상태를 반환합니다. 에이전트 측에서 명시적인 진행률/상태 조회가 필요할 때는 action: "status"를 사용하세요.

작업을 생성하지 않는 것
  • Heartbeat 턴 - 기본 세션입니다. Heartbeat를 참조하세요.
  • 일반 대화형 채팅 턴
  • 직접 /command 응답

작업 수명 주기

stateDiagram-v2
    [*] --> queued
    queued --> running : agent starts
    running --> succeeded : completes ok
    running --> failed : error
    running --> timed_out : timeout exceeded
    running --> cancelled : operator cancels
    queued --> lost : session gone > 5 min
    running --> lost : session gone > 5 min
상태 의미
queued 생성되었으며 에이전트 시작을 기다리는 중
running 에이전트 턴이 활발히 실행 중
succeeded 성공적으로 완료됨
failed 오류와 함께 완료됨
timed_out 구성된 제한 시간을 초과함
cancelled 작업자가 openclaw tasks cancel로 중지함
lost 5분 유예 기간 후 런타임이 권한 있는 백업 상태를 잃음

전환은 자동으로 일어납니다. 연결된 에이전트 실행이 끝나면 작업 상태가 그에 맞게 업데이트됩니다.

에이전트 실행 완료는 활성 작업 기록에 대한 권한 있는 기준입니다. 성공한 분리 실행은 succeeded로 종료되고, 일반 실행 오류는 failed로 종료되며, 시간 초과 또는 중단 결과는 timed_out으로 종료됩니다. 작업자가 이미 작업을 취소했거나 런타임이 failed, timed_out, lost 같은 더 강한 터미널 상태를 이미 기록한 경우, 이후의 성공 신호는 해당 터미널 상태를 낮추지 않습니다.

lost는 런타임을 인식합니다.

  • ACP 작업: 백업 ACP 자식 세션 메타데이터가 사라졌습니다.
  • 하위 에이전트 작업: 대상 에이전트 저장소에서 백업 자식 세션이 사라졌습니다.
  • cron 작업: cron 런타임이 더 이상 작업을 활성 상태로 추적하지 않으며, 영구 cron 실행 기록에도 해당 실행의 터미널 결과가 표시되지 않습니다. 오프라인 CLI 감사는 자체의 비어 있는 인프로세스 cron 런타임 상태를 권한으로 간주하지 않습니다.
  • CLI 작업: 격리된 자식 세션 작업은 자식 세션을 사용하고, 채팅 기반 CLI 작업은 대신 라이브 실행 컨텍스트를 사용하므로 남아 있는 채널/그룹/직접 세션 행이 이를 활성 상태로 유지하지 않습니다. Gateway 기반 openclaw agent 실행도 실행 결과에서 종료되므로, 완료된 실행이 sweeper가 lost로 표시할 때까지 활성 상태로 남아 있지 않습니다.

전달 및 알림

작업이 터미널 상태에 도달하면 OpenClaw가 사용자에게 알립니다. 전달 경로는 두 가지입니다.

직접 전달 - 작업에 채널 대상(requesterOrigin)이 있으면 완료 메시지가 해당 채널(Telegram, Discord, Slack 등)로 바로 이동합니다. 하위 에이전트 완료의 경우, OpenClaw는 가능할 때 바인딩된 스레드/토픽 라우팅도 보존하며, 직접 전달을 포기하기 전에 요청자 세션의 저장된 경로(lastChannel / lastTo / lastAccountId)에서 누락된 to / 계정을 채울 수 있습니다.

세션 대기열 전달 - 직접 전달이 실패하거나 origin이 설정되지 않은 경우, 업데이트는 요청자 세션의 시스템 이벤트로 대기열에 추가되고 다음 Heartbeat에서 표시됩니다.

즉, 일반적인 워크플로는 푸시 기반입니다. 분리된 작업을 한 번 시작한 뒤 런타임이 완료 시 사용자를 깨우거나 알리도록 두세요. 디버깅, 개입 또는 명시적 감사가 필요할 때만 작업 상태를 폴링하세요.

알림 정책

각 작업에 대해 얼마나 많은 알림을 받을지 제어합니다.

정책 전달되는 내용
done_only (기본값) 터미널 상태만(succeeded, failed 등) - 이것이 기본값입니다
state_changes 모든 상태 전환 및 진행률 업데이트
silent 아무것도 없음

작업이 실행 중일 때 정책을 변경합니다.

openclaw tasks notify <lookup> state_changes

CLI 참조

tasks list
openclaw tasks list [--runtime <acp|subagent|cron|cli>] [--status <status>] [--json]

출력 열: 작업 ID, 종류, 상태, 전달, 실행 ID, 자식 세션, 요약.

tasks show
openclaw tasks show <lookup>

조회 토큰은 작업 ID, 실행 ID 또는 세션 키를 받습니다. 타이밍, 전달 상태, 오류, 터미널 요약을 포함한 전체 기록을 표시합니다.

tasks cancel
openclaw tasks cancel <lookup>

ACP 및 하위 에이전트 작업의 경우, 이는 자식 세션을 종료합니다. CLI 추적 작업의 경우 취소는 작업 레지스트리에 기록됩니다(별도의 자식 런타임 핸들은 없습니다). 상태는 cancelled로 전환되고, 해당되는 경우 전달 알림이 전송됩니다.

tasks notify
openclaw tasks notify <lookup> <done_only|state_changes|silent>
tasks audit
openclaw tasks audit [--json]

운영 문제를 드러냅니다. 문제가 감지되면 발견 사항은 openclaw status에도 표시됩니다.

발견 항목 심각도 트리거
stale_queued warn 10분 넘게 대기열에 있음
stale_running error 30분 넘게 실행 중
lost warn/error 런타임 기반 작업 소유권이 사라짐; 보존된 손실 작업은 cleanupAfter까지 경고로 남고, 이후 오류가 됨
delivery_failed warn 전달에 실패했고 알림 정책이 silent가 아님
missing_cleanup warn 정리 타임스탬프가 없는 종료 작업
inconsistent_timestamps warn 타임라인 위반(예: 시작 전에 종료됨)
작업 유지관리
openclaw tasks maintenance [--json]
openclaw tasks maintenance --apply [--json]

이를 사용해 작업과 Task Flow 상태의 조정, 정리 스탬프 지정, 가지치기를 미리 보거나 적용합니다.

조정은 런타임을 인식합니다.

  • ACP/서브에이전트 작업은 이를 뒷받침하는 하위 세션을 확인합니다.
  • 하위 세션에 재시작 복구 묘비가 있는 서브에이전트 작업은 복구 가능한 백업 세션으로 처리되지 않고 손실됨으로 표시됩니다.
  • Cron 작업은 Cron 런타임이 아직 작업을 소유하는지 확인한 다음, lost로 대체하기 전에 보존된 Cron 실행 로그/작업 상태에서 종료 상태를 복구합니다. 메모리 내 Cron 활성 작업 세트에 대한 권한은 Gateway 프로세스에만 있습니다. 오프라인 CLI 감사는 지속 기록을 사용하지만, 해당 로컬 Set이 비어 있다는 이유만으로 Cron 작업을 손실됨으로 표시하지 않습니다.
  • 채팅 기반 CLI 작업은 단순히 채팅 세션 행만이 아니라 소유 중인 라이브 실행 컨텍스트를 확인합니다.

완료 정리도 런타임을 인식합니다.

  • 서브에이전트 완료는 알림 정리가 계속되기 전에 하위 세션의 추적된 브라우저 탭/프로세스를 최선의 노력으로 닫습니다.
  • 격리된 Cron 완료는 실행이 완전히 해체되기 전에 Cron 세션의 추적된 브라우저 탭/프로세스를 최선의 노력으로 닫습니다.
  • 격리된 Cron 전달은 필요할 때 하위 서브에이전트 후속 작업이 끝날 때까지 기다리고, 오래된 부모 확인 텍스트를 알리는 대신 억제합니다.
  • 서브에이전트 완료 전달은 가장 최근에 보이는 어시스턴트 텍스트를 우선 사용합니다. 이것이 비어 있으면 정제된 최신 도구/toolResult 텍스트로 대체하고, 시간 초과만 발생한 도구 호출 실행은 짧은 부분 진행 요약으로 축약될 수 있습니다. 종료된 실패 실행은 캡처된 답변 텍스트를 재생하지 않고 실패 상태를 알립니다.
  • 정리 실패는 실제 작업 결과를 가리지 않습니다.
작업 흐름 list | show | cancel
openclaw tasks flow list [--status <status>] [--json]
openclaw tasks flow show <lookup> [--json]
openclaw tasks flow cancel <lookup>

개별 백그라운드 작업 레코드 하나가 아니라 오케스트레이션 중인 Task Flow가 중요한 대상일 때 이를 사용합니다.

채팅 작업 보드(/tasks)

어떤 채팅 세션에서든 /tasks를 사용해 해당 세션에 연결된 백그라운드 작업을 확인합니다. 보드는 활성 작업과 최근 완료된 작업을 런타임, 상태, 타이밍, 진행 상황 또는 오류 상세와 함께 표시합니다.

현재 세션에 보이는 연결 작업이 없으면 /tasks는 에이전트 로컬 작업 수로 대체하므로 다른 세션의 세부 정보를 누출하지 않고도 개요를 볼 수 있습니다.

전체 운영자 원장을 보려면 CLI를 사용하세요: openclaw tasks list.

상태 통합(작업 압력)

openclaw status에는 한눈에 볼 수 있는 작업 요약이 포함됩니다.

Tasks: 3 queued · 2 running · 1 issues

요약은 다음을 보고합니다.

  • active - queued + running의 개수
  • failures - failed + timed_out + lost의 개수
  • byRuntime - acp, subagent, cron, cli별 분류

/statussession_status 도구는 모두 정리 인식 작업 스냅샷을 사용합니다. 활성 작업이 우선되고, 오래된 완료 행은 숨겨지며, 최근 실패는 활성 작업이 남아 있지 않을 때만 표시됩니다. 이렇게 하면 상태 카드가 지금 중요한 것에 집중됩니다.

저장소와 유지관리

작업이 저장되는 위치

작업 레코드는 SQLite에 다음 위치로 유지됩니다.

$OPENCLAW_STATE_DIR/tasks/runs.sqlite

레지스트리는 Gateway 시작 시 메모리에 로드되고, 재시작 후에도 지속성을 유지하도록 쓰기를 SQLite에 동기화합니다. Gateway는 SQLite의 기본 자동 체크포인트 임계값과 주기적 및 종료 시 TRUNCATE 체크포인트를 사용해 SQLite write-ahead log의 크기를 제한합니다.

자동 유지관리

스위퍼가 60초마다 실행되어 네 가지를 처리합니다.

  • 조정

    활성 작업에 여전히 권한 있는 런타임 백업이 있는지 확인합니다. ACP/서브에이전트 작업은 하위 세션 상태를 사용하고, Cron 작업은 활성 작업 소유권을 사용하며, 채팅 기반 CLI 작업은 소유 중인 실행 컨텍스트를 사용합니다. 해당 백업 상태가 5분 넘게 사라지면 작업이 lost로 표시됩니다.

  • ACP 세션 복구

    종료되었거나 부모 소유의 고아가 된 일회성 ACP 세션을 닫고, 활성 대화 바인딩이 남아 있지 않을 때만 오래되어 종료되었거나 고아가 된 지속 ACP 세션을 닫습니다.

  • 정리 스탬프 지정

    종료 작업에 cleanupAfter 타임스탬프를 설정합니다(endedAt + 7일). 보존 기간 동안 손실 작업은 감사에서 여전히 경고로 표시됩니다. cleanupAfter가 만료되거나 정리 메타데이터가 없으면 오류가 됩니다.

  • 가지치기

    cleanupAfter 날짜가 지난 레코드를 삭제합니다.

  • 작업과 다른 시스템의 관계

    작업과 Task Flow

    Task Flow는 백그라운드 작업 위의 흐름 오케스트레이션 계층입니다. 단일 흐름은 수명 동안 관리형 또는 미러링된 동기화 모드를 사용해 여러 작업을 조율할 수 있습니다. 개별 작업 레코드를 검사하려면 openclaw tasks를 사용하고, 오케스트레이션 중인 흐름을 검사하려면 openclaw tasks flow를 사용하세요.

    자세한 내용은 Task Flow를 참조하세요.

    작업과 Cron

    Cron 작업 정의~/.openclaw/cron/jobs.json에 있고, 런타임 실행 상태는 그 옆의 ~/.openclaw/cron/jobs-state.json에 있습니다. 모든 Cron 실행은 기본 세션과 격리 실행 모두에서 작업 레코드를 만듭니다. 기본 세션 Cron 작업은 알림을 생성하지 않고 추적되도록 기본 알림 정책이 silent입니다.

    Cron 작업을 참조하세요.

    작업과 Heartbeat

    Heartbeat 실행은 기본 세션 턴입니다. 작업 레코드를 만들지 않습니다. 작업이 완료되면 결과를 빠르게 볼 수 있도록 Heartbeat 깨우기를 트리거할 수 있습니다.

    Heartbeat를 참조하세요.

    작업과 세션

    작업은 childSessionKey(작업이 실행되는 위치)와 requesterSessionKey(작업을 시작한 주체)를 참조할 수 있습니다. 세션은 대화 컨텍스트이고, 작업은 그 위의 활동 추적입니다.

    작업과 에이전트 실행

    작업의 runId는 작업을 수행하는 에이전트 실행에 연결됩니다. 에이전트 수명 주기 이벤트(시작, 종료, 오류)는 작업 상태를 자동으로 업데이트합니다. 수명 주기를 수동으로 관리할 필요가 없습니다.

    관련