# Commenting Content

> Analyzes a .docx or .pptx file, researches the topic using internal documents, emails, Microsoft Teams messages, and web sources, then adds native comments throughout the file authored by "Copilot Studio AI" — without modifying the original content.

- Skill: `kody-w/commenting-content` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add kody-w/commenting-content`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kody-w/commenting-content/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: kody-w (https://skillmd.com/u/kody-w)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kody-w/commenting-content

---


# Comment Content

When this skill is activated:

1. Check the file extension of the attached document.
   - If `.docx` → follow the instructions in `REFERENCE-DOCX.md`
   - If `.pptx` → follow the instructions in `REFERENCE-PPTX.md`
   - If any other format → ask the user to convert to `.docx` or `.pptx` first.
2. Execute the full commenting workflow defined in the appropriate reference file.
3. Return the updated file with native comments embedded and a short chat summary of findings.

## Guidelines

- Never modify the original document content — add comments only.
- Set the comment author to `Copilot Studio AI` on every comment added.
- Research using any available sources: internal documents, emails, Microsoft Teams messages, approved knowledge sources, and web research tools.
- Only comment where it genuinely helps — do not comment on every sentence.
- The chat summary must include: comment count, main research findings, and top 1–3 priority issues for the author to review.

## Reference Files

- [`REFERENCE-DOCX.md`](./REFERENCE-DOCX.md) — Word document commenting instructions
- [`REFERENCE-PPTX.md`](./REFERENCE-PPTX.md) — PowerPoint presentation commenting instructions

## Examples

**Example 1: Word document**
- User request: "Add research comments to this report." (attaches report.docx)
- Expected behavior: Detect .docx, follow REFERENCE-DOCX.md, return commented .docx with summary.

**Example 2: PowerPoint presentation**
- User request: "Review this deck and add comments." (attaches deck.pptx)
- Expected behavior: Detect .pptx, follow REFERENCE-PPTX.md, return commented .pptx with summary.

## Notes

- If multiple files are attached, process them one at a time and produce a separate summary for each.
- If the file type is ambiguous, ask the user to confirm before proceeding.

<!-- toaster:generated:begin -->

## Run this — do not improvise

This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as `commenting_content_agent.py` and embedded as the fenced Python below (sha256 d3840f3c9cb4f90e…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to `commenting_content_agent.py` first:

```bash
python3 commenting_content_agent.py '{"key": "value"}'      # arguments as one JSON object
echo '{"key": "value"}' | python3 commenting_content_agent.py   # or on stdin
python3 commenting_content_agent.py --tool                      # emit the JSON tool contract
```

Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns `steps`, execute those steps in order exactly as returned; if it returns `instructions`, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed `rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent`.

```python  # rapp:deterministic
"""CommentingContent -- Analyzes a .docx or .pptx file, researches the topic using internal documents, emails, Microsoft Teams messages, and web sources, then adds native comments throughout the file authored by "Copilot Studio AI" — without modifying the original content.

Generated by the rapp skill from commenting-content. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""

import json
import re
import sys

try:
    from agents.basic_agent import BasicAgent
except ImportError:  # running OUTSIDE a brainstem -- stay executable anyway.
    class BasicAgent:  # noqa: D101 - minimal stand-in, same contract
        def __init__(self, name=None, metadata=None):
            if name:
                self.name = name
            if metadata:
                self.metadata = metadata

        def perform(self, **kwargs):
            return "Not implemented."

        def system_context(self):
            return None

        def to_tool(self):
            return {"type": "function", "function": {
                "name": self.name,
                "description": self.metadata.get("description", ""),
                "parameters": self.metadata.get("parameters", {})}}

# The procedural layer, verbatim from the source capability.
INSTRUCTIONS = '# Comment Content\n\nWhen this skill is activated:\n\n1. Check the file extension of the attached document.\n   - If `.docx` → follow the instructions in `REFERENCE-DOCX.md`\n   - If `.pptx` → follow the instructions in `REFERENCE-PPTX.md`\n   - If any other format → ask the user to convert to `.docx` or `.pptx` first.\n2. Execute the full commenting workflow defined in the appropriate reference file.\n3. Return the updated file with native comments embedded and a short chat summary of findings.\n\n## Guidelines\n\n- Never modify the original document content — add comments only.\n- Set the comment author to `Copilot Studio AI` on every comment added.\n- Research using any available sources: internal documents, emails, Microsoft Teams messages, approved knowledge sources, and web research tools.\n- Only comment where it genuinely helps — do not comment on every sentence.\n- The chat summary must include: comment count, main research findings, and top 1–3 priority issues for the author to review.\n\n## Reference Files\n\n- [`REFERENCE-DOCX.md`](./REFERENCE-DOCX.md) — Word document commenting instructions\n- [`REFERENCE-PPTX.md`](./REFERENCE-PPTX.md) — PowerPoint presentation commenting instructions\n\n## Examples\n\n**Example 1: Word document**\n- User request: "Add research comments to this report." (attaches report.docx)\n- Expected behavior: Detect .docx, follow REFERENCE-DOCX.md, return commented .docx with summary.\n\n**Example 2: PowerPoint presentation**\n- User request: "Review this deck and add comments." (attaches deck.pptx)\n- Expected behavior: Detect .pptx, follow REFERENCE-PPTX.md, return commented .pptx with summary.\n\n## Notes\n\n- If multiple files are attached, process them one at a time and produce a separate summary for each.\n- If the file type is ambiguous, ask the user to confirm before proceeding.'

# Ordered commands lifted verbatim from the capability's own documentation.
STEPS = []


class CommentingContentAgent(BasicAgent):
    def __init__(self):
        self.name = 'CommentingContent'
        self.metadata = {
          "name": "CommentingContent",
          "description": "Analyzes a .docx or .pptx file, researches the topic using internal documents, emails, Microsoft Teams messages, and web sources, then adds native comments throughout the file authored by \"Copilot Studio AI\" \u2014 without modifying the original content.",
          "parameters": {
            "type": "object",
            "properties": {},
            "required": []
          }
        }
        super().__init__(name=self.name, metadata=self.metadata)

    def perform(self, **kwargs):  # toaster:generated-perform
        return json.dumps({"status": "ok", "instructions": INSTRUCTIONS,
                           "inputs": kwargs,
                           "note": "Prose-only capability: follow INSTRUCTIONS "
                                   "with the given inputs."}, indent=2)

if __name__ == "__main__":
    #     echo '{"arg": "value"}' | python3 commenting_content_agent.py
    #     python3 commenting_content_agent.py '{"arg": "value"}'
    #     python3 commenting_content_agent.py --tool          # emit the JSON tool contract
    _a = sys.argv[1:]
    if _a and _a[0] == "--tool":
        print(json.dumps(CommentingContentAgent().to_tool(), indent=2))
    else:
        _raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")
        print(CommentingContentAgent().perform(**json.loads(_raw)))

# rci-capsule:v1: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
```

<!-- toaster:generated:end -->

<!-- rci-capsule:v1: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 -->

