[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CAPMSBWG8X0MV5117ZMYAS":3,"skill-same:01M6CAPMSBWG8X0MV5117ZMYAS":68},{"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":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M6CAPMSBWG8X0MV5117ZMYAS","memory-log-render",null,"Generate a human-readable Markdown view from a consumer's JSON Lines event 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-render\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35],"memory","memory log render","log","render","kernel","generate","markdown","json","view","human","event","event log","2026-11-10 10:12:30",false,"---\nname: memory-log-render\ndescription: Generate a human-readable Markdown view from a consumer's JSON Lines event log\nnamespace: aiwg\ncategory: kernel\nplatforms: [all]\n---\n\n# memory-log-render\n\nConvert a consumer's `.log.jsonl` into a readable `log.md` Markdown file. The rendered view uses greppable line prefixes and groups events by date.\n\n## When to Use\n\n- On demand: user asks \"show me the log\" or \"render the activity log\"\n- After bulk operations: post-ingest or post-lint when the log has grown\n- As part of `memory-lint --fix`: regenerate the rendered view if stale\n\n## Parameters\n\n### --consumer (optional)\nConsumer ID. Resolved via ADR-021 D4 precedence: explicit > wrapper > auto-detect.\n\n### --tail (optional, default: all)\nOnly render the last N entries. Useful for large logs.\n\n### --since (optional)\nOnly render entries after this ISO 8601 date.\n\n### --output (optional)\nOverride output path. Defaults to sibling of `.log.jsonl` → `log.md` (e.g., `.aiwg\u002Fresearch\u002F.log.jsonl` → `.aiwg\u002Fresearch\u002Flog.md`).\n\n## Operation\n\n1. **Resolve consumer** — determine which log to render.\n2. **Load topology** — read `memory.topology.log` path from consumer's `manifest.json`.\n3. **Read JSONL** — parse each line as JSON. Skip malformed lines (warn in output).\n4. **Group by date** — cluster entries by `ts` date portion.\n5. **Render Markdown** — for each entry, produce:\n\n```markdown\n## [2026-04-14] ingest | anthropic-2024-constitutional.pdf\nTouched 3 pages: anthropic.md, constitutional-ai.md, summaries\u002F2024-constitutional-ai.md.\nDuration: 14.2s. No contradictions.\n```\n\n6. **Write output** — overwrite the `log.md` file (this is a generated view, not an append).\n7. **Log event** — append a `log-render` entry to `.log.jsonl` via `memory-log-append`.\n\n## Rendered Format\n\n```markdown\n# Memory Log — research-complete\n\n> Generated from `.aiwg\u002Fresearch\u002F.log.jsonl` on 2026-04-14T16:00:00Z\n> 47 events total\n\n---\n\n## [2026-04-14] ingest | paper.pdf\nTouched 3 pages: entities\u002Fanthropic.md, concepts\u002Fconstitutional-ai.md, summaries\u002Fpaper.md.\nDuration: 14.2s. No contradictions.\n\n## [2026-04-14] lint | health check\n0 errors, 2 warnings, 5 suggestions. Duration: 3.4s.\n\n## [2026-04-13] query-capture | Constitutional AI comparison\nCreated synthesis\u002Fconstitutional-ai-comparison.md (comparison).\nAdded 2 cross-references.\n\n---\n\n*Rendered by memory-log-render*\n```\n\n## Line Prefix Convention\n\nEvery operation line starts with `## [YYYY-MM-DD] \u003Cop> | \u003Csubject>` — this makes the rendered log greppable:\n\n```bash\ngrep \"^## \\[\" .aiwg\u002Fresearch\u002Flog.md | tail -5\ngrep \"ingest\" .aiwg\u002Fresearch\u002Flog.md\n```\n\n## Schema Reference\n\n@semantic-memory\u002Fschemas\u002Fmemory-log-event.md\n","# memory-log-render\n\nConvert a consumer's `.log.jsonl` into a readable `log.md` Markdown file. The rendered view uses greppable line prefixes and groups events by date.\n\n## When to Use\n\n- On demand: user asks \"show me the log\" or \"render the activity log\"\n- After bulk operations: post-ingest or post-lint when the log has grown\n- As part of `memory-lint --fix`: regenerate the rendered view if stale\n\n## Parameters\n\n### --consumer (optional)\nConsumer ID. Resolved via ADR-021 D4 precedence: explicit > wrapper > auto-detect.\n\n### --tail (optional, default: all)\nOnly render the last N entries. Useful for large logs.\n\n### --since (optional)\nOnly render entries after this ISO 8601 date.\n\n### --output (optional)\nOverride output path. Defaults to sibling of `.log.jsonl` → `log.md` (e.g., `.aiwg\u002Fresearch\u002F.log.jsonl` → `.aiwg\u002Fresearch\u002Flog.md`).\n\n## Operation\n\n1. **Resolve consumer** — determine which log to render.\n2. **Load topology** — read `memory.topology.log` path from consumer's `manifest.json`.\n3. **Read JSONL** — parse each line as JSON. Skip malformed lines (warn in output).\n4. **Group by date** — cluster entries by `ts` date portion.\n5. **Render Markdown** — for each entry, produce:\n\n```markdown\n## [2026-04-14] ingest | anthropic-2024-constitutional.pdf\nTouched 3 pages: anthropic.md, constitutional-ai.md, summaries\u002F2024-constitutional-ai.md.\nDuration: 14.2s. No contradictions.\n```\n\n6. **Write output** — overwrite the `log.md` file (this is a generated view, not an append).\n7. **Log event** — append a `log-render` entry to `.log.jsonl` via `memory-log-append`.\n\n## Rendered Format\n\n```markdown\n# Memory Log — research-complete\n\n> Generated from `.aiwg\u002Fresearch\u002F.log.jsonl` on 2026-04-14T16:00:00Z\n> 47 events total\n\n---\n\n## [2026-04-14] ingest | paper.pdf\nTouched 3 pages: entities\u002Fanthropic.md, concepts\u002Fconstitutional-ai.md, summaries\u002Fpaper.md.\nDuration: 14.2s. No contradictions.\n\n## [2026-04-14] lint | health check\n0 errors, 2 warnings, 5 suggestions. Duration: 3.4s.\n\n## [2026-04-13] query-capture | Constitutional AI comparison\nCreated synthesis\u002Fconstitutional-ai-comparison.md (comparison).\nAdded 2 cross-references.\n\n---\n\n*Rendered by memory-log-render*\n```\n\n## Line Prefix Convention\n\nEvery operation line starts with `## [YYYY-MM-DD] \u003Cop> | \u003Csubject>` — this makes the rendered log greppable:\n\n```bash\ngrep \"^## \\[\" .aiwg\u002Fresearch\u002Flog.md | tail -5\ngrep \"ingest\" .aiwg\u002Fresearch\u002Flog.md\n```\n\n## Schema Reference\n\n@semantic-memory\u002Fschemas\u002Fmemory-log-event.md\n",{"name":5,"category":28,"namespace":41,"platforms":42,"description":7},"aiwg",[43],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Fsemantic-memory\u002Fskills\u002Fmemory-log-render",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":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add jmagly\u002Faiwg --skill memory-log-render",{"tool":60,"command":61},"bunx","bunx skills add jmagly\u002Faiwg --skill memory-log-render",{"tool":63,"command":64},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill memory-log-render","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsemantic-memory\u002Fskills\u002Fmemory-log-render\u002FSKILL.md",true,[],[69,97,121,127,134,148],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":76,"publishedAt":36},"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",[75],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],"host","host hardening","hardening","read","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","audit","never","firewall","bind","secrets","request",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":107,"publishedAt":36},"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",[103,106],{"categoryNo":104,"categoryName":105,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[108,109,110,80,111,85,112,113,87,114,77,115,89,116,117,92,93,118,119,120],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":122,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":126,"publishedAt":36},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[125],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[79,77,78,88,80,96,83,82,91,84,85,86,87,95,89,90,81,92,93,94],{"skillNo":128,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":133,"publishedAt":36},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[131,132],{"categoryNo":104,"categoryName":105,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[109,108,92,111,85,112,87,110,77,115,89,116,117,80,93,114,113,118,119,120],{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":141,"publishedAt":36},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[140],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[142,143,144,145,146,147],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":155,"publishedAt":36},"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",[154],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[156,157,116,158,143],"pi","pi local","duplicate"]