This package provides the infrastructure for "inherited" buffer-local variables: Those whose values are not reflected globally but are initially shared by child buffers. Because there is no clear-cut definition of "child" (if I start erc from my notmuch buffer, is there a real relationship there?), this package doesn't decide what you mean by child. Instead, it provides hooks for determining when inheritance might be relevant and a function for performing the inheritance on a given buffer. As an example, suppose you have version 1.2 of the foo compiler installed in your PATH, but your current project depends on features added in the experimental foo-2.0, which you have installed in /opt/foo-2.0. You're often working on multiple foo-lang projects at once, and your Emacs startup time is 45 minutes, so you don't want to globally modify your PATH. If you just do (setq-local exec-path (cons "/opt/foo/bin" exec-path)) (put 'exec-path 'permanent-local t) then you'll run into a problem, because foo-mode calls fooc inside a with-temp-buffer call to capture the output! Instead, you can do (inherit-local-permanent exec-path (cons "/opt/foo/bin" exec-path)) (defun around-generate (orig name) (if (eq (aref name 0) ?\s) (let ((buf (funcall orig name))) (inherit-local-inherit-child buf) buf) (funcall orig name))) (advice-add 'generate-new-buffer :around #'around-generate) and your local exec-path will be inherited by internal buffers without affecting any others.