Now that I’ve set things up so I can collaborate with my OpenClaw AI assistant, N.I.C.K., via GitHub Issues, it’s time to teach N.I.C.K. how to publish posts on each platform.
I can’t exactly keep telling GitHub, issue after issue, “this is how you upload to Facebook.”
In OpenClaw—and now in Claude Code as well—there’s a concept for this kind of situation: skills. You just describe the procedure in natural language in a `SKILL.md` file and you’re done. If needed, you can also write a small script and document how to use it. And sure, you can have N.I.C.K. (or another AI) write that script, too.
I decided to start with Facebook.
I’d already confirmed that I needed to create Facebook Pages, so that part was ready. Next up was the access token.
After talking with N.I.C.K., I found out (thankfully) that Facebook can issue a permanent token—but it’s a bit inconvenient. The rough flow was:
– Create an app in the developer console (the app that will handle uploads).
– Get a temporary access token for that app.
– That token only lasts one hour, but you can use it to call a Web API and exchange it for a two-month token.
– Then you use that two-month token to call another Web API, and finally you can get a token that doesn’t expire.
I followed the instructions and things worked… until the very last step, where I got an empty response. I was supposed to get a token.
I spent a long time trying this and that with N.I.C.K., but we couldn’t crack it. Every single time, we hit the same wall on the final step.
At that point I decided to borrow another brain: Gemini’s. But—of course—Gemini walked the exact same path as N.I.C.K. did. And just as predictably, it also got an empty array at the last step.
After the three of us kept at it for a while longer, Gemini finally found a clue.
Gemini: The API you’ve been using in the last step, `/me/accounts`, is basically “show me the full list of Pages I have.” But after a recent update, if you call it with a Granular Scoped token that’s tightly bound to a specific Page, there’s a bug it just returns an empty array. Or it might be their new policy.
Me: You could’ve mentioned that a lot earlier. So what do we do then?
Gemini: Don’t ask indirectly for a list. Just poke it directly: “Give me the permanent token for this Page ID.”
Like magic, I got a permanent token.
I think I wasted a few hours on that one step alone. I didn’t expect to feel humanity coming from an AI. If you knew, you should’ve told me correctly from the start. Honestly, it would’ve been less annoying if they’d never mentioned it.
And I’m still genuinely curious: I kept asking the same question in slightly different ways, but I have no idea which tiny change finally guided the AI to the right answer.
After that, everything was smooth.
Once I told N.I.C.K. “we’ve got the token, now make a skill,” it produced one immediately. Not even in Python, but with just bash and curl. I ran a quick test and it posted fine. Posting to Facebook via a GitHub Issue worked, too.
Well… I thought it worked.
The first post that N.I.C.K. uploaded to my Facebook Page got absolutely no reaction. I started wondering if something was wrong—and that’s when I noticed the post was visible only to me, and not to anyone else.
What now?
Turns out the app I created for uploading was still in “development” mode. Apparently, posts only become visible to others once the app is switched to “publish” mode.
And to switch an app to “publish,” you have to publish a Privacy Policy page.
But… I’m the only one using this.
Still, it’s a hard requirement, so there’s no skipping it. In the end I asked N.I.C.K. to draft something reasonable, and I hosted it on one of my GitHub Pages sites.
Finally, the app switched to “publish” mode.
I’ve only done just one platform so far, and I’m already exhausted. Let’s call it a day.
