agentleFS
DenchHQDenchHQ/ironclaw/skills/crm/documents/SKILL.md

documents

Skill1.7k starsChanged 7 months agoMITView on GitHub

Document management with markdown files, always-on entry documents linked through the documents table, and mutation/edit logs for CRM entries. Use when creating or updating row notes, entry notes, detail pages, or document-linked CRM content.

13 other projects use a version of this.

Trending

Quiet since February.thin dataabout the whole repository

Dec 2025: 0 mentionsJan 2026: 0 mentionsFeb 2026: 1 mentionMar 2026: 0 mentionsApr 2026: 0 mentionsMay 2026: 0 mentionsJun 2026: 0 mentionsJul 2026: 0 mentionsAug 2026: 0 mentionsSep 2026: 0 mentionsOct 2026: 0 mentionsNov 2026: 0 mentions
Dec 2025Jun 2026Nov 2026
Mentions a month of the DenchHQ/ironclaw repository that our weekly crawl found: only 1 in all, so this is a hint, not a trend. There is no adoption data for this file yet.

Most recently taken up by

Who's talking about DenchHQ/ironclaw

The biggest 1 of 1 mention linking to the repository that our crawl found. Each line is their own headline.

Used with

Projects with it also use research.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • NVIDIASkill

    research

    Before designing a feature, research how comparable libraries solve the problem, check best practices, known pitfalls, and upstream changes. Use when starting a new feature, investigating an unfamiliar area, or the user asks to research something.

    Also in 3 projects that use this

The file

Show its rules and text

We split this skill into the rules it gives an agent

29 rules. 0 are common, 17 are distinctive, and 12 are very specific to this project.

  • 0

    Common

    Most of the 10 edited versions we read keep these.

  • 17

    Distinctive

    This author's own choices. Worth a look.

  • 12

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Treat the entry document as the default long-form companion to the row.

    line 19
  2. Distinctive:

    Create or reuse a connected entry document whenever you create an entry and have enough information to derive a sane filename/title.

    line 23
  3. Distinctive:

    When updating an entry, ensure a connected document exists before finishing the task.

    line 24
  4. Very specific:

    Keep the document registered in DuckDB documents with entry_id, parent_object_id, and file_path.

    line 25
  5. Distinctive:

    If the user asks to add or change anything on an entry, update the connected document too.

    line 26
  6. Very specific:

    Write the .md file: write {{WORKSPACE_PATH}}/projects/roadmap.md

    line 31
  7. Distinctive:

    When the user says:

    line 53
  8. Very specific:

    If the user truly means the Notes field, they will usually talk about:

    line 65
  9. Very specific:

    If they explicitly ask to update the Notes field/column, update that DuckDB value and sync the connected entry document unless they clearly …

    line 72
  10. Distinctive:

    If they mean entry documents, they are talking about:

    line 74
  11. Distinctive:

    Update the markdown content and append the mutation log entry

    line 96
  12. Distinctive:

    Before creating a new file, resolve any existing document:

    line 98
  13. Distinctive:

    Use this filename structure for entry documents:

    line 120
  14. Distinctive:

    If the entry clearly belongs to a source/domain where a prefix helps, include it:

    line 130
  15. Distinctive:

    Use the first strong human-readable identifier available:

    line 137
  16. Distinctive:

    Keep the entry document readable for humans and useful as an audit trail.

    line 160
  17. Distinctive:

    Update the current sections in place and append new log items instead of rewriting history.

    line 181
  18. Very specific:

    Do NOT default to {entry_id}.md for new documents

    line 185
  19. Very specific:

    Do NOT confuse entry documents with the Notes richtext field

    line 186
  20. Very specific:

    Do NOT create a markdown file without also inserting/updating the documents table row

    line 187
  21. Distinctive:

    Do NOT write human-readable files and leave them orphaned from metadata

    line 188
  22. Very specific:

    Create or repair the connected entry .md file whenever the user creates an entry, mentions notes on the row/entry, or makes a mutation and …

    line 198
  23. Very specific:

    When the user asks for docs for many entries, or asks to add notes/details across many entries, create/update markdown files plus documents …

    line 238
  24. Very specific:

    Write one .md file per entry under the object directory

    line 244
  25. Distinctive:

    Not every markdown file under an object directory is automatically an entry document.

    line 299
  26. Very specific:

    If a markdown file is meant to be the entry page, always register it in documents.

    line 309
  27. Distinctive:

    After any meaningful entry mutation:

    line 313
  28. Distinctive:

    Create the document if it does not exist yet

    line 316
  29. Very specific:

    Update the relevant prose sections (Summary, Notes, drafts, follow-ups, etc.)

    line 317

