Agent Skills: Banana Sync to Notion

>

UncategorizedID: treydong/banana-skills/banana-sync-to-notion

Install this agent skill to your local

pnpm dlx add-skill https://github.com/treydong/banana-skills/tree/HEAD/skills/banana-sync-to-notion

Skill Files

Browse the full folder contents for banana-sync-to-notion.

Download Skill

Loading file tree…

skills/banana-sync-to-notion/SKILL.md

Skill Metadata

Name
banana-sync-to-notion
Description
>

Banana Sync to Notion

Automatically sync local Markdown files to Notion while preserving directory structure and full Markdown formatting.

Setup

Before using this skill:

  1. Install dependencies in the skill directory:

    cd banana-sync-to-notion
    npm install
    
  2. Configure environment variables by creating a .env file:

    NOTION_TOKEN=your_notion_integration_token
    NOTION_ROOT_PAGE_ID=target_page_id
    
    • NOTION_TOKEN: Get from Notion Integrations
    • NOTION_ROOT_PAGE_ID: The parent page ID where files will be synced
    • Ensure the integration has read/write permissions to the target page

Usage

Sync Files to Notion

Run from the skill directory:

npm run sync:notion

This command:

  • Recursively scans the source directory (default: Files/ in project root)
  • Converts Markdown files to Notion blocks
  • Preserves directory hierarchy as nested pages
  • Assigns emoji icons based on filenames
  • Skips existing pages (incremental sync)
  • Shows detailed progress and statistics

Clean Notion Pages

Remove all child pages under the target page:

npm run clean:notion

Use this before a fresh re-sync.

Re-sync Everything

Clean existing content and sync fresh:

npm run resync:notion

Combines clean:notion + sync:notion.

Markdown Support

All standard Markdown syntax is converted to native Notion blocks:

| Syntax | Notion Output | |--------|---------------| | **bold** or __bold__ | Bold text | | *italic* or _italic_ | Italic text | | ***bold italic*** | Bold italic | | `code` | Inline code | | [text](url) | Clickable link (http/https only) | | ```language ... ``` | Code block | | - item or * item | Bullet list | | 1. item | Numbered list | | > quote | Quote block | | > πŸ’‘ note | Callout (emoji-prefixed quotes) | | --- or *** | Divider | | Markdown tables | Native Notion tables |

Relative Links:

  • ./file.md or ../folder/file.md β†’ Converted to Notion page links
  • ./image.png β†’ Preserved as text (no local file upload)
  • http://... β†’ Clickable external links

Automatic Icon Selection

The script assigns emoji icons based on filename patterns:

  • πŸ“– Chapters (e.g., "01-intro.md")
  • 🎯 Getting started, basics
  • ❓ FAQ, troubleshooting, problems
  • πŸ’‘ Examples, case studies
  • πŸ”§ Tools, utilities
  • πŸ“š Methods, tutorials
  • πŸ“Š Data, analysis, reports
  • βš™οΈ Configuration, settings
  • πŸ—οΈ Architecture, system
  • πŸ’» Scripts, code
  • ✍️ Writing, creative
  • πŸ“ Notes, records
  • πŸš€ Advanced, recommendations
  • πŸ“‹ Guides
  • πŸ“˜ README files
  • πŸ“¦ Downloads, resources
  • 🎨 Presentations
  • πŸ“„ Default (no match)

Customize icons by editing the selectIcon function in scripts/sync-notion.js.

Smart Features

Duplicate Detection: Automatically skips pages that already exist with the same title, enabling incremental syncs without duplicates.

Smart Chunking:

  • Handles Notion's 2000-character limit per block
  • Supports files with >100 blocks
  • Batches API requests to avoid rate limits
  • Automatic retry on temporary failures

Progress Reporting: Shows detailed statistics during sync:

  • Files processed
  • Files created vs skipped
  • Folders created
  • Duration and errors

Output Example

πŸš€ Starting Notion Sync...
πŸ“‚ Source: /path/to/Files
πŸ“„ Target Page: My Knowledge Base

πŸ“ Syncing directory: Files
  ✨ Creating: πŸ“– 01-Introduction
  πŸ“ Syncing directory: 01-Introduction
    ✨ Creating: πŸ“– 01-overview.md
    ⏭️  Skipping existing: 02-concepts.md
    ✨ Creating: 🎯 03-quickstart.md

==================================================
βœ… Sync Complete!
==================================================
⏱️  Duration: 45.2s
πŸ“Š Statistics:
   β€’ Files processed: 35
   β€’ Files created: 25
   β€’ Files skipped: 10
   β€’ Folders created: 5
   β€’ Errors: 0
==================================================

File Structure

banana-sync-to-notion/
β”œβ”€β”€ SKILL.md
β”œβ”€β”€ .env (user created)
β”œβ”€β”€ package.json
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ sync-notion.js   # Main sync logic
β”‚   └── clean-notion.js  # Cleanup utility
└── Files/ (default source directory)

Troubleshooting

Image support: Current version focuses on text/Markdown. Images require hosted URLs (image hosting) to display in Notion. Local image upload requires more complex authentication.

Missing icons: Files that don't match any icon pattern use the default πŸ“„ emoji. Add custom patterns in scripts/sync-notion.js.

Rate limits: The script includes automatic retry logic for Notion API rate limits. Large syncs (>100 files) may take several minutes.

Relative links not working: Ensure the linked Markdown file was also synced. Links only work to pages that exist in Notion.