agentsclimarketplace

Apple notes enterprise rbac

Skill jeremylongshore/claude-code-plugins-plus-skills/plugins/saas-packs/apple-notes-pack/skills/apple-notes-enterprise-rbac

425 plugins, 2,810 skills, 200 agents for Claude Code. Open-source marketplace at tonsofskills.com with the ccpi CLI package manager.

Install
npx -y skills add jeremylongshore/claude-code-plugins-plus-skills --skill apple-notes-enterprise-rbac

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

'Implement access control for multi-user Apple Notes automation.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.0 KB, as published. Nobody here has run it

Apple Notes Enterprise RBAC

Overview

Apple Notes has no built-in role-based access control (RBAC). In enterprise environments with Managed Apple IDs via Apple Business Manager, administrators control Notes access through MDM (Mobile Device Management) profiles. For multi-user automation scenarios, implement access control at the automation layer using account separation, folder-based permissions, and shared folder restrictions. iCloud Shared Notes (macOS Ventura+) provide basic collaboration, but fine-grained permissions (read-only vs edit) must be enforced in your wrapper code.

Account-Based Access Control

// Apple Notes supports multiple accounts (iCloud, Gmail, On My Mac)
// Use account separation as the primary access boundary
const Notes = Application("Notes");

function getAccountByName(name) {
  const account = Notes.accounts().find(a => a.name() === name);
  if (!account) throw new Error(`Account not found: ${name}`);
  return account;
}

// Audit all accounts and their folder structures
function auditAccounts() {
  return Notes.accounts().map(a => ({
    name: a.name(),
    folders: a.folders().map(f => f.name()),
    noteCount: a.notes().length,
  }));
}

// Restrict automation to a specific account only
const ALLOWED_ACCOUNT = "iCloud";
function safeGetNotes() {
  const account = getAccountByName(ALLOWED_ACCOUNT);
  return account.notes();
}

Folder-Based Permission Model

// src/rbac/permissions.ts
interface FolderPermission {
  folder: string;
  allowedRoles: string[];
  operations: ("read" | "write" | "delete")[];
}

const FOLDER_PERMISSIONS: FolderPermission[] = [
  { folder: "Public",    allowedRoles: ["viewer", "editor", "admin"], operations: ["read"] },
  { folder: "Team",      allowedRoles: ["editor", "admin"],          operations: ["read", "write"] },
  { folder: "Sensitive",  allowedRoles: ["admin"],                    operations: ["read", "write", "delete"] },
];

function checkPermission(role: string, folder: string, op: "read" | "write" | "delete"): boolean {
  const perm = FOLDER_PERMISSIONS.find(p => p.folder === folder);
  if (!perm) return false;
  return perm.allowedRoles.includes(role) && perm.operations.includes(op);
}

MDM-Based Enforcement

# Apple Business Manager + MDM profiles can:
# 1. Disable Notes.app entirely on managed devices
# 2. Restrict iCloud Notes sync (force "On My Mac" only)
# 3. Enforce Managed Apple IDs (separate from personal)

# Check if device is MDM-managed
profiles status -type enrollment 2>/dev/null

# Check Notes restrictions via MDM profile
profiles list -verbose 2>/dev/null | grep -A5 "com.apple.notes"

# Managed Apple IDs cannot:
# - Share notes with personal Apple IDs
# - Use third-party account types (Gmail, Yahoo)
# - Access notes outside the organization's domain

Shared Folder Audit

// Audit shared notes (macOS Ventura+ with iCloud sharing)
const Notes = Application("Notes");
const allNotes = Notes.defaultAccount.notes();

// Notes shared via iCloud show as shared in the UI
// JXA does not expose sharing metadata directly
// Workaround: check folder names for "Shared" convention
const sharedFolders = Notes.defaultAccount.folders()
  .filter(f => f.name().toLowerCase().includes("shared"));

sharedFolders.forEach(f => {
  console.log(`Shared folder: ${f.name()} — ${f.notes().length} notes`);
});

Error Handling

IssueCauseSolution
Cannot access Managed Apple ID notesPersonal automation on corporate deviceUse the managed account explicitly via getAccountByName()
Shared folder not visibleiCloud sharing not accepted by recipientRecipient must accept share invitation in Notes.app
MDM blocks osascriptDevice restriction profile activeRequest IT to allow automation; use Shortcuts as alternative
Folder permissions bypassJXA has full access once TCC approvedEnforce permissions in your wrapper code, not at OS level
Multiple accounts create confusionNotes from wrong account modifiedAlways specify account explicitly; never use defaultAccount in multi-user

Resources

Next Steps

For multi-account environment configuration, see apple-notes-multi-env-setup. For security hardening, see apple-notes-security-basics.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.