I am busy working away on a tool-calling sandbox. RIght now I'm thinking of building a kind of dataflow analyzer for shell commands, so that I can identify source and sink points, and establish whether the command is a readonly command or a command that changes state. Example: Command: `sed -n '124p' webroot/a-file.html | od -c | head -5 ` sed is a function that can read or write. in `sed -n 999p filename` syntax on my system, it is a readonly operation `|` is a left to write data flow transfer operator `od` is a readonly sink and would be on the readonly whitelist `head` is a readonly sink and would be on the readonly whitelist. Therefore, I can conclude that this function is readonly and I would allow it automatically in my solution. Whereas, `sed -n '124p' file > /tmp/foo` or `sed -n '124p' file | visudo` would be identified as write commands. Before I get deep into this project, I'd like to know if an existing library already has this as a design goal?   submitted by   /u/spammmmmmmmy [link]   [comments]