w, r, pull, mktl, stories – read and write twtxt feeds

tw/w [ <message> ]
tw/r [ –apm ]
[ –p ]
tw/stories [ –pm ]

tw/w writes <message> to your twtxt feed, by default $home/lib/web/tw.txt. If <message> is omitted, it will read one line from standard input to use as the message. The message is simply appended to the file, so any metadata or other comments are preserved.
tw/r reads your timeline of feeds as prepared by tw/mktl and prints any newer than the last time you ran the command, oldest first, in a friendly format. The options are:
a    Ignore "last viewed"; display all updates and do not set the last viewed time.
p    Pull updates for any feeds you're subscribed to before displaying statuses. Implies –m.
m    Make a new timeline from already pulled feeds; see tw/mktl.
tw/stories is like tw/r except only the most recent update from each feed is displayed. The –p and –m options are the same as for tw/r. tw/stories ignores and never sets the "last seen" time.
tw/pull will fetch any feeds you're subscribed to and store them locally. Feeds and errors are stored in files named after the hash of the URL being fetched in a cache directory located within $home/lib/twtxt. The feed itself has ".txt" appended. If the feed cannot be fetched, any errors will be stored in a file with ".err" appended, and the feed will not be overwritten. Errors from successive runs are appended to the ".err" file; the file is removed after a successful run.
tw/pull will attempt to set the useragent string in webfs(4) to comply with the twtxt discoverability specification. Doing so relies on your feed containing lines beginning with "# nick =" and "# url =", as is common in twtxt feeds. tw/pull attempts to be flexible with spacing. If it cannot determine the nick and url, it will use a generic useragent.
tw/mktl will generate a timeline from feeds previously pulled. With –p it will invoke tw/pull to pull them before generating the feeds. A common usage is to put tw/mktl –p in your cron entry.

/bin/rc/tw/lib – configuration



None of these do anything like adequate error checking.
You can easily trick tw/w into writing multi–line updates, which is against the spec and will break lots of tools.
tw/pull's implementation of the discoverability protocol should be optional. Also, there should be a tool in this set to perform the inverse side.