[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CAPJFDMFQHB7YKQ5D81RM2":3,"skill-same:01M6CAPJFDMFQHB7YKQ5D81RM2":65},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":46,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6CAPJFDMFQHB7YKQ5D81RM2","memory-log-append",null,"Append a structured event to a consumer's semantic memory log","jmagly\u002Faiwg","jmagly","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1159087?v=4","01M6C10AK8N2WCSQN11FYGTJWN","Joseph Magly","01M6C10AQ8A2RMED1Y1BSVY7NF",229,"MIT","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsemantic-memory\u002Fskills\u002Fmemory-log-append\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32],"memory","append","memory log append","log","kernel","structured","semantic","event","semantic memory","2026-11-10 10:12:30",false,"---\nname: memory-log-append\ndescription: Append a structured event to a consumer's semantic memory log\nnamespace: aiwg\ncategory: kernel\nplatforms: [all]\n---\n\n# memory-log-append\n\nAppend a single structured JSON event to a consumer's `.log.jsonl` file. This is the write primitive for the semantic memory kernel's event stream.\n\n## When to Use\n\nCalled internally by other kernel skills (`memory-ingest`, `memory-lint`, `memory-query-capture`) after completing an operation. Can also be called directly for custom event types.\n\n## Parameters\n\n### --consumer (optional)\nConsumer ID to log against. Resolved via ADR-021 D4 precedence: explicit > wrapper > auto-detect.\n\n### --op (required)\nOperation type: `ingest`, `lint`, `query-capture`, `log-render`, `index-rebuild`, or a custom string.\n\n### --data (required)\nJSON object with operation-specific fields per the `memory-log-event` schema.\n\n## Operation\n\n1. **Resolve consumer** — determine which consumer's log to append to.\n2. **Load topology** — read `memory.topology.log` path from consumer's `manifest.json`.\n3. **Validate event** — ensure required fields (`ts`, `op`, `consumer`, `actor`) are present. Add `ts` and `actor` automatically if missing.\n4. **Append** — write single JSON line to the `.log.jsonl` file (create file if first entry).\n5. **Activity log** — also append a summary line to `.aiwg\u002Factivity.log` per the `activity-log` rule.\n\n## Event Construction\n\nThe skill auto-populates:\n- `ts` — current ISO 8601 timestamp (UTC)\n- `actor` — current model identifier\n- `consumer` — resolved consumer ID\n\nThe caller provides `op` and all operation-specific fields.\n\n## Error Handling\n\n- Log write failures are **non-blocking** — the calling skill reports success\u002Ffailure of its primary operation, not the log write.\n- If the log file path doesn't exist, create parent directories first.\n- If the log file is corrupted (not valid JSONL), append anyway — `memory-lint` will flag the corruption.\n\n## Schema Reference\n\n@semantic-memory\u002Fschemas\u002Fmemory-log-event.md\n\n## Examples\n\n```\n# After an ingest operation\nmemory-log-append --consumer research-complete --op ingest --data '{\"source\":\"paper.pdf\",\"pages_touched\":[\"summaries\u002Fpaper.md\"],\"contradictions\":0,\"duration_ms\":5200}'\n\n# After a lint operation\nmemory-log-append --consumer sdlc-complete --op lint --data '{\"findings\":{\"error\":0,\"warning\":3,\"suggestion\":8},\"duration_ms\":2100}'\n```\n\n## Storage Routing (#934, #966)\n\nThis skill's persistence flows through `resolveStorage('memory')`. On the default `fs` backend the memory subsystem lives at `.aiwg\u002Fmemory\u002F` and behavior is byte-identical to direct file writes. To redirect memory artifacts into Obsidian, Logseq, Fortemi, or another backend without changing this skill, configure `.aiwg\u002Fstorage.config` (#934).\n\nWhen this skill needs to read or write memory artifacts from a Bash step:\n\n```bash\naiwg memory path                        # resolved root (fs only)\naiwg memory list --prefix research-complete\u002F\naiwg memory get research-complete\u002Findex.md\necho \"# index\" | aiwg memory put research-complete\u002Findex.md\necho '{\"op\":\"ingest\",\"summary\":\"foo\"}' | aiwg memory append-log research-complete\u002F.log.jsonl\n```\n\nThe `aiwg memory append-log` subcommand uses atomic `O_APPEND` (#976) on the fs backend — concurrent appenders don't race.\n","# memory-log-append\n\nAppend a single structured JSON event to a consumer's `.log.jsonl` file. This is the write primitive for the semantic memory kernel's event stream.\n\n## When to Use\n\nCalled internally by other kernel skills (`memory-ingest`, `memory-lint`, `memory-query-capture`) after completing an operation. Can also be called directly for custom event types.\n\n## Parameters\n\n### --consumer (optional)\nConsumer ID to log against. Resolved via ADR-021 D4 precedence: explicit > wrapper > auto-detect.\n\n### --op (required)\nOperation type: `ingest`, `lint`, `query-capture`, `log-render`, `index-rebuild`, or a custom string.\n\n### --data (required)\nJSON object with operation-specific fields per the `memory-log-event` schema.\n\n## Operation\n\n1. **Resolve consumer** — determine which consumer's log to append to.\n2. **Load topology** — read `memory.topology.log` path from consumer's `manifest.json`.\n3. **Validate event** — ensure required fields (`ts`, `op`, `consumer`, `actor`) are present. Add `ts` and `actor` automatically if missing.\n4. **Append** — write single JSON line to the `.log.jsonl` file (create file if first entry).\n5. **Activity log** — also append a summary line to `.aiwg\u002Factivity.log` per the `activity-log` rule.\n\n## Event Construction\n\nThe skill auto-populates:\n- `ts` — current ISO 8601 timestamp (UTC)\n- `actor` — current model identifier\n- `consumer` — resolved consumer ID\n\nThe caller provides `op` and all operation-specific fields.\n\n## Error Handling\n\n- Log write failures are **non-blocking** — the calling skill reports success\u002Ffailure of its primary operation, not the log write.\n- If the log file path doesn't exist, create parent directories first.\n- If the log file is corrupted (not valid JSONL), append anyway — `memory-lint` will flag the corruption.\n\n## Schema Reference\n\n@semantic-memory\u002Fschemas\u002Fmemory-log-event.md\n\n## Examples\n\n```\n# After an ingest operation\nmemory-log-append --consumer research-complete --op ingest --data '{\"source\":\"paper.pdf\",\"pages_touched\":[\"summaries\u002Fpaper.md\"],\"contradictions\":0,\"duration_ms\":5200}'\n\n# After a lint operation\nmemory-log-append --consumer sdlc-complete --op lint --data '{\"findings\":{\"error\":0,\"warning\":3,\"suggestion\":8},\"duration_ms\":2100}'\n```\n\n## Storage Routing (#934, #966)\n\nThis skill's persistence flows through `resolveStorage('memory')`. On the default `fs` backend the memory subsystem lives at `.aiwg\u002Fmemory\u002F` and behavior is byte-identical to direct file writes. To redirect memory artifacts into Obsidian, Logseq, Fortemi, or another backend without changing this skill, configure `.aiwg\u002Fstorage.config` (#934).\n\nWhen this skill needs to read or write memory artifacts from a Bash step:\n\n```bash\naiwg memory path                        # resolved root (fs only)\naiwg memory list --prefix research-complete\u002F\naiwg memory get research-complete\u002Findex.md\necho \"# index\" | aiwg memory put research-complete\u002Findex.md\necho '{\"op\":\"ingest\",\"summary\":\"foo\"}' | aiwg memory append-log research-complete\u002F.log.jsonl\n```\n\nThe `aiwg memory append-log` subcommand uses atomic `O_APPEND` (#976) on the fs backend — concurrent appenders don't race.\n",{"name":5,"category":28,"namespace":38,"platforms":39,"description":7},"aiwg",[40],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Fsemantic-memory\u002Fskills\u002Fmemory-log-append",36,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg","https:\u002F\u002Faiwg.io","https:\u002F\u002Fgithub.com\u002Fjmagly","https:\u002F\u002Fintegrolabs.io","ml\u002Fai, industrial automation, safety\u002Fsecurity, ssi\r\n\r\nmagly.net\r\nintegrolabs.io\r\naiwg.io\r\nfortemi.com\r\npagenary.com\r\nbytecask.com","2026-11-12 21:57:33",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add jmagly\u002Faiwg --skill memory-log-append",{"tool":57,"command":58},"bunx","bunx skills add jmagly\u002Faiwg --skill memory-log-append",{"tool":60,"command":61},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill memory-log-append","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsemantic-memory\u002Fskills\u002Fmemory-log-append\u002FSKILL.md",true,[],[66,94,118,124,131,145],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":73,"publishedAt":33},"01M70QA0BSYJ49EES9V4RE8QH1","host-hardening","Read-only system hardening baseline and plan-first host hardening recommendations for SSH, Docker bind addresses, firewall persistence, datastores, exporters and audit retention.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[72],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93],"host","host hardening","hardening","read","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","audit","never","firewall","bind","secrets","request",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":104,"publishedAt":33},"01M70PNT2Z4HMZPRBTAF6073NN","exposure-analysis","Read-only firewall analysis and effective host exposure reconstruction for Docker published ports, UFW bypass, stale rules, CDN scope, IPv6 asymmetry and external probe allowlists.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[100,103],{"categoryNo":101,"categoryName":102,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[105,106,107,77,108,82,109,110,84,111,74,112,86,113,114,89,90,115,116,117],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":119,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":123,"publishedAt":33},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[122],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[76,74,75,85,77,93,80,79,88,81,82,83,84,92,86,87,78,89,90,91],{"skillNo":125,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":130,"publishedAt":33},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[128,129],{"categoryNo":101,"categoryName":102,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[106,105,89,108,82,109,84,107,74,112,86,113,114,77,90,111,110,115,116,117],{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":138,"publishedAt":33},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[137],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[139,140,141,142,143,144],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":152,"publishedAt":33},"01M6CB4AVK1W76MFMPP0JP32CJ","pi-local","Pi-local duplicate-precedence fixture.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fproviders\u002Fpi\u002Fproject\u002F.pi\u002Fskills\u002Fpi-local\u002FSKILL.md",[151],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[153,154,113,155,140],"pi","pi local","duplicate"]