OpenClaw tracks workspace file changes between turns and attributes them to the user who triggered the change. Use this skill to answer history and diff questions and to apply controlled restores or rollbacks.
Use this skill when the user asks about:
/agent-changelog invocations: run the matching script and return stdout verbatim.restore for single-file fixes; use rollback only when the user wants to revert everything.setup, proactively ask: "ok want help with github or promptlayer? (pick one)"Never embed attribution metadata inside file content. Do not add inline annotations like (updated by X on date), # changed by Y, status footnotes, or any other authorship/timestamp markers into the files you edit. Attribution belongs exclusively in the git commit message, which is handled automatically by the hooks and commit.sh. Files should contain only their actual content — clean, annotation-free.
setup.sh and scripts/ with the user-provided arguments.log, then perform the change after showing what will be modified.--summary and always include it in any history output presented to the user.log.sh outputs raw structured data — present it conversationally based on what the user asked. Don't dump raw script output. Format each entry using the │-prefixed box style (same as status output), one entry per block.Use this only for explicit /agent-changelog invocations, and return stdout verbatim.
setup -> bash {baseDir}/setup.shsetup follow-up -> Sync onboarding guidance (GitHub or PromptLayer)status -> bash {baseDir}/scripts/status.shlog -> bash {baseDir}/scripts/log.sh [count]diff -> bash {baseDir}/scripts/diff.sh [commit] [commit2]rollback -> bash {baseDir}/scripts/rollback.sh ["reason"] restore -> bash {baseDir}/scripts/restore.sh ["reason"] commit (user-requested) -> bash {baseDir}/scripts/commit.sh --manual ["message"] [--summary "one-line semantic summary"]commit (cron-triggered) -> bash {baseDir}/scripts/commit.sh [--summary "one-line semantic summary"]pull from promptlayer -> node {baseDir}/scripts/pl-pull.jspull from promptlayer version -> node {baseDir}/scripts/pl-pull.js --version pull from promptlayer label -> node {baseDir}/scripts/pl-pull.js --label pull from promptlayer version reason -> node {baseDir}/scripts/pl-pull.js --version --reason "" Two hooks capture and commit changes between turns and attribute them to the active user. Defaults can be overridden via .agent-changelog.json.
Tracked by default: . (entire workspace). Secrets and runtime files are excluded via the .gitignore that setup creates — note that if a .gitignore already exists in the workspace, setup leaves it untouched, so ensure it covers secrets before enabling tracking.
To track a specific subset instead, edit with a tracked array (this fully replaces the default):
{ "tracked": ["<file-or-folder>", "<file-or-folder>"] }
Use this flow after setup to help users connect the workspace to GitHub. The user will need to authenticate (SSH key or HTTPS credential) — walk them through it step by step:
user.name and user.email are set for commits.origin remote exists and verify access.github.enabled = true in /.agent-changelog.json to activate auto-push on each batch commit.Use this flow after setup to help users connect the workspace to PromptLayer. Keep it conversational like the GitHub flow and ensure they pick PromptLayer (not both).
PROMPTLAYER_API_KEY in their environment (e.g. shell profile or OpenClaw env config). The scripts read it from the environment; do not write the raw key value into any config file.unzip (macOS/Linux) or PowerShell Expand-Archive (Windows).collectionId, skillName, provider) is stored in .agent-changelog.json in the workspace — the scripts handle this automatically. The only openclaw.json entry written is the SecretRef: skills.entries.agent-changelog.apiKey = { source: "env", provider: "default", id: "PROMPTLAYER_API_KEY" }.node {baseDir}/scripts/pl-pull.js --connect node {baseDir}/scripts/pl-init.js after setting promptlayer.skillName共 1 个版本