
Feishu Perm
- 2 installs
- 20 repo stars
- Updated April 11, 2026
- autogame-17/feishu-skills
feishu-perm is a Claude skill that manages collaborators and public link settings for Feishu Drive files such as Docs, Sheets, Bitables, Wikis, and files.
About
feishu-perm manages collaborators and public link settings for Feishu Drive files, including Docs, Sheets, Bitables, Wikis, and raw files. It can add, list, update, and remove collaborators with view, edit, or full-access roles, and set the public link-sharing scope. Developers use it when an agent needs to share Feishu files or adjust who can access them. It reads file tokens from the document URL.
- Manages collaborators and public-link settings for Feishu Drive files
- Add, list, update, and remove collaborators by role (view/edit/full_access)
- Sets public link sharing scope from closed to anyone-editable
Feishu Perm by the numbers
- 2 all-time installs (skills.sh)
- Ranked #1,842 of 2,719 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Jul 28, 2026 (Skillselion catalog sync)
feishu-perm capabilities & compatibility
Free skill; requires a Feishu app credential pair (FEISHU_APP_ID / FEISHU_APP_SECRET) via feishu-common.
- Capabilities
- feishu doc
- Works with
- google drive
- Use cases
- orchestration
What feishu-perm says it does
Feishu permission management for documents and files. Activate when user mentions sharing, permissions, collaborators.
Manage collaborators and public link settings for Feishu Drive files (Docs, Sheets, Bitables, Wikis, Files).
npx skills add https://github.com/autogame-17/feishu-skills --skill feishu-permAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2 |
|---|---|
| repo stars | ★ 20 |
| Last updated | April 11, 2026 |
| Repository | autogame-17/feishu-skills ↗ |
What it does
Add, list, update, or remove Feishu Drive collaborators and set public link-sharing scope.
Who is it for?
Adding, updating, listing, or removing collaborators and setting link-sharing scope on Feishu Drive files.
Skip if: Permission management on Google Drive, SharePoint, or non-Feishu storage.
When should I use this skill?
A user mentions sharing, permissions, or collaborators on a Feishu file.
What you get
Collaborators and public link scope on a Feishu Drive file are set programmatically.
- Updated collaborator list or public link-sharing setting on a Feishu file
By the numbers
- 5 actions (add, remove, list, update, public)
- 3 permission levels (view, edit, full_access)
Files
Feishu Permission Skill
Manage collaborators and public link settings for Feishu Drive files (Docs, Sheets, Bitables, Wikis, Files).
Usage
# Add a collaborator (read-only)
node skills/feishu-perm/index.js --action add --token "shttc..." --type "sheet" --member_id "ou_..." --perm "view"
# List collaborators
node skills/feishu-perm/index.js --action list --token "docx..." --type "docx"
# Remove a collaborator
node skills/feishu-perm/index.js --action remove --token "docx..." --type "docx" --member_id "ou_..."
# Update a collaborator (to edit)
node skills/feishu-perm/index.js --action update --token "docx..." --type "docx" --member_id "ou_..." --perm "edit"
# Set public link sharing (Tenant Read)
node skills/feishu-perm/index.js --action public --token "docx..." --type "docx" --link_share_entity "tenant_readable"Arguments
--action:add,remove,list,update,public--token: File token (from URL)--type:doc,docx,sheet,bitable,file,wiki,folder(default:doc)--member_id: User Open ID (ou_...) or Chat ID (oc_...)--member_type:user,chat,department,group(default:user)--perm:view,edit,full_access--link_share_entity:tenant_readable: Organization members can readtenant_editable: Organization members can editanyone_readable: Anyone with link can read (if allowed by tenant)anyone_editable: Anyone with link can editclosed: Only invited members--notify:true/false(send notification to new member)
const common = require('../feishu-common');
/**
* Feishu Permission Management Skill
* Manage collaborators and permissions for Drive files/docs/wikis.
*
* Actions:
* - add: Add a collaborator (user/chat/group) with role.
* - remove: Remove a collaborator.
* - list: List collaborators.
* - update: Update a collaborator's role.
* - public: Update public link settings (link_share_entity).
*
* Usage:
* node skills/feishu-perm/index.js --action add --token "file_token" --type "file" --member_id "ou_xxx" --member_type "user" --perm "view"
*/
async function main(opts = {}) {
// Parse args if running from CLI
if (!opts.action && process.argv[1] === __filename) {
const args = require('minimist')(process.argv.slice(2));
opts = args;
}
const {
action, // add, remove, list, update, public
token, // file_token or doc_token or wiki_token
type, // doc, sheet, file, wiki, bitable, folder (default: doc)
member_id, // user_id or open_id or chat_id
member_type, // user, chat, department, group (default: user)
perm, // view, edit, full_access (default: view)
link_share_entity, // tenant_readable, tenant_editable, anyone_readable, anyone_editable, closed
notify, // true/false (send notification)
} = opts;
if (!action) {
console.error('Error: --action is required (add, remove, list, update, public)');
process.exit(1);
}
if (!token) {
console.error('Error: --token is required');
process.exit(1);
}
const client = await common.getClient();
const fileType = type || 'doc'; // Default to doc
try {
let result;
switch (action) {
case 'add':
if (!member_id) throw new Error('--member_id is required for add');
result = await client.im.drive.v1.permission.member.create({
token,
type: fileType,
member_type: member_type || 'user',
member_id,
perm: perm || 'view',
notify: notify === 'true' || notify === true
});
break;
case 'remove':
if (!member_id) throw new Error('--member_id is required for remove');
// Need to find member first to get member_id (which is different from user_id in perm API?)
// Actually, the API takes member_id and member_type in the body for delete?
// Wait, delete endpoint is DELETE /drive/v1/permissions/:token/members/:member_id?type=...
// But here member_id is the PERMISSION member_id, not the user_id.
// So we must LIST first to find the permission member_id for the user.
// 1. List members
const members = await client.im.drive.v1.permission.member.list({
token,
type: fileType
});
// 2. Find target
const target = members.data.members.find(m => m.member_id === member_id || m.member_open_id === member_id);
if (!target) throw new Error(`Member ${member_id} not found in permission list.`);
result = await client.im.drive.v1.permission.member.delete({
token,
type: fileType,
member_id: target.member_id,
member_type: target.member_type
});
break;
case 'list':
result = await client.im.drive.v1.permission.member.list({
token,
type: fileType
});
break;
case 'update':
if (!member_id) throw new Error('--member_id is required for update');
// Same logic: find member object first
const listForUpdate = await client.im.drive.v1.permission.member.list({
token,
type: fileType
});
const targetUpdate = listForUpdate.data.members.find(m => m.member_id === member_id || m.member_open_id === member_id);
if (!targetUpdate) throw new Error(`Member ${member_id} not found.`);
result = await client.im.drive.v1.permission.member.update({
token,
type: fileType,
member_id: targetUpdate.member_id,
perm: perm || 'view',
member_type: targetUpdate.member_type
});
break;
case 'public':
if (!link_share_entity) throw new Error('--link_share_entity is required (tenant_readable, etc)');
result = await client.im.drive.v1.permission.public.update({
token,
type: fileType,
link_share_entity
});
break;
default:
throw new Error(`Unknown action: ${action}`);
}
console.log(JSON.stringify(result, null, 2));
return result;
} catch (err) {
console.error(`Feishu Perm Error: ${err.message}`);
// console.error(err);
process.exit(1);
}
}
// Export for require
module.exports = { main };
// Run if called directly
if (require.main === module) {
main();
}
{
"name": "feishu-perm",
"version": "1.0.0",
"description": "Feishu permission management for documents and files.",
"main": "index.js",
"dependencies": {}
}
Related skills
FAQ
What permission levels can a collaborator have?
view, edit, or full_access.
How do I make a file readable by the whole organization?
Use --action public with --link_share_entity tenant_readable.