“Common” is measured: kept by at least 6 in 10 of the 10 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

CRM Documents

This skill covers document management, cross-nesting, and entry detail pages. For workspace fundamentals, see the parent crm skill (crm/SKILL.md). For creating objects, see object-builder (crm/object-builder/SKILL.md).


Document Management

Documents are markdown files in {{WORKSPACE_PATH}}/**. The DuckDB documents table tracks metadata only; the .md file IS the content.

Default Rule: Every Entry Needs a Connected Document

Treat the entry document as the default long-form companion to the row.

Mandatory defaults:

  • Create or reuse a connected entry document whenever you create an entry and have enough information to derive a sane filename/title.
  • When updating an entry, ensure a connected document exists before finishing the task. If it is missing, create it.
  • Keep the document registered in DuckDB documents with entry_id, parent_object_id, and file_path.
  • If the user asks to add or change anything on an entry, update the connected document too.
  • Append a concise timestamped activity log entry for every meaningful mutation so the document acts as an edit log, not just a static page.

Create Document

  1. Write the .md file: write {{WORKSPACE_PATH}}/projects/roadmap.md
  2. Insert metadata into DuckDB:
INSERT INTO documents (title, icon, file_path, parent_id, sort_order)
VALUES ('Roadmap', 'map', 'projects/roadmap.md', '<parent_doc_id>', 0);

Cross-Nesting

  • Document under Object: Set parent_object_id on the document. Place .md file inside the object's directory.
  • Object under Document: Set parent_document_id on the object. Place object directory inside the document's directory.

Notes Field vs Entry Documents

These are not the same thing:

  • Notes field: a richtext value stored in DuckDB entry_fields
  • Entry document: a standalone .md file on disk, linked to the entry through the documents table

When the user says:

  • "fill in notes for each entry"
  • "add notes to this row"
  • "add a note to this entry"
  • "write descriptions for all rows"
  • "add detailed writeups"
  • "put the outreach draft into each influencer notes page"
  • "create entry docs"

default to the connected entry document.

If the user truly means the Notes field, they will usually talk about:

  • a table column
  • richtext field values
  • filtering/sorting by Notes
  • SQL updates to entry_fields

If they explicitly ask to update the Notes field/column, update that DuckDB value and sync the connected entry document unless they clearly ask you not to.

If they mean entry documents, they are talking about:

  • markdown pages
  • the entry detail panel
  • prose content, drafts, meeting notes, SOPs, long-form notes
  • files visible under the object in the sidebar

Entry Detail Pages

Each entry in an object should have a markdown file that acts as its detail page and running edit log in the entry panel.

CRITICAL: New entry documents should use human-readable filenames, not raw UUID filenames. The file must also be registered in DuckDB documents with entry_id, parent_object_id, and file_path.

Required storage model

For every entry document:

  1. Reuse the existing linked document if one already exists for the entry
  2. Otherwise write a human-readable markdown file inside the object directory
  3. Insert/update a row in documents linking the entry to that file
  4. Update the markdown content and append the mutation log entry

Before creating a new file, resolve any existing document:

SELECT id, title, file_path
FROM documents
WHERE entry_id = '<entry_id>'
ORDER BY updated_at DESC
LIMIT 1;
INSERT INTO documents (title, file_path, parent_object_id, entry_id)
VALUES (
  'Mike Murphy',
  'marketing/influencer/yt-mikemurphy-001.md',
  (SELECT id FROM objects WHERE name = 'influencer'),
  'yt-mikemurphy-001'
);

Naming convention (MANDATORY)

Use this filename structure for entry documents:

{human_readable_slug}-{sequence}.md

Examples:

  • acme-corp-001.md
  • jane-smith-001.md
  • q2-renewal-deal-001.md

If the entry clearly belongs to a source/domain where a prefix helps, include it:

  • yt-mikemurphy-001.md for YouTube creators
  • x-somehandle-001.md for X/Twitter creators

How to choose the slug

Use the first strong human-readable identifier available:

  1. Document Slug, Slug, or File Slug field if it exists
  2. For YouTube creators: extract the handle from YouTube URL and prefix yt-
  3. Otherwise use the primary text label, such as:
    • Title
    • Channel Name
    • Creator Name
    • Full Name
    • Name
    • Company Name
    • Deal Name
    • Case Number
    • Invoice Number

Examples:

  • https://www.youtube.com/@MikeMurphy -> yt-mikemurphy-001.md
  • Creator Name = Jane Smith -> jane-smith-001.md
  • Company Name = Acme Corp -> acme-corp-001.md

Default content model

Keep the entry document readable for humans and useful as an audit trail. A good default shape is:

# Jane Smith

## Summary

Current state of the entry in plain English.

## Notes

User-facing notes, drafts, follow-ups, or other long-form details.

## Activity Log

### 2026-03-30T12:34:56Z - Entry updated

- Changed `Status`: `New` -> `Qualified`
- Added note: Follow up on Thursday about pricing

Update the current sections in place and append new log items instead of rewriting history.

NEVER do these

  • Do NOT default to {entry_id}.md for new documents
  • Do NOT confuse entry documents with the Notes richtext field
  • Do NOT create a markdown file without also inserting/updating the documents table row
  • Do NOT write human-readable files and leave them orphaned from metadata

Backward compatibility

Older workspaces may still have legacy {entry_id}.md files. Those can continue to work, but new entry documents should follow the human-readable naming convention above.


Creating One Entry Document

Create or repair the connected entry .md file whenever the user creates an entry, mentions notes on the row/entry, or makes a mutation and no document exists yet.

Example:

cat > {{WORKSPACE_PATH}}/marketing/influencer/yt-mikemurphy-001.md << 'MD'
# Draft Outreach Email

To: hello@mikemurphy.co
Subject: Partnership idea

Hi Mike,

I loved your AI Handyman breakdowns. DenchClaw is launching a workflow-native AI platform for builders who want serious control over execution, memory, and automation.

Would you be open to testing it and discussing a possible sponsorship?
MD

Then register it:

INSERT INTO documents (title, file_path, parent_object_id, entry_id)
VALUES (
  'Mike Murphy',
  'marketing/influencer/yt-mikemurphy-001.md',
  (SELECT id FROM objects WHERE name = 'influencer'),
  'yt-mikemurphy-001'
)
ON CONFLICT (file_path) DO UPDATE
SET title = excluded.title,
    parent_object_id = excluded.parent_object_id,
    entry_id = excluded.entry_id,
    updated_at = now();

Batch Creating Entry Documents

When the user asks for docs for many entries, or asks to add notes/details across many entries, create/update markdown files plus documents rows. Only update the Notes field in SQL when they explicitly want that field changed too.

Workflow

  1. Query entries and the fields needed to build filenames/titles
  2. Derive a human-readable filename for each entry
  3. Write one .md file per entry under the object directory
  4. Insert/update one documents row per file
  5. Append or update each file's ## Notes and ## Activity Log sections to capture the requested changes

Example: create docs for every influencer

duckdb {{WORKSPACE_PATH}}/workspace.duckdb -json "
SELECT
  entry_id,
  \"Creator Name\",
  \"Channel Name\",
  \"YouTube URL\"
FROM v_influencer
ORDER BY \"Creator Name\"
"

Then for each row:

# Example row:
# entry_id = yt-mikemurphy-001
# youtube url = https://www.youtube.com/@MikeMurphy

cat > {{WORKSPACE_PATH}}/marketing/influencer/yt-mikemurphy-001.md << 'MD'
# Influencer Notes

## Outreach draft

...
MD

Register each file:

INSERT INTO documents (title, file_path, parent_object_id, entry_id)
VALUES (
  'Mike Murphy',
  'marketing/influencer/yt-mikemurphy-001.md',
  (SELECT id FROM objects WHERE name = 'influencer'),
  'yt-mikemurphy-001'
)
ON CONFLICT (file_path) DO UPDATE
SET title = excluded.title,
    parent_object_id = excluded.parent_object_id,
    entry_id = excluded.entry_id,
    updated_at = now();

Standalone Documents vs Entry Documents

Not every markdown file under an object directory is automatically an entry document.

  • Entry document: has a corresponding documents row with entry_id set
  • Standalone document under an object: has no entry_id link; it is just a nested document in that folder

Examples:

  • marketing/influencer/yt-mikemurphy-001.md with documents.entry_id = 'yt-mikemurphy-001' -> entry document
  • marketing/influencer/outreach-playbook.md with no entry_id -> standalone object-level document

If a markdown file is meant to be the entry page, always register it in documents.

Sync on Entry Mutations

After any meaningful entry mutation:

  1. Resolve the linked entry document by documents.entry_id
  2. Create the document if it does not exist yet
  3. Update the relevant prose sections (Summary, Notes, drafts, follow-ups, etc.)
  4. Append a timestamped Activity Log entry describing the delta

This applies to:

  • field value changes
  • explicit Notes field updates
  • status/owner/priority changes
  • user requests to "add", "note", "log", "remember", or otherwise attach information to an entry

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